Comment détecter les PHP backdoor ou Web Shells

Pour se maintenir sur votre site WordPress et système, les pirates utilisent des backdoor PHP.
il s'agit de script permettant d'exécuter des commandes sur le serveur mais aussi créer, modifier ou supprimer des fichiers (selon les permissions).
On parle donc aussi de Web Shells ou Shell PHP car en quelque sort, on a un accès, un peu comme par un terminal SSH.

Ainsi, si votre site WordPress a fait l'objet d'un piratage, pour nettoyer votre site, vous devez trouver les bacdoor PHP pour les supprimer.

Ce tutoriel vous explique comment détecter les PHP backdoor ou Web Shells.

Comment détecter les PHP backdoor et webshells

Qu'est-ce qu'une backdoor PHP ou Web Shell

Les Backdoor PHP sont des portes dérobées sous la forme de script PHP qui permettent d'accéder à un serveur WEB à l'insu de son propriétaire.
Il se présente sous la forme d'une interface WEB qui permettent de contrôler le serveur presque comme si vous aviez accès à un terminal distant par SSH.
On peut modifier le système de fichiers, effectuer des recherches de fichiers, uploader de nouveaux fichiers, exécuter certains binaires. Tout cela moyennant la configuration du serveur WEB dont les permissions et autorisations.
Ainsi on peut aussi les nommer Web Shell.
A noter qu'il en excite dans différents langages (ASPX, PERL, JSP, CGI) ici nous allons plutôt voir ceux en PHP que l'on peut aussi appeler Shell PHP.

Les Backdoor PHP sont souvent déposées après la compromission d'un site WEB afin de garder un contrôle sur le serveur WEB.
Ils permettent au pirate de modifier à nouveau les pages d'un site WEB si l'administrateur les restaure.
Tant que l'administrateur ne désinfecte pas le site complètement, le pirate a toujours la main dessus.

Il en existe des centaines chacune avec un nom différent : Ajaxshell, Angel, b374k, C100, C99, CPanel, Cyb3rsh3ll, R57, rootshell, Simattacker, Sosyete

Voici deux exemples de PHP Backdoor avec Storm7Shell :

Exemple du shell d'une Backdoor PHP Storm7Shell

Ou encore la fameuse Backdoor C99 :

Exemple du shell d'une Backdoor PHP avec C99Shell

Certaines sont maisons et créés par des groupes de hackers pour leurs usages propres.
Par exemple ci-dessous aZRailPhp :

aZRailPhp - C-W-MHacker

Pour comprendre comment détecter une backdoor PHP, il faut aussi comprendre comment se présente un fichier PHP d'une backdoor PHP.
Voici un cas simple avec le code PHP en clair.

Le code d'une backdoor PHP ou Web Shells

Mais pour rendre la détection plus difficile, les pirates offusquent le code. Par exemple ci-dessous en base64 :

Le code offusqué en base64 d'une backdoor/Web Shell PHP

Voici un autre exemple de backdoor PHP avec le code offusqué sans base64 :

Code offusqué d'une backdoor PHP

Notez que parfois, le code peut-être très simple et cours, ce qui permet aussi d'injecter du code dans des pages existantes.
Ici il s'agit simplement d'exécuter le code envoyé dans l'URL.

Injection de code PHP malveillant

Enfin on peut intégrer une protection avec une authentification afin d'éviter que le WebShell soit récupéré par d'autres groupes de pirates.

Webshell avec authentification

Ainsi le code d'une même backdoor PHP diffère selon les méthodes d'offuscation utilisées. De ce fait, cela rend leur détecte et recherche complexe.
Il n'existe pas de méthodes qui fonctionnent à 100% mais en mixant celles proposées si dessus, vous devriez pouvoir trouver la plupart des backdoor PHP présentes sur votre site WEB.

Comment détecter les PHP backdoor ou Web Shells

Avec une extension de sécurité

La plupart des extensions de sécurité embarque un scanner anti-malware pour détecter les backdoor PHP ou web shells.
WordFence, MalCare et Sucuri sont les plus efficaces pour débusquer les logiciels malveillants.

WordFence est une extension de sécurité gratuite pour WordPress qui propose un scan anti-malware.
Il est capable de détecter les backdoor PHP, les injections de codes et les modifications malveillantes des pages de WordPress.
C'est le moyen le plus simple pour trouver une backdoor PHP sur son site.

Détecter les PHP backdoor avec WordFence
Détecter les PHP backdoor et web shells avec WordFence

Pour son utilisation, suivez ce tutoriel complet :

Sucuri est une société de sécurisé spécialisée dans la désinfection de site WordPress.
Il propose une extension de sécurité très efficace pour détecter les modifications malveillantes de WordPress ainsi que la présence de web shells.

Le tutoriel complet de l'extension :

Détecter les PHP backdoor et web shells avec Sucuri

Enfin MalCare, un scanner anti-malware gratuit pour détecter des malwares mais payant pour les supprimer fait aussi le boulot.

MalCare Security - un scanner anti-malware pour WordPress

Rechercher et détection antivirus

N'hésitez pas à soumettre les fichiers de votre site à une analyse antivirus même si bien souvent les détections de backdoor PHP sont souvent assez mauvaises.
En cas de doute sur un fichier PHP, soumettez le à VirusTotal pour avoir l'avis de plusieurs antivirus.

