Annonce

Réduire
Aucune annonce.

[SHELL] Rechercher et éradiquer un Malware PHP (sur un serveur)

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • [SHELL] Rechercher et éradiquer un Malware PHP (sur un serveur)

    Bonjour à tous,

    J'ai eu réparer et désinfecter un Wordpress pour le compte d'un client. Je voulais donc vous partager quelques commandes Shell utiles pour chercher d'éventuels malwares dans vos projets PHP :

    find . -type f -name "*.php" | xargs grep eval
    find . -type f -name "*.php" | xargs grep str_rot13
    find . -type f -name "*.php" | xargs grep gzinflate
    find . -type f -name "*.php" | xargs grep base64_decode

    EXPLICATION :

    - eval est une fonction PHP (et présente dans bon nombre de langage) permettant d'executant du code à partir d'une chaine de caractère.

    - str_rot13 est une fonction PHP permettant de faire une rotation de caractère afin d'obfusquer du code.(Plus de détail ici : http://fr.wikipedia.org/wiki/ROT13)

    - gzinflate permet de décompresser une chaine de caractère ( plus de détail ici :http://php.net/manual/fr/function.gzinflate.php )

    RECOMMANDATION :
    Chaque code retourné par ces commandes doit être audité manuellement, si vous avez le moindre doute, n'hésitez pas le poster ici même et je vous aiderai à comprendre la portion de code incriminé.
    ToxID : 7322307290A75F5F36142EF206D95374966F10FE2CCD8224BEC07F16137875058C3BC4020609


    Petite énigme, seriez vous décoder ce code ? WW4gZXJjYmFmciBoYXZpcmVmcnl5ciA/

  • #2
    salut,

    il y aurait à mon avis beaucoup de choses à dire sur tes commandes VS le titre du post, en ouvrant je m'attendais à un retour d'expérience par exemple, un cas concret de débusquage de malware, ou plus générique, et pas juste 4 commandes en vrac mais bon, elles ne sont pas in-intéressantes pour autant, je te propose en un :

    Code:
    LANG=C find . -type f -name "*.php" -print0 | xargs -0 -n10 -P$(grep -c ^processor /proc/cpuinfo) grep -E "eval|str_rot13|gzinflate|base64_decode"
    le LANG=C au début va permette d'éviter les problématiques de noms de fichiers dans un encodage foirouilleux, c'est pas obligatoire, ca peut sauver la vie en revanche à l'occasion

    le -print0 d'un coté et -0 de l'autre coté du pipe permettent de faire transiter le nom de fichier terminé par un nulchar, plus de probleme non plus d'espaces dans les noms de fichiers etc.

    -P$(grep -c ^processor /proc/cpuinfo) c'est un peu tiré par les cheveux, disons que si on a 8 cpu on mettra -P8, ca permet de paralléliser le traitement, quand on travaille dans un répertoire de plusieurs centaines de Mo ou Go là encore ca sauve les miches, on aura donc 8 process qui vont spawn, un par cpu (à moins d'avoir un ordonnanceur mongolien), et on traite -n10 noms de fichiers par processus simultanément

    enfin -E "eval|str_rot13|gzinflate|base64_decode" c'est tout simplement une recherche par regex, et on cherche tout d'un coup

    question qui tue : comment tu détectes les backdoors entre `backquotes` ?

    Commentaire


    • #3
      Salut. Tu souhaiterais une étude de cas plutôt que d'aller directement à l'utile ? je comprend pas trop ce que tu attendais :/

      Bon nombre de backdoor ou panel de contrôle ce présente sous une forme similaire à :

      Code:
      eval(gzinflate(base64_decode(str_rot13("7Y17qlWUmww89+FpsVpB8F72wv9p7Oyww51jikvjhJBFiS7bkgQDKWLTN87Bq38yIII3qqAtCZyz93sB48Ew6X6YFdJFIPdI9C1338A/M2qXcGgKnzM3Az6ChfesyLr2nF4aZ+377j4J8SF5HKlC3HX36YhTW1A46Kwlf9M91fsqD389Jn5x74i+L3/jABt/jysq2Jjlr5c1c5CMKO/3QcAC0Kkr+s+H5SCkicdAW6zD2GIAsGW+Zhsg2slDUhyw/pafmt/9eNSw0iZsS2i5iCZyCU6vNdo/BBO8AJdiaedeeedLL8gmsqDIErN1sK8l9WR+C7Dswgb9KK3612Vl75cCf8HLP7UK33+aCk/23RI6H/Kj6Rw5/siiCwjikvc2cXl7b+7LaZ/0dJz0mK7KCQkbm2ogAFi2LqnqY2MwEGrs6Xa18vrSCxQ700C/Eui+L0HHiSX8TvpDC3lysj+rUh4eIMttQ1QbSFfAuF2tcmA9CZ9Crie4xBOH4BraJ2tYP37cm+Qwy5+z/nyPCENlqOBkmOe8ko9NhiU/qdG8/r+X8j0Fl1XQI0sss8qougdXd6Wlp6ZjFbZT3SKcWEUqRJhNg0Z/0Wp6zDm17dTi31nUKp13eVl0v0BdpVEQ/sOOBGP7kaA3CPqXCavdWZgNdo/4UwVC8Qzs8i3TviJ7on07B/GyW2bo8KWy1/AEF18WoE8+RNLBskNwwq/s32JGi/tMNVvTs/9o2Km8j40RzZYjtJ0uce88G8MmkqEshmr+Gm7yhn3PuleDa6xHh0hyCOz1k8pXCGvTZp/0M5+vGbmW7Zo3LlNDwjpPigfiUMbbUZHgj9PKhG43her0HCHGfk82QVJzTEo4hTg8BJCiNLjiuw4rXi1M9/aT15/Cc1qaM8iy8eEgQAoevqx/IFrwZk2Vi2hreohaCrk+1wIhsTLs1wJfZHIKW2Bs6UnmZIA/6p60Jof3TDqQc+Ch/Rj1mGAmiwn6c/OWgVostIX7p58lK08OOsChvbe6yQZpz6xPAD [...]
      L'une dès plus connu s'appelle c99.php, mais il y en a bien d'autre utilisant des mecaniques similaires. Pour mon cas de figure j'ai du désinfecter un Wordpress corrompu pour en faire un miroir à fishing. Bon nombre de ces petites bebettes sont présentes dans des fichiers indépendants OU dans des fichiers légitime, il faut donc les débusquer à l'aide des commandes ci-dessus et bien-sur vérifier que ça ne s'est pas propagé dans la ou les sauvegardes du site internet.

      Ensuite, vérifier dans la base de donnée qu'il n'y a pas des iframes, de script js :

      Code:
      	SELECT * FROM wp_posts WHERE post_content LIKE '%<iframe%' OR post_content LIKE '%<script%';
      Maintenant il faut changer, password des utilisateurs, clé de hash, accès à la database.
      ---------------------------------------------------------------------------------------

      Nous pourrions compléter tous ensemble les étapes à faire et en pondre un jolie tutorial

      PS : pour "les backdoors entre `backquotes`" ce n'est plus d'actualités étant donné que cela fait partie des comportements désactivés par défaut. (cf : http://php.net/manual/fr/ini.sect.sa...#ini.safe-mode), si j'ai à désinfecter un serveur, je commence par mettre à jour l'ensemble des softs, PHP y compris.
      PS2 : Merci pour ton explication de commande c'est instructif.
      Dernière modification par misterPoc, 16 janvier 2015, 08h06.
      ToxID : 7322307290A75F5F36142EF206D95374966F10FE2CCD8224BEC07F16137875058C3BC4020609


      Petite énigme, seriez vous décoder ce code ? WW4gZXJjYmFmciBoYXZpcmVmcnl5ciA/

      Commentaire

      Chargement...
      X