
Détecter les exceptions d'EDR en inspectant les modules chargés des processus
Cet outil recherche les processus qui ont un certain binaire chargé ou ceux qui ne l'ont pas. C'est utile dans les scénarios suivants :
c:\windows\sytem32\lsass.exe chargé donnera le PID de Lsass).Vous trouverez peut-être d'autres façons utiles d'utiliser cet outil. Ces résultats sont obtenus en évitant d'itérer sur tous les processus du système et avec un bruit réduit.
L'outil obtient tous les processus où un certain binaire est chargé en appelant NtQueryInformationFile avec le drapeau FileProcessIdsUsingFileInformation. Ensuite, et seulement si nécessaire, EnumProcesses est appelé pour obtenir les PID de tous les processus, et enfin les deux résultats sont comparés afin d'obtenir une liste finale de PID. Si l'outil ne fonctionne pas en mode silencieux, les PID finaux sont traduits en chemin complet du module principal du processus.
Si vous souhaitez réduire l'activité inter-processus, utilisez le mode silencieux (--quiet ou -q). Dans ce cas, aucun handle de processus ne sera ouvert, mais l'outil ne récupérera que les PID et non les chemins complets.
L'outil est entièrement compatible avec Win10 et versions ultérieures, ainsi qu'avec Windows Server 2016 et versions ultérieures. Pour les versions d'OS plus anciennes, l'appel à OpenProcess (ligne src::main.rs:108) nécessite PROCESS_QUERY_INFORMATION et PROCESS_VM_READ au lieu de seulement PROCESS_QUERY_LIMITED_INFORMATION (ou vous pouvez simplement vous en tenir au mode silencieux qui n'ouvre aucun handle de processus).
Étant donné que nous utilisons le plugin LITCRYPT pour obscurcir les littéraux de chaîne, il est nécessaire de définir la variable d'environnement LITCRYPT_ENCRYPT_KEY avant de compiler le code :
C:\Users\User\Desktop\bin_finder\bin_finder> set LITCRYPT_ENCRYPT_KEY="yoursupersecretkey"
Après cela, compilez simplement le code et exécutez l'outil :
C:\Users\User\Desktop\Bin-Finder> cargo build --release
C:\Users\User\Desktop\Bin-Finder\target\release> bin_finder.exe -h
Bin-finder a deux modes d'utilisation différents. Le mode par défaut recherche tous les processus qui n'ont pas chargé le binaire spécifié. Par exemple, nous pouvons rechercher tous les processus qui n'ont pas chargé la DLL CrowdStrike :

C'est très utile lorsque vous recherchez des répertoires/processus dans la liste d'exceptions de l'EDR.
Si vous souhaitez réduire l'activité inter-processus, vous pouvez utiliser le mode silencieux pour récupérer uniquement les PID :

Aussi, si vous ne connaissez pas le nom ou le chemin de la DLL que vous recherchez, vous pouvez essayer de lister les modules chargés dans un processus ordinaire en utilisant le drapeau -l ou --list (c'est également utile pour savoir s'il y a un EDR en place) :

Le deuxième mode d'utilisation est la recherche inversée (drapeaux -r ou --reverse), qui recherche tous les processus ayant actuellement chargé le binaire spécifié. Par exemple, vous êtes peut-être intéressé par l'obtention du PID du processus qui exécute le service StorSvc. Dans ce cas, effectuez simplement une recherche inversée pour la DLL qui implémente le serveur RPC utilisé par ce service :

Cette recherche inversée peut également être utilisée pour obtenir directement le PID d'un processus en spécifiant le chemin complet de son module principal (généralement un fichier .exe), sans avoir besoin d'itérer sur tous les processus du système. C'est ainsi que vous obtiendriez le PID de tous les chrome.exe en cours d'exécution :