Microsoft a fait des efforts ces derniers mois pour ajouter des détections de différentes familles de backdoor PHP dans les solutions Windows Defender.
Ci-dessous des détections Backdoor:PHP/Dirtelti et Backdoor:PHP/OrbWS.

Backdoor:PHP/Dirtelti et Backdoor:PHP/OrbWS dans Windows Defender

Mais aussi des détections pour rediriger les internautes en Trojan:PHP/Redirector

Trojan:PHP/Redirector détecté par l'antivirus Windows Defender

Par la recherche de texte avec grep

Afin de trouver des Backdoors PHP sur votre serveur WEB, la plupart du temps, on conseille de chercher sur des fonctions PHP utilisées par ces dernières.
Par exemple : passthru shell_exec system\( phpinfo base64_decode chmod mkdir fopen fclose readfile.
Pour cela, on peut utiliser les commandes find et grep pour utiliser les expressions régulières.
Mais cette méthode génère beaucoup de faux positifs, c'est à l'utilisateur de vérifier ensuite le script PHP pour statuer s'il est malveillant ou utiliser des solutions telles que VirusTotal.

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 contourner (bypass) cette recherche de strings.

Voici un autre exemple de backdoor PHP qui mélange des datas, ce qui rend la recherche par texte plus difficile.

[email protected]:/tmp$ file backdoorphpoff.php
backdoorphpoff.php: data
Détecter les PHP backdoor par la recherche de texte avec grep
Détecter les PHP backdoor par la recherche de texte avec grep

De ce fait, je vous conseille d'étendre la recherche de textes à ceci :

grep -RPn '(passthru|shell_exec|system\(|phpinfo|base64_decode|chmod|mkdir|fopen|fclose|readfile|(\\x[0-9]+){3})|auth_pass|eval\(|gzinflate|str_rot13)' *

On peut aussi ajouter auth_pass car souvent les Backdoor PHP peuvent être protégées par un mot de passe afin de prévenir l'accès à la backdoor PHP par un tiers.

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 *

C'est aussi ce que le scan anti-Malware de l'extension BulletProof Security effectue.
On voit ci-dessous une liste de page PHP potentiellements malveillants liés à des fonctions PHP pouvant être utilisés par les backdoor.

Scan Anti-Malware de BulletProof Security pour trouver des web shells et backdoor

PHP Malware Finder (PMF)

PHP-Malware-Finder est un projet sur Github qui vise à débusquer les Webshells.
Il fait son mieux pour détecter du code offusqué ainsi que des fichiers utilisant des fonctions PHP souvent utilisées dans les malwares / Webshells.
On peut l'utiliser sur Linux ou Windows et nécessite Yara.

  • Sur Debian par exemple, on installe yara avec APT :
sudo apt-get install yara
Détecter les web shells et backdoor PHP avec PHP Malware Finder (PMF)
  • Puis on télécharge le projet depuis Github :
git clone https://github.com/jvoisin/php-malware-finder.git
  • Puis on lance le script phpmalwarefinder en indiquant le chemin du site :
phpmalwarefinder /var/www/html/wordpress/
  • Ensuite il faut inspecter les résultats, prêtez une attention particulière aux détections DodgyPhp, DodgyStrings
  • Il faut ensuite vérifier les scripts PHP un par un, mais PMF donne à la fin les fichiers à vérifier en priorité.
Détecter les web shells et backdoor PHP avec PHP Malware Finder (PMF)

On peut aussi utiliser PMF sur Windows en téléchargeant les binaires yara et le master PMF.
Ensuite on exécute yara en indiquant le chemin du script php.yar

yara64 -r ./php.yar wordpress-site
Détecter les web shells et backdoor PHP avec PHP Malware Finder (PMF)
L'option -v de PMF donne les parties de codes qui peuvent être liés à du contenu malveillant. Cela peut aider à statuer plus facilement si un fichier est une backdoor PHP ou non.

Par les logs du serveur WEB

Dans vos recherches de Shell PHP, pensez aussi que les logs WEB peuvent vous aider.
En effet, les pages des backdoor PHP sont peu fréquentés, ainsi en filtrant sur le nombre de GET/POST vous pouvez trouver des pages inhabituelles.

On peut par exemple imaginer d'extraire les pages PHP classées par nombre de hits par exemple de cette manière :

cat access.log|awk '{print $7}'|egrep "[a-z0-9_]+.php"|awk -F"\?" '{print $1}'|sort -n|uniq -c|sort -n

En pratique :

Détecter les PHP backdoor par les logs du serveur WEB

Pour aller plus loin, on peut se tourner sur l'IDS Snort.

Traquer les modifications de son site WEB

WordPress File Monitor est une extension WordPress qui permet de détecter les ajouts et modifications de fichiers à votre site.
C'est un bon moyen pour détecter assez rapidement les modifications malveillantes liées à des injections de code ou des backdoor PHP.

Les alternatives : Tripwire, Trustwave, Qualys.
Notez que du côté de Linux, il existe aussi que AIDE (Advanced Intrusion Detection Environment) inclus dans la plupart des dépôts.