SOC Prime Bias: Critical

19 Oct 2026 17:09 UTC

UNC7017针对傲梅科技的软件供应链攻击

Author Photo
SOC Prime Team linkedin icon 关注
UNC7017针对傲梅科技的软件供应链攻击
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

摘要

UNC7017对AOMEI科技更新基础设施发起了一场复杂的软件供应链攻击活动。威胁行为者使用短暂的配置篡改窗口将更新请求重定向到恶意服务器,帮助规避传统的时间点扫描。此次活动交付了一条多阶段有效载荷链,包括CROSSROAD下载器和SHINYROAD后门。

调查

调查由Mandiant谷歌威胁情报组(GTIG)和ManageEngine威胁分析实验室(METAL)联合进行。研究人员通过EDR遥测检测到该活动,并证实对手依赖于仅持续五到十分钟的短暂篡改窗口。分析还显示基础设施从云提供商转向专用的供应商主题域名和合法的云存储。

缓解措施

供应商应对所有下载的可执行文件和配置文件进行端到端的加密签名验证。组织应对更新客户端实施严格的目的地锁定,以防止重定向到未经授权的域。限制应用程序内处理程序中的URI方案还可以帮助防止基于WebDAV的NTLM凭据强制攻击。

响应

安全团队应进行涵盖2026年4月至7月时间框架的回溯端点和网络搜寻。优先监控由合法更新程序启动的未签名子进程和未经授权的网络重定向迹象。分析师应检查本地缓存的端点配置文件,而不是仅依赖于供应商托管URL的实时检查。

攻击流程

我们仍在更新这部分。

检测

可疑的计划任务(通过审计)

SOC Prime团队
2026年10月19日

可能在可疑目录中执行的Powershell进程(通过cmdline)

SOC Prime团队
2026年10月19日

替代远程访问/管理软件(通过process_creation)

SOC Prime团队
2026年10月19日

可能尝试的IP查询域通讯(通过dns)

SOC Prime团队
2026年10月19日

用于检测的IOC(HashSha256):调查短暂的软件供应链篡改

SOC Prime AI规则
2026年10月19日

用于检测的IOC(SourceIP):调查短暂的软件供应链篡改

SOC Prime AI规则
2026年10月19日

用于检测的IOC(DestinationIP):调查短暂的软件供应链篡改

SOC Prime AI规则
2026年10月19日

检测恶意的AOMEI软件更新重定向 [代理]

SOC Prime AI规则
2026年10月19日

检测CROSSROAD和SHINYROAD恶意软件活动 [Windows Sysmon]

SOC Prime AI规则
2026年10月19日

检测SHINYROAD活动中的恶意DLL和临时服务 [Windows文件事件]

SOC Prime AI规则
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 "[*] 运行清理..."
      # 如果进程终止则不需要特定命令,但我们确保没有悬挂的句柄。