상세 컨텐츠

본문 제목

암호화폐 지갑정보 브라우저 계정정보 탈취하는 Oski Stealer 악성코드 분석

악성코드 Malware/Stealer

by 0xmh 2022. 7. 1. 18:10

본문

728x90

오늘은 다크웹하고 러시아 포럼들에 판매되는 Oski Stealer를 분석하겠습니다.

Oski Stealer는 피해자의 Crypto Wallet (암호화폐 지갑)하고 브라우저 계정 정보를 탈취합니다. 그중에 Cookies하고 신용카드에 대한 정보가 하나입니다.

본 파일은 여기서 확인하실 수 있습니다. 

https://www.virustotal.com/gui/file/aa33731aa48e2ea6d1eaab7c425f9001182c0e73e0226eb01145d6b78d7cb9eb

샘플은 packer를 사용하는데 unpacme라는 홈페이지로 쉽게 unpac할 수 있습니다.

 

Unpac된 샘플 hash는:fef1b5c7c365e85c0d0cfb58674844bd12acfc5298f9ffc5722b832fc9a542d7

 

 

String Encryption

1) Oski의 모든 strings하고 API function들이 Base64하고 RC4로 encrypted되어 있습니다. 분석을 시작하기 전에 decrypt해야 하나 매우 쉬우므로 금방 decrypt할 수 있습니다.

110151472500104935는 RC4의 key입니다.

 

2) 악성코드가 fs 레지스터를 불러오는 것이 보이는데 x86 경우에 그 레지스터는 Thread Information Block인데 0x30 offset는 Process Environment Block (PEB)를 가리킵니다. PEB는 현재 작동 중인 프로세스에 대한 정보를 가지고 있습니다. 0x0c라는 offset가 보이는데 PEB_LDR_Data를 가리키며 process의 DLL들에 대한 정보를 가지고 있습니다.

https://www.geoffchappell.com/studies/windows/km/ntoskrnl/inc/api/ntpsapi_x/peb_ldr_data.htm

위 홈페이지에 따르면 LDR_DATA_TABLE_ENTRY는 로딩된 DLL에 대한 정보를 받는데 0x18 offset에서는 DLL의 base address를 받을 수 있습니다. Oski는 위의 방법으로 kernel32.dll의 base address를 받습니다.

LoadLibrary하고 GetProcAddress로 악성코드는 원하는 function을 받을 수 있습니다.

 

Anti Analysis Check

Oski는 피해자의 언어 설정을 확인하는데 Kazakhsta, Russia, Ukraine, Belarus, Uzbekistan, Azerbaijan 그중에 하나면은 악성코드가 종료됩니다. GetUserDefaultLanguage를 하고 시스템의 언어 ID를 확인합니다.

Hal9TH하고 JohnDoe이라는 string들이 보이는데 Windows Defender가 사용하는 이름들입니다.

Information Stealing

C2 서버인 hxxp://sl9XA73g7u3EO07WT42n7f4vIn5fZH[.]biz에 연결하여 악성코드는 .dll 7개를 다운로드합니다.

softokn3.dll

sqlite3.dll

freebl3.dll

mozglue.dll

msvcp140.dll

nss3.dll

vcruntume140.dll

특히 sqlite3.dll는 나중에 정보들을 탈취하기 위한 중요한 .dll입니다. .dll들은 ProgramData 폴더에 저장됩니다.

 

Oski는 Windows Vault도 target합니다. 일단 감염된 머신에 대한 정보를 열거하고

vaultctli.dll를 활용하여 VaultOpen, VaultEnumerateItems, VaultGetItem, VaultCloseVault이라는 function들로 정보를 탈취합니다.

탈취된 정보들은 passwords.txt이라는 파일에 저장됩니다.

 

Oski는 대략 30개 브라우저들의 정보를 탈취하고자 합니다.

Opera
GoogleChrome 
Chromium 
Kometa
Amigo 
Torch 
Orbitum
ComodoDragon 
Nichrome 
Maxthon5 
Sputnik 
EPB 
Vivaldi 
COCO
UranBrowser 
QIPSurf 
CentBrowser
ElementsBrowser
TOR
CryptoTabBrowser 
Brave
MozillaFirefox 
PaleMoon 
waterfox
cyberfox 
BlackHawk 
icecat 
KMeleon 
Thunderbird

대부분 브라우저들의 정보를 sqlite3로 탈취하며 다음 sql query들을 사용합니다.

SELECT host, isHttpOnly, path, isSecure, expiry, name, v.lue FROM moz_cookies
SELECT origin_url, username_value, password_value FROM logins
SELECT HOST_KEY, is_httponly, path, is_secure, (expires_utc/1000000)-11644480800, name, encrypted_value from cookies
SELECT name_on_card, expiration_month, expiration_year, card_number_encrypted FROM credit_cards
SELECT fieldname, value FROM moz_formhistory
SELECT name, value FROM autofill

아울러 다음의 sqlite function도 dword에다 저장해놓습니다.

sqlite_open
sqlite_prepare_v2
sqlite_step
sqlite_column_text	
sqlite_finalize
sqlite_close
sqlite_column_bytes
sqlite_column_blob

다음 스크린 캡처는 Oski가 어떤 정보를 탈취하는지를 확인할 수 있습니다.

위에서 언급했던 sqlite function "open"으로 데이터 배이스를 열고 column_text, column_bytes, column_blob으로는 탈취가 가능합니다.

Outlook에 대한 정보는 Registry query로 받고 outlook.txt라는 폴더에 저장합니다.

웹브라우저의 정보를 받은 후에 다양한 암호화폐 지갑들의 정보를 탈취하고자 하는 것이 보입니다. "mw_steal_crypto"라는 function는 argument 3개 받아주는데 첫 번째는 암호화폐 이름, 두 번째 암호화폐의 폴더 이름, 3번째 그 암호화폐의 정보가 저장되어 있는 파일.

브라우저하고 암호화폐 지갑 정보를 다 받은 다음에 피해자의 시스템을 enumerate합니다.

악성코드가 모으는 정보는 다음과 같습니다.

System
Windows
Bit (64bit 아님 32)
User
ComputerName
SystemLanguage
MachineID
GUID
DomainName
Workgroup
KeyboardLanguage
Hardware
Processor
LogicalProcessors
Videocard
Display
RAM
Laptop
Time
Local
Zone
IP
Country
InstalledSoftware

GdipCreateBitmapFromHBITMAP으로 스크린 캡처를 찍는 기능도 있나 봅니다. 캡처하고 screenshot.jpg로 저장됩니다.

정보를 다 받은 다음에 C2서버에 연결하는 것이 보이는데 Post request이길래 아마 C2 서버에게 탈취한 정보를 보내는 것일 겁니다.

Clean up

웹브라우저, 암호화폐 지갑, 피해 시스템에 대한 모든 정보를 다 탈취한 후에 C2 서버에서 다운로드했던 파일들이 삭제됩니다.

아울러 Oski는 cmd.exe를 불러오고 ShellExecuteA라는 function으로 자기 자신의 process를 죽이는 것을 확인할 수 있습니다.

/c taskkill /pid %d & erase %s & RD /S /Q %s\\* & exit

관련글 더보기