SOC Prime Bias: 위험

30 1월 2026 19:58

APT 공격이 인도의 정부를 겨냥하다 – SHEETCREEP, FIREPOWER, MAILCREEP 활용 | 2부

Author Photo
Ruslan Mikhalov SOC Prime에서 위협 연구 책임자 linkedin icon 팔로우
APT 공격이 인도의 정부를 겨냥하다 – SHEETCREEP, FIREPOWER, MAILCREEP 활용 | 2부
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

보고서는 인도 정부 기관을 손상시키기 위해 맞춤형 백도어인 SHEETCREEP, FIREPOWER, MAILCREEP 세 가지를 배포한 Sheet Attack 작전을 다룹니다. 이 임플란트는 Google Sheets, Firebase Realtime Database, Microsoft Graph API와 같은 합법적인 클라우드 플랫폼을 명령 및 제어(C2)로 활용하여 정상적인 SaaS 트래픽에 녹아들도록 했습니다. 분석 결과 개발자가 코드 생산을 돕기 위해 생성형 AI를 사용하는 흔적도 확인되었습니다. 이 캠페인은 APT36의 파키스탄 기반 하위 그룹과 관련된 것으로 평가됩니다.

조사

ThreatLabz는 백도어의 동적 및 정적 분석을 수행하여 지속 방법, C2 워크플로우, 데이터 탈취 행동을 문서화했습니다. 팀은 또한 지원 인프라를 맵핑하고, 지역 및 User-Agent 기반 필터링을 관찰하며, AI 지원 소스 생성 가능성을 시사하는 코드 수준의 지표를 포착했습니다.

완화

의심스러운 PDF/LNK 전달 체인에 대한 레이어 감지 메커니즘을 구현하고, PowerShell 또는 VBS 실행을 시작하는 예약된 작업을 모니터링하세요. Google Sheets, Firebase, Microsoft Graph와 같은 C2로 일반적으로 남용되는 클라우드 서비스에 대한 엄격한 출력 제어와 이상 모니터링을 적용하세요. 알려진 페이로드에 대한 해시 기반 차단을 사용하고, 식별된 악성 도메인 및 IP 주소를 차단하세요.

응답

탐지될 경우, 엔드포인트를 격리하고, 숨겨진 cmd.exe와 PowerShell 활동을 종료하며, 관련 예약된 작업을 제거하고 백도어 바이너리를 삭제하세요. Google Sheets 기반 C2 로그와 Firebase 아티팩트를 보존하고 검토한 후 동일한 지표를 나타내는 다른 호스트를 환경에서 사냥하세요.

