꿈을꾸는 파랑새

반응형

오늘은 국세청 사칭 김수키(Kimsuky) 에서 만든 악성코드인 비밀번호.txt에 대해서 알아보겠습니다.
파일명:비밀번호.txt.lnk
사이즈:1 MB
MD5:120ea85330daa9299f79af6e4ef9abc8
SHA-1:27f710ac76198c14c81f34cc225a39a290f8b275
SHA-256:a69e1b56a14eb012201ffa9be37ccb87ef5a5c476fca617ce8eb89e33f155ab3

악성코드 분석

악성코드 에 포함된 코드
악성코드 에 포함된 코드

mshta.exe는 Windows의 HTML Application 실행을 하는 도구 입니다.C:\Windows\System32\mshta.exe를 실행을 해서 hxxps://link24(.)kr/8Iy8Zbd 에서 파일을 다운로드 합니다.
다운로드 파일은 pwko.zip이지만 실제로는 VBScript 입니다.
이것은 파이썬으로 풀며 됩니다. 그러면 다음과 같은 명령어들을 맞이할 수가 있으며 해당 부분을 분석하면 다음과 같습니다.
Google Drive를 C2,페이로드 저장소처럼 사용해서 추가 파일을 다운로드 하고 AES로 복호화하고 DLL을 rundll32 로 실행하는 로더
초기에는 WScript.shell COM 객체를 생성
즉 VBScript에서 Windows 명령을 숨김 창으로 실행할 수 있는 구조이며 파일에는 실제로 Set oShell = CreateObject("WScript.shell") 가 복원
첫 번째 실행 명령은 %temp% 로 이동하고 Google Drive에서 password.txt 를 다운로드 하고 이어서 password.txt 를 실행 및 파일을 열기를 시도합니다.
oShell.Run 으로 숨김 실행

악성 VBScript 코드
악성 VBScript 코드

그다음 WinDefend 서비스를 확인
복호화된 코드에서 Set exec = oShell.Exec("cmd /c sc query WinDefend")....즉 Windows Defender 서비스가 중지되어 있는지 확인하고 분기
Windows Defender가 중지 상태 일떄
%localappdata% 에 user.txt 를 다운로드
oShell.Run`으로 실행
sys.log 를 Google Drive에서 다운로드 하고  PowerShell에서 AES 복호화를 수행해 sys.dll 로 저장
그리고 나서 sys.log 를 삭제하고 rundll32 sys.dll,k 로 DLL export k를 실행
단순 다운로더가 아니라 암호화된 페이로드를 내려받아 로컬에서 복호화하고 DLL 로딩으로 실행하는 구조
추가 페이로드
다른 분기에서는 pipe.log 를 다운로드하고 AES 복호화로 pipe.zip 을 만들고서 압축 해제
IOC
스크립트 엔진: VBScript,WScript.Shell
명령 실행:cmd /c,curl,powershell,rundll32
윈도우 보안 윈도우 디펜더 우회, 현재 상태 확인:sc query WinDefend
다운로드 1:%TEMP%\password.txt
다운로드 2:%LOCALAPPDATA%\user.txt
암호화 파일:%LOCALAPPDATA%\sys.log,%LOCALAPPDATA%\pipe.log
복호화 결과:%LOCALAPPDATA%\sys.dll,%LOCALAPPDATA%\pipe.zip
실행 DLL:rundll32 sys.dll,k
AES Key:ftrgmjekglgawkxjynqrwxjvjsydxgjc
AES IV:rhmrpyihmziwkvln
Google Drive 파일 ID:
1u0g1doVUDc5VCeP653aze60SGlhs3efQ
1x9mkl4q9ZU8_hDPNF5w0Mu8ePxVWI5VJ
116azn_9bUov3mkSORbPk8_4zIVVNBHZn
1jqpw8UHpsY5ps3nKOfkyo2ql4hC23Mew

1.log 파일 내용
1.log 파일 내용

그리고 나서 다운로드 된 파일 중에 비밀번호는 kfgxl;Y859$#KG4fkdl^& 이라는 것을 확인할 수가 있습니다.
여기서 pipe.log 를 AES 를 풀면 1.log하고 2.log 를 분리 할수가 있는데 그냥 지난번 내용하고 같습니다.

분석

1.C2 주소 은닉 방식
스크립트 안에 실제 서버 주소가 평문으로 들어있지 않으며 먼저 Google Drive에서 serverenc.log 를 다운로드
hxxps://drive(.)google(.)com/uc?export=download`&id=1FA9TvcakCgfe(R)dLaejIJbeoFjuI9GB6R
다음 AES로 복호화해서 $serverurl 을 생성
실제 C2는 serverenc.log 안에 암호화되어 있음
2.지속성
레지스트리 Run 키에 등록
HKCU:\Software\Microsoft\Windows\CurrentVersion\Run
Name: WindowsSecurityCheck
WindowsSecurityCheck 로 위장
3.샌드박스,가상환경 회피
다음 문자열을 검사
Virtual
VMware
KVM
VirtualBox
VBOX
Xen
QEMU
Amazon
Google
innotek
Virtual Disk
Virtual HD
Google PersistentDisk
탐지되면 KillMe 함수로 자기 파일을 삭제하고 종료

PDF 파일 내용
PDF 파일 내용

