Piece of dragon's scales

TL;DR

  • kimsuky(a.k.a Thallium) 그룹의 golddragon/braveprince 클러스터를 활용한 공격이 지속되고 있음
  • 최근 golddragon/braveprince 클러스트 악성코드에 API 이름을 인코딩 하는 루틴이 추가됨
  • 문자열들을 기반으로 추가 인텔리전스를 검색으로 오픈소스 RAT 인 Quasar 기반 악성코드가 발견

 

개요

사실 golddragon/braveprince 클러스터들(개인적으론 daumrat 이라 부른다.) 은 2021년 중순쯤에 싹 정리해서 포스팅 해야겠다 생각하고 있었는데.. 로스트아크 하면서 시간을 보내던 동안 cisco talos 팀에서 잘 정리해 공개해 주었다. 개꿀이지만 덕분에 쓸게 없어졌다.

그래서 이번 포스팅에서는 인텔리전스 서치를 통해 찾은 name en/decoding 루틴이 추가된 braveprince, password stealer 악성코드, Quarsar RAT 기반의 닷넷 악성코드에 대해 간단히 다뤄보려 한다.

 

Case 1. API Name En/Decoding 로직이 추가된 golddragon/braveprince 악성코드

rundll.exe를 통해 Run 함수가 실행되면 정보를 탈취하고 svchost.exe, iexplorer.exe를 생성해 daum 메일로 정보를 탈취하는 아주 전형적인 braveprince 클러스터이다.(개인적으론 daumrat라 부른다) 최근 발견된 golddragon/braveprince 악성코드에서 기능들은 기존과 동일했지만, DLL과 API 이름들을 암/복호화 하는 로직이 추가된 샘플을 발견했다.

  • WTF_10003CD0 함수

 

 

get encoded dll name & api name

파일 내부에는 인코딩된 DLL이름과 DLL이 포함하는 API를 포함하는 api_name_table이 존재한다. 이 테이블에서 인코딩된 api 이름을 비교해 인코딩된 DLL 이름을 가져온다.

 

decode string

인자로 받은 인코딩된 DLL, API 이름은 아래와 같은 루틴으로 복호화 된다.

  1. key 테이블에서 복호화할 문자위치의 인덱스를 가져옴
  2. 위치 인덱스 값을 특정 수식으로 연산(( idx - 0x16) & 0x3F)
  3. 연산된 값을 key 테이블의 인덱스로 사용해 인코딩된 문자열을 치환

복호화 로직을 구현하면 아래와 같다.

def decryptor(enc_str):
    key_table = 'zcgXlSWkj314CwaYLvyh0U_odZH8OReKiNIr-JM2G7QAxpnmEVbqP5TuB9Ds6fFt'
    dec_str = ''
    for enc_chr in enc_str:
        if enc_chr == '.':
            dec_str += '.'
        else:
            idx = key_table.index(ord(enc_chr))
            dec_str += chr(key_table[ (idx - 0x16) & 0x3F ])
return dec_str</code></pre>

