Dans une récente analyse publiée par Palo Alto / Unit42, un tutoriel met en lumière un exemple de Donut Shellcode et son mécanisme PC-relative addressing. Autrement dit, un code qui sait se déplacer sans carte routière, toujours capable de retrouver ses ressources, peu importe où il atterrit en mémoire.
Et pour les analystes, c’est un bon exercice : on y passe par la statique (IDA Pro, dnSpy) et la dynamique (x64dbg, Process Hacker), histoire de démonter le donut couche par couche.
Bienvenue dans l’ère où les malwares se cuisinent comme des donuts industriels : rapide, sucré pour les attaquants, indigeste pour les équipes SOC. Le framework Donut n’a rien d’une sucrerie, mais d’un générateur de shellcode qui transforme n’importe quel exécutable Windows en payload injectable en mémoire. Résultat ? Pas de fichier sur disque, pas de signature facile à choper, et une migraine carabinée pour les blue teams.
Lien vers l’article complet : A Mega Malware Analysis Tutorial Featuring Donut-Generated Shellcode
🔎 L’anatomie d’un donut malveillant
L’échantillon observé commence par une fonction mystérieuse, sub_10A31A
, qui à première vue ressemble à un banal bloc d’assembleur. En creusant, on découvre une astuce classique du shellcode :
call $+5
→ saute à l’instruction suivante,pop eax
→ récupère l’adresse de retour danseax
,sub eax, <offset>
→ ajuste pour obtenir l’adresse réelle du code.
👉 Résultat : le code obtient sa propre position en mémoire et s’en sert comme base pour retrouver ses ressources. Pas besoin de hardcoder une adresse qui changerait d’un process à l’autre. Malin, mais pas nouveau : les rootkits des années 2000 faisaient déjà la même tambouille.
🖼️ Petit détour par le code 🍩🔧
Voici la fonction en question, telle qu’elle apparaît une fois désassemblée :

Ce qu’on voit ici (source : Unit42)
- 📌
sub_10A31A()
→ la fameuse fonction qui renvoie sa propre adresse pour servir de base aux offsets. - 📌
memcpy(amsi_scan_buffer, v5 - 8767, 12)
→ une copie malveillante qui écrase la fonction AmsiScanBuffer. - 📌 Le tout enveloppé dans un joli
VirtualProtect(..., RWX)
→ on change les droits mémoire pour écrire du code exécutable dans un buffer qui ne devrait jamais l’être.
👉 En clair : le malware patch AMSI en live, ce qui lui permet de passer sous les radars Windows Defender comme un voleur qui coupe le fil de l’alarme avant de cambrioler.
⚔️ Techniques MITRE en action
Le shellcode Donut coche plusieurs cases bien connues du MITRE ATT&CK :
- 🎯 [T1055] Process Injection : le code se cale dans la mémoire d’un process légitime et s’exécute incognito.
- 🔧 [T1106] Native API : résolution dynamique des API Windows, classique mais toujours efficace.
- 🛡️ [T1562.001] Impair Defenses : on patch l’AMSI en mémoire pour que Windows ferme les yeux sur l’infection.
- 🐍 [T1059] Command & Scripting Interpreter : pas de fichier, tout passe en mémoire – le rêve humide des attaquants.
Bref, du déjà-vu, mais combiné dans un petit package bien rôdé, prêt à être servi.
🧑💻 Les outils du bon analyste
L’article insiste sur un point que tout analyste junior doit retenir : statique et dynamique sont complémentaires.
- IDA Pro 🛠️ pour cartographier les instructions,
- dnSpy pour décortiquer l’éventuel code .NET,
- x64dbg pour voir le shellcode s’animer en direct,
- Process Hacker pour observer les manipulations mémoire.
Moralité : même un donut bien glacé finit par fondre sous une loupe et une bonne dose de patience. 🍩🔬
📉 Quand la recherche rencontre le terrain
Sur le papier, ces analyses semblent académiques. Mais dans la vraie vie ? Les campagnes récentes de ransomware Clopou LockBit utilisent exactement ce type de techniques pour injecter leurs payloads sans bruit. On a même vu du Donut ou des équivalents maison dans :
- des exploits 0-day Exchange,
- des kits d’attaque distribués sur Telegram,
- des charges finales de botnets comme Qakbot ou IcedID.
⚠️ Autrement dit : ce n’est pas un tuto pour nerds, c’est une réalité quotidienne pour les SOC.
🤡 Quand les skids jouent aux pentesters
Autre problème : Donut est open source. Initialement pensé pour les Red Teams et les tests de sécu, il est aujourd’hui repris par tout script-kiddie qui sait lancer un donut.exe payload.dll
.
Résultat :
- 🔥 Les pentesters sérieux s’en servent pour des démos contrôlées.
- 💀 Les cybercriminels s’en servent pour déployer du voleur de mots de passe en 2 clics.
- 🙃 Les équipes de défense, elles, mangent des nuits blanches.
Un peu comme Metasploit, devenu à la fois l’outil de formation des RSSI et le couteau suisse des gangs cyber.
📜 Les IoCs du donut du jour
Unit42 fournit quelques indicateurs de compromission à surveiller :
- 🧩 Hash SHA256 :
d2bea59a4fc304fa0249321ccc0667f595f0cfac64fd0d7ac09b297465cda0c4
- 📂 Fichier : shellcode Donut déchiffré (1,09 MB, type Data).
⚠️ Comme toujours, un hash seul ne sauvera pas votre SI, mais il peut sauver un analyste d’un café de plus à 3h du matin.
🛡️ Défenses et contre-mesures
Les produits Palo Alto (WildFire, Cortex XDR, DNS Security, etc.) sont évidemment cités comme boucliers – pub oblige. Mais en vrai, que faire côté blue team ?
- ✅ Détecter les séquences call/pop typiques du shellcode.
- ✅ Monitorer les appels aux API natives Windows.
- ✅ Surveiller la désactivation d’AMSI (si AMSI est désactivé, ce n’est jamais un bon signe).
- ✅ Déployer de la télémetrie mémoire (EDR, XDR) pour voir ce qui s’exécute en RAM.
En clair : il faut arrêter de croire que les signatures AV suffisent. Le shellcode est un caméléon. 🦎
🥯 Conclusion : Donut, la junk-food des malwares
Le message est simple : Donut n’est pas une nouveauté, mais il simplifie et industrialise l’injection mémoire. C’est la fast-food du malware : rapide, accessible, et dangereuse à long terme pour la santé… des SI.
👉 Et la cerise sur le donut ?
Les attaquants n’ont même plus besoin d’être des ingénieurs système pour exécuter du code en mémoire. Ils ont juste besoin d’un générateur et d’un tuto trouvé sur GitHub.
Résultat : le SOC devient la brigade anti-obésité numérique, forcée de courir après chaque nouvelle friture logicielle.
Alors, la prochaine fois que vous entendez parler de Donut shellcode, souvenez-vous : ce n’est pas une friandise, mais une bombe calorique servie dans un binaire. 🍩💣