
Un PoC qui conditionne des payloads dans des conteneurs de sortie pour contourner le flag Mark-of-the-Web et démontrer les risques associés aux formats de fichiers conteneurs. Support : ZIP, 7zip, PDF, ISO, IMG, CAB, VHD, VHDX
PackMyPayload - Menace émergente des malwares conteneurisésCet outil prend un fichier ou un répertoire en entrée et les intègre dans un fichier de sortie agissant comme une archive/un conteneur.
Il peut servir de preuve de concept pour présenter le risque émergent des formats de fichiers conteneurisés contenant des malwares, ainsi que d'assistant pour les opérateurs Red Team professionnels afin d'affiner leurs manœuvres d'accès initial.
Actuellement, les acteurs menaçants sont connus pour faire passer leurs malwares dissimulés dans divers formats de fichiers conteneurisés, notamment :
7zipzipISOIMGIls le font pour faire passer leurs charges utiles au travers des scanners de contenu, mais plus important encore, pour éviter d'avoir le flag Mark-Of-The-Web sur leurs fichiers. Il existe diverses raisons pour lesquelles les adversaires ne veulent pas de MOTW sur leurs fichiers : la Vue protégée dans Microsoft Office en a toujours fait partie.
S'ils fournissent un fichier conteneurisé à leurs victimes, un fondement pour la désactivation des macros VBA dans les documents Office provenant d'Internet peut être contourné.
Le 7 février, Microsoft a annoncé un changement de configuration par défaut pour bloquer les macros VBA provenant d'Internet. C'est un pas incroyable vers le durcissement de la configuration de base du poste de travail de l'utilisateur et des logiciels clients installés. Sans doute attendue depuis longtemps, mais une étape importante qui affecte considérablement de manière positive les configurations typiques Windows+Office.
Le comportement implémenté est expliqué comme fonctionnant en différenciant les documents Office compatibles macros en fonction du flag MOTW (Mark of the Web). Ce flag agit comme une étiquette contaminée disponible pour les logiciels clients (navigateurs, clients de messagerie, archiveurs, etc.) pour marquer les fichiers provenant de zones non fiables comme Internet.
Outflank a apporté plus de lumière sur MOTW, en 2020, en indiquant les zones où le flag MOTW n'est pas uniformément propagé. Ces zones jouent un rôle de brèche défensive et sont couramment abusées par les acteurs menaçants depuis des années.
Leurs recherches ont révélé que certains formats de fichiers conteneurisés - notamment ISO, VHD/VHDX - ne propagent pas le flag de contamination MOTW sur les fichiers internes lors du montage automatique ou de l'extraction automatique. De plus, Windows 8+ est capable d'ouvrir ces formats automatiquement en double-cliquant, ce qui en fait des vecteurs d'infection notoires, pouvant dévaluer le rôle de MOTW en tant que mesure de sécurité.
Présentons à quoi ressemble le flag Mark of the Web en pratique :

Après avoir téléchargé un fichier, faites un clic droit dessus et examinez ses propriétés.
Vous verrez un message vous invitant à débloquer le fichier, car il provient d'une zone non fiable :

Cette information est stockée dans le flux ADS NTFS (Alternate Data Stream) nommé Zone.Identifier qui ressemble à ceci :

Le ZoneId=3 joue le rôle de marquage du fichier comme contaminé.
En utilisant PackMyPayload.py, placez le fichier dans un disque ISO Joliet facilement avec une commande :
PS> py PackMyPayload.py 7z2107-x64.exe 7z2107-x64.iso

Après avoir créé le fichier ISO, simulez un serveur HTTP avec Python :
PS> py -m http.server 80
puis téléchargez le fichier ISO avec votre navigateur.

Lorsque vous examinez les Propriétés de ce fichier ISO, vous verrez qu'il est marqué avec le flag MOTW.

Cependant, le fichier EXE d'installation 7zip interne n'est pas marqué MOTW !

