
Analyse de la mémoire vive détectant les IOCs de malwares dans les processus, modules, handles, tokens, threads, assemblies .NET, espace d'adressage mémoire et variables d'environnement. Dump, détecte et désassemble les hooks, shellcode, régions mémoire, modules et processus.

WhacAMole est un programme qui analyse les processus en mémoire de manière intégrale, détectant et signalant les anomalies liées aux malwares, et présentant et sauvegardant dans des fichiers toutes les informations pertinentes pour la vérification, la corrélation ou l'analyse, ainsi que le vidage des régions mémoire, des processus et des modules suspects. Pour y parvenir, il analyse non seulement les anomalies des régions mémoire des processus et des modules qu'ils chargent, mais il analyse également en profondeur tout l'espace mémoire utilisé par le processus. Actuellement, WhacAMole est capable d'identifier 67 alertes liées à un comportement malveillant ou qui ne peuvent être dues qu'à un malware. Il affiche plus de 70 propriétés des processus, de la mémoire et des modules, comparant nombre de leurs attributs lus en mémoire avec ceux qui apparaissent dans le fichier correspondant sur le disque, désassemble partiellement les régions mémoire suspectes et désassemble partiellement les fonctions exportées qui ont été modifiées en mémoire afin que les analystes puissent mener leurs propres investigations.

Contrairement à d'autres programmes similaires, il met à disposition des analystes toutes les informations pertinentes sur les processus, en étiquetant avec différentes alertes les caractéristiques liées aux malwares, afin qu'ils puissent effectuer leur propre analyse ou rechercher d'autres signes de l'existence de processus malveillants. Les alertes sont classées, selon leur dangerosité et le nombre de processus dans lesquels le même comportement apparaît, selon une échelle de six valeurs, reflétée dans le document HTML avec une échelle de couleurs, où 6 (couleur noire) est un indicateur de la probabilité la plus élevée que la caractéristique détectée soit due à un malware, et 1 (couleur grise) indique que, bien que le comportement soit anormal, de nombreux processus système présentent le même comportement observé :

Pour faciliter le travail des analystes, les informations sont présentées à l'écran, dans un fichier HTML avec un panneau de navigation des processus analysés et dans des fichiers texte CSV. Dans le panneau latéral du document HTML, l'arborescence des processus est affichée, avec la couleur correspondant à l'alerte la plus élevée détectée dans ceux-ci, avec le lien hypertexte vers son emplacement dans le document, et avec la couleur bleue pour son PID s'il s'agit d'un processus 32 bits ou verte s'il s'agit d'un processus .NET. Les processus qui ont le Control Flow Guard (CFG) activé sont affichés en italique.

Les informations sur les sessions RDP distantes sont affichées au début des informations du processus :

La capacité réseau est affichée de deux manières : si une connexion TCP a été détectée, elle est affichée avec le symbole du globe terrestre, et si un socket connecté a été détecté, elle est affichée avec un symbole de globe vide. Un symbole ajouté (cercle blanc) pour les processus avec des bibliothèques de navigation HTTP en mémoire : wininet.dll et winhttp.dll.

Détail réseau :

Socket connecté :

Il existe un symbole spécial (une clé) lorsqu'une activité de type Mimikatz est détectée.

En bas du panneau de navigation du document HTML, toutes les alertes sont affichées, avec leur couleur, avec les PID des processus dans lesquels elles ont été détectées sous forme de lien hypertexte vers la position du document où le processus est présenté.

S'il n'y a aucun processus détecté avec une alerte, leur nom est affiché sur fond blanc.
Le panneau principal affiche tous les processus avec leurs informations dans des sections pliables qui sont masquées par défaut. Toutes les alertes sont toujours visibles.