graph TB %% Class definitions classDef action fill:#99ccff classDef process fill:#ffdd99 classDef file fill:#ffcccc classDef data fill:#e6e6ff classDef protocol fill:#d9ead3 classDef technique fill:#ffd966 %% Nodes – Initial Access action_phishing[“<b>행동</b> – <b>T1204.001 사용자 실행: 악성 링크</b><br/>피해자가 PDF 내 악성 링크를 클릭함”] class action_phishing action file_phishing_pdf[“<b>파일</b> – <b>이름</b>: 피싱 PDF<br/><b>기법</b>: T1204.001”] class file_phishing_pdf file file_malicious_lnk[“<b>파일</b> – <b>이름</b>: 악성 LNK<br/><b>기법</b>: T1204.002 사용자 실행: 악성 파일”] class file_malicious_lnk file process_powershell[“<b>프로세스</b> – <b>이름</b>: PowerShell<br/><b>기법</b>: T1059.001 명령 및 스크립트 인터프리터”] class process_powershell process file_dotnet_assembly[“<b>파일</b> – <b>이름</b>: PNG로 위장된 .NET 어셈블리<br/><b>기법</b>: T1620 반사 코드 로딩, T1036.008 파일 유형 위장”] class file_dotnet_assembly file process_hidden_cmd[“<b>프로세스</b> – <b>이름</b>: 숨겨진 cmd.exe<br/><b>기법</b>: T1059.003 명령 셸”] class process_hidden_cmd process %% Nodes – Persistence action_persistence[“<b>행동</b> – 지속성 설정”] class action_persistence action task_scheduled[“<b>기법</b> – T1053 예약 작업”] class task_scheduled technique script_gservices[“<b>파일</b> – <b>이름</b>: GServices.vbs<br/><b>목적</b>: 반복 실행”] class script_gservices file %% Nodes – Command and Control action_c2[“<b>행동</b> – 명령 및 제어”] class action_c2 action data_google_sheets[“<b>데이터 저장소</b> – Google Sheets<br/><b>기법</b>: T1102.002 웹 서비스: 스프레드시트”] class data_google_sheets data protocol_https[“<b>프로토콜</b> – HTTPS<br/><b>기법</b>: T1071.001 웹 프로토콜”] class protocol_https protocol technique_dead_drop[“<b>기법</b> – T1102.001 데드 드롭 리졸버”] class technique_dead_drop technique backup_firebase[“<b>데이터 저장소</b> – Firebase URL<br/><b>대체</b>: C2 채널”] class backup_firebase data backup_gcs[“<b>데이터 저장소</b> – Google Cloud Storage<br/><b>대체</b>: C2 채널”] class backup_gcs data encryption_tripledes[“<b>기법</b> – T1027 난독화/암호화된 파일 또는 정보 (TripleDES)”] class encryption_tripledes technique encryption_channel[“<b>기법</b> – T1573 암호화 채널”] class encryption_channel technique %% Nodes – Discovery action_discovery[“<b>행동</b> – 정보 수집”] class action_discovery action command_whoami[“<b>명령</b> – whoami<br/><b>기법</b>: T1033 시스템 소유자/사용자 검색”] class command_whoami technique command_enum_domains[“<b>명령</b> – 도메인 계정 열거<br/><b>기법</b>: T1087.002 도메인 계정”] class command_enum_domains technique %% Nodes – Execution of Commands action_execution[“<b>행동</b> – 수신된 명령 실행”] class action_execution action %% Nodes – Cloud Account Creation cloud_account_creation[“<b>행동</b> – Google Cloud 계정 생성<br/><b>기법</b>: T1136.003 클라우드 계정”] class cloud_account_creation action %% Nodes – Defense Evasion action_defense_evasion[“<b>행동</b> – 방어 회피”] class action_defense_evasion action technique_hidden_fs[“<b>기법</b> – T1564.005 숨김 파일 및 디렉터리”] class technique_hidden_fs technique %% Connections – Flow action_phishing –>|전달| file_phishing_pdf file_phishing_pdf –>|링크 포함| file_malicious_lnk file_malicious_lnk –>|실행| process_powershell process_powershell –>|리플렉션 로드| file_dotnet_assembly file_dotnet_assembly –>|생성| process_hidden_cmd process_hidden_cmd –>|활성화| action_persistence action_persistence –>|생성| task_scheduled action_persistence –>|실행| script_gservices action_persistence –>|통신| action_c2 action_c2 –>|사용| data_google_sheets data_google_sheets –>|통해| protocol_https action_c2 –>|사용| technique_dead_drop action_c2 –>|대체| backup_firebase action_c2 –>|대체| backup_gcs action_c2 –>|암호화| encryption_tripledes action_c2 –>|설정| encryption_channel action_c2 –>|지시| action_discovery action_discovery –>|실행| command_whoami action_discovery –>|실행| command_enum_domains action_c2 –>|명령 수신| action_execution action_execution –>|PowerShell 실행| process_powershell action_execution –>|숨김 cmd 실행| process_hidden_cmd action_c2 –>|필요| cloud_account_creation cloud_account_creation –>|인프라 제공| data_google_sheets cloud_account_creation –>|인프라 제공| backup_firebase cloud_account_creation –>|인프라 제공| backup_gcs action_execution –>|사용| action_defense_evasion action_defense_evasion –>|적용| technique_hidden_fs

공격 흐름

탐지

PowerShell을 통한 다운로드 또는 업로드 (cmdline 경유)

SOC Prime 팀
2026년 1월 29일

Microsoft Graph API 도메인이 비정상적인 프로세스에 의해 해결됨 (dns_query 경유)

SOC Prime 팀
2026년 1월 29일

공용 사용자 프로필 내 의심스러운 파일 (file_event 경유)

SOC Prime 팀
2026년 1월 29일

의심스러운 GNU Wget 실행 시도 (cmdline 경유)

SOC Prime 팀
2026년 1월 29일

PowerShell에서 의심스러운 .NET 메서드 호출 (powershell 경유)

SOC Prime 팀
2026년 1월 29일

공용 사용자 프로필에서의 의심스러운 실행 (process_creation 경유)

SOC Prime 팀
2026년 1월 29일

제3자 서비스/도구를 통한 데이터 유출/침입/C2 가능성 (dns 경유)

SOC Prime 팀
2026년 1월 29일

아카이브에서 추출된 의심스러운 파일 (file_event 경유)

SOC Prime 팀
2026년 1월 29일

검출: APT 공격 – 인도 정부 타켓 SHEETCREEP, FIREPOWER, MAILCREEP 사용 | Part 2

SOC Prime AI 규칙
2026년 1월 29일

검출: APT 공격 – 인도 정부 타켓 SHEETCREEP, FIREPOWER, MAILCREEP 사용 | Part 2

SOC Prime AI 규칙
2026년 1월 29일

검출: APT 공격 – 인도 정부 타켓 SHEETCREEP, FIREPOWER, MAILCREEP 사용 | Part 2

SOC Prime AI 규칙
2026년 1월 29일

