Détecter des backdoors PHP parmi ses fichiers

Avatar de l’utilisateur
Malekal_morte
Site Admin
Site Admin
Messages : 87611
Inscription : 10 sept. 2005 13:57
Contact :

Détecter des backdoors PHP parmi ses fichiers

Message par Malekal_morte » 14 avr. 2015 12:19

Les Backdoor PHP sont des scripts PHP qui permettent d'exécuter du code sur le serveur WEB.
Certains sont des "shells", c'est à dire une interface WEB qui permettent de contrôler le serveur presque comme si vous en étiez le propriétaire comme vous balader sur dans répertoires du serveur web, effectuer des recherches, uploader de nouveaux fichiers, modifier les fichiers existants (selon les permissions), etc.
Ces Backdoor PHP sont souvent déposées après une attaque afin de garder un contrôle sur le serveur WEB, tant qu'elles sont accessibles par le pirate, le serveur WEB est en danger.
Cette page vous explique comment trouver les serveurs WEB.

Voici deux exemples de PHP Backdoor Shell :
Image

ou encore la fameuse Backdoor C99 :

Image

en vidéo, utilisez pour héberger des malwares par le ransomware Locky :

Côté code, on peut avoir un peu de tout.

Le code en clair :
Image

ou parfois offusqué :
Image

Un autre offusqué un peu de la même manière.
Cette PHP Backdoor permet d’exécuter du code à travers des paramètres GET/POST : http://ddecode.com/phpdecoder/?results= ... c460de58a9

Image

Notez que parfois, la page peut être très simple, ici une page qui permet d'executer du code à partir d'un paramètre :

Image

