ESC1和ESC8攻击路径:从社会工程到AD CS滥用
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
威胁行为者通过Microsoft Teams使用社交工程冒充IT帮助台人员,并利用快速助理建立远程访问。在获得访问权限后,他们通过ESC1和ESC8技术滥用配置错误的Active Directory证书服务 (AD CS),提升权限并获取域级身份验证。入侵使得未经授权的证书注册、DCSync活动以及后续的数据窃取得以实现。
调查
调查重建了从最初的Teams网络钓鱼互动到后续证书滥用的攻击链。分析人员关联了远程会话遥测、可疑的用户可写目录中的运行时执行、以及AD CS事件,包括证书注册请求和PKINIT活动。认证身份与原始设备之间的不匹配为识别潜在的NTLM中继攻击提供了重要线索。
缓解措施
各组织应为未经请求的支持请求实施强力验证程序,并限制Microsoft Teams的外部访问。技术缓解措施包括使用业务应用控制阻止未经授权的运行时,并通过在注册端点启用身份验证扩展保护 (EPA) 和HTTPS来加强AD CS。禁用注册服务上的NTLM并定期审核证书模板也至关重要。
响应
当检测到恶意活动时,响应者应立即隔离受影响的工作站并审查遭到破坏的身份以排除风险。必须吊销未经授权的证书,并发布更新的吊销信息。应单独评估活动的Kerberos票据,因为证书吊销不会使现有的TGT失效。应当指派手动封堵给那些被排除于自动中断之外的账户。
攻击流程
检测
可能的系统网络配置发现(通过命令行)
Java二进制从异常位置执行(通过进程创建)
替代远程访问/管理软件(通过进程创建)
域控制器的证书请求事件 [ADCS](通过审核)
证书请求事件 [ADCS] (通过审核)
配置错误的ADCS模板使用 [ESC1/SAN] (通过审核)
可能被迫攻击(通过审核)
尝试的可疑证书相关行为(通过审核)
可能的PetitPotam/ADCS-ESC8攻击利用 [MS-EFSRPC/ADCS-PKI](通过审核)
可能的DCSync攻击(通过审核)
可能的快速助理未经授权访问(通过审核)
IOC (HashSha256) 用于检测:从帮助台冒充到AD CS滥用:调查ESC1和ESC8入侵路径
证书模板滥用和NTLM身份验证中继检测 [Microsoft Windows安全事件日志]
基于证书的身份验证滥用与LDAPS和SMB连接 [Windows网络连接]
Teams网络钓鱼和便携式运行时执行以实现未经授权访问 [Windows进程创建]
模拟执行
-
攻击叙述及命令: 对手通过Microsoft Teams发起钓鱼活动,冒充IT支持。他们指示受害者打开“快速助理”。一旦会话建立,攻击者使用远程访问来投放一个
python.exe到一个伪装的目录:C:Users<User>AppDataRoamingKB。最后,为了促进横向移动,攻击者执行systeminfoandipconfig以收集主机上的侦察数据。 -
回归测试脚本:
# 模拟脚本:Teams网络钓鱼和便携式运行时执行 # 1. 设置:在AppData中创建'malicious'目录 $targetDir = "$env:APPDATAKB" if (!(Test-Path $targetDir)) { New-Item -Path $targetDir -ItemType Directory -Force } # 2. 模拟便携式运行时(创建一个名为python.exe的虚拟文件) # 在真正的攻击中,这将是一个真实的二进制。 $dummyPython = Join-Path $targetDir "python.exe" New-Item -Path $dummyPython -ItemType File -Force # 3. 模拟“Teams”父进程生成快速助理 # 注意:由于我们无法在一个脚本中轻松欺骗实际的Teams.exe进程树 # 而无需高级注入,我们通过模仿命令行和预期行为的方式模拟遥测逻辑。 Write-Host "[!] 模拟攻击序列..." # 通过模拟进程链来触发检测逻辑 # 注意:若要触发特定的Sigma规则,进程“python.exe” # 必须在遥测流中被视为“Teams.exe”的子进程。 # 步骤A:模拟Teams调用快速助理(手动模拟遥测) # 在一个真实的测试环境中,你可能会使用“ProcessHacker”或“Sysmon”等工具 # 来操纵父PID,但对于这个脚本,我们将执行序列。 Start-Process "cmd.exe" -ArgumentList "/c echo Simulating Teams calling Quick Assist" # 步骤B:从特定路径执行“便携式运行时” Start-Process -FilePath $dummyPython -ArgumentList "--version" -ErrorAction SilentlyContinue # 步骤C:执行发现命令 Start-Process "cmd.exe" -ArgumentList "/c systeminfo" Start-Process "cmd.exe" -ArgumentList "/c ipconfig" Start-Process "cmd.exe" -ArgumentList "/c tasklist" Write-Host "[+] 模拟完成。检查SIEM以获取警报。" -
清理命令:
# 清理:删除模拟的恶意目录和文件 $targetDir = "$env:APPDATAKB" if (Test-Path $targetDir) { Remove-Item -Path $targetDir -Recurse -Force Write-Host "[+] 清理成功:$targetDir已移除。" } else { Write-Host "[-] 清理失败:未找到目录。"