
LittleCorporal: Un générateur automatisé de Maldoc en C#
LittleCorporal : un générateur automatisé de documents malveillants en C#
C:\LittleCorporal\bin\Release>LittleCorporal.exe C:\beacon.bin explorer.exe
.____ .__ __ __ .__ _________ .__
| | |__|/ |__/ |_| | ____ \_ ___ \ _________________ ________________ | |
| | | \ __\ __\ | _/ __ \/ \ \/ / _ \_ __ \____ \ / _ \_ __ \__ \ | |
| |___| || | | | | |_\ ___/\ \___( <_> ) | \/ |_> > <_> ) | \// __ \| |__
| _______ \__||__| |__| |____/\___ >\______ /\____/|__| | __/ \____/|__| (____ /____/
\/ \/ \/ |__| \/
________
/ \
__ / (o)\__
/ ______\ \ Je suis le plus fort débatteur de tout le Conseil.
| ____/__ __\____| Je me laisse attaquer, car je sais me défendre.
[ --~~-- ] - Napoléon Bonaparte
| ( L )|
___----\ __ /----___
/ | < \____/ > | \
/ | < \--/ > | \
|||||| \ \/ / ||||||
| \ / o |
| | \/ === | |
| | |o ||| | |
| \______| +#* | |
| |o | |
\ | / /
|\__________|o / /
| | / /
[+] Arguments analysés :
[>] Chemin du shellcode : C:\beacon.bin
[>] Processus cible : explorer.exe
[+] Shellcode intégré dans Loader.cs !
[+] Artefact du chargeur C# généré !
[+] Assembly .NET passé dans Donut !
[+] Artefact Donut situé à : C:\LittleCorporal\Artifacts\payload.bin
[+] Chemin du document Word : C:\LittleCorporal\Artifacts\Form.doc
VEUILLEZ LIRE L'INTÉGRALITÉ DU README AVANT UTILISATION !
LittleCorporal accepte un argument fourni par l'utilisateur pour un processus dans lequel injecter sur une machine distante (sur laquelle vous prévoyez d'exécuter le document Word malveillant), ainsi qu'un chemin vers un fichier de shellcode local au format .bin – par exemple un blob de shellcode Beacon Stageless sur la machine depuis laquelle vous exécutez LittleCorporal. Ainsi, si vous souhaitez utiliser le maldoc généré par ce projet, vous devrez spécifier un processus déjà en cours d'exécution sur la machine cible (que ce soit la machine locale ou une autre machine). explorer.exe aura toujours au moins une instance, utilisez-le donc si le processus cible n'a pas d'importance.
LittleCorporal intègre le shellcode et le nom du processus cible dans Loader.cs, compile Loader.cs à la volée en un artefact .exe .NET, puis utilise le détournement de thread pour effectuer une injection de processus à distance. L'artefact .exe .NET, qui est le chargeur par détournement de thread, est traité par Donut pour générer un shellcode indépendant de la position, qui exécutera l'.exe. Le shellcode généré par Donut est ensuite encodé en base64, un document Word est créé et le blob final de Donut est stocké dans une propriété Word InlineShape.AlternativeText, capable de contenir la totalité de la charge utile. Ceci est réalisé en insérant une image (actuellement une image vierge, donnant au document un aspect « vide ») dans le document Word, avec comme texte alternatif la charge utile. LittleCorporal exploite ensuite un « modèle » VBA, contenu dans ce projet sous forme de fichier texte, et injecte cette macro dans le document Word nouvellement créé. La macro est nommée autoopen, donc elle s'exécute à l'ouverture du document, puis est configurée pour extraire la valeur du texte alternatif de l'image précédemment générée (contenant la charge utile finale), la décoder en base64, et enfin utiliser des appels API Windows, en VBA, pour effectuer une injection locale dans Word. En substance, ce projet utilise un simple « chargeur » en VBA pour réaliser une injection locale dans Word (ce qui est un peu moins scruté que l'injection de processus à distance), puis utilise l'exécution de cette injection locale pour exécuter le shellcode de Donut, lui-même un autre chargeur qui effectue un détournement de thread pour l'injection finale de processus à distance du shellcode fourni par l'utilisateur dans le processus spécifié. Tout cela est fait de manière automatisée, y compris la génération du document Word.
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\ existe) et sur la machine cible où le document doit être exécuté.LittleCorporal.exe. En effet, LittleCorporal doit interagir via COM avec Word. Veuillez noter que le document Word généré télécharge une image vierge depuis Internet – vous aurez donc besoin d'un accès Internet sur l'ordinateur exécutant LittleCorporal ainsi que sur la machine distante où le document Word sera déclenché.CONTEXT 64 bits, qui contient des types de données spécifiques au 64 bits. En effet, le détournement de thread n'est actuellement pris en charge que sur les systèmes 64 bits, car il nécessite un shellcode personnalisé respectant la convention d'appel __fastcall. Je ne prévois pas d'implémenter une version 32 bits de cette capacité, mais si une demande d'extension (pull request) pour le support 32 bits voit le jour – car de nombreuses installations de Microsoft Word sont en 32 bits – je n'exclurais pas totalement cette possibilité. Actuellement, d'un point de vue logique, ce ne serait pas une grosse correction ; le problème réside dans la complexité et la charge de travail pour maintenir le suivi de la pile lors du passage de __fastcall à __stdcall et le calcul de nouveaux décalages. Ce n'est pas complexe techniquement, mais c'est assez fastidieux.Si vous prévoyez d'utiliser ce projet dans le cadre d'opérations actives d'équipe rouge, pensez à paramétrer la fonctionnalité « Exit » de votre shellcode pour effectuer une sortie « propre » avec une terminaison de thread, plutôt que de tuer complètement le processus dans lequel réside le shellcode. Cela peut être configuré avec msfvenom via EXITFUNC=thread, et également dans Cobalt Strike via Aggressor.
bin\Release (cd C:\Chemin\Vers\LittleCorporal\bin\Release). Il est recommandé, si vous choisissez de recompiler le projet, d'utiliser une version Release plutôt que Debug.LittleCorporal.exe ainsi que le processus déjà en cours sur la machine où vous souhaitez exécuter le document Word. (LittleCorporal.exe C:\Chemin\Vers\Shellcode.bin explorer.exe)LittleCorporal.exe cleanbool FUNC1 = true;LittleCorporal.exe