Windows 提供了几种在应用程序之间传输数据的方式。其中一种方法是使用动态数据交换 (DDE,Dynamic Data Exchange) 协议。DDE 协议是一组规则集。它在共享数据的应用程序之间发送消息,并使用共享内存 (Shared Memory) 交换数据。应用可以使用 DDE 协议进行一次性的数据传输,也可以在当有新数据可用时互相推送更新做持续性的数据交换。
攻击者可能使用 DDE 执行任意命令。微软 Office 文档可能直接或间接的通过植入文件被恶意嵌入 DDE 命令,并通过钓鱼或托管网站内容的方式执行命令,从而避免了 VB 宏的使用。DDE 也能被一个攻陷了机器却无法直接使用命令行执行命令的攻击者所利用。
打开一个含有 DDE 内容的文档,office 程序将会弹出两个连续的警告信息:
实例中后缀名为 slk 的文件含有 DDE 表达式,调用 cmd.exe 作为外部数据源以执行任何命令。
受害者必须点击开启 (Enable) 并选择是(Yes)来绕过安全警告(通过社会工程的方式可能会让受害者觉得这是访问机密数据的方法)
最后提供的命令会被执行:
我们发现 office 程序确实会将之前的两个安全警告信息记录在事件日志文件中:
%SystemRoot%\System32\Winevt\Logs\OAlerts.evtx (EventID=300)
你能在截图中看到cmd.exe
的字符串:
关于以上两个事件的文件名没有被捕捉到同一个事件中,但是你能在下一个事件 300 中找到:
此外,根据用户/机器活动,你还可能发现三个月前的警告(不包含过多内容的事件日志文件),这在取证和寻找此前的 DDE 感染中非常实用。
https://attack.mitre.org/techniques/T1173/
https://docs.microsoft.com/en-us/windows/desktop/dataxchg/about-dynamic-data-exchange
https://blog.menasec.net/2019/02/threat-hunting-4-detecting-excelword.html
在侦查阶段 (Reconnaissance Phase) 发现攻击者非常重要,因为如果他在该阶段,就意味着他已经绕过了你所有外围和端点的标准安全解决方案。如果你能在此阶段检测到行为并制止攻击者,那就祝贺你了!
微软的 Net.exe 工具可以被用来枚举本地和域用户/组(任何攻击者都会通过这种手段收集信息以达成目标)。
著名 Net.exe 用户枚举检测技术受限于程序命令行的值以及程序名称验证(例如:程序名为 net.exe,命令行:.*net.*users.*)。这是一种较弱的检测方法,并能通过简单的程序重命名或在命令行中引入特殊的混淆字符的方法进行绕过(如 ^,set x,环境变量等)。
本文我们将会用事件 ID 4661
对试图枚举已知的高权限活动目录用户/组的行为进行检测:
· Enterprise Admins · Domain Admins · Administrators group · Administrator · etc
下图示例为枚举 “Domain Admin” 组:
你需要在所有域控制器(任何用户枚举行为的预期目标)上开启这个事件记录。
注意:这种方法也能检测到使用其他其他工具进行的用户枚举行为。
寻找事件 4661 中信息主体含有已知的活动目录高权限用户/组的 SID 值。例:使用 IBM Qradar AQL 查询语言进行查询:
select "SourceUserName", "ObjectType", "ObjectName" from events where "EventID"=4661 and not (SourceUserName IMATCHES '.*$') and (UTF8(payload) IMATCHES '.*S-1-5-21-.*-(512|502|500|505|519|520|544|551|555).*') last 180 DAYS
https://support.microsoft.com/en-us/help/243330/well-known-security-identifiers-in-windows-operating-systems
https://www.ultimatewindowssecurity.com/securitylog/encyclopedia/event.aspx?eventid=4661
https://blog.menasec.net/2019/02/threat-hunting-5-detecting-enumeration.html
每台加入域的 Windows 计算机都有一个计算机账号。与用户账号相同,计算机账号提供了一种认证和审计计算机访问网络和域资源的途径。每个计算机账号都必须唯一。计算机名必须以 “$” 字符结尾(如 SERVER01$)。
问题是很多已知的检测用例都根据名称后缀的 “$” (如果账号与计算机或用户有关联,该符号并不是一个真的计算机账号指示符)排除计算机账号,以减少假正(False Positive)或者仅仅因为它不相关。一些你可以找到此类问题的用例例子:
· Unusual Logon Activity (异常登录活动) · Pass the hash | Over Pass the hash (哈希传递) · Pass the ticket (票据传递) · Kerberoasting (服务票据离线爆破)
有时这些例外是有必要的,为拥有足够权限(在活动目录中的 ”Account Operators” 组, ”Domain Admins” 组以及 ”Enterprise Admins” 组)的攻击者开启了大门,让他们可以创建一个伪/真的计算机账号并从标准的监控方法中隐藏他的活动。如果攻击者能够获得有效的高权限计算机账号的 NLTM 哈希,他便无需创建账号直接隐藏了。
你能从下图中看到,合法计算机账号 PC01 的登录事件 4624 和一个伪造的计算机账号(用户账号模仿计算机账号命名格式)的登录活动是相似的:
可以使用活动目录管理工具或 dsadd 命令工具( net.exe 仅限于用户账号使用 ) 创建一个真实的计算机账号。
使用 net.exe 工具创建的名为 HMIDA$ 的用户账号(使得该账号看起来像计算机账号)的事件 4720”一个用户账号被创建 ”(“a user account was created”):
为了降低这种盲点的风险,我们会寻找标志计算机账号异常登录活动的方法。下列潜在的指示器是我们需要查看的:
· 模仿计算机账号名称创建的用户账号(如 MSSQLDB01$)
· 伪计算机账号的交互登录(如 RDP)
· 在较短时间内从同一 IP 登录两个不同的计算机账号
· 使用真实计算机账号进行 NTLM 登录但是源工作站拥有不同的计算机账号
· 使用域控制器计算机账号登录(通常情况下类似 DC01 的账号)且源IP 并没有与域控制器关联
1、EventID=4720 and "Account Name" contains "$" sign.
2、 NTLM authentication (EID=4776) and "Logon Account" is like ".*$" and "Source Workstations" != "Logon Account"
3、 [EventID=4624 and "Account Name" like ".$"] followed by [EventID=4624 and "Account Name" like ".$"] and different "Account Name" and same "Source Network Address" within 2min
4、 EventID=(4624|4625) and "Logon Type" is any of {2, 7, 10} and "Account Name" like ".*$"
5、EventId =(4624|4625) and "Account Name" like ".DC.$" and "Logon Type"=3 and ""Source Network Address" != Domain_Controllers_Subnet
AQL 查询 1【包括伪计算机账号的创建】
select username, "DestinationUserName", "GroupID" from events where "EventID"=4720 and DestinationUserName IMATCHES '.*$' last 90 DAYS
AQL 查询 2【包括可疑的真/伪计算机账号的 NTLM 登录】
select "SourceUserName", "Source Workstation", "ErrorCode", count() as cc from events where "EventID"=4776 and SourceUserName imatches '.$' and not (SUBSTRING("SourceUserName", 0, STRLEN("SourceUserName")-1) = "Source Workstation")
GROUP BY SourceUserName, "Source Workstation", "ErrorCode" last 90 DAYS
AQL 查询 3【包括伪计算机账号的交互登录 】
select "DestinationUserName", "AuthenticationPackage", "LogonType" from events where "EventID"=4624 and DestinationUserName imatches '.+$' and (LogonType=10 or LogonType=2 or LogonType=7) last 90 days
注:登录事件 4624 和 4625 并不总是拥有 “Workstation Name” 属性。
在利用真实或伪造的计算机账号隐藏于明处的第二部分,我们会讲解三种使用伪计算机账号的方法和一些可以在客户端和服务器端被观察到的遗留(left artifacts)。
https://www.ultimatewindowssecurity.com/securitylog/encyclopedia/event.aspx?eventID=4776
https://www.ultimatewindowssecurity.com/securitylog/encyclopedia/event.aspx?eventID=4720
https://www.ultimatewindowssecurity.com/securitylog/encyclopedia/event.aspx?eventID=4741
https://msdn.microsoft.com/en-us/library/cc246064.aspx
https://msdn.microsoft.com/en-us/windows/desktop/cc781364
https://ss64.com/nt/dsadd-computer.html