이 악성코드가 사용한 문자열 치환 키 테이블은 이 그룹이 사용하는 다른 악성코드에서도 발견된다. 
(link: https://asec.ahnlab.com/wp-content/uploads/2021/11/Kimsuky-그룹의-APT-공격-분석-보고서-AppleSeed-PebbleDash.pdf)

Ahnlab에서 공개한 보고서

Case 2. information Stealer 

낮선 인텔리전스 서치에서 익숙한 향기가 나는 샘플을 발견했다. 이미 talos에서 분석해 보고서가 나온 샘플이니 간략하게 기능만 보고 넘어가자. 
(link : https://blog.talosintelligence.com/2021/11/kimsuky-abuses-blogs-delivers-malware.html)

  • %AppData%qwer.txt 파일 존재하지 않을 경우 실행하지 않음
  • %AppData%information 폴더 생성 (WORKING_PATH)
  • %AppData%Information 폴더 내에 시스템 정보 저장
    • cmd.exe /c ipconfig/all >> [WORKING_PATH]\netinfo.dat & arp -a >> [WORKING_PATH]\netincfo.dat
    • cmd.exe /c systeminfo >> [WORKING_PATH]\sysinfo.dat
    • cmd.exe /c tasklist >> [WORKING_PATH]\procinfo.dat
    • [WORKING_PATH]\filelist.dat
  • svchost.exe 프로세스 생성 후 리소스 영역의 데이터 복호화 뒤 인젝션
    • nirsoft의 webpassview 프로그램을 개조한 악성코드로 브라우저에 저장된 사용자 정보 탈취 후 파일로 저장
      • [WORKING_PATH]\aaweb.txt

시스템 정보 탈취웹브라우저에 저장된 계정정보 탈취

이 악성코드는 수집한 정보를 외부로 전송하는 루틴이 없고, qwer.txt파일이 없으면 실행되지 않는것으로 보아, 다른 악성코드에 의해 실행되는 시스템 정보 수집 모듈 중 하나로 보인다.

Case 3. .Net malware based on Quasar RAT 

Case 1 발견한 키값과 인코딩된 API 이름으로 인텔리전스 서치를 하던 중 Quasar RAT를 실행하는 드롭퍼를 발견했다. 파일의 리소스 구조가 상당히 복잡해 그림으로 표현해보았다 (발퀄ㅈㅅ) 

malware resource data

악성코드의 동작 방식은 다음과 같다.

  • Windows 버전이 10인 경우
    • 권한상승 SW를 드롭 & 실행 (TEXT114)
  • 권한이 높고 WinDefender가 실행중일 경우
    • Defender Control SW & 실행 (TEXT116)
  • 메인 악성 행위 수행 (TEXT115)
    • C2 정보가 포함된 파일 드랍

Malware main logic

권한 상승 

악성코드는 권한 상승을 위해 파일을 리소스파일(TEXT116)을 복호화하고 메모리에 매핑한 뒤 Export 함수 Reg를 호출한다.

인자 권한상승 S/W 파일/레지스트리 경로
1 computerdefaults.exe HKCU\\Software\\Classes\\ms-settings\\shell\\open\\command
2 sdclt.exe HKCU\\Software\\Classes\\Folder\\shell\\open\\command
3 cmstp.exe %AppData\Microsoft\windows\seting.ini
4 WSReset.exe HKCU\\Software\\Classes\\AppX82a6gwre4fdg3bt635tn5ctqjf8msdd2\\Shell\\open\\command
5 slui.exe HKCU\\Software\\Classes\\Launcher.SystemSettings\\shell\\open\\command
     

권한상승 S/W

[version]
Signature=$chicago$
AdvancedINF=2.5
[DefaultInstall]

CustomDestination=CustInstDestSectionAllUsers
RunPreSetupCommands=RunPreSetupCommandsSection

[RunPreSetupCommandsSection]
[MALPATH]\malware.dll,Run
taskkill /IM cmstp.exe /F

[CustInstDestSectionAllUsers]
49000,49001=AllUSer_LDIDSection, 7

[AllUSer_LDIDSection]
“HKLM”, “SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\CMMGR32.EXE”, “ProfileInstallPath”, “%UnexpectedError%”, “”

[Strings]
ServiceName=“WinPwnageVPN”
ShortSvcName=“WinPwnageVPN”

 

Turn off winDefender 

실행중인 프로세스 중 "sMpEng"문자열을 검색해 Defender가 실행여부를 확인하고, 실행중인경우 리소스영역의 파일(TEXT114)을 드랍하고 /D 옵션으로 실행해 디펜더를 끈다.

  • 경로 : %PROGRAMFILES%\Microsfot\
  • 파일명 : /[cetuikgbms]{6}.exe

win defender contol

악성코드 설치 

최종 악성코드인 Quasar RAT와 암호화된 C2파일을 고정된 폴더(Fixed Folder)에 드랍한다.

  • Encrypted C2 (BIN101): %AppData%\Microsoft\Office\MsWord16.pip
  • Quasar RAT(BIN102) : %AppData%\Microsoft\Office\StaticCache.dat

Quasar RAT를 실행하는 로더는 %AppData%\Microsoft\ 내 임의의 폴더를 생성하고, 임의의 이름으로 드랍한 뒤 실행한다.

  • 설치경로 : %AppData%\Microsoft\ [pubs, Common, Defender, Protect, Vault]
  • 파일명 : [svchost, sihost, spoolsv, taskhostw, RuntimeBroker].exe
  • 실행인자 : -start

자동 실행 등록 (Persistence)

악성코드 지속성 확보를 위해 스케쥴러 등록과 레지스트리 등록(Windefender가 실행중이지 않을경우) 을 시도

  • 자동실행 이름
    • WindowsAutoUpdate
    • AdobeUpdate
    • DefenderUpdate
    • OneDriveUpdate
    • CloudUpdate
schtasks.exe "/create /tn \"WindowsAutoUpdate\" /tr \"C:\\Users\\anon\\AppData\\Roaming\\Microsoft\\Protect\\svchost.exe -start\" /sc DAILY /mo 1 /f"

 

레지스트리 경로 : 경로 : HKLM\SoftWare\Microsoft\Windows\CurrentVersion\Run

RAT Loader

RAT Loader는 teracom 또는 RuntimeBroker 이라는 이름을 가진 닷넷 기반 로더 프로그램으로 Quasar 기반 악성코드를 읽어와 디코딩 후 실행한다. 로드해 실행파일내에 PDB 정보가 존재한다.

G:\SRC\!Spy\!LoadAssembly\!teracom\teracom\obj\Release\teracom.pdb
G:\SRC\!Spy\taskhost\taskhost\obj\Release\RuntimeBroker.pdb

teracom/runtimebroker infoRAT loader 

Quasar RAT 기반 Malware

메모리에서 동작하는 StaticCache.dat 파일은 RMSSVC라는 패키지명을 가진 Quasar RAT 기반의 악성코드이다. 전체적인 기능은 Quasar RAT와 동일하므로 일부 설정과 복호화 로직, C2 주소 로드 방식만 살펴본다.
(link : https://github.com/quasar/Quasar)

RAT Package

 

악성행위에 사용할 설정 정보

 

Config 파일에 있는 암호화된 C2와 AES로 암호화된 MsWord16.pip파일을 복호화해 C2로 세팅

  • https://blog.daum[.]net/casalesmedia/pages/category
  • 14.47.189.243:443
  • 222.122.79.232:8080
  • 222.122.79.232:443

문자열 복호화 로직

  • 복호화 순서
    1. Base64 Decoding
    2. 159 (0x9F) XOR

C2 파일 복호화 로직 (AES)

def aes_dec(enc_str):
    enc_str = base64.b64decode(enc_str)
    key = base64.b64decode("IuYp5htzIKk1wqlMrcwzSg==")
    iv = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
    decrypt = AES.new(key, AES.MODE_CBC,IV= iv)
    dec_str = decrypt.decrypt(enc_str)
    print(dec_str)

 

결론

다 쉰 떡밥 가져와서 시간을 낭비하게 해 죄송한 마음 뿐이다. 하지만 누군가에겐 도움이 되겠지 라는 마음으로 글을 적어 보았다. 그리고... 아마 이 친구들에 대한 추적 혹은 분석글은 이번을 끝으로 더이상 포스팅 하지 않을 것 같다. (이유는 후에 개인 SNS에 근황과 함께 적겠다.)

위협을 식별하고 차단하기 위해 불철주야 고생하고 있는 모든 악성코드/위협 분석가에게 리스펙을 보내며 글을 마친다.

 

Goodbye 2020! And Happy New year!!

 

IOC

Case 1. API Name En/Decoding 로직이 추가된 golddragon/braveprince 악성코드
md5 : E647B3366DC836C1F63BDC5BA2AEF3A9
sha1 : A7B0711B45081768817E85D6FC76E23093093F87
sha256 : 3903958EB28632AA58E455EB87482D1CCEF38A6FE43512BAAD30902E8BFDD6D5

E11E2425C62F34EBB3F640BAEEFB67D5
7DC6F8AAAF4431C365564A51DD37C143D857B89E
237DEBA138355BFB448E74BFB68FC868F4807B24D68715A6D47E348FC0CF9257

Case 2. information Stealer 
md5 : 8EDFA086DE4DFDC93C0551BBB08CD5A8
sha1 : 4B1B5BED35BC676E835DE14EE033339D37F4549D
sha256 : 5E3907E9E2ED8FF12BB4E96B52401D871526C5ED502D2149DD4F680DA4925590

Case 3. .Net malware based on Quasar RAT 
md5 : C3885F3C1001A53EB4FBBB4B5F42163E
sha1 : 322AD36BF0DB8244B64E2D3AFC1CCF5ED6685DF3
sha256 : 51a92bd57ece4a107dacabf2639b6fa06bea8992e72fc9b4305a90fcd984e752

md5 : 3A7355417EBFDB5067582916BBAF0F15
sha1 : E8BEF41ED7D0704D9206880EE0F30B5ECF30F204
sha256 : 0CF7E1268E8652D841B7BDA784707E445B9CDC2A46FFB375C8F239CB4C551F73

 

 

Article Link: Piece of dragon's scales