1. 개요
○ 온라인 광고를 통해 사용자를 가짜 CAPTCHA* 페이지로 유도하여 악성코드를 배포하는 fakeCAPTCHA 멀버타이징 캠페인 관련 악성 파일을 확보하여 분석
*CAPTCHA : 접속한 사용자가 봇인지 사람인지 구분하기 위한 테스트 페이지
○ 정상 페이지와 유사하게 제작된 가짜 페이지는 인증을 가장하여 사용자가 직접 키보드 단축키를 사용해 악성 명령어를 실행시키도록 유도
○ AutoIt으로 작성된 로더는 최종 악성코드 LummaC2* 인포스틸러를 파일리스 방식으로 실행
*LummaC2 : Malware-as-a-Service로 다크웹에서 판매되고 있는 정보 탈취형 악성코드
•
시스템 내의 브라우저, 메신저, 파일 및 비밀번호 관리, 원격 접속 프로그램 관련 파일에서 사용자 정보를 추출하여 탈취
[그림 1] 공격 흐름도
2. 대응방안
○ 멀버타이징에 흔히 사용되는 무료, 크랙, 할인 관련 키워드의 광고 클릭 자제
○ 캡챠 페이지에서 키보드를 사용하는 행위를 요구하는 경우 신중히 확인 후 진행
3. 악성코드 상세분석
3.1 피싱 캡챠 페이지 분석
○ 분석한 페이지는 hCaptcha 사의 캡챠 페이지로 위장한 가짜 페이지로 실제 캡챠 페이지와 매우 유사한 형태로 제작
[그림 2] 가짜 페이지
[그림 3] 정상 페이지
○ 페이지 내부 코드를 확인한 결과, hCaptcha 사의 API를 활용한 것은 아닌 것으로 분석
•
hCaptcha 사의 로고와 간단한 함수를 사용하여 정상 캡챠 페이지와 유사하게 동작하도록 제작
[그림 4] hCaptcha 사의 로고를 사용하는 코드
○ 체크 박스 클릭 시 사용자가 직접 [표 1]의 단계를 따라 사용자가 직접 악성 명령어를 실행하도록 유도
단계 | 키보드 | 행위 |
1 | Win+R | 실행 창 오픈 |
2 | Ctrl+V | 클립보드 내에 악성 명령어를 실행 창에 붙여넣기 |
3 | Enter | 악성 명령어 실행 |
[표 1] 피싱 페이지가 유도하는 행위
[그림 5] 악성 명령어 실행 유도
○ HTML 코드에서 pennicle.txt를 다운로드 및 실행하는 악성 파워셀 명령어와 해당 명령어를 클립보드에 주입하는 스크립트가 확인
[그림 6] 악성 파워셀 명령어 클립보드 주입 코드
단계 | 행위 |
1 | C2에서 pennicle.txt 파일을 다운로드
(https://storageinstance.oss-ap-southeast-1.aliyuncs[.]com/link/process/pennicle.txt) |
2 | 다운로드한 pennicle.txt를 실행 |
[표 2] 클립보드에 주입된 악성 파워셀 명령어 동작 순서
3.2 pennicle.txt 분석 – 다운로더
○ 다운로드한 pennicle.txt 내부에서는 [표 3]의 동작을 수행하는 파워셀 명령어로 확인
•
zip을 다운로드 후 압축 해제 및 창을 숨긴 상태로 실행
[그림 7] pennicle.txt 내부 파워셀 명령어
단계 | 행위 |
1 | APPDATA\Extracted3 폴더 존재 여부 확인 |
2 | APPDATA\Extracted3 폴더 생성 |
3 | C2에서 SolPen.zip을 다운로드하여 APPDATA\pkg3.zip로 저장
(https://storageinstance.oss-ap-southeast-1.aliyuncs[.]com/link/process/SolPen.zip) |
4 | APPDATA\pkg3.zip 파일을 %APPDATA%\Extracted3 폴더에 압축 해제 후 삭제 |
5 | SolPen.exe를 창을 숨긴 상태로 실행 |
[표 3] pennicle.txt 내의 파워셀 명령어 동작 순서
[그림 8] 압축 해제된 SolPen.exe
3.3 SolPen.exe 분석 – 악성코드 로더 관련 파일 드롭
○ SolPen.exe의 파일은 NSIS(Nullsoft Scriptable Install System)* 설치 파일로 확인
*NSIS: 소프트웨어 설치, 제거 등의 작업을 수행할 수 있는 설치 프로그램을 만들 수 있는 도구
•
파일 배포 디렉토리 지정 및 레지스트리 설정 등을 지원하여 공격자들이 악성코드 배포 시 악용
[그림 9] NSIS 설치 파일로 확인된 SolPen.exe
○ 실행된 SolPen.exe는 [표 4]의 파일들을 시스템의 %TEMP% 디렉토리에 배포
•
Battle 파일 : 난독화된 cmd 명령어 스크립트
•
그 외 : Battle 파일이 악성 행위에 사용하는 데이터 파일
생성 파일 | ||||
Inventory | Reducing | Tits | Closely | Solution |
Suppose | Battle | Relationship | Playing | Kingdom |
[표 4] SolPen.exe가 생성하는 파일 목록
[그림 10] SolPen.exe의 파일 생성 로그 일부
○ cmd.exe를 실행하여 배포한 파일들 중 Battle 파일을 Battle.cmd라는 이름으로 복사 후 실행
[그림 11] cmd 명령어 실행 로그
3.4 Battle.cmd 분석 – 악성코드 로더 빌드
○ 가비지 문자열과 환경 변수를 사용해 난독화된 CMD 명령어 스크립트 파일
[그림 12] 난독화된 Battle.cmd 파일
○ 난독화 해제 후 분석한 결과, tasklist와 findstr 명령어를 사용하여 보안 관련 프로세스들이 존재하는지 확인하는 코드 발견
No | 검색 문자열 | 타겟 보안 프로세스 | 관련 보안 회사 |
1 | wrsa | wars.exe | Webroot |
2 | opssvc | opssvc.exe | Quick Heal |
3 | AvastUI | AvastUI.exe | Avast |
4 | AVGUI | AVGUI.exe | Avast |
5 | bdservicehost | bdservicehost.exe | Bitdefender |
6 | nsWscSvc | nsWscSvc.exe | Norton |
7 | ekrn | ekrn.exe | ESET |
8 | SophosHealth | SophosHealth.exe | Sophos |
[표 5] 관련 보안 프로그램 정보
[그림 13] 보안 관련 프로세스 검색 코드
○ 보안 프로그램 존재 여부에 따라 악성 파일명을 달리해, SolPen.exe가 배포한 파일들을 사용하여 %TEMP%\701961 폴더에 [표 7]의 파일들을 생성
•
프로세스와 파일명을 체크하는 탐지 기능을 회피하기 위한 것으로 추정
[그림 14] 파일명을 변경하는 코드
파일명
(보안 프로그램 X) | 파일명
(보안 프로그램 O) | 정보 | 사용되는 파일 |
Puts.com | AutoIt3.exe | AutoIt 스크립트 실행 프로그램 | Tits, Solution |
j | j.a3x | 악성 AutoIt 스크립트 | Relationship, Playing, Closely, Reducing, Inventory, Kingdom, Suppose |
[표 7] 보안 프로그램 여부에 따른 파일명 차이
[그림 15] 파일을 생성하는 코드
[그림 16] 생성된 파일들
○ 생성한 Puts.com(Autoit3.exe) 파일을 사용해, 악성 AutoIt 스크립트 j(j.a3x)를 실행
[그림 17] 악성 스크립트 실행 로그
3.5 j(j.a3x) 분석 – 최종 악성코드 실행
○ 암호화된 문자열과 다량의 While문, Switch문으로 난독화되어 있는 Autoit 스크립트
[그림 18] 난독화된 Autoit 스크립트
○ 난독화 해제 후 분석한 결과, 내부에는 분석을 방해하기 위한 안티 리버싱 코드 존재
확인된 안티 리버싱 | ||
GetTickCount 실행 시간 확인 | ntdll.dll 수동 로드 | SetErrorMode 샌드박스 확인 |
[표 8] 악성 스크립트에 적용된 안티 리버싱
[그림 19] 안티 리버싱 코드 일부
○ 악성 스크립트 j(j.a3x)를 삭제하여 파일 시스템에서 악성 행위 흔적을 제거
[그림 20] 악성 스크립트 j(j.a3x)를 삭제하는 코드
○ C2(QbeMCwQrsKPS[.]QbeMCwQrsKPS)의 응답 여부 확인 후 응답이 없다면 종료
•
공격자가 C2 응답 여부를 통해 악성코드의 실행을 제어 가능
[그림 21] C2 응답 여부를 확인하는 코드
○ 스크립트 내부에서 확인된 압축 및 암호화된 최종 악성코드 데이터 문자열
[그림 22] 압축 및 암호화된 최종 악성코드
○ 최종 악성코드는 [표 9]의 순서를 따라 압축 해제 및 복호화
단계 | 행위 |
1 | 복호화용 Shellcode를 가상 메모리에 로드 |
2 | 최종 악성코드 복호화용 KEY를 복호화 |
3 | 복호화된 Key를 사용해 압축된 최종 악성코드 복호화 |
4 | RtlDecompressFragment API를 사용해 최종 악성코드 압축 해제 |
[표 9] 최종 악성코드 복호화 및 압축 해제 순서
[그림 23] 최종 악성코드 압축 해제 및 복호화 코드
○ 복호화가 완료되면 시스템 프로세스인 explorer.exe에 최종 악성코드를 인젝션하여 파일리스 방식으로 실행하려고 시도
•
인젝션 실패 시 현재 프로세스인 com(AutoIt3.exe)에 가상 메모리를 할당하여 실행
[그림 24] 최종 악성코드 인젝션 함수
○ 인젝션 과정에서 최종 악성코드를 추출하였고 해당 파일 내의 난독화된 문자열을 확인한 결과, 최종 악성코드는 LummaC2* 인포스틸러로 분석됨
*LummaC2 : Malware-as-a-Service로 다크웹에서 판매되고 있는 정보 탈취형 악성코드
[그림 25] LummaC2 악성코드 관련 문자열
○ 최종 악성코드는 시스템 내의 파일들에 접근하여 [표 10]의 프로그램들과 관련된 사용자 데이터를 탈취
종류 | 프로그램명 |
브라우저 (18종) | Chrome, Opera, Edge, Brave, EpicPrivacy, Vivaldi, Maxthon, Iridium, AVG, QQBrowser, 360Browser, SuperBrowser, CentBrowser, Chedot, CocCoc, Firefox, Waterfox, Pale Moon |
비밀번호 관리 도구 (3종) | Bitwarden, NordPass, 1Password |
VPN & Cloud (5종) | OpenVPN Connect, NordVPN, gcloud, azure, aws |
원격 접속 도구 (2종) | UltraVNC, AnyDesk |
파일 관리 도구(12종) | FileZilla, GHISLER, 3D-FTP, SmartFTP, FTPGetter, FTPbox, FTPInfo, FTPRush, FTP Commander, Deluxe,
FTP Manager Lite, Auto FTP Manager |
메신저 (7종) | Telegram, The Bat!, Mailbird, eM Client, Thunderbird, Discord, PMAIL |
[표 10] 탈취 대상 프로그램명
[그림 26] 데이터 파일 접근 로그 일부
○ 로그에서 여러 C2 도메인으로 DNS 검색을 시도하는 것이 확인되었으나 현재는 모든 C2가 접근이 불가능한 상태
C2 도메인 | ||
https://battle-curbe[.]cyou/ | https://processhol[.]sbs/ | https://librari-night[.]sbs/ |
https://befall-sm0ker[.]sbs/ | https://p10tgrace[.]sbs/ | https://peepburry828[.]sbs/ |
https://owner-vacat10n[.]sbs/ | https://3xp3cts1aim[.]sbs/ | https://p3ar11fter[.]sbs/ |
[표 8] DNS Query를 시도한 도메인
[그림 27] DNS Query 실패 로그
4. IOC 정보
NO | Type | Data | Info |
1 | MD5 | 56b5ba0c22514be73f715832d8c2c9c7 | pennicle.txt |
2 | MD5 | 582bff9fd6592324173573056c09523c | SolPen.zip |
3 | MD5 | 3f743b632a0a52e5d8ba262c13134b17 | SolePen.exe (SolPen.zip) |
4 | MD5 | b4e6782b85bd29593dc52c87c0c00312 | j (j.a3x) |
5 | MD5 | b468e489f7478dd1ab553f2a8ac7dd9b | Battle (Battle.cmd) |
6 | MD5 | fa2e55cf1a770c71e719d461d4387eb9 | Closely (j 관련 데이터) |
7 | MD5 | dc2906aae8abf4e2e1541ed078112ada | Inventory (j 관련 데이터) |
8 | MD5 | 87deb0e74bc8fd2ae4ac39fad86f7544 | Kingdom (j 관련 데이터) |
9 | MD5 | 9847bfc360fdae334c6f1ca9c50be501 | Playing (j 관련 데이터) |
10 | MD5 | 3444cab11b6809cbe675b9f64828a65c | Reducing (j 관련 데이터) |
11 | MD5 | 93bf8c8b82622a4045265138bb4c51ae | Relationship (j 관련 데이터) |
12 | MD5 | 81a6d18b69f315fe47286a6d8c270a05 | Suppose (j 관련 데이터) |
13 | MD5 | 663fd2c0ede6b605cf51cdbf708d064b | Solution (Puts.com 관련 데이터) |
14 | MD5 | 57d598bb11c33379fe385dff81c08519 | Tits (Puts.com 관련 데이터) |
15 | C2 | https://storageinstance.oss-ap-southeast-1.aliyuncs[.]com/link/process/pennicle.txt | pennicle.txt 다운로드 |
16 | C2 | https://storageinstance.oss-ap-southeast-1.aliyuncs[.]com/link/process/SolPen.zip | SolPen.zip 다운로드 |
17 | C2 | https://battle-curbe[.]cyou/ | DNS Query 시도 |
18 | C2 | https://befall-sm0ker[.]sbs/ | DNS Query 시도 |
19 | C2 | https://owner-vacat10n[.]sbs/ | DNS Query 시도 |
20 | C2 | https://processhol[.]sbs/ | DNS Query 시도 |
21 | C2 | https://p10tgrace[.]sbs/ | DNS Query 시도 |
22 | C2 | https://3xp3cts1aim[.]sbs/ | DNS Query 시도 |
23 | C2 | https://librari-night[.]sbs/ | DNS Query 시도 |
24 | C2 | https://peepburry828[.]sbs/ | DNS Query 시도 |
25 | C2 | https://p3ar11fter[.]sbs/ | DNS Query 시도 |
26 | C2 | QbeMCwQrsKPS[.]QbeMCwQrsKPS | PING 요청 |






























