首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Midnight RDP攻击链分析:从钓鱼邮件到Cobalt Strike信标与域控失陷

Midnight RDP攻击链分析:从钓鱼邮件到Cobalt Strike信标与域控失陷

原创
作者头像
qife122
发布2026-04-04 07:26:15
发布2026-04-04 07:26:15
1800
举报

CyberDefenders Write-up Midnight RDP (恶意RDP到Cobalt Strike信标及域控失陷)

Chicken0248 著 12分钟阅读·4天前

场景

InfiniTech Solutions公司的一名IT员工报告其邮箱账号存在异常活动。经调查发现,该员工的工作凭证在一次最近的数据泄露事件中被泄露。该员工曾使用其工作邮箱注册第三方平台,导致凭证暴露。威胁攻击者利用这些凭证登录该员工的企业邮箱,并向组织内的其他员工发送钓鱼邮件。

你的任务是通过分析日志、确定攻击范围、识别是否有用户与钓鱼邮件交互,并揭示钓鱼活动对网络的影响。

类别

威胁狩猎

工具

ELK, Splunk

实验室链接

https://cyberdefenders.org/blueteam-ctf-challenges/midnight-rdp/

背景

关于午夜暴风雪(APT29)的背景知识,该组织是本实验室的灵感来源。该威胁行为者在针对超过100个组织的数千名用户的鱼叉式钓鱼活动中,利用RDP配置文件(.rdp)诱导用户打开,从而建立回连到攻击者控制的RDP服务器的连接。

这个RDP配置文件的有趣之处在于,它可以用于映射两个连接客户端之间的资源,这意味着攻击者可以将恶意负载投递到启动文件夹,等待下次启动以获取目标机器的初始访问权限,甚至可以窃取受害用户的凭证。

带着这个知识开始实验室,识别入口点应该相当容易。

参考

https://www.picussecurity.com/resource/blog/understanding-and-mitigating-midnight-blizzards-rdp-based-spearphishing-campaign

在本实验室中,我们可以部署Splunk或Elastic SIEM,我通常使用Splunk。根据“数据摘要”,我们可以看到有4台主机,但实际上只有3个端点,其中“ip-10-10-3-192”主机是从MAIL01端点收集的syslog,我们可以用它来发现初始访问(如攻击者的可疑邮件地址)。

问题

初始访问

Q1: 哪个邮箱账户被入侵并用于发起攻击?

根据我们已经了解的关于Midnight RDP使用.rdp文件进行恶意RDP攻击的初始访问技术,我首先查询了任意用户和任意主机上下载文件夹中的文件创建事件,以查找可疑的.rdp文件。我们可以看到在2024-11-21 20:45,用户"rnichols"在主机"IT01"上确实下载了cloud zerotrust compliance.rdp文件。

查询语句

Sysmon EventCode=11 file_path="*Downloads*" | sort UtcTime | table UtcTime,Image,file_path,user,host

Zone.Identifier文件的内容确认该文件确实是从组织的webmail下载的。我们来找出该用户的邮箱账户。

查询语句

EventCode=15 user=rnichols host=IT01 file_path="*Downloads*" | sort UtcTime | table UtcTime,Image,file_path,user,host,Contents,SHA256

通过在查询中使用用户名,我们现在可以看到syslog显示可疑邮件从twhite@infinitechsolutions.xyz发送到rnichols@infinitechsolutions.xyz(受害者)。邮件主题表明"twhite"用户的邮箱首先被入侵,然后被用来向"rnichols"用户发送恶意RDP配置文件,导致后续对IT01主机的恶意RDP访问。

查询语句

host="ip-10-10-3-192" rnichols | sort _time

答案twhite@infinitechsolutions.xyz

Q2: 识别出被入侵账户后,攻击者向组织内的其他员工发送了钓鱼邮件。这些员工的名字是什么,按时间顺序排序并用逗号分隔?

我们可以使用之前找到的邮件主题以及被入侵邮箱的查询条件,找出有多少封邮件被发送给其他员工。可以看到相同的邮件被发送给了4个不同的员工,只有1个中招。

查询语句