Les régions mémoire sauvegardées sont xorées avec la clé 0x0E pour empêcher l'antivirus de les supprimer.
Analyser, comparer et présenter les informations de :
1. Processus :
• Avertissements :
[Admin Privs]
[Alternate credentials]
[Alternate network credentials]
[Delphi 4 – Delphi 2006]
[Entry Point]
[LogonType]
[Managed code but no Assemblies detected - .NET ETW disabled]
[Mismatching Path]
[Name of the module hidden in memory]
[NTLM Authentication]
[PE anomalies]
[PEB ImageBaseAddress forgery]
[Possible .NET in memory loaded as Assembly.Load(byte[])]
[Process checkSum is 0]
[Process checkSum mismatch]
[Process Ghosting]
[Process Hollowing]
[Process Memory region hash mismatch]
[Process Memory region Protection value modified]
[Process Memory region WX]
[Process Name != Internal Name]
[PROCESS NOT SIGNED]
[Process Private memory region]
[Process Unknown executable memory region]
[Section Table]
[Shared memory subversion]
[SizeOfInitializedData is 0]
[SUSPENDED PROCESS]
[Suspicious Commandline]
[Suspicious Environment Variable]
[TimeDateStamp Inequality]
[Transaction detected: TxF/TxR]
[Unmanaged process/managed code execution detected]
[Unusual CWD]

2. Modules :
Ce à quoi on s'attendrait dans un module normal est LMIVH :
L = InLoadOrderModuleList(PEB).
M = InMemoryOrderModuleList (PEB).
I = InInitializationOrderModuleList (PEB).
V = Détecté dans la mémoire virtuelle du processus.
H = Détecté dans la liste de hachage du PEB.
S'il a été délié des trois listes liées du PEB, on verrait :
---VH
Si le module est chargé manuellement par le malware, il n'apparaîtrait dans aucune des listes PEB mais pourrait être détecté en analysant la mémoire,
donc il apparaîtrait comme :
−−−V−
Avec la technique DLL Hollowing with Moat (voir https://github.com/forrest-orr/artifacts-kit pour une POC) le résultat serait :
-----
• Avertissements :
[Abnormal PE Header]
[Delphi 4 – Delphi 2006]
[DLL Hiding]
[DLL Hollowing]
[Mismatching Path]
[Module checkSum is 0]
[Module checkSum mismatch]
[Module Name != OriginalFileName]
[MODULE NOT SIGNED]
[Module PE anomalies]
[Module SizeOfInitializedData is 0]
[Module TimeDateStamp Inequality]
[Name of the module hidden in memory]
[Phantom DLL Hollowing TxF]
[Private memory region]
[Section Table]
[Signed PE NOT MEM_IMAGE]
[Unsigned PE NOT MEM_IMAGE]
[Unusual module]

3. Handles : Tous les handles de processus des types File, Key, Mutant, Process, Thread, Token et Section sont affichés. Selon le type de handle, les informations suivantes sont affichées :








• Avertissements :
[Handle-Section Phantom DLL Hollowing TxF]
[Handle-Section Suspicious: Injection]
[Pipe Handle to another process]
[Process Handle to another process]
[ShadowMove Lateral Movement]
4. Jetons : Dans les threads où un jeton est détecté, les informations suivantes sont affichées :
• Avertissements :
[Thread with TOKEN]

5. Threads :
• Avertissements :
[Thread-Memory NOT MEM_IMAGE]
[Thread-Possible Ekko technique]
[Thread-Possible Foliage technique]
[Thread-Unknown module in Stack]

6. Assemblages .NET
• Avertissements :
[.NET Assembly w/o ILPath]

7. Espace d'adressage mémoire. Affiche pour toutes les régions mémoire du processus les valeurs de :
• Avertissements :
[Executable memory region not MEM_IMAGE]
[Hidden PE]
[Lagos Island Method]
[Mapped Image]
[Memory region hash]
[Memory region Protection value modified]
[Memory region WX]
[Memory/File values mismatch]
[Moat detected]
[MZ/PE Not Present]
[Shellcode]
[Unknown executable memory region]

