
실제 멀웨어가 감염된 Windows OS에 남기는 흔적을 쉽게 모방하도록 설계된 의사 악성 사용자 모드 메모리 아티팩트 생성 키트입니다.
__ .__ _____ __ __ .__ __
_____ / |_||/ __ ____/ | | | _||/ |
_ \ __ \ \ \ \ \ _/ _\ \ | |/ / \
/ __ | | /| | | || | / __ \ _| | | <| || |
( /| || |||__| (___ /___ >| ||_ __||__|
/ / / /
악성 메모리 아티팩트 생성 키트 v1.0 | Forrest Orr | 2020
필수
--alloc-type {dll-map-hollow|dll-load-hollow|txf-dll-map-hollow|private|mapped}
선택사항
--payload-file --payload-type {PE|shellcode} --exec-method {create-thread|call|ep-jmp-hook} --stealth {wipe-headers|mirror-headers|rw-rx|dotnet|moat|peb-img-base} --moat-size --hollow-dll-file
--payload-file 임플란트로 사용할 셸코드 또는 PE가 포함된 파일입니다. 사용자가 제공하지 않으면 지정된 영역 유형은 여전히 할당되지만 코드는 이식되지 않습니다. --payload-type 지정된 페이로드 파일에 저장된 코드 유형입니다. 셸코드 또는 MZ PE여야 합니다. 페이로드 파일이 지정된 경우 이 매개변수는 필수입니다. --alloc-type 페이로드 임플란트를 보관하는 데 사용되는 동적 메모리가 생성되어야 하는 방식입니다.
dll-map-hollow System32의 DLL에서 생성된 이미지 섹션의 뷰입니다.
dll-load-hollow System32에서 LoadLibrary를 통해 로드된 DLL입니다.
txf-dll-map-hollow 이미 페이로드가 이식된 System32의 트랜잭션 DLL에서
생성된 이미지 섹션의 뷰입니다.
private NtAllocateVirtualMemory를 통해 할당된 프라이빗 메모리 영역입니다.
mapped Windows 페이지 파일에서 파생된 섹션의 매핑된 뷰입니다.
--exec-method 페이로드 코드가 지정된 메모리 영역에 이식된 후 호출하는 방법입니다.
create-thread CreateThread API를 사용하여 페이로드를 실행합니다.
call 일반 CALL 어셈블리 명령어를 사용하여 페이로드를 실행합니다.
ep-jmp-hook 프로세스 EXE 엔트리 포인트에서 인라인 JMP를 통해 페이로드를 실행합니다.
--stealth 할당된 영역에 대한 선택적 난독화입니다.
wipe-headers 메모리 내 페이로드의 PE 헤더를 0으로 덮어씁니다.
PE 페이로드에만 유효합니다.
mirror-headers 속이 빈 DLL에 페이로드 PE 파일이 이식된 후 원래 PE 헤더를 유지합니다.
이미지 영역 유형을 사용하는 PE 페이로드에만 유효합니다.
rw-rx 임플란트 영역을 +RWX 권한으로 직접 할당하는 대신,
+RW로 할당한 후 +RX로 설정합니다.
프라이빗 및 매핑된 영역 유형에만 유효합니다.
dotnet 속이 빈 작업 중에 .NET 헤더가 있는 DLL만 선택합니다.
이미지 영역 유형에만 유효합니다.
moat 셸코드 앞에 할당된 영역을 0으로 미리 채웁니다.
기본적으로 1MB의 패딩이 사용됩니다.
속이 빈 DLL이 있는 셸코드 임플란트에는 유효하지 않습니다.
TxF 할당 유형과 함께 사용할 수 없습니다.
peb-img-base PEB의 이미지 베이스 필드를 새로 할당된 영역을 가리키도록 업데이트합니다.
--moat-size 페이로드 임플란트 앞에 생성할 데이터 모트의 크기입니다. moat 은닉 옵션이 지정된 경우에만 필요합니다. 기본 크기는 1MB입니다. --hollow-dll-file 속이 빈 할당 유형과 함께 사용할 DLL의 경로를 수동으로 지정합니다. 지정되지 않은 경우 Windows 디렉터리 또는 그 하위 폴더에서 적합한 DLL이 무작위로 선택됩니다.
예제
매핑된 32비트 DLL 이미지의 .text 섹션 내에 32비트 셸코드 임플란트를 생성하고 CALL 명령어를 사용하여 실행:
ArtifactsKit32.exe --payload-type shellcode --payload-file Payloads\MsgboxShellcode32.bin --alloc-type dll-map-hollow
+RWX 매핑된 페이지 파일 메모리 영역 내에서 할당 기준에서 +1MB 오프셋에 64비트 셸코드 임플란트를 생성하고 KERNEL32.DLL!CreateThread API를 사용하여 실행:
ArtifactsKit64.exe --payload-type shellcode --payload-file Payloads\MsgboxShellcode64.bin --alloc-type mapped --stealth moat
32비트 DLL 이미지의 매핑된 이미지 메모리 위에 32비트 PE 임플란트를 생성하면서 원래 헤더를 유지하고, CALL로 페이로드 PE IMAGE_OPTIONAL_HEADER.AddressOfEntryPoint를 부트스트랩하여 실행:
ArtifactsKit32.exe --payload-type pe --payload-file Payloads\TestExe32.exe --alloc-type dll-map-hollow --stealth mirror-headers
64비트 DLL의 수정된 TxF 섹션의 매핑된 이미지 메모리 내에 64비트 PE 임플란트를 생성(팬텀 DLL 속이기)하고 아티팩트 부모 프로세스의 IMAGE_OPTIONAL_HEADER.AddressOfEntryPoint에서 JMP 후크로 자체 IMAGE_OPTIONAL_HEADER.AddressOfEntryPoint를 실행:
ArtifactsKit64.exe --payload-type pe --payload-file Payloads\TestExe64.exe --alloc-type txf-dll-map-hollow --exec-method ep-jmp-hook