안녕하세요! 오늘은 IcedID라는 악성코드의 Loader를 분석할 것입니다.
지난주는 간단하게 Malware의 "Lifecycle"에 대해서 이야기했는데, 다시 보자면:
1단계 Loader: 악성 Office 파일. 악성 Macro를 활용해 해커가 제어하는 홈페이지에 들어가 2단계를 다운로드.
2단계: 악성 .exe 파일. 두 번째 Loader나 "final payload"
3단계: 1단계의 홈페이지 (C2 서버) 통신해 추가 .exe나 .dll 파일 다운로드
지난주 ursnif word 파일은 1단계 Loader이었고, 분석하다 보니 2단계의 Loader를 다운로드하는 C2 서버도 발견했으나 그 서버는 더 이상 존재하지 않으므로 ursnif의 2단계를 다운로드하지 못했고, 대신 IcedID Loader 2단계를 선택했습니다.
IcedID도 역시 banking trojan입니다. 아울러 다른 악성코드를 위한 dropper 역할할 때도 많습니다. 무슨 말이냐면, IcedID가 실행되면 다른 악성코드를 다운로드를 설치됩니다.
분석을 시작하기 전에 잠깐 Packer이라는 개념에 대해 이야기해야 합니다.
대부분 악성코드는 실행되기 전에 packed 버전입니다. Packer가 해주는 역할은?
1) 악성코드의 사이즈를 줄이기
2) 방어 장치 우회
Packing하고 unpacking 과정은 사진으로 설명해 드리자면
(Mohanta, Abhijit; Saldanha, Anoop. Malware Analysis and Detection Engineering (p. 236). Apress. Kindle Edition)
위에 있는 사진을 보시면 packed된 악성코드를 분석하면 얻을 수 있는 것이 없으니, payload가 unpacked 될 때까지 기다려야 합니다.
근데 어떻게 악성코드를 실행시키지 않고, unpacked된 코드를 받을 수 있을까요? Debugger를 사용해야 합니다!
이제 드디어 분석을 시작합시다!
쓸만한 Debugger가 많지만 저는 x32dbg, x64dbg를 좋아합니다.
악성코드를 unpack하기 위해서 여러 가지의 breakpoint를 박아야 합니다. 지난달 제가 쓴 "Word 파일 속에 악성코드"라는 블로그를 읽어 보시는 게 도움이 될 것입니다. 오늘은 시스템을 방어하는 사람의 입장에서 VirtualAlloc에 대해 배울 것인데 "Word 파일 속에 악성코드" 블로고는 VirtualAlloc로 어떻게 악성 Word 파일을 만들 수 있는지에 대해 이야기했습니다.
1) VirtualAlloc: 메모리를 할당하는 역할을 하며 이 메모리 공간에 payload가 들어갈 것입니다. VirtualAlloc function의 return 값은 EAX에 저장되기 때문에 EAX 안에 무엇이 dump가 되는지 살펴봐야 합니다
2) VirtualProtect: 어떤 메모리 공간의 액세스 보호 수정합니다. VirtualAlloc으로 할당된 메모리 공간이 실행될 수 있기 위해 'Execute' 액세스 주어야 합니다.
unpack 과정은 말로만 설명해 드리기가 좀 어려우니...
1) 맨 밑에 있는 command이라는 box에 "bp VirtualAlloc" 그리고 "bp VirtualProtect" breakpoint 잡기
2) 실행시키고 VirtualAlloc breakboint에서 멈추는 것을 기다리기
3) 단지 VirtualAlloc entry point이므로 위에 "Execute till return"을 누르기. return 값은 EAX에 저장되니 오른쪽에 있는 EAX 눌러서 "Follow in Dump"를 누르기. 아래에 있는 메모리는 비어 있다. 다시 실행 버튼 누르면 데이터가 저장되니 shellcode 일뿐이다
4) 두 번째 VirtualAlloc도 도움이 안 되고, 3번째 VirtualAlloc는 드디어 payload가 저장된다.
윈도우 .exe 경우에는 항상 MZ header가 보이며 "This program cannot be run in DOS mode"라는 문장이 나옵니다. copy해서 dump하고 나서 unpacking 과정 성공! 이제 ida나 Ghidra로 리버싱 가능합니다! 어디 한번 봅시다.
단지 loader일 뿐이므로 분석해야 할 function이 많이 없고 분석가가 가장 먼저 알아봐야 되는 것은 C2 서버와의 통신이 있는지입니다.
(unpacking 비디오 네이버 블로그 확인 바람: https://blog.naver.com/maxhin/222617756054)
가장 먼저 눈에 띄는 것은 "C://Users/Public" 하고 "//photo.png"입니다. Function들을 자세히 살펴보면 CreateDirectoryA라는 WinAPI가 보이는데 photo.png 안에 아마 다음 단계의 payload 저장될 것 같습니다.
256이라는 숫자가 보이는데 rc4 암호일 가능성이 아주 높습니다. 256이라는 숫자가 왜 수상하냐면 rc4는 "substitution box"이라는 거 만드는데 크기는 256입니다 (0x00부터 0xFF까지).
역시 C2 서버 통신 function도 있습니다. 200이라는 숫자 HTTP Response입니다. 통신 서버와 연결됐다는 뜻입니다. C2 서버 이름 rc4로 암호화될 것 같으니 다시 debugger로 돌아가서 dump가 된 버전은 분석하면서 암호화되기 전에 주소를 탈취할 수 있는지를 봅시다.
딱 나오네요!! instruction 하나씩 실행시키다가 ebp-14에 C2 서버들이 나옵니다
boldidiotruss.xyz (당당한 러시아멍청이? 재밌는 이름이네요)
nizaolov.xyz
153ishak.best
ilu21plane.xyz
C2 서버 주소들은 자주 바뀌지만 발견하자마자 차단해야 합니다.
지금까지 악성코드의 1단계와 2단계를 분석했고 3단계에 대해 배우고 싶으시다면 제가 쓴 Wannacry에 대한 블로그를 추천해드립니다.
오늘도 읽어 주셔서 감사합니다!
IcedID 로더 악성코드 새로운 TTP 분석 (0) | 2023.01.11 |
---|---|
SquirrelWaffle 로더 악성코드 분석 (0) | 2022.08.02 |
Yara Rule로 DiceLoader 악성코드 사냥 | 분석 | Config Extractor (0) | 2022.06.22 |
Hancitor DLL 악성코드 분석 (0) | 2022.05.19 |