Maldevacademy 2) 페이로드 암호화/난독화
페이로드 암호화/난독화
오늘은 페이로드 암호화/난독화를 진행했습니다.
encryption
XOR - 잘안씀
RC4
AES(128/192/256 bit)
==== 여기까지는 static/signature 기반 탐지는 모두 우회했습니다. 하지만 windows AV 는 매우 강력하고 보수적이기 때문에 실제 실행하려고 하면 탐지됩니다.
obfuscation
IPv4/IPv4/MAC/UUID
ipv4를 기준으로 설명하자면
FC 48 83 E4 F0 E8 C0 00 00 00 41 51 41 50 52 51
에서
FC 48 83 E4 -> 252.72.131.228
로 4 bytes, 4 octect을 가지며
ipv6 - 16bytes
부족하다면 나머지는 padding 처리되는 형식입니다.
MAC - 6bytes
UUID - 16bytes / 36 char / 5 segments - 3 segments 는 리틀엔디안이므로 거꾸로, 나머지는 빅엔디안이므로 그대로 입니다.
중요한 점은
탐지 이후에는 중간에 실제 payload shellcode 실행을 위해 de-obfuscation작업이 필요합니다.
WinAPI 라면 IAT에 enc/obfuscation function 를 사용했다는 게
리스트로 뜨기 때문에 malicious 행동으로 잡힐 수 밖에 없습니다.
IAT 이것도 숨기는 방법도 나중에 나옵니다.
다른 방법으로는 winAPI가 아닌 3-party API를 사용하는 방법도 있습니다.
Tiny-AES = dumpbin.exe 로 IAT 확인 결과 다른 증거가 안보입니다.
페이로드 암호화/난독화 자동 툴
이걸 수동으로 만들기엔 시간이 많이 걸리기 때문에
소스코드까지 만들어주는 툴이 있습니다.
HellShell.exe by maldevacademy
enc - XOR/AES/RC4 모두 가능
obfuscation - ipv4/ipv6/mac/uuid 가능
required 사이즈가 충족되지 않는다면, padding 기능 있음
decrypt까지
random enc keys 생성 (매번 실행할 때마다)
HellShell.exe calc.bin aes > AesPayload.c
c소스코드로 만들수도 있습니다.
MiniShell
주요특징은 AES/RC4,
bin 파일로 만들 수 있습니다.
.\MiniShell.exe .\calc.bin rc4 encpayload.bin > rc4.c
DLL injection
local process VS remote process
local은 현재 실행중인 process 이며
remote 는 실행중이진 않지만 notepad.exe 에 DLL.dll 을 넣으면서 실행하는 겁니다.
서로 코드 작성이 꽤나 다릅니다.
shellcode injection
일단 단계를 쉽게 설명하자면
일단 payload를 inject하기 위해서
memory(buffer) 공간을 할당 해야합니다.
그다음 공간에 payload를 작성합니다.
그다음 실행을 위해 CreateThread function 을 사용하여 thread를 만드는데 이 때 페이로드가 저장된 base address 주소를 적으면 됩니다.
역시 어려워보이지만 맨땅에 헤딩이라도 무작정 따라쓰면 점점 기능을 몸소 이해하게 되면서 내 것이 됩니다.
이렇게 생각하면 주입식 코딩이 제일 쉬운 듯합니다.
계속 keep going 합시다!