Introduction
Actuellement, les antivirus (AVs) utilisent différentes méthodes pour vérifier si un fichier est malveillant ou non, la détection statique, l’analyse dynamique et, pour les EDRs plus avancés, l’analyse comportementale.
Détection statique
Au cours d’une analyse, le moteur statique du logiciel antivirus compare les fichiers
existants dans le système d’exploitation à une base de données de signatures, ce qui
permet d’identifier les logiciels malveillants. Toutefois, dans la pratique, il est
impossible d’identifier tous les logiciels malveillants existants à l’aide de signatures
statiques, car toute modification apportée à un fichier malveillant particulier peut
contourner une signature statique particulière, voire contourner complètement le
moteur statique. Il existe plusieurs façons de contourner ce type de détection :
• Chiffrement : Si vous chiffrez le binaire, l’AV n’aura aucun moyen de détecter
votre programme, mais vous aurez besoin d’une sorte de « loader » pour
déchiffrer et exécuter le programme en mémoire.
• Obfuscation : Parfois, il suffit de modifier certaines chaînes de caractères dans
votre binaire ou votre script pour qu’il passe le test AV, mais cette tâche peut
prendre beaucoup de temps selon ce que vous essayez d’obscurcir.
• Outils personnalisés : Si on développe nos propres outils, il n’y aura pas de mauvaises signatures connues, mais cela demande beaucoup de temps et d’efforts.
Détection dynamique
En utilisant le moteur dynamique, le logiciel antivirus devient un peu plus avancé. Ce
type de moteur peut détecter les logiciels malveillants de manière dynamique (lorsque
le logiciel malveillant est exécuté dans un système. Par exemple, essayer de déchiffrer
et de lire les mots de passe de votre navigateur, effectuer un minidump sur LSASS,
etc.).
Le moteur dynamique est un peu plus avancé que le moteur statique, et son rôle est de
vérifier le fichier au moment de l’exécution, par le biais de plusieurs méthodes.
La première méthode est la surveillance des API - L’objectif de la surveillance des APIs
est d’intercepter les appels API dans les hooks du système d’exploitation. La deuxième
méthode est le sandboxing.
Un « sandbox » est un environnement virtuel séparé de la mémoire de l’ordinateur
hôte physique. Cela permet de détecter et d’analyser les logiciels malveillants en les
exécutant dans un environnement virtuel, et non directement sur la mémoire de
l’ordinateur physique lui-même.
Cette partie peut être un peu plus délicate à gérer, mais voici quelques mesures qu’on
peut prendre pour échapper aux sandboxes.
• Veille avant exécution : Selon la façon dont elle est mise en œuvre, cette méthode peut être un excellent moyen de contourner l’analyse dynamique des antivirus. Les antivirus ont un temps très court pour analyser les fichiers afin de ne pas interrompre le flux de travail de l’utilisateur, et l’utilisation de longues périodes de sommeil peut perturber l’analyse des binaires. Le problème est que de nombreux « sandbox » d’antivirus peuvent simplement ignorer le sommeil, selon la façon dont il est implémenté.
• Vérification des ressources de la machine : Habituellement, les
« sandbox » ont très peu de ressources pour travailler (par exemple, < 2 Go de
RAM), sinon ils pourraient ralentir la machine de l’utilisateur. Vous pouvez
aussi être très créatif, par exemple en vérifiant la température du CPU ou même
la vitesse des ventilateurs, car tout ne sera pas implémenté dans le bac à sable.
• Contrôles spécifiques à la machine : Si on veut cibler un utilisateur dont le poste de travail est joint au domaine « TST.grp », on peut effectuer un contrôle sur le domaine de l’ordinateur pour voir s’il correspond à celui que vous avez spécifié, si ce n’est pas le cas, vous pouvez faire sortir votre programme.
Analyse heuristique
Grâce à un moteur heuristique, les logiciels antivirus deviennent encore plus
performants. Ce type de moteur détermine un score pour chaque fichier en effectuant
une analyse statistique qui combine les méthodologies du moteur statique et du moteur
dynamique.
La détection heuristique est une méthode qui, sur la base de règles comportementales
prédéfinies, permet de détecter les comportements potentiellement malveillants des
processus en cours d’exécution. Voici quelques exemples de ces règles :
• Si un processus tente d’interagir avec le processus LSASS.exe qui contient les
hachages NTLM des utilisateurs, les tickets Kerberos, etc.
• Si un processus qui n’est pas signé par un fournisseur réputé tente de s’inscrire
lui-même dans un emplacement persistant.
• Si un processus ouvre un port d’écoute et attend de recevoir des commandes
d’un serveur de Commande et de Contrôle (C2).
Le principal inconvénient du moteur heuristique est qu’il peut entraîner un grand nombre de fausses détections positives. En effectuant plusieurs tests simples par essais et erreurs, il est également possible d’apprendre comment fonctionne le moteur et de le contourner.
Unpacker
Un autre type de moteur largement utilisé par les logiciels antivirus est le moteur de
décompactage. L’un des principaux inconvénients des logiciels antivirus avancés
d’aujourd’hui réside dans leur utilisation d’unpackers, des outils utilisés par les
moteurs antivirus pour récupérer les charges utiles de logiciels malveillants qui ont
subi un “packing”, ou une compression, pour cacher un modèle malveillant et ainsi
déjouer la détection basée sur les signatures.
Le problème est qu’il existe aujourd’hui un grand nombre d’empaqueteurs pour lesquels les logiciels antivirus ne disposent pas de décompacteurs. Pour créer un logiciel de décompactage automatisé, les chercheurs en sécurité de l’éditeur du logiciel antivirus doivent d’abord procéder à un décompactage manuel - et ce n’est qu’ensuite qu’ils peuvent créer un processus automatisé pour le décompacter et l’ajouter à l’un de leurs moteurs antivirus.
Source
- Yehoshua, N., & Kosayev, U. (2021). Antivirus Bypass Techniques. Birmingham: Packt Publishing Ltd.