UNC7017针对傲梅科技的软件供应链攻击
Detection stack
- AIDR
- Alert
- ETL
- Query
摘要
UNC7017对AOMEI科技更新基础设施发起了一场复杂的软件供应链攻击活动。威胁行为者使用短暂的配置篡改窗口将更新请求重定向到恶意服务器,帮助规避传统的时间点扫描。此次活动交付了一条多阶段有效载荷链,包括CROSSROAD下载器和SHINYROAD后门。
调查
调查由Mandiant谷歌威胁情报组(GTIG)和ManageEngine威胁分析实验室(METAL)联合进行。研究人员通过EDR遥测检测到该活动,并证实对手依赖于仅持续五到十分钟的短暂篡改窗口。分析还显示基础设施从云提供商转向专用的供应商主题域名和合法的云存储。
缓解措施
供应商应对所有下载的可执行文件和配置文件进行端到端的加密签名验证。组织应对更新客户端实施严格的目的地锁定,以防止重定向到未经授权的域。限制应用程序内处理程序中的URI方案还可以帮助防止基于WebDAV的NTLM凭据强制攻击。
响应
安全团队应进行涵盖2026年4月至7月时间框架的回溯端点和网络搜寻。优先监控由合法更新程序启动的未签名子进程和未经授权的网络重定向迹象。分析师应检查本地缓存的端点配置文件,而不是仅依赖于供应商托管URL的实时检查。
攻击流程
我们仍在更新这部分。
检测
可疑的计划任务(通过审计)
2026年10月19日
可能在可疑目录中执行的Powershell进程(通过cmdline)
2026年10月19日
替代远程访问/管理软件(通过process_creation)
2026年10月19日
可能尝试的IP查询域通讯(通过dns)
2026年10月19日
用于检测的IOC(HashSha256):调查短暂的软件供应链篡改
2026年10月19日
用于检测的IOC(SourceIP):调查短暂的软件供应链篡改
2026年10月19日
用于检测的IOC(DestinationIP):调查短暂的软件供应链篡改
2026年10月19日
检测恶意的AOMEI软件更新重定向 [代理]
2026年10月19日
检测CROSSROAD和SHINYROAD恶意软件活动 [Windows Sysmon]
2026年10月19日
检测SHINYROAD活动中的恶意DLL和临时服务 [Windows文件事件]
2026年10月19日
模拟执行
-
攻击叙述与命令: 一名对手已成功通过供应链妥协(T1195.002)将CROSSROAD下载器部署到工作站。为了防止多个后门实例相互干扰或导致系统不稳定,恶意软件试图创建一个特定的Mutex。攻击者的目标是建立一个持久的后门(T1547)以进行长期的命令和控制(C2)以及数据外泄。模拟将执行一个PowerShell脚本,通过创建检测规则中识别的精确全局和本地Mutex字符串来模拟这种行为。
-
回归测试脚本:
# CROSSROAD/SHINYROAD Mutex模拟脚本 # 此脚本模拟检测规则所针对的特定Mutex的创建。 Write-Host "[*] 开始Mutex模拟..." -ForegroundColor Cyan # 1. 模拟全局Mutex(CROSSROAD) try { $globalMutexName = "GlobalF9E6E3C0-E11A-4F85-9944-AF4AD6E05883" Write-Host "[!] 尝试创建全局Mutex: $globalMutexName" -ForegroundColor Yellow $globalMutex = New-Object System.Threading.Mutex($true, $globalMutexName) Write-Host "[+] 全局Mutex创建成功。" -ForegroundColor Green } catch { Write-Error "[X] 创建全局Mutex失败: $($_.Exception.Message)" } # 2. 模拟本地Mutex(SHINYROAD) try { $localMutexName = "Local963d3c60-d406-4ad6-aa1e-dc8e45061ccf" Write-Host "[!] 尝试创建本地Mutex: $localMutexName" -ForegroundColor Yellow $localMutex = New-Object System.Threading.Mutex($true, $localMutexName) Write-Host "[+] 本地Mutex创建成功。" -ForegroundColor Green } catch { Write-Error "[X] 创建本地Mutex失败: $($_.Exception.Message)" } Write-Host "[*] 持有Mutex 30秒以确保捕获遥测..." -ForegroundColor Cyan Start-Sleep -Seconds 30 # 清理(手动释放由脚本退出处理,但明确更好) if ($globalMutex) { $globalMutex.ReleaseMutex() } if ($localMutex) { $localMutex.ReleaseMutex() } Write-Host "[*] 模拟完成。" -ForegroundColor Cyan -
清理命令:
# 如果脚本中断,请运行此命令以释放mutex # 注意:在PowerShell中,如果进程终止,操作系统通常会清理mutex。 # 这是对模拟运行者的安全预防措施。 Write-Host "[*] 运行清理..." # 如果进程终止则不需要特定命令,但我们确保没有悬挂的句柄。