저번 블로그는 Oski Stealer를 분석해 보았는데 다른 Stealer들도 비슷하게 작동하는가~라는 생각이 들어서 이번에는 다른 Stealer를 분석하고자 하고 오늘 분석할 Stealer는 너구리... RacoonStealer입니다.
bleepingcomputer 뉴스에 따르면 우-러 전쟁에서 사망한 개발자때문에 RacoonStealer는 운영을 잠깐 종료했다가 이제 새로운 버전을 개발했다고 합니다.
샘플 다운로드 --> https://bazaar.abuse.ch/sample/022432f770bf0e7c5260100fcde2ec7c49f68716751fd7d8b9e113bf06167e03/
RacoonStealer도 Oski Stealer처럼 Base64하고 RC4 encryption을 사용하지만 LoadLibrary로 로딩되는 DLL들하고 GetProcAddress로 로딩되는 function들은 암호화되지 않으나 C2 통신을 위한 string들은 암호화되어 있습니다.
String decryption을 위한 RC4 key는 두 개가 있는데 하나는 일반 string들을 위한 key이고 다른 key는 C2서버의 key입니다.
일반 String들은 "edinayarossiya"라는 RC4 key 암호화되어 있고 cyberchef로 쉽게 decrypt할 수 있습니다.
"59c9737264c0b3209d9193b8ded6c127"인 key로는 C2 서버 아이피 주소를 받을 수 있습니다 --> hxxp://51[.]195.166[.]184/
그다음은 RacoonStealer가 이미 작동 중인지를 확인합니다. 그렇지 않은 경우에는 "8724643052" 라는 mutex를 만듭니다.
감염된 시스템의 LocalName을 확인하는 체크가 있다는 것을 확인할 수 있는데 "ru"라는 string은 아마 russian 혹은 russia라는 뜻일 것입니다. 하지만 "ru" string이 있든 없든 악성코드의 흐름이 달라지지 않습니다.
OpenProcess의 API로 현재 process를 열어 GetTokenInformation으로 그 process에게 무슨 권한이 있는지 확인합니다. 그 function의 결과를 "S-1-5-18"인 Security Identifier와 비교하는 것이 보이는데 S-1-5-18는 NT Authority\System입니다.
그 이후는 CreateToolhelp32Snapshot와 Process32First와 Process32First 시스템의 Process들을 열거하는 것이 확인되지만 이 기능도 악성코드 흐름에 별 영향을 주지 않습니다.
C2 서버에 연결하기 전에 Software\\Microsoft\Cryptography라는 Registry Key로 악성코드는 현 시스템의 machineguid를 받고 GetUserNameW라는 API로 유저 이름을 받습니다.
너구리가 C2 서버에 연결하기 전에 machineID하고 유저 이름을 concat하는 것이 보입니다.
Concat을 하고 나서 그 정보를 POST request로 통신서버에게 보냅니다.
너구리도 정보 탈취 악성코드이므로 Oski처럼 정보를 불러올 수 있는 .dll들이 필요합니다. 통신 서버에 연결하여 InternetReadFile로 그 .dll들을 받습니다.
sqlite3.dll, mozglue.dll, nss3.dll, msvcp140.dll, nssdbm3.dll, freebl3.dll, softokn3.dll
정보를 탈취하기 전에 RacoonStealer는 먼저 감염된 시스템에 대한 정보를 열거합니다.
User CID
Timezone
Windows Currentversion
System Architecture
CPU Information
RAM Information
Display Information
Installed Software
위 정보도 역시 C2서버에게 보내질 것입니다.
탈취를 위한 sqlite 기능들의 initialization이 보입니다.
sqlite_prepare_v2
sqlite3_open16
sqlite3_finalize
sqlite3_close
sqlite3_step
sqlite3_column_text16
sqlite3_column_blob
너구리는 sqlite3.dll를 활용해서, 신용카드 정보오와 쿠키들과 브라우저들의 비밀번호들을 탈취하고자 합니다.
SELECT origin_url, username_value, password_value FROM logins
SELECT host_key, path, is_secure , expires_utc, name, encrypted_value FROM cookies
SELECT name, value FROM autofill
SELECT name_on_card, card_number_encrypted, expiration_month, expiration_year FROM credit_cards
모든 탈취 function들의 흐름이 매우 비슷하므로 (탈취 --> C2 서버 전송) 스크린 캡처를 올리지 않겠습니다.
nss3.dll로 정보를 탈취하는 흐름도 역시 비슷합니다.
SELECT host, path, isSecure, expiry, name, value FROM moz_cookies
SELECT fieldname, value FROM moz_formhistory
마찬가지로 악성코드는 wallets를 찾을 때도 먼저 pattern을 정해서 그 pattern에 맞는 파일을 FindFirstFileW하고 FindNextFileW로 찾아내고 통신서버에게 보냅니다. "wallet.dat"를 찾아내고자 하는 function도 있는데 밑에 있는 사진하고 똑같다고 봐도 좋습니다.
너구리에게도 Grabber 기능도 있으며 ".lnk"인 파일들을 찾아내고자 하는 것 같습니다... 그 이유는...?
마지막으로는 RacoonStealer는 Telegram에 대한 데이터도 탈취하고자 합니다.
GetDC, CreateCompatibleDC, CreateCompatibleBitmap
너구리에게 Loader 기능도 있습니다. 통신서버에 연결해서 공격자가 공격의 다음 "단계"를 감염된 시스템에 올릴 수 있습니다.
너구리가 Oski Stealer하고 매우 비슷하고 특히 정보를 탈취하는 방식 거의 똑같습니다.
하지만 너구리는 Anti Analysis 체크들이 아예 없습니다. Oski는 감염된 시스템의 언어 설정을 확인하면서 그중에 Kazakhsta, Russia, Ukraine, Belarus, Uzbekistan, Azerbaijan가 있으면 종료됩니다. 너구리는 Local Name를 확인하긴 하지만 그 결과를 가지고 아무것도 하지 않습니다. CreateToolhelp32Snapshot하고 프로세스의 권한을 열거하는 기능도 잘 활용하지 않는 것을 보니 RacoonStealer는 아직도 개발 중인 것 같습니다.
Rhadamanthys Stealer 악성코드 분석 Part 1 (1) | 2023.01.28 |
---|---|
암호화폐 지갑정보 브라우저 계정정보 탈취하는 Oski Stealer 악성코드 분석 (0) | 2022.07.01 |