오늘은 다크웹하고 러시아 포럼들에 판매되는 Oski Stealer를 분석하겠습니다.
Oski Stealer는 피해자의 Crypto Wallet (암호화폐 지갑)하고 브라우저 계정 정보를 탈취합니다. 그중에 Cookies하고 신용카드에 대한 정보가 하나입니다.
본 파일은 여기서 확인하실 수 있습니다.
https://www.virustotal.com/gui/file/aa33731aa48e2ea6d1eaab7c425f9001182c0e73e0226eb01145d6b78d7cb9eb
샘플은 packer를 사용하는데 unpacme라는 홈페이지로 쉽게 unpac할 수 있습니다.
Unpac된 샘플 hash는:fef1b5c7c365e85c0d0cfb58674844bd12acfc5298f9ffc5722b832fc9a542d7
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을 받을 수 있습니다.
Oski는 피해자의 언어 설정을 확인하는데 Kazakhsta, Russia, Ukraine, Belarus, Uzbekistan, Azerbaijan 그중에 하나면은 악성코드가 종료됩니다. GetUserDefaultLanguage를 하고 시스템의 언어 ID를 확인합니다.
Hal9TH하고 JohnDoe이라는 string들이 보이는데 Windows Defender가 사용하는 이름들입니다.
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 서버에게 탈취한 정보를 보내는 것일 겁니다.
웹브라우저, 암호화폐 지갑, 피해 시스템에 대한 모든 정보를 다 탈취한 후에 C2 서버에서 다운로드했던 파일들이 삭제됩니다.
아울러 Oski는 cmd.exe를 불러오고 ShellExecuteA라는 function으로 자기 자신의 process를 죽이는 것을 확인할 수 있습니다.
/c taskkill /pid %d & erase %s & RD /S /Q %s\\* & exit
Rhadamanthys Stealer 악성코드 분석 Part 1 (1) | 2023.01.28 |
---|---|
너구리가 도둑질한다: RacoonStealer 악성코드 분석 (0) | 2022.07.13 |