
Uma PoC que empacota payloads em contêineres de saída para evadir a flag Mark-of-the-Web e demonstrar riscos associados a formatos de arquivo de contêiner. Suporta: ZIP, 7zip, PDF, ISO, IMG, CAB, VHD, VHDX
PackMyPayload - Ameaça Emergente de Malware em ContêineresEsta ferramenta recebe um ficheiro ou diretório como entrada e incorpora-os num ficheiro de saída atuando como um arquivo/contêiner. Pode servir como prova de conceito (Proof-of-Concept) apresentando o risco emergente de formatos de ficheiros contêiner com malware incorporado, bem como auxiliar Operadores de Red Team profissionais a aprimorar suas manobras de Acesso Inicial.
Atualmente, sabe-se que Atores de Ameaças contrabandeiam seus malware arquivados em vários formatos de ficheiros contêiner, para citar alguns:
7zipzipISOIMGEles fazem isso para fazer seus payloads passarem pelos scanners de conteúdo de ficheiros, mas mais importante para evitar ter a flag Mark-Of-The-Web nos seus ficheiros. Existem vários motivos pelos quais os adversários não querem MOTW nos seus ficheiros: Protected View no Microsoft Office sempre foi um deles.
Se eles fornecerem um ficheiro contêiner às suas vítimas, uma base para desativar macros VBA em documentos do Office originados da Internet pode ser contornada.
Em 7 de fevereiro, a Microsoft anunciou uma alteração de configuração padrão para bloquear macros VBA originadas da Internet. Este é um passo incrível para endurecer a configuração base da estação de trabalho do Utilizador e do software cliente instalado. Indiscutivelmente atrasado, mas um passo importante que afeta dramaticamente de forma positiva as configurações típicas de instalação do Windows+Office.
O comportamento implementado é explicado como funcionando ao diferenciar documentos do Office habilitados para macro com base na flag MOTW (Mark of the Web). Essa flag atua como um rótulo contaminado disponível para clientes de software (navegadores, clientes de e-mail, arquivadores de ficheiros, etc.) para marcar ficheiros originados de áreas não confiáveis como a Internet.
A Outflank trouxe mais luz sobre o MOTW, em 2020, ao indicar áreas onde a flag MOTW não é uniformemente propagada. Essas áreas servem como lacuna de defesa e são comumente abusadas por atores de ameaças há anos.
A pesquisa deles revelou que alguns formatos de ficheiros contêiner - nomeadamente ISO, VHD/VHDX - não propagam a flag de contaminação MOTW para os ficheiros internos ao montar ou extrair automaticamente. Além disso, o Windows 8+ é capaz de abrir esses formatos automaticamente ao clicar duas vezes, tornando-os notórios portadores de infeção, possivelmente desvalorizando o MOTW no seu papel de medida de segurança.
Vamos apresentar como a flag Mark of the Web se parece na prática:

Após descarregar um ficheiro, clique com o botão direito nele e reveja as suas propriedades.
Verá uma mensagem a solicitar que desbloqueie o ficheiro, porque ele é originado de uma zona não confiável:

Essa informação é armazenada no NTFS ADS (Alternate Data Stream) chamado Zone.Identifier, que se parece com isto:

O ZoneId=3 desempenha o papel de marcar o ficheiro como contaminado.
Usando PackMyPayload.py, coloque o ficheiro num disco Joliet ISO facilmente com o comando:
PS> py PackMyPayload.py 7z2107-x64.exe 7z2107-x64.iso

Depois de criar o ficheiro ISO, simule um servidor HTTP usando Python:
PS> py -m http.server 80
e depois descarregue o ficheiro ISO usando o seu Navegador.

Quando rever as Propriedades desse ficheiro ISO, verá que está marcado com a flag MOTW.

No entanto, o ficheiro EXE do instalador 7zip interno não está marcado com MOTW!

Aproveitando a ocasião em que os olhos da Indústria estão voltados para a corajosa decisão da Microsoft de bloquear Macros VBA, nós, Profissionais de Segurança, levando em máxima consideração o aumento da resiliência das tecnologias mundiais contra o seu uso indevido, queremos acrescentar a seguinte perceção nas atuais TTPs dos Atores de Ameaças:
Os Atores de Ameaças estão bem conscientes do impacto que o MOTW tem nos seus payloads de phishing. Eles adaptaram-se há muito tempo e agora estão a contrabandear os seus programas maliciosos dentro de contêineres. Entre os mais comumente observados, podemos destacar ISO, IMG, CAB.
Estou agora a lançar esta ferramenta para aumentar o momentum construído na posição da Microsoft e ajudar a intensificar discussões sobre estas vias de evasão.
É aconselhável conter (e/ou bloquear) ficheiros com as extensões listadas acima sempre que forem originados de zonas não confiáveis e sempre que aplicável:
Espera-se que a ferramenta lançada permita que mais Equipas Vermelhas simulem os riscos discutidos e as ajude a identificar lacunas de deteção nas defesas dos seus Parceiros mais facilmente.
Este script oferece as seguintes vantagens e mimos:
Formatos suportados:
--zip-noreadonly seja fornecido.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 exigir acesso Admin aos objetos/namespace dos dispositivos físicos. A melhor experiência é obtida executando o script no Windows Terminal (wt) ou ConEmu, pois suportam cores ANSI. Caso contrário, se a saída parecer má, desative essas cores com a 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
=====================================================
Adicionar suporte para ficheiros MSI
Incorporar ficheiros em documentos do MS Office 2007+: word -> embeddings -> oleObject1.bin (fluxo OLE) + ajustar
Considerar adicionar suporte para outros formatos de arquivo exóticos (não lidam realmente com MOTW ou suportados nativamente pelo Windows):
tarcpiopaxxararmtreeshartarcpgzuuPeço gentilmente que leia a seguinte linha em voz alta e o mais rápido que conseguir em frente a um espelho:
py Pack My Payload dot py
Alguns dizem que o feitiço invoca o antigo DAEMON e Ovelhas ( ͡~ ͜ʖ ͡°)
Aplausos e agradecimentos aos seguintes contribuidores que ajudaram a melhorar esta ferramenta:
--hide para ocultar ficheiros em contêineres ISO/IMG--hideEste e outros projetos são o resultado de noites sem dormir e muito trabalho duro. Se gosta do que faço e aprecia o facto de eu estar sempre a retribuir à comunidade, Considere comprar-me um café (ou melhor uma cerveja) só para dizer obrigado! 💪
Mariusz Banach / mgeeky, (@mariuszbit)
<mb [at] binary-offensive.com>
| Formato | Remove MOTW? | Suporte nativo do Windows? | Requer elevação? | Observações |
|---|
Zip | Não/Sim* | Sim | Não | (MOTW removido com CVE-2022-41091) |
7zip | Parcialmente | Não | Não | MOTW removido apenas na extração manual de ficheiros |
ISO | Sim | Sim | Não | |
IMG | Sim | Sim | Não | |
PDF | ? | Sim | Não | Depende do suporte a Javascript no leitor de PDF |
CAB | Não | Sim | Não | Requer alguns cliques adicionais do lado da vítima |
VHD | Sim | Sim | Sim | Este script atualmente não consegue criar diretórios |
VHDX | Sim | Sim | Sim | Este script atualmente não consegue criar diretórios |
lhaWinZip Pro também suporta a extração dos seguintes formatos - talvez valha a pena adicioná-los também:
B64, BHX, BZ, BZ2, GZ, HQX, LHA, LZH, MIM, TAZ, TBZ,TBZ2, TGZ, TXZ, TZ, UU, UUE, VMDK, XXE, XZ, Z, ZIPX,