다크사이드는 command line parameter를 쓰는 기능을 갖고 있는데 자기 encryption 루틴을 활용하고 폴더를 하나 선택하여 그 폴더만 암호화시킵니다.
PathIsUNCServerW를 활용하여 유효한 UNC (Universal Naming Convention) 서버가 존재하는지를 확인합니다.
그렇지 않은 경우네는 PathisNetworkPathW를 불러오고 "make_path"이라는 변수로 path를 직접 만드는 것이 보입니다.
이제부터 재밌어집니다. 아랫 내용은 로그파일에 저장될 것이고, 유용한 스트링들이 보입니다. 다양한 Encryption 속도가 있는 것 같고, I/O 활용해서 multithread encryption을 사용하는 것 같습니다.
Part 1에서 언급했던 토켄이 다시 나타납니다. 다크사이드는 encryption전에 그 토켄을 다시 불러오고 권한상승을 해서 파일들을 암호화시킵니다.
C2 서버에게 보낼 피해자의 시스템 정보를 모으는 기능도 있습니다.
다크사이드가 위에서 모아놨던 정보를 그대로 plaintext로 C2서버에게 보내지 않고 custom hashing 함수 2개를 씁니다.
정보를 다 모은 다음에 다음과 같이 정보를 정리합니다:
\"os\":{\r\n\"lang\":\"en-US\",\r\n\"username\":\"유저이름\",\r\n\"hostname\":\"hostname\",\r\n\"domain\":\"WORKGROUP\",\r\n\"os_type\":\"windows\",\r\n\"os_version\":\"Windows 10 Home\",\r\n\"os_arch\":\"x64\",\r\n\"disks\":\"C:211/255\",\r\n\"id\":\"0417381a43d513ffa375\"\r\n}
다크사이드 악성코드 버전도 받을 수 있습니다:
{\r\n\"bot\":{\r\n\"ver\":\"1.8.6.2\",\r\n\"uid\":\"060108efb510c98\"}
다음 캡처는 C2에 연결하는 것을 확인할 수 있습니다. 특별한 것이 없고 서버에 연결하기 위한 일반 API들이 사용됩니다.
다크사이드가 recycle bin을 삭제하는 것도 확인할 수 있습니다. FindFirstFileExW하고 FindNextFileW를 활용하면서 recycle bin 안에 있는 파일들을 다 확인하고 하나씩 삭제합니다.
시스템 건축에 따라 다크사이드에게 Shadow Copies를 삭제하는 기능도 있습니다. 피해 시스템이 64-bit 시스템이면 powershell 명령어를 decrypt하고 그것을 CreateProcessW라는 API로 실행시킵니다.
powershell -ep bypass -c \"(0..61)|%{$s+=[char][byte]('0x'+'4765742D576D694F626A6563742057696E33325F536861646F77636F7079207C20466F72456163682D4F626A656374207B245F2E44656C65746528293B7D20'.Substring(2*$_,2))};iex $s\"
위에 powershell를 deobfuscate 하면...
(중요. 따라 하시는 분들은 위에 powershell 뒤에 있는 iex 꼭 삭제하세요. iex는 Invoke Expression이므로 이 부분은 삭제하지 않으시면 powershell 명령어가 실행될 것입니다. 아래의 사진처럼 똑같이 ps console에다 넣으시고 Write-Output으로 decrypt된 s변수를 불러오시면 됩니다)
피해 시스템이 32bit인 경우에는 다크사이도가 또 COM Object와 WQL를 활용하며 ShadowCopy를 삭제합니다.
SELECT * From Win32_ShadowCopy
첫 번째 파트에서 다크사이드의 다양한 기능들을 언급했는데 그중에 몇 개 이제 더 자세하게 분석할 것입니다.
OpenSCManagerW API로 Service Control Manager를 열고, EnumServicesStatusExW API로 무슨 서비스가 작동 중인지를 확인합니다. 다크사이드가 종료시키려고 하는 서비스가 발견하면 (service_kill에 저장되어 있음) 그 서비스를 열어서 (OpenService) ControlService하고 DeleteService로 그 서비스를 종료시킵니다.
서비스 종료 기능과 비슷하게 Process까지 종료되는 것을 확인할 수 있습니다. NtQuerySystemInformation API로 작동 중인 Process를 확인하고 config에 저장되어 있는 process가 발견되면 (v5 변수) --> Process 종료
GetLogicalDriveStringsW로 Drive들을 불러오고 GetDriveTypeW로 DRIVE_FIXED, DRIVE_REMOVABLE, DRIVE_REMOTE를 찾으려고 합니다
GetAdaptersInfo API로 피해 시스템의 네트워크에 대한 정보를 불러오고, inet_addr로 발견된 다른 시스템의 아이피주소를 받을 수 있습니다. 주소를 발견되면 그 주소를 활용하여 SendARP하고 gethostbyaddr로 발견된 device의 이름을 알아보려고 합니다
또 한 번 권한상승을 위한 토켄을 받아 NetShareEnum으로 악성코드가 방금 발견한 Share들을 하나씩 불러오고 암호화시킵니다.
아래의 두 사진들은 그렇게 흥미롭진 않지만 다양한 API들의 도움으로 다크사이드 랜섬웨어 Wallpaper를 만듭니다. 만든 다음에 Registry를 불러오고 저장합니다.
종료 전에 다크사이드는 다시 한번 C2 서버에 연결하여 피해 시스템에 대한 정보와 encryption에 대한 정보를 전송합니다.
다크사이드 랜섬웨어 기능은 여기까지입니다!
첫번째 파트는 다크사이드가 자기 API, DLL, 그리고 string들을 어떻게 decrypt 하는지에 대해 알아봤고, 권한상승이 어떻게 진행되는지에 대해도 알아봤습니다.
두번째 파트는 다크사이드가 어떻게 피해자의 시스템의 파일,폴더 등 암호화시키는지 공부했고, 그 정보가 어떻게 C2서버에게 전달됐는지 알아봤습니다.
지금까지 이 블로그에서 분석했던 악성코드들 중에 가장 어려웠지만 재밌었네요. 앞으로도 다른 랜섬웨어를 분석할까 생각 중입니다.
Babkuk 랜섬웨어: 악성코드 분석 처음인 사람 누구나 접할 수 있는 Malware (0) | 2022.11.13 |
---|---|
Darkside 랜섬웨어: 미국 파이프라인 마비 시킨 악성코드 Part 1 (0) | 2022.11.01 |
RegretLocker 랜섬웨어 악성코드 분석 (0) | 2022.06.17 |
Wannacry Ransomware Part 2 (0) | 2022.05.19 |
Wannacry Ransomware 분석 및 Malware 방법론 (0) | 2022.05.19 |