host="ip-10-10-3-192" "twhite@infinitechsolutions.xyz" "Zero Trust Compliance Verification" | sort _time

答案rnichols,llopez,gbaker,ahall

Q3: 从被入侵账户发送的恶意附件名称是什么?

答案cloud zerotrust compliance.rdp

执行

Q1: 分析用户交互后,哪个员工下载并执行了恶意附件?

通过查询IT01主机上来自下载了RDP配置文件的用户的进程创建事件,我们可以看到该用户确实打开了这个rdp文件。

查询语句

Sysmon EventCode=1 host=IT01 user=rnichols | sort UtcTime | table UtcTime,CommandLine,ParentCommandLine,user,SHA256

建立到攻击者服务器的RDP连接后,RDP配置文件可用于设置到受害者主机的资源映射。我们可以看到在约20:48时,一个可疑文件在受害者的启动文件夹下被执行,并且是手动执行的。

然后在20:55时,攻击者开始了他们的操作。这意味着RDP配置确实被用来映射资源文件,并将反向shell/C2信标投递到用户的启动文件夹中。

我们也可以通过文件创建事件来确认这一点。可以看到mstsc.exe(微软终端服务客户端进程)在启动文件夹中创建了该文件。

查询语句

Sysmon EventCode=11 file_path="*Startup*" | sort UtcTime | table UtcTime,Image,file_path,user,host

答案rnichols

Q2: 在DC机器上,攻击者在内存中执行了一个DLL信标。这个恶意DLL文件的SHA-256哈希的前10个字节是什么?

这个问题的顺序有点奇怪,因为我更喜欢链式/时间线分析(从头到尾理解发生的事情)而不是这种狩猎方法。但我们直接查询域控制器上的任何可疑行为。

有趣的是,在事件时间范围内域控制器上没有sysmon事件,也没有Event ID 4688。所以我需要寻找其他日志,如PowerShell脚本块日志和PowerShell日志。

从PowerShell脚本块日志中,我们可以看到通过PowerShell在域控制器的内存中部署了cobalt strike信标。

查询语句

host=DC01 EventCode=4104 | sort SystemTime | table SystemTime,UserID,ScriptBlockText

我们可以使用以下查询合并这些脚本块,然后复制base64 blob进行解码和xor。

查询语句

host=DC01 EventCode=4104 ScriptBlockId="405ceb5e-aafd-4479-8857-e5b1fb3ebf70" | sort MessageNumber | table ScriptBlockText

有两种方法获取dll文件。第一种是使用CyberChef将其解码,然后用35进行xor,然后应该得到MZ头,表明PE32可执行文件,准备计算文件哈希。

该问题的答案只需要前10个字节。根据这个问题,2个字符等于1个字节,所以我们可以使用"Take bytes"来获取前10个字节(20个字符),然后得到答案。

为了确认,我们可以获取完整哈希并在VirusTotal上搜索,结果显示它确实是cobalt strike。

答案0ee6bc20a7f855d881cc

持久化

Q1: 恶意连接建立后,一个文件被投递到系统上。这个被投递的文件名是什么?

正如我们已经发现的,当RDP连接建立时,RDP配置文件自动将ztssvc.exe文件投递到启动文件夹。

答案ztssvc.exe

Q2: 为了维持长期访问,攻击者在被入侵机器上创建了一个计划任务。这个任务的名称是什么?

在获得IT02主机的访问权限后,威胁行为者首先运行whoami /groups命令查看当前用户是否属于任何有趣的组。接下来的操作是读取注册表中的Windows UAC设置,然后投递并使用UACMe Akagi工具绕过UAC,这意味着该用户属于本地管理员组。

凭借高完整性访问令牌,威胁行为者创建了一个新的计划任务用于持久化,名称为"Amazon Zero Trust Agent",在登录时以SYSTEM权限执行C:\Windows\System32\Amazon ZeroTrust Compl.exe

答案AmazonZeroTrustAgent

Q3: 作为其持久化策略的一部分,攻击者创建了一个新用户账户。这个未授权账户的名称是什么?

创建计划任务后,威胁行为者创建了新用户"Adminstrator",模仿IT02机器上实际的内置"Administrator"账户,并将此用户添加到Administrators组和Remote Desktop Users组以便RDP连接。