4.수집 대상
Google Chrome
Edge
Naver Whale
Firefox
수집 파일:
Login Data
Bookmarks
Local State의 encrypted_key 복호화 결과
Firefox key4.db
Firefox key3.db
Firefox cookies.sqlite
Firefox logins.json
특히 Google Chrome,Microsoft Edge,Naver Whale(네이버 웨일)의 encrypted_key 를 DPAPI로 복호화해서 chrome_masterkey,edge_masterkey,whale_masterkey로 저장이건 브라우저 저장 비밀번호, 쿠키 복호화에 필요한 핵심 키
암호화폐 지갑 확장
다수의 지갑 확장 ID를 하드코딩 탈취
MetaMask
Trust Wallet
TronLink
Exodus
Binance
OKX
Phantom
Keplr
Ton
Rabby
Ronin
UniSat
Argent
Petra
Sui
Coinbase
Magic Eden
Xverse
Backpack
Cosmos
Bybit
Google Chrome 계열 브라우저의 Local Extension Settings 와 IndexedDB를 수색
지갑 시드,세션,키스토어를 노린 전형적인 암호화폐 탈취 목적
메신저
Telegram
Discord
Discord의 encrypted_key 도 DPAPI로 풀어서 discord_key 로 저장
인증서
NPKI.zip,GPKI.zip 으로 압축
공동인증서,공공기관 인증서 탈취 목적
파일 목록 검색
다음 확장자와 키워드를 전체 드라이브에서 검색
.txt .doc .csv .docx .xls .xlsx .pdf .hwp .hwpx
.jpg .jpeg .png .rar .zip .alz .eml .ldb .log .dat
키워드
wallet
UTC--
blockchain
keystore
privatekey
metamask
phrase
ledger
myether
dcent
파일 자체를 바로 다 훔치는 게 아니라 먼저 FileList.txt 를 만들고 lst.dat 로 압축 및 위장해서 업로드
이후 C2에서 특정 파일을 지정해 재탈취
5.업로드 방식
업로드 전에 파일을 XOR 0xFE 로 암호화
업로드는 multipart/form-data 로 이루어지고 5MB 단위로 나누는것이 특징
즉 네트워크에서 평문 파일명이 일부 보일 수 있지만, 파일 본문은 XOR 처리되어 전송
6.백도어 기능
Work 함수는 무한 루프
5분마다 C2를 확인
$serverurl$id/appkey:추가 DLL 로더 실행
$serverurl$id/rd:C2가 지정한 파일/폴더 읽어서 업로드
$serverurl$id/wr:C2에서 파일 다운로드 후 지정 경로에 저장
$serverurl$id/cm:C2 명령을 받아 Invoke-Expression 으로 실행
Invoke-Expression $content 가 있으므로 완전한 원격 명령 실행 백도어
7.추가 DLL 로더
GetAppKey 함수에서 Google Drive의 추가 페이로드를 받음
IOC
Registry Persistence:
HKCU\Software\Microsoft\Windows\CurrentVersion\Run\WindowsSecurityCheck
Google Drive
hxxps://drive(.)google(.)com/uc?export=download&id=1FA9TvcakCgfeRd(L)aejIJbeoFjuI9GB6R
hxxps://drive(.)google(.)com/uc?export=download&id=15Xkvt3TwCQJERcUHSUan(d)CigMVVxsFqr
AES Key
ftrgmjekglgawkxjynqrwxjvjsydxgjc
AES IV
rhmrpyihmziwkvln
2.log 분석
키보드 입력+클립보드+현재 활성 창 제목을 수집해서 k.log에 저장하는 키로거 모듈
저장 위치
%TEMP%\{PC UUID}\k.log
수집 대상
키 입력:GetAsyncKeyState 로 8~254 가상키를 10ms마다 감시
클립보드:Get-Clipboard -Raw로 복사된 문자열 수집
활성 창 제목:GetForegroundWindow+GetWindowText로 현재 창 이름 기록
특수키는 다음 방식을 따름
{BSPACE}
{TAB}
{ENTER}
{SHIFT}
{SHIFT_U}
{CTRL}
{ALT}
{ESC}
{LEFT}
{RIGHT}
{DEL}
{F1}~{F12}
창 제목은 키 입력이 발생할 때마다 확인 이전 창 제목과 다르면 로그에 추가
그래서 공격자는 어떤 프로그램,웹사이트에서 어떤 키를 입력했는지 알 수 있음

국세청 사칭 PDF 내용
국세청 사칭 PDF 내용

저장 방식
메모리 버퍼 $strbuf 에 계속 쌓다가 30초마다 k.log 에 추가 저장
$storePath\k.log 를 주기적으로 업로드 키로그도 C2로 전송되는 구조
김수키(Kimsiky) 동무 이렇게 열성적으로 미제 승냥이 군홧발 밑에서 신음하는 남조선 인민들의 가상화폐(암호화폐) 및 브라우저 정보 및 개인정보를 털고자 노력하는 김수키(Kimsiky) 동무의 당에 대한 충성심과 불타는 열정 참으로 감동적이오.
근데 김수키 동무 개고생 했소...(無馱骨 だったな)
다 분석했소… 어떤 뿐 말처럼 인용 해서 이것 분석 하시는 분들은 모멸감을 엄청 느겼을듯

공유하기

facebook twitter kakaoTalk kakaostory naver band