
나중에 추출할 추가 데이터를 몰래 숨기는 zip 파일을 생성하는 Python3 유틸리티
이 Python 유틸리티는 파일 구조 내에 추가 데이터가 내장된 zip 파일을 생성합니다. 이 추가 데이터는 zip을 검사하거나 압축을 풀 때 표시되지 않지만, zip 파일 안의 Windows 바로 가기 파일(LNK)을 통해 powershell로 검색할 수 있습니다.
이 스크립트에는 zip 파일 / 바로 가기 파일 / 은닉 파일의 이름과 은닉하려는 파일/데이터가 필요합니다:
python3 zip_smuggle.py important_data /home/ubuntu/zip_smuggling/testdata.txt
이렇게 하면 스크립트 폴더 안에 important_data.zip이 생성됩니다. 이 zip 파일을 Windows 컴퓨터로 옮기고, zip 안으로 더블클릭하여 들어가거나 압축을 푼 다음, 그 안에 포함된 바로 가기를 클릭하세요. 은닉용으로 제공한 데이터는 zip 파일에서 검색되어 디스크에 저장된 후 텍스트 파일로 열립니다.
이 프로젝트는 제가 예전에 만든 lnk_generator를 활용합니다. 이 도구는 사전 설정된 템플릿을 사용하여 임의의 바로 가기 파일을 만들 수 있게 해줍니다. 바로 가기 파일 생성에 대한 더 자세한 내용 / 더 완전한 스크립트와 메모는 해당 저장소를 확인하세요.
은닉되는 데이터는 아카이브에 포함된 파일들의 데이터와 아카이브의 중앙 디렉터리 사이에 배치됩니다. 중앙 디렉터리는 zip 파일의 일종의 목차 역할을 합니다. 이 중앙 디렉터리에는 아카이브 내 파일들의 오프셋이 포함되어 있으므로, 주입된 데이터가 zip 안에 존재하더라도 중앙 디렉터리에 의해 추적되거나 색인되지 않아 쉽게 보거나 추출할 수 없습니다. Python 스크립트는 zip 파일 내에서 "End of Central Directory" 오프셋을 찾아, 은닉 데이터가 주입된 후 중앙 디렉터리의 새 위치로 업데이트합니다. 아래 그림은 왼쪽에 zip의 일반적인 구조를, 오른쪽에 데이터가 삽입된 위치를 보여줍니다:

은닉 데이터는 powershell 명령으로 추출됩니다:
powershell.exe -w 1 -c "$name = \"testing\";$file = (get-childitem -Pa $Env:USERPROFILE -Re -Inc *$name.zip).fullname;$bytes=[System.IO.File]::ReadAllBytes($file);$size = (0..($bytes.Length - 4) | Where-Object {$bytes[$_] -eq 0x55 -and $bytes[$_+1] -eq 0x55 -and $bytes[$_+2] -eq 0x55 -and $bytes[$_+3] -eq 0x55 })[0] + 4;$length=12;$chunk=$bytes[$size..($size+$length-1)];$out = \"$Env:TEMP\$name.txt\";[System.IO.File]::WriteAllBytes($out,$chunk);Invoke-Item $out"
이 명령은:
0x55/0x55/0x55/0x55)를 찾습니다이 POC는 의도적으로 다소 범용적으로 남겨 두었으며, 다른 파일 형식을 사용하도록 무기화하는 방법 등은 독자의 연습 과제로 남겨 둡니다.