我们还可以看到,在投递了其他信标并通过计划任务建立持久化后,威胁行为者删除了"rnichols"和"jgreen"用户的启动文件夹中的所有文件,实质上是移除了旧信标以使用新信标。

答案Adminstrator

Q4: 为了便于远程访问,攻击者修改了远程桌面设置。控制是否允许远程桌面协议(RDP)连接的注册表项名称是什么?

在创建后门用户之前,威胁行为者检查了HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\fDenyTSConnections注册表项,以确定系统上是否允许远程桌面协议(RDP)连接。

答案fDenyTSConnections

Q5: 进一步探查发现DC上创建了一个新用户账户。这个账户的名称是什么?

在域控制器上有三条可疑的PowerShell命令通过PowerShell Event ID 400记录。

查询语句

host=DC01 EventCode=400 | sort SystemTime

我们可以看到威胁行为者向IT02的本地管理员添加了一个相似用户,并将两个用户都添加到"Domain Admins"组。

答案rniclos

权限提升

Q1: 调查提权技术,攻击者利用的特权COM接口的CLSID的最后6个字节是什么?

在执行UACMe时,威胁行为者指定了方法43来执行第一个信标。我们可以看到dllhost.exe使用COM接口{D2E7041B-2927-42FB-8E9F-7CE93B6DC937}执行以绕过UAC并获得提权shell。

根据Elastic,我们发现的确实正确。当使用此方法绕过时,dllhost.exe在监控优先级列表中,使用的COM接口是{3E5FC7F9-9A51-4367-9063-A120244FBEC7}{D2E7041B-2927-42FB-8E9F-7CE93B6DC937}

答案7CE93B6DC937

Q2: 为了提升权限,攻击者在系统上投递了另一个文件。这个文件的名称是什么?

答案akagi64.exe

防御规避

Q1: 攻击者试图修改系统行为以削弱安全设置。控制管理员用户用户账户控制(UAC)提示设置的注册表项名称是什么?

正如已经发现的,在获得IT02主机的访问权限后,威胁行为者查询了HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\ConsentPromptBehaviorAdmin注册表项,以获取ConsentPromptBehaviorAdmin值,该值控制Windows在需要提权时如何提示管理员。

答案ConsentPromptBehaviorAdmin

Q2: 为了避免检测,攻击者将信标移动到了受保护的系统目录。这个被重定位的恶意文件的名称是什么?

正如我们已经发现的,威胁行为者投递了新的信标并设置了计划任务,在登录时以SYSTEM权限执行它,然后删除旧信标。

答案AmazonZeroTrustCompl.exe

发现

Q1: 确定攻击者在被入侵机器上的第一步操作,用于收集系统信息的第一条执行的命令是什么?

答案whoami /groups

横向移动

Q1: 攻击者使用哪个工具横向移动到DC?

在新信标执行后,威胁行为者执行了多条PowerShell编码命令。

查询语句

Sysmon EventCode=1 host=IT01 (CommandLine="*ZeroTrust*" OR ParentCommandLine="*ZeroTrust*") | sort UtcTime | table UtcTime,CommandLine,ParentCommandLine,user,SHA256

解码后,揭示了一系列用于横向移动的命令:

  • 第一条命令将目标IP(10.10.10.55)添加到本地机器的TrustedHosts列表,允许WinRM连接。
  • 第二条命令验证域控制器主机名(DC01.ad.infinitechsolutions.xyz)是否通过DNS正确解析。
  • 第三条命令将主机名添加到TrustedHosts,确保使用主机名的远程连接被允许。

所有这些都允许威胁行为者通过WinRM连接到域控制器,并最终部署内存中信标,如PowerShell脚本块日志所见。

答案Winrm

命令与控制

Q1: 追溯攻击者活动,恶意邮件的原始发送IP地址是什么?

通过查看发送邮件前被入侵邮箱的登录事件,可以看到登录使用的IP地址。

查询语句

host="ip-10-10-3-192" "twhite@infinitechsolutions.xyz" | sort _time

答案3.78.253.99