검출: APT 공격 – 인도 정부 타켓 SHEETCREEP, FIREPOWER, MAILCREEP 사용 | Part 2

SOC Prime AI 규칙
2026년 1월 29일

검출: APT 공격 – 인도 정부 타켓 SHEETCREEP, FIREPOWER, MAILCREEP 사용 | Part 2

SOC Prime AI 규칙
2026년 1월 29일

SHEETCREEP 및 FIREPOWER 백도어 배치에 대한 PowerShell 명령어 탐지 [Windows Powershell]

SOC Prime AI 규칙
2026년 1월 29일

SHEETCREEP 및 FIREPOWER 백도어 C2 통신 탐지 [Windows Network Connection]

SOC Prime AI 규칙
2026년 1월 29일

시뮬레이션 실행

전제 조건: Telemetry & Baseline Pre-flight Check가 통과해야 합니다.

이유: 이 섹션은 탐지 규칙을 유발하도록 설계된 적의 기술(탐지 보고서: TTP)의 구체적인 실행 단계를 설명합니다. 명령어와 설명은 식별된 TTP를 직접적으로 반영해야 하며, 탐지 논리가 기대하는 정확한 텔레메트리를 생성하는 것을 목표로 해야 합니다. 추상적이거나 관련이 없는 예시는 잘못된 진단으로 이어질 수 있습니다.

  • 공격 내러티브 및 명령어:

    1. 악성 PNG 준비:
      • 공격자는 PNG 파일( details.png)을 생성합니다. 이 파일은 실제로 컴파일된 .NET 어셈블리 바이트 스트림을 포함하고 있지만 정적 분석을 피하기 위해 바이트가 반전되어 있습니다.
    2. 숨겨진 모드로 PowerShell 실행하여 어셈블리 로드:
      • 공격자는 PowerShell을 실행합니다 -WindowStyle Hidden -Command 와 한 줄의 명령어로 반전된 바이트를 읽고, 올바른 순서로 복원하고, [System.Reflection.Assembly]::Load(),를 통해 어셈블리를 로드하며, 알려진 진입 지점을 호출합니다( Task10.Program::MB()).
    3. 대안 LNK 기반 파워-파이어 배치:
      • 제작된 .lnk 숏컷이 powershell.exe 을 ‘headless -e’로 실행하여 원격 PowerShell 백도어를 가져와 실행합니다. --headless -e 이 단계들은 Sigma 규칙이 찾는 문자열과 정확히 일치하며, 경보가 발생하도록 보장합니다.

    회귀 테스트 스크립트:

  • Regression Test Script:

    # -------------------------------------------------
    # SHEETCREEP 페이로드 시뮬레이션 - 정확한 명령 줄 재현
    # -------------------------------------------------
    
    # 1. 더미 .NET 어셈블리 생성(간단한 C# 헬로 월드) 및 컴파일
    $source = @"
    using System;
    public class Task10 {
        public static void MB() {
            Console.WriteLine("Payload executed");
        }
    }
    "@
    $tempDir = "$env:TEMPsheetcreep"
    New-Item -ItemType Directory -Force -Path $tempDir | Out-Null
    $csFile = Join-Path $tempDir "Task10.cs"
    $dllFile = Join-Path $tempDir "Task10.dll"
    $source | Set-Content -Path $csFile -Encoding UTF8
    
    # Compile using csc (assumes .NET Framework SDK installed)
    $cscPath = "$env:WINDIRMicrosoft.NETFramework64v4.0.30319csc.exe"
    & $cscPath /target:library /out:$dllFile $csFile
    
    # 2. Read the DLL bytes, reverse them, and write to a .png file
    $bytes = [IO.File]::ReadAllBytes($dllFile)
    $revBytes = $bytes[($bytes.Length-1)..0]
    $pngPath = Join-Path $tempDir "details.png"
    [IO.File]::WriteAllBytes($pngPath, $revBytes)
    
    # 3. Execute the exact malicious PowerShell command line (this will fire the rule)
    $maliciousCmd = '-WindowStyle Hidden -Command "$b=[IO.File]::ReadAllBytes(''details.png'');' +
                    '([System.Reflection.Assembly]::Load([byte[]]($b[($b.Length-1)..0])).GetType("Task10.Program")::MB())"'
    
    Start-Process -FilePath "$env:SystemRootSystem32WindowsPowerShellv1.0powershell.exe" `
                  -ArgumentList $maliciousCmd `
                  -WindowStyle Hidden `
                  -NoNewWindow
    
    # Cleanup (optional, run after verification)
    # Remove-Item -Recurse -Force $tempDir
  • 정리 명령어:

    # Remove temporary files and directories created for the test
    $tempDir = "$env:TEMPsheetcreep"
    if (Test-Path $tempDir) {
        Remove-Item -Recurse -Force $tempDir
    }