Afin de trouver des Backdoors PHP sur votre serveur WEB, la pluspart du temps, on conseille de chercher sur les strings : passthru shell_exec system\( phpinfo base64_decode chmod mkdir fopen fclose readfile
La commande suivante permet de chercher ces strings dans les fichiers PHP.
find . -iname '*php' | xargs egrep '(passthru|shell_exec|system\(|phpinfo|base64_decode|chmod|mkdir|fopen|fclose|readfile)' -sl
Vous risquez d'avoir pas mal de faux positifs à vous de faire le tri dans les fichiers trouvés en inspectant ces derniers.

Notez qu'il est possible de filtrer, par contre, les derniers fichiers créés : -1 pour les 24h dernières heures, -2 pour les 48h dernières heures etc.
Exemple :
find . -ctime -1 -iname '*php' | xargs egrep '(passthru|shell_exec|system\(|phpinfo|base64_decode|chmod|mkdir|fopen|fclose|readfile)' -sl
Malheureusement, ces strings ne sont pas suffisantes, voici quelques exemples qui permettent de bypasser cette recherche de strings.

Image

ou encore mieux, celui-ci mélange des datas, d'ailleurs le type de fichier retourné est bien data :
malekalmorte@Mak-tux:/tmp$ file backdoorphpoff.php
backdoorphpoff.php: data
Image

Image

Image

De ce fait, je vous conseille d'étendre la recherche de strings à ceci :
(passthru|shell_exec|system\(|phpinfo|base64_decode|chmod|mkdir|fopen|fclose|readfile|(\\x[0-9]+){3})|auth_pass|eval\(|gzinflate|str_rot13)
J'ajoute auth_pass car souvent les Backdoor PHP peuvent être protégées par un mot de passe afin d’empêcher le contrôle du serveur à n'importe qui.
find /var/www/vhosts -iname '*php' | xargs egrep '(passthru|shell_exec|system\(|phpinfo|base64_decode|chmod|mkdir|fopen|fclose|readfile|(\\x[0-9]+){3}|auth_pass|eval\(|gzinflate|str_rot13)' -sl
PHP Backdoor et Antivirus

et côté antivirus ?
Ben c'est pas fameux, personnellement, je n'ai jamais utilisé d'antivirus pour détecter des malwares.

https://www.virustotal.com/fr/file/01a4 ... 428995214/
SHA256: 01a4a5c8144b96fcff1bfc66e87de612016a13e392a0a44a46eb10e36a6ee3cf
Nom du fichier : c.php
Ratio de détection : 8 / 57
Date d'analyse : 2015-04-14 07:06:54 UTC (il y a 0 minute)

Antivirus Résultat Mise à jour
AVware BPX.Shell.PHP 20150414
Avast VBS:Malware-gen 20150414
Bkav CPR8CE5.Webshell 20150413
DrWeb PHP.Siggen.19 20150413
ESET-NOD32 PHP/Obfuscated.F potentially unwanted 20150413
Ikarus Backdoor.PHP.C99Shell 20150414
Microsoft Backdoor:PHP/C99shell.I 20150414
Sophos Mal/PHPShell-A 20150414
https://www.virustotal.com/fr/file/0109 ... 428999049/
SHA256: 01091f4906a145d07bd62e087a77884af0a97cf9706da1292ba15e2fe07bae09
Nom du fichier : shellx.php
Ratio de détection : 5 / 57
Date d'analyse : 2015-04-14 08:10:49 UTC (il y a 0 minute)

Antivirus Résultat Mise à jour
AVG PHP/Back 20150414
Avast PHP:Injector-I [Trj] 20150414
Bkav CPR6670.Webshell 20150413
Ikarus PHP.Back 20150414
Microsoft Backdoor:PHP/SimpleShell.A 20150414
SHA256: 79bac83d1f542da817377349dc9460e9d97dc9eee76e6c50a0e29e32e1a7ef10
Nom du fichier : good.php
Ratio de détection : 9 / 57
Date d'analyse : 2015-04-14 08:11:00 UTC (il y a 0 minute)

Antivirus Résultat Mise à jour
AVware BPX.Shell.PHP 20150414
Bkav CPRB30B.Webshell 20150413
CAT-QuickHeal Gif.Script.Gen.A 20150414
ClamAV PHP.Hide 20150414
DrWeb PHP.Shell.41 20150414
ESET-NOD32 PHP/Obfuscated.F potentially unwanted 20150413
Fortinet PHP/Rst.CO!tr.bdr 20150414
Microsoft Backdoor:PHP/Lollusc.A 20150414
Norman Giframe.A 20150414
On notera qu'Avast! n'est pas mauvais.

Sauf que pour notre Backdoor "Data", on obtient une belle bulle : https://www.virustotal.com/fr/file/8a7c ... 428996092/

Disons que ça peut aider mais en aucun cas, il faut n'utiliser QUE l'analyse antivirus.

Détecter les PHP Backdoor en amont

Une autre idée consiste à détecter les ajouts de fichiers PHP sur vos sites WEB.

Le script suivant créé une liste des fichiers PHP de votre site dans /root/script/bdd.txt qui sert de témoin.
On créé un cron qui lance le script toutes les 30min par exemple qui va vérifier si un nouveau fichier a été ajouté.
Si c'est le cas, un mail vous ait envoyé pour vous prévenir.
(Bien sûr sur un site avec 50 développeurs, ce n'est pas approprié).

Voici le script :

Code : Tout sélectionner

#!/bin/bash
# derniers fichiers modifies : find /mydir -type f -mtime -1 -print
#minute : -mmin -60
#
pattern="(base64_|str_rot13|auth_pass|exec\(|curl_exec|phpinfo|system\(|mail\(stripslashes\()"
rep="/home/www/"
temps="30"
maila="xxx@malekal.com"
cache="\/cache"
bdd="/root/script/bdd.txt"

if [[ ! -f $bdd ]] 
then 
	echo "Base introuvable - on l'a recréé"
	find $rep -name "*.php" -print|egrep -v "\/cache\/"|sort -n > $bdd 
fi

# verifie les derniers fichiers modifies
find $rep -name "*.php" -print|egrep -v "$cache"|sort -n > /tmp/test.txt
for file in `diff /tmp/test.txt $bdd |egrep "<"|awk '{print $2}'`
do
	if [[ ! -z $file ]]
	then
		found=1
		echo "ATTENTION - nouveau fichier créé : $file"
		check=$(egrep -r $pattern $file)
		ips="${ips} $ip"
		mfile="${mfile} $file"
	        if [[ -z $check ]] ; then check=$(wc -l $file|awk '{print $1}') ; fi
        	if [[ ! -z $check || $check -lt 3 ]]
	        then
        	        echo ">> Possible Backdoor dans $file"
			backdoors="${backdoors} $file"
       		fi
	fi
done
rm -f /tmp/test.txt


if [[ $found == 1 ]]
then
	sujet="ALERTE malekal.com - Possible Backdoor"
	date >> /tmp/checkbackdoor.txt
	echo "Nouveau(x) fichier(s) : $mfile" >> /tmp/checkbackdoor.txt
	if [[ ! -z $backdoors ]] ; then echo "*** Possible Backdoor dans $backdoors" >> /tmp/checkbackdoor.txt ; fi
	echo  >> /tmp/checkbackdoor.txt
	echo  >> /tmp/checkbackdoor.txt
	echo "Derniers fichiers modifies" >> /tmp/checkbackdoor.txt
	find $rep -name "*.php" -mmin -${temps} -print|egrep -v "\/cache\/" >> /tmp/checkbackdoor.txt
	for i in `echo $mfile` ; do echo $i >> /tmp/attchment.txt ; done
	gzip /tmp/attchment.txt
	#mail -s $sujet $maila < /tmp/checkbackdoor.txt	
	cat /tmp/checkbackdoor.txt|/usr/bin/heirloom-mailx -s "$sujet" -a /tmp/attchment.txt.gz $maila
fi
rm -f /tmp/attchment.txt.gz
rm -f /tmp/checkbackdoor.txt
Notez que AIDE permet aussi de faire cela : http://aide.sourceforge.net/

détecter les PHP Backdoor : vrac

- Snort via des règles qui vont bien devrait permettre de détecter certains Backdoor (aucun recul dessus) : https://www.snort.org/
- Pour WordPress, l'extension Wordfence permet d'en détecter : https://wordpress.org/plugins/wordfence/
Image
Image
- Dans vos recherches, pensez aussi que les logs WEB peuvent vous aider, via les filtres qui vont bien.
On peut par exemple imaginer d'extraire les pages PHP classés par nombre de hits.
Souvent l'accès au Backdoor PHP reste réduite.

Concernant les logs Apache, vous pouvez lister les pages PHP par autre de hits, les hits sont les backdoor PHP étant logiquement bas, par exemple :
|cat votrelogapache.log|awk '{print $7}'|egrep "[a-z0-9_]+.php"|awk -F"\?" '{print $1}'|sort -n|uniq -c|sort -n
en pratique :

Image


Conclusion

En espérant que cette article puisse vous aider.
En cas de piratage, je vous conseille de mixer tous les conseils donnés dans cet article, à savoir :
  • de faire une recherche de strings
  • éventuellement Antivirus (apparemment privilégier Avast!)
  • mettre en place un mécanisme de détection
Un article sur les piratages de serveurs WEB : Piratage/Hack site web et Javascript malicieux.

Au pire du pire, revenez sur des sauvegardes saines (vous en avez hein).
Si vous utilisez WordPress : Sécuriser WordPress
Plus généralement : [réseau] Sécuriser un serveur Apache/PHP/MySQL (LAMP)

Lire Apache : Sécuriser son site WEB
Première règle élémentaire de sécurité : on réfléchit puis on clic et pas l'inverse - Les fichiers/programmes c'est comme les bonbons, quand ça vient d'un inconnu, on n'accepte pas

Sécuriser son ordinateur (version courte)

Tutoriels Logiciels - Tutoriel Windows - Windows 10

Stop publicités - popups intempestives
supprimer-trojan.com : guide de suppression de malwares

Partagez malekal.com : n'hésitez pas à partager sur Facebook et GooglePlus les articles qui vous plaisent.


Avatar de l’utilisateur
Malekal_morte
Site Admin
Site Admin
Messages : 87611
Inscription : 10 sept. 2005 13:57
Contact :

Re: Détecter les Backdoor PHP

Message par Malekal_morte » 30 sept. 2015 08:10

Exemple d'un site WEB WordPress piraté sur la page OVH Mutualisé : piratage et blocage de site WEB

Image
Première règle élémentaire de sécurité : on réfléchit puis on clic et pas l'inverse - Les fichiers/programmes c'est comme les bonbons, quand ça vient d'un inconnu, on n'accepte pas

Sécuriser son ordinateur (version courte)

Tutoriels Logiciels - Tutoriel Windows - Windows 10

Stop publicités - popups intempestives
supprimer-trojan.com : guide de suppression de malwares

Partagez malekal.com : n'hésitez pas à partager sur Facebook et GooglePlus les articles qui vous plaisent.

Répondre

Revenir vers « Tech, Tips & Tricks »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité