인증서 디코딩 착각: Blank Grabber Stealer가 로더를 숨기는 방법
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
BlankGrabber는 배치 스크립트 로더로 시작하는 파이썬 기반 정보 탈취기로, Rust로 컴파일된 스테이저를 인증서 파일로 위장하여 ‘디코딩’합니다. 스테이저는 샌드박스 및 VM 점검을 수행하고, 내장 페이로드를 해독하며, XWorm 클라이언트와 PyInstaller로 패키징된 스틸러를 포함한 여러 악성 구성 요소를 드롭합니다. 데이터 유출은 Telegram 봇 API와 IP 조회 엔드포인트 같은 공용 웹 서비스를 이용하여 정상 트래픽에 섞입니다. 이 악성코드는 또한 시스템 설정을 조작하고, 보안 사이트에 대한 접근을 차단하며, 지속성을 강화하기 위해 UAC 우회를 시도합니다.
조사
Splunk 위협 연구팀은 gofile.io를 통해 전달된 초기 로더, payload 디코딩을 위한 certutil.exe의 사용 및 Rust 스테이저의 반분석 논리를 분석하였습니다. 그들은 AES-GCM/CTR 해독 흐름을 역설계하고, 내장된 ZIP 아카이브를 추출하여 결과적 페이로드 세트를 매핑했습니다. 행동 테스트 결과 광범위한 호스트 발견, 웹캠 캡처, 클립보드 하베스팅, 호스트 키 및 기타 민감한 아티팩트의 절도가 이루어졌습니다.
완화
의심스러운 certutil.exe 사용, Windows Defender 설정을 변경하는 PowerShell 명령어, 비인가된 hosts 파일 수정에 대해 모니터링하십시오. 비표준 경로에서의 WinRAR/rar.exe 실행 및 Telegram API 또는 알려진 IP 조회 서비스에 대한 DNS 조회에 대해 경고를 설정하십시오. 알려진 악성 파일명을 차단하고, 실패사인된 PyInstaller로 번들된 파이썬 바이너리의 실행을 애플리케이션 제어 정책을 통해 제한하십시오.
대응
지표가 감지되면 시스템을 격리하고, 휘발성 증거를 보존하며, 포렌식 검토를 위한 %TEMP% 디렉토리를 캡처하십시오. 악성 예약작업 또는 레지스트리 실행 항목을 제거하고, hosts 파일 수정을 되돌리며, Windows Defender 예외사항을 초기화하십시오. 잠재적으로 노출된 브라우저 자격 증명 및 암호화 지갑 데이터에 대해 전체 자격 증명 초기화를 수행하십시오.
"그래프 TB %% 클래스 정의 classDef 기술 채우기:#e6f7ff classDef 연산자 채우기:#ffcc66 classDef 데이터 채우기:#d9ead3 %% 노드 – 기술 init_exec["<b>기술</b> – T1059.003: Windows 명령 셸<br/><b>설명</b>: 배치 스크립트가 certutil을 실행하여 내장된 Rust 스테이저를 디코딩합니다"] class init_exec 기술 evasion_vm["<b>기술</b> – T1497: 가상화/샌드박스 회피<br/><b>설명</b>: 드라이버, 사용자 이름 및 UUID를 확인하여 분석 환경을 감지합니다"] class evasion_vm 기술 obfuscation["<b>기술</b> – T1027: 모호화된 파일 또는 정보<br/><b>설명</b>: Rust 실행 파일이 인증서 파일로 위장된 것입니다"] class obfuscation 기술 decode["<b>기술</b> – T1140: 파일 또는 정보의 암호 해독/디코딩<br/><b>설명</b>: 암호화된 페이로드(blank.aes)의 AES-CTR/GCM 해독"] class decode 기술 load_stager["<b>기술</b> – T1105: 도구 전송<br/><b>설명</b>: 무작위로 이름이 지정된 실행 파일을 %TEMP%에 드롭하고 실행합니다"] class load_stager 기술 pers_startup["<b>기술</b> – T1037.005: 부트 또는 로그인 초기화 스크립트 (시작 폴더)"] class pers_startup 기술 elev_uac["<b>기술</b> – T1548.002: 권한 상승 제어 메커니즘 악용 (레지스트리 UAC 우회)"] class elev_uac 기술 impair_def["<b>기술</b> – T1562.004: 방어 무력화 (Windows Defender 비활성화, 예외 추가)"] class impair_def 기술 hide_hosts["<b>기술</b> – T1564.012: 아티팩트 숨기기 (보안 사이트 차단을 위한 hosts 파일 수정)"] class hide_hosts 기술 data_collection["<b>기술</b> – T1082: 시스템 정보 발견 및 관련 수집"] class data_collection 데이터 sysinfo["<b>기술</b> – T1082: 시스템 정보 발견"] class sysinfo 기술 browser_info["<b>기술</b> – T1217: 브라우저 정보 발견"] class browser_info 기술 clipboard["<b>기술</b> – T1115: 클립보드 데이터"] class clipboard 기술 video_capture["<b>기술</b> – T1125: 비디오 캡처"] class video_capture 기술 wifi_passwords["<b>기술</b> – T1016: 시스템 네트워크 구성 발견 (Wi‑Fi 비밀번호)"] class wifi_passwords 기술 product_key["<b>기술</b> – T1012: 레지스트리 조회 (Windows 제품 키)"] class product_key 기술 removable_media["<b>기술</b> – T1025: 이동식 미디어에서 데이터 수집"] class removable_media 기술 wmi_queries["<b>기술</b> – T1047: Windows 관리 도구 쿼리 (시스템 쿼리)"] class wmi_queries 기술 archive_data["<b>기술</b> – T1560.001: 수집된 데이터 아카이브 (RAR 유틸리티)"] class archive_data 기술 exfil_telegram["<b>기술</b> – T1041: C2 채널을 통한 데이터 유출 (Telegram 봇 API)"] class exfil_telegram 기술 exfil_public["<b>기술</b> – T1048: 대체 프로토콜을 통한 데이터 유출 (공공 파일 공유 서비스)"] class exfil_public 기술 self_delete["<b>기술</b> – T1070: 지표 제거 (데이터 유출 후 자체 삭제)"] class self_delete 기술 %% 흐름 연결 init_exec –>|leads_to| evasion_vm evasion_vm –>|leads_to| obfuscation obfuscation –>|leads_to| decode decode –>|leads_to| load_stager load_stager –>|enables| pers_startup load_stager –>|enables| elev_uac load_stager –>|enables| impair_def load_stager –>|enables| hide_hosts load_stager –>|starts| data_collection data_collection –>|includes| sysinfo data_collection –>|includes| browser_info data_collection –>|includes| clipboard data_collection –>|includes| video_capture data_collection –>|includes| wifi_passwords data_collection –>|includes| product_key data_collection –>|includes| removable_media data_collection –>|includes| wmi_queries data_collection –>|leads_to| archive_data archive_data –>|uses| exfil_telegram archive_data –>|uses| exfil_public exfil_telegram –>|followed_by| self_delete exfil_public –>|followed_by| self_delete "
공격 흐름
탐지
권한 상승 (FodHelper를 통한 UAC 우회) (커맨드라인 통해)
보기
잠재적 지속성 지점 [ASEPs – 소프트웨어/NTUSER 하이브] (커맨드라인 통해)
보기
제3자 서비스/도구를 통한 잠재적 데이터 침입/유출/C2 (프록시 통해)
보기
잠재적 데이터 캡처해 임시 폴더에 저장 (파일 이벤트 통해)
보기
잠재적 시스템 열거 (커맨드라인 통해)
보기
환경 경로 변경 (레지스트리 이벤트 통해)
보기
대기 실행을 위한 PING 사용 가능성 (커맨드라인 통해)
보기
Ms-settings 레지스트리 키에 대한 의심스러운 작업 (커맨드라인 통해)
보기
Certutil을 사용한 데이터 인코딩 및 인증 작업 (커맨드라인 통해)
보기
Wi-Fi 비밀번호 발견 가능성 (커맨드라인 통해)
보기
명령줄 인수에 환경 변수 사용 (커맨드라인 통해)
보기
제3자 서비스/도구를 통한 잠재적 데이터 침입/유출/C2 (DNS 통해)
보기
잠재적 시스템 네트워크 구성 발견 (커맨드라인 통해)
보기
잠재적 안티바이러스 또는 방화벽 소프트웨어 열거 (프로세스 생성 통해)
보기
Windows Defender 설정 변경 의심스러운 경우 (PowerShell 통해)
보기
Windows Defender 실시간 모니터링 비활성화 (PowerShell 통해)
보기
자동 시작 위치에서 의심스러운 바이너리/스크립트 (파일 이벤트 통해)
보기
IP 조회 도메인 통신 시도 가능성 (DNS 통해)
보기
Windows Defender 실시간 모니터링 비활성화 및 다른 설정 변경 (커맨드라인 통해)
보기
IOC(HashSha256)로 감지: 인증서 디코딩 환상: Blank Grabber 스틸러가 로더를 숨기는 방법
보기
BlankGrabber C2 통신 DNS 쿼리 통한 탐지 [Windows Sysmon]
보기
BlankGrabber PowerShell 활동 탐지 [Windows PowerShell]
보기
시뮬레이션 실행
전제 조건: 텔레메트리 및 기초 프리플라이트 체크가 통과해야 합니다.
이유: 이 섹션은 탐지 규칙을 트리거하기 위해 설계된 적 대 기법(TTP)의 정확한 실행을 설명합니다. 명령어 및 내러티브는 반드시 확인된 TTP를 직접 반영하고 탐지 로직에 의해 예상되는 정확한 텔레메트리를 생성해야 합니다.
-
공격 내러티브 및 명령:
BlankGrabber 스틸러로 엔드포인트가 손상된 적대자는 C2 및 정찰을 위해 악성 코드가 사용하는 세 가지 별도 서비스에 DNS 쿼리를 발행합니다:- Telegram API 도메인 텔레그램 봇을 통해 명령을 가져오는데 사용됩니다.
Resolve-DnsName -Name api.telegram.org -Type A - 공용 IP 체크 서비스 피해자의 외부 IP 주소를 나중에 유출하기 위해 획득합니다.
Resolve-DnsName -Name api.ipify.org -Type A - 악용된 파일 공유 서비스 – 소량의 인코딩된 데이터 청크를 하위 도메인을 통해 보냅니다
pastebin.com.Resolve-DnsName -Name maliciouspayload.pastebin.com -Type A
각 통화는 PowerShell의 기본
Resolve-DnsName를 사용하여 지역 호스트에서 DNS 클라이언트 로그가 생성되도록 합니다. 이 세 가지 쿼리는 Sigma 규칙의 세 가지selection_블록에 직접 연결되어 일치를 보장합니다. - Telegram API 도메인 텔레그램 봇을 통해 명령을 가져오는데 사용됩니다.
-
회귀 테스트 스크립트:
# BlankGrabber DNS C2 시뮬레이션 - 탐지 규칙을 트리거합니다 $domains = @( "api.telegram.org", "api.ipify.org", "maliciouspayload.pastebin.com" ) foreach ($d in $domains) { Write-Host "쿼리 중 $d ..." try { Resolve-DnsName -Name $d -Type A -ErrorAction Stop | Out-Null Write-Host "✅ $d 쿼리 완료" } catch { Write-Warning "❌ 쿼리 실패 $d : $_" } Start-Sleep -Seconds 2 # 현실적인 트래픽을 모방하기 위한 약간의 지연 } -
정리 명령어:
# Resolve-DnsName으로 생성된 지속적인 아티팩트는 없습니다. # DNS 캐시를 지워 모든 잔류 항목을 제거합니다. ipconfig /flushdns Write-Host "DNS 캐시가 지워졌습니다."