En profitant de l'occasion que les regards de l'industrie sont tournés vers la décision courageuse de Microsoft de bloquer les macros VBA, nous, chercheurs en sécurité professionnels prenant en compte la maximisation de la résilience des technologies mondiales face à leur mauvaise utilisation, voulons ajouter l'aperçu suivant dans les TTP actuelles des acteurs menaçants :
Les acteurs menaçants sont bien conscients de l'impact de MOTW sur leurs charges utiles de phishing. Ils se sont adaptés il y a longtemps et font désormais passer leurs programmes malveillants à l'intérieur de conteneurs. Parmi les plus couramment observés, on peut souligner ISO, IMG, CAB.
Je publie maintenant cet outil pour augmenter l'élan créé par la position de Microsoft et pour aider à intensifier les discussions sur ces voies de contournement.
Il est conseillé de contenir (et/ou de bloquer) les fichiers ayant les extensions ci-dessus chaque fois qu'ils proviennent de zones non fiables, et chaque fois que applicable :
L'outil publié permettra, espérons-le, à plus d'équipes Red de simuler les risques discutés et de les aider à identifier plus facilement les lacunes de détection dans les défenses de leurs partenaires.
Ce script offre les fonctions et avantages suivants :
Formats supportés :
--zip-noreadonly est donné.cmd> pip3 install -r requirements.txt
PS> py PackMyPayload.py C:\my\dir malicious.iso -v
+ o + o + o + o
+ o + + o + +
o + + + o + + o
-_-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-_-_-_-_-_-_-_,------, o
:: PACK MY PAYLOAD (1.2.0) -_-_-_-_-_-_-| /\_/\
for all your container cravings -_-_-_-_-_-~|__( ^ .^) + +
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-__-_-_-_-_-_-_-'' ''
+ o o + o + o o + o
+ o + o ~ Mariusz Banach / mgeeky o
o ~ + ~ <mb [at] binary-offensive.com>
o + o + +
[.] Packaging input file to output .iso (iso)...
Burning files onto ISO:
Adding file: //malicious.lnk
Adding file: //malicious.docm
[INFO] [+] File packaged into ISO.
[INFO] Successfully packed input file.
[+] Generated file written to (size: 69632): malicious.iso
DISKPART nécessite un accès administrateur aux objets/espaces de noms de périphériques physiques. La meilleure expérience est obtenue en exécutant le script sur Windows Terminal (wt) ou ConEmu car ils supportent les couleurs ANSI. Sinon, si la sortie semble mauvaise, désactivez ces couleurs avec le flag -N :PS> py PackMyPayload.py .\evil.lnk .\evil.vhd -v -N
+ o + o + o + o
+ o + + o + +
o + + + o + + o
-_-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-_-_-_-_-_-_-_,------, o
:: PACK MY PAYLOAD (1.2.0) -_-_-_-_-_-_-| /\_/\
for all your container cravings -_-_-_-_-_-~|__( ^ .^) + +
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-__-_-_-_-_-_-_-'' ''
+ o o + o + o o + o
+ o + o ~ Mariusz Banach / mgeeky o
o ~ + ~ <mb [at] binary-offensive.com>
o + o + +
[.] Packaging input file to output .vhd (vhd)...
[INFO] Drive letters currently occupied:
X
C
Z
D
[INFO] Will create VHD of size: 1024MB (Dynamic)
[INFO] Will assign VHD letter : V:
[INFO] Will format VHD with : FAT32
[INFO] Creating VHD file...
[+] Created & mounted VHD file on V:\
[.] Packing files into created VHD...
[INFO] Packaged file:
[INFO] evil.lnk => V:\
[.] Detaching VHD file...
[+] Detached VHD file from V:\
[INFO] [+] File packaged into VHD.
[INFO] Successfully packed input file.
[+] Generated file written to (size: 6311936): evil.vhd
usage:
+ o + o + o + o
+ o + + o + +
o + + + o + + o
-_-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-_-_-_-_-_-_-_,------, o
:: PACK MY PAYLOAD (1.3.0) -_-_-_-_-_-_-| /\_/\
for all your container cravings -_-_-_-_-_-~|__( ^ .^) + +
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-__-_-_-_-_-_-_-'' ''
+ o o + o + o o + o
+ o + o ~ Mariusz Banach / mgeeky o
o ~ + ~ <mb [at] binary-offensive.com>
o + o + +
Usage: PackMyPayload.py [options] <infile> <outfile>
options:
-h, --help show this help message and exit
Required arguments:
infile Input file/directory to be packaged into output archive/container
outfile Output file with extension pointing at output format
Options:
-v, --verbose Verbose mode.
-d, --debug Debug mode.
-N, --nocolor Dont use colors in text output.
-i BACKDOOR, --backdoor BACKDOOR
Instead of generating blank new output container/archive, will backdoor existing input one.
-n NAME, --filename NAME
Package input file into archive/container under this filename (may contain relative path).
-p PASSWORD, --password PASSWORD
If output archive/container format supports password protection, use this password to protect
output file.
--out-format {zip,7z,iso,img,cab,pdf,vhd,vhdx}
Explicitely define output format disregarding output file's extension. Can be one of
following: zip, 7z, iso, img, cab, pdf, vhd, vhdx
-H HIDE, --hide HIDE (Supported in ISO/IMG, ZIP) Set hidden attribute on file(s). Cannot be repeated, only comma-
separated. Example: --hide icon.ico,evil.exe . Supports wildcards: --hide icon?.*
ZIP specific options:
--zip-noreadonly DISABLE ZIP MOTW bypass that is used by default. By default, PackMyPayload marks Office files
as Read-Only making ZIP software unable to set MOTW flag on them when extracted. This option
disables that behavior.
VHD specific options:
--vhd-size SIZE VHD dynamic size in MB. Default: 1024
--vhd-letter LETTER Drive letter where to mount VHD drive. Default: will pick unused one at random.
--vhd-filesystem FS Filesystem to be used while formatting VHD. Default: FAT32. Supported: fat, fat32, ntfs
=====================================================
Supported container/archive formats:
- zip
- 7z
- iso
- img
- cab
- pdf
- vhd
- vhdx
=====================================================
Ajouter le support des fichiers MSI
Intégrer des fichiers dans des documents MS Office 2007+ : word -> embeddings -> oleObject1.bin (flux OLE) + ajuster
Envisager d'ajouter le support d'autres formats d'archive exotiques (pas vraiment liés à MOTW ou supportés nativement par Windows) :
tarcpiopaxxararmtreeshartarcpgzuuJe vous demande gentiment de lire la ligne suivante à voix haute et aussi vite que possible devant un miroir :
py Pack My Payload dot py
Certains disent que l'incantation invoque un ancien DAEMON et des Moutons ( ͡~ ͜ʖ ͡°)
Applaudissements et remerciements aux contributeurs suivants qui ont aidé à améliorer cet outil :
--hide pour cacher les fichiers dans les conteneurs ISO/IMG--hideCe projet et d'autres sont le fruit de nuits blanches et de beaucoup de travail acharné. Si vous aimez ce que je fais et appréciez que je donne toujours en retour à la communauté, Envisagez de m'offrir un café (ou mieux une bière) pour me dire merci ! 💪
Mariusz Banach / mgeeky, (@mariuszbit)
<mb [at] binary-offensive.com>
| Format | Supprime MOTW ? | Support Windows natif ? | Élévation requise ? | Remarques |
|---|
Zip | Non/Oui* | Oui | Non | (MOTW supprimé avec CVE-2022-41091) |
7zip | Partiellement | Non | Non | MOTW supprimé uniquement lors de l'extraction manuelle des fichiers |
ISO | Oui | Oui | Non | |
IMG | Oui | Oui | Non | |
PDF | ? | Oui | Non | Dépend du support JavaScript dans le lecteur PDF |
CAB | Non | Oui | Non | Nécessite quelques clics supplémentaires côté victime |
VHD | Oui | Oui | Oui | Ce script ne peut actuellement pas créer de répertoires |
VHDX | Oui | Oui | Oui | Ce script ne peut actuellement pas créer de répertoires |
lhaWinZip Pro prend également en charge l'extraction des formats suivants - peut-être intéressant de les ajouter aussi :
B64, BHX, BZ, BZ2, GZ, HQX, LHA, LZH, MIM, TAZ, TBZ,TBZ2, TGZ, TXZ, TZ, UU, UUE, VMDK, XXE, XZ, Z, ZIPX