저번 블로그는 도둑질하는 너구리 (ㅎㅎ)를 분석했고 오늘은 분석할 악성코드는 다람쥐 워플...? 악성코드 이름들이 참 재밌네요.
제가 제목에서 써놓았던 것처럼 오늘 분석할 악성코드는 Loader입니다. SquirrelWaffle는 이메일 스팸 캠페인으로 유포되며 qakbot하고 cobalt strike를 위한 로더 역할을 하는 것으로 알려져 있습니다. Qakbot 같은 경우에는 자주 랜섬웨어를 위한 Loader역할을 하고 Cobalt Strike는 유명한 C2 framework이며 Threat Actor들이 자주 사용하는 툴입니다. Qakbot와 Cobalt Strike 감염은 자주 랜섬웨어 악성코드 실행으로 초래되니 Loader 악성코드를 잘 이해하고 Loader가 다른 악성코드를 다운로드하기 전에 Loader를 발견하고 침해사고대응을 제대로 진행하는 것이 중요합니다.
SquirrelWaffle의 dll Entrypoint들은 위와 같습니다. DllEntryPoint는 하는 것이 별로 없고, ldr하고 DllRegisterServer 주소는 똑같습니다.
바로 시작부터 "mw_string_struct_setup"이라는 function이 보이는데 struct로 악성코드을 분석하는 것이 처음이었지만 좋은 배움 기회가 됐습니다. SquirrelWaffle는 struct들을 활용하면서 중요한 string들을 불러오는데 struct때문에 분석이 참 어려워지고 귀찮아지지만...!
위 사진에 "unk_72E8A2E5"가 보이는데 거기서 저장되어 있는 데이트가 사진 밑에 있는 string으로 decrypt 될 줄 알았는데 데이터가 비어 있었더라고요. 다른 SquirrelWaffle에 대한 블로그들에 따르면 첫 번째로 decrypt가 되는 데이터는 아이피 주소들인데 C2 통신을 위한 주소가 아닌 Blocklist를 위한 아이피 주소랍니다. 그런 체크가 왜 있는지 아래에서 설명하도록 하겠습니다.
decrypt 될 데이터와 XOR key를 받은 다음에 간단한 XOR로 데이터가 decrypt 됩니다.
Blocklist에 대한 설명은 지금 하겠습니다. SquirrelWaffle는 HeapAlloc으로 메모리를 할당하고 GetAdaptersInfo으로 컴퓨터의 어댑터에 대한 정보를 얻고자 합니다. 할당된 메모리가 부족하면 Buffer Overflow 에러 체크도 있습니다. 부족한 경우에는 제시도합니다.
위에서 decrypt 된 Blocklist 아이피 주소들 중에 감염된 피해자 아이피 주소가 있으면 SquirrelWaffle는 exit하고 종료됩니다. 이런 체크가 있는 이유는 아마 악성코드 분석가들이 자주 사용하는 Sandbox들을 피하기 위한 방어 장치 우회인 것 같습니다.
그다음에는 SquirrelWaffle는 GetComputerNameW, GetUserNameW, NetWkstaGetInfo라는 API들을 사용하면서 피해자 컴퓨터에 대한 정보를 얻고자 합니다. 이 정보는 통신서버에게 보내질 것입니다.
위에서 언급했던 struct의 도움으로 통신서버의 아이피 주소들이 decrypt 됩니다. debugger로 확인해 보면...
pop.vicamtaynam.com/VtyiHAft
snsvidyapeeth.in/aXmo2Dr3
trinitytesttubebaby.com/QR2JvfE3Sv
iconskw.com/cqdPtAbZ
ebookchuyennganh.com/v9PMvQDxHK8W
alsader.net/BHdQaiQ9rt
avyanshglobal.com/6pYjPlqf
primahills-online.com/ypCiZn7tMx
antoniocastroycia.com.co/WHe08obY
apexbiotech.net/VQgunQ4t5Ue
vscm.in/V3tYKxDz
sinaloworx.co.za/3GilA8Eo3r
dancongnghe.xyz/yRByhX6J3REI
trajesuniformes.com.br/qQofZMaJm
fiorenzapaes.com.br/PGYpETW7
astetinternational.com/arW5e44Y7vzO
razisystem.ir/MqvvkX0cWvn
krishnaiti.org.in/
위 두 사진은 SquirrelWaffle가 통신서버에 연결하여 위에서 받았던 피해자 컴퓨터에 대한 정보를 보내며 Winsock DLL를 활용합니다. "socket"으로 소켓을 만들고 "connect"하고 정보를 보낸 다음에 "recv"로 통신서버의 응답을 받습니다.
통신서버의 응답 중에 다른 파일과 셸코드를 실행하는 3가지 방법이 보이는데 그중에 첫 번째는 "regsvr32.exe -s"라는 string을 decrypt합니다. regsvr32.exe를 검색해 보니, DLL를 Registry에다 등록하는 것이랍니다. WinExec로 위의 regsvr32.exe 명령어가 실행됩니다.
두 번째 방법은 첫 번째 방법하고 비슷하게 파일을 받고 start를 사용하는 것이 보입니다. /i로 cmd.exe 스타트업 환경을 새로운 command prompt 윈도우에게 전달하고, /b로는 새로운 command prompt를 열지 않고 application을 실행합니다.
마지막 방법은 아직 분석을 덜 했지만 셸코드를 받고, VirtualAlloc으로 메모리를 할당하고 memmove로 셸코드를 옮깁니다.
CreateThreadpoolWait으로 새로운 "wait" object를 만들며 callback function을 만듭니다. SetThreatpoolWait로 call function을 불러오고 셸코드를 실행시킵니다. SetThreatContext 셸코드 삽입 및 실행 방법과 비슷한 것 같습니다.
IcedID 로더 악성코드 새로운 TTP 분석 (0) | 2023.01.11 |
---|---|
Yara Rule로 DiceLoader 악성코드 사냥 | 분석 | Config Extractor (0) | 2022.06.22 |
Hancitor DLL 악성코드 분석 (0) | 2022.05.19 |
IcedID Loader 악성코드 분석 (0) | 2022.05.19 |