Raccoon Stealer v2(2.0) 악성코드 분석(2)
○ 컴퓨터 상세 정보 탈취
sstmnfo_문자열의 존재 유무를 확인한 후 다음과 같은 정보를 탈취한다.

No. | 대상 정보 | 사용한 API 및 레지스트리 키 |
1 | Locale 정보 | GetUserDefaultLCIE() |
2 | 표준 시간대 정보 | GetTimeZoneInformation() |
3 | 운영체제 정보 | HKLM\\Current Version 하위 키 |
4 | 아키텍쳐 정보 | GetSystemWow64Directory() |
5 | CPU 정보 | GetSystemInfo() |
6 | RAM 정보 | GlobalMemoryStatusEx() |
7 | DisPlay 크기 정보 | GetSystemMetircs() |
8 | 모니터 이름 정보 | EnumDisplayDevicedsW() |
9 | 설치된 프로그램 목록 | SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall |
탈취한 정보(computer_info)를 Internet_funI()의 인자로 하여 서버로 내보낸다.
Internet_fun()의 내부는 다음과 같다.
우선 연결하고자 하는 주소가 http로 시작하는지 확인한 후 http로 시작하지 않는다면 해당 함수를 종료한다.
http일 경우 80포트 https일 경우 443포트를 활용하도록 지정하고 Post 요청을 보낸다. Post 요청을 보낸 후에는 add_data(computer_info) 를 인자로 하고 HttpSendRequest()를 실행하여 서버로의 정보 탈취를 수행한다.
○ sqlite3.dll 로드 및 크롬 관련 정보 탈취
sqlite3.dll을 로드하고 로드에 성공하였다면 사용자 관련 크롬 데이터를 탈취하기 위한 google_data_search() 함수를 실행한다.
○ google_data_search - (1)
공유 폴더 경로를 획득한 후 실제 사용자 관련 Chrome 정보를 탈취하는 함수로 진입한다.
공유 폴더의 하위 경로들을 탐색하며 경로에 User Data가 존재하는지 확인한다. 해당 경로의 존재 유무를 검사하는 원인은 C:\\Users\\사용자명\\AppData\\Local\\Google\\Chrome\\User Data 에 사용자 관련 Chrome 정보가 존재하기 때문이다.
User Data 하위 디렉토리에 Local State 파일에 접근한다.
Local State 파일을 읽고 데이터를 복호화 할 encrypted_key와 크롬 버전 정보인 stats_version를 파싱한다.
User Data 하위 경로에 Login Data 문자열을 결합하여 C:\\Users\\사용자명\\AppData\\Local\\Google\\Chrome\\User Data\\Login Data 경로를 완성한다.
C:\\Users\\사용자명\\AppData\\LocalLow 하위 경로에 Login Data 데이터를 복사할 랜덤파일을 생성한다.
생성한 랜덤 파일에 Login Data를 복사하여 정보를 탈취한다.
sqlite3_open을 통해 데이터 베이스를 오픈하고 다음과 같은 SQL 명령오로 정보를 탈취한다.
데이터 베이스에 정보를 저장한 후 생성한 랜덤 파일을 삭제한다.
크롬과 관련된 모든 정보의 정보 탈취는 동일한 방식으로 이루어지며 탈취 정보 목록은 다음과 같다.
No. | 정보 | 사용되는 쿼리문 |
1 | Login Data | SELECT origin_url, username_value, password_value FROM logins |
2 | Network\\Cookies | SELECT host_key, path, is_secure , expires_utc, name, encrypted_value FROM cookies |
3 | Cookies | SELECT host_key, path, is_secure , expires_utc, name, encrypted_value FROM cookies |
4 | Web Data | SELECT name, value FROM autofill |
5 | Credit Card Data | SELECT name_on_card, card_number_encrypted, expiration_month, expiration_year FROM credit_cards |
○ nss3.dll 로드 및 FireFox 관련 정보 탈취
LoadLibraryW() 함수를 통해 nss3.dll을 로드하고 nss3.dll이 성공적으로 로드됐을 경우 API를 로드한다.
API 로드 과정이 정상적으로 이루어졌다면 FireFox 관련 정보를 탈취하는 함수(Roaming_data())로 진입한다.
Roaming_data() 함수의 내부는 다음과 같다.
이전에 획득한 공유폴더(Roaming)에 와일드카드 문자열을 추가한 후 하위 디렉토리를 탐색한다.
이후 디렉토리일 경우 해당 디렉토리가 Profiles 인지 검사한 후 Profiles일 경우 하위 디렉토리로 진입한다. Profiles 문자열을 검사하는 이유는 FireFox 정보가 FireFox\\Profiles 경로에 존재하기 때문이다.
탐색 대상 경로에 Profiles 문자열이 존재하지 않거나 Profiles 폴더에 접근했을 경우 탈취 대상 정보를 획득하는 함수로 진입한다.
탈취 대상 파일을 기존 경로에 결합한 후 랜덤 파일을 생성한다.
탈취 대상 파일을 생성한 랜덤 파일에 복사하고 SQL 쿼리문을 사용하여 탈취 대상 정보를 획득한다.
추가로 탈취되는 정보도 동일한 방법을 사용하며 탈취 대상 목록은 다음과 같다.
No. | 정보 | SQL 쿼리문 |
1 | cookies | SELECT host, path, isSecure, expiry, name, value FROM moz_cookies |
2 | formhistory | SELECT fieldname, value FROM moz_formhistory |
해당 과정 사이에 wlts_, grbr, tlgrm_, scrnht문자열을 검사하는 루틴이 존재하였으나 C&C 서버가 다운되어 정확한 분석은 하지 못하였다. 하지만, 문자열로 추측을 할 때 텔레그램 관련 정보 탈취, 지갑 주소 관련 정보 탈취와 같은 행위를 한다고 추측할 수 있다.
○ 암호 화폐 지갑의 자격 증명 정보 탈취
Roaming 디렉토리 내부에 wallet.dat 파일이 존재하는지 검사한다.
wallet.dat 파일이 존재할 경우 LocalLow 디렉토리 내 랜덤한 파일명을 가지는 파일을 생성한다. 이후 wallet.dat 파일의 데이터를 랜덤 파일에 복사한다.
논리드라이브 또한 wallet.dat 파일이 존재하는지 검사한 후 존재할 경우 wallet.dat 파일의 데이터를 복사(wallet_data_steal)한다.
wallet.dat 파일의 데이터가 존재하는 랜덤 파일의 데이터를 읽는다.
랜덤 파일의 데이터를 서버로 전송하여 wallet.dat 데이터를 탈취한다
○ 현재 화면 이미지 정보 탈취
비트맵 정보를 사용하여 현재 사용자가 사용하고 있는 화면 스크린샷을 탈취하기 위해 메모리 DC 객체를 생성하고 크기 및 해상도 정보를 수집한다.
이후 윈도우 화면 크기와 동일한 비트맵을 만들고 SelectObject() 를 사용하여 ho와 CompatibleBitamap_1 을 연결한다. 이후 비트맵을 복사한다.
비트맵 이미지를 저장할 랜덤 파일을 생성하고 랜덤 파일에 스크린샷 이미지를 탈취한다.
실제 랜덤 파일을 열어보았을 때 사용중이던 화면과 동일한 이미지가 탈취된 것을 확인할 수 있다.
○ 악성행위에 사용한 .dll 파일 자가 삭제
악성행위를 하기 위해 사용한 nss3.dll, sqlite3.dll 파일을 삭제한다. 이는 흔적을 최소화하기 위한 행동으로 추측된다.
MITRE ATT&CK Mapping
MITRE ATT&CK
Execute | Defencse Evasion | Credential Access | Discovery | Collection | Command and Control | Exfiltration |
Native API | Deobfuscate/Decode Files or Information | Steal Web Session Cookie | File and Directory Discovery | Automated Collection | Application Layer Protocol | Exfiltration Over C2 Channel |
Obfuscated Files or Information | Credentialsfrom Password Stores | Process Discovery | Data from Local System | Ingress Tool Transfer | ||
Process InjectionDynamic-link Library Injection | Query Registry | Screen Capture | ||||
Software Discovery | ||||||
System Information Discovery | ||||||
System TimeDiscovery |
오류, 잘못된 점 또는 궁금한 점이 있으시다면 댓글 남겨주세요❗
Uploaded by N2T