Q2: 恶意附件执行后,它建立了一个到外部服务器的连接。恶意附件通信的具体端点是什么?

我们可以查询IT02主机的所有网络连接(TCP)事件,聚焦于mstsc.exe进程建立的连接,可以看到用于RDP连接的威胁行为者IP地址。

查询语句

Sysmon EventCode=3 host=IT01 user=rnichols | sort UtcTime | stats count by Image,dest_ip,dest_port

答案3.78.253.99:3389

Q3: 分析显示投递的文件作为Cobalt Strike信标。这个信标通信的命令与控制(C&C)服务器端点是什么?

第一个信标是投递到启动文件夹的ztssvc.exe,连接到3.78.244.11的8080端口,与第二个信标相同。

答案3.78.244.11:8080

Q4: 检查DLL的配置,与'C2Server'键关联的指导信标通信的值是什么?

在VirusTotal的行为选项卡上,可以看到与C2服务器及其信标端点关联的内存模式URL。

答案3.78.244.11,/dot.gif

原文发表于 https://chickenloner.github.io

CSD0tFqvECLokhw9aBeRqpNzLTXFlojmzFn6OlyTg9XWnhAP6q5FfiGb63VkvyGKCRkvJEisc+SrMyQe8eQ0f49+++MPmaCBvFImhXAljuGVvDCEyZI5v5MyYwvTzHicD07zks0oa3QVUOwwC5NUyiWeYJF3kzslLuYafMiEE4esszJBUa6ZN46/0SqVlapy

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 场景
  • 类别
  • 工具
  • 实验室链接
  • 背景
  • 参考
  • 问题
    • 初始访问
      • Q1: 哪个邮箱账户被入侵并用于发起攻击?
      • Q2: 识别出被入侵账户后,攻击者向组织内的其他员工发送了钓鱼邮件。这些员工的名字是什么,按时间顺序排序并用逗号分隔?
      • Q3: 从被入侵账户发送的恶意附件名称是什么?
    • 执行
      • Q1: 分析用户交互后,哪个员工下载并执行了恶意附件?
      • Q2: 在DC机器上,攻击者在内存中执行了一个DLL信标。这个恶意DLL文件的SHA-256哈希的前10个字节是什么?
    • 持久化
      • Q1: 恶意连接建立后,一个文件被投递到系统上。这个被投递的文件名是什么?
      • Q2: 为了维持长期访问,攻击者在被入侵机器上创建了一个计划任务。这个任务的名称是什么?
      • Q3: 作为其持久化策略的一部分,攻击者创建了一个新用户账户。这个未授权账户的名称是什么?
      • Q4: 为了便于远程访问,攻击者修改了远程桌面设置。控制是否允许远程桌面协议(RDP)连接的注册表项名称是什么?
      • Q5: 进一步探查发现DC上创建了一个新用户账户。这个账户的名称是什么?
    • 权限提升
      • Q1: 调查提权技术,攻击者利用的特权COM接口的CLSID的最后6个字节是什么?
      • Q2: 为了提升权限,攻击者在系统上投递了另一个文件。这个文件的名称是什么?
    • 防御规避
      • Q1: 攻击者试图修改系统行为以削弱安全设置。控制管理员用户用户账户控制(UAC)提示设置的注册表项名称是什么?
      • Q2: 为了避免检测,攻击者将信标移动到了受保护的系统目录。这个被重定位的恶意文件的名称是什么?
    • 发现
      • Q1: 确定攻击者在被入侵机器上的第一步操作,用于收集系统信息的第一条执行的命令是什么?
    • 横向移动
      • Q1: 攻击者使用哪个工具横向移动到DC?
    • 命令与控制
      • Q1: 追溯攻击者活动,恶意邮件的原始发送IP地址是什么?
      • Q2: 恶意附件执行后,它建立了一个到外部服务器的连接。恶意附件通信的具体端点是什么?
      • Q3: 分析显示投递的文件作为Cobalt Strike信标。这个信标通信的命令与控制(C&C)服务器端点是什么?
      • Q4: 检查DLL的配置,与'C2Server'键关联的指导信标通信的值是什么?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档