导语:通过这篇文章可以学习到Windows日志相关的知识,同时接触到了Pass-the-Hash和Pass-the-Ticket的工作原理,以及如何科学的收集日志信息可以做到低误报的针对该类攻击行为的告警。
0x00 前言
早上在看RSS的时候,偶然看到了这篇Paper,http://cert.europa.eu/static/WhitePapers/CERT-EU_SWP_17-002_Lateral_Movements.pdf,CERT-EU发的,主要写了些Windows横向移动检测方面的内容。
像平时做渗透的时候,横向移动是搞内网目标的重要环节,除了考虑如何横向移动到有价值的目标机器外,也会从甲方安全的角度去思考,如果是我,我会通过什么手段、设置什么规则去检测这种攻击行为呢?
So,这篇论文还是比较符合我的胃口,于是打算学习一下。
本文主要记录了学习该论文的过程,同时还会夹杂一些我的思考,如有谬误,还望各位大牛斧正。
0x01 介绍
横向移动技术广泛应用于复杂的网络攻击中,特别是高级持续性威胁(APT)。攻击者使用这些技术访问受感染系统中的其他主机,并访问敏感资源(如邮箱,共享文件夹或凭证)。这些可以用于渗透其他机器、权限提升或者窃取更有价值的凭证。通过横向移动攻击最终可以拿到域控权限,进而控制域环境下的全部机器。
这篇论文主要介绍了如何检测在Windows Vista、7和2008的环境中利用NTLM和Kerberos协议横向移动的方法。由于Windows 10引入了许多额外的安全机制,因此针对Windows 10横向移动检测相关的技术将会在另一篇论文中单独介绍。
微软之前已经发布过关于如何缓解hash传递攻击的文章(Pass the Hash)。除了本文中描述的检测控制手段之外,强烈建议实现微软官方提供的防护方法。
值得关注的是,这种攻击类型(横向移动)不仅仅局限于Windows环境,类似的攻击场景也可以出现在其他基础架构的场景中,比如说使用Kerberos协议的UNIX系统,或者利用SSO进行认证的设备。虽然本文专注于检测Windows系统横向移动技术,但在适当的日志记录存在的情况下,其思路也可以在其他场景中借鉴。
感谢Microsoft的MSRC团队对本文档的质量检查和验证所做的贡献。
0x02 背景
Windows横向移动攻击
在本文中,横向移动攻击是指利用有效的登录凭证从一台Windows主机登录到另一台目标Windows主机。(可以是用户、服务的登录凭证)
源主机通常是目标Windows环境中的已经拿到权限的系统。
在大多数情况下,第一台主机的权限往往通过鱼叉式邮件钓鱼攻击获得(邮件中插入恶意附件或者伪造的钓鱼网页)。
这里插一句,邮件钓鱼只是获取目标内网权限的方式之一。由于目标网管的水平参差不齐,所以利用Web漏洞拿到DMZ区的权限,进而渗透进企业内网进行横向移动,也是一个比较普遍的方式。
在大多数情况下一旦攻击成功,攻击者通常会通过向远程的CC服务器反弹shell进而对该机器进行控制。提升权限后,攻击者可以dump该机器中的登录凭证,并使用这些凭证访问另一台主机。
因此,总结一下横向移动攻击总共分为两步:
1、从当前被控主机中抓取凭证
攻击者在当前被控主机中抓取有效的凭证。凭证的抓取方式一般通过安全工具从内存中抓取(当然通过键盘记录获得明文密码也是一种思路,但不是本文讨论的范围)。本文主要介绍窃取和滥用NT hash和Kerberos凭证。
攻击者可以再被接管的机器中抓取凭证,这些凭证可能是正在使用或者之前使用过(Cached and Stored Credentials Technical Overview,http://support.microsoft.com/kb/2871997 )。
比较有价值的凭证有:目标域环境的高权限账号,像帮助台、域管理员、高权限服务的账号、或者本地管理员账号。在很多情况下,密码是通杀的,即密码是有规律或者同一密码在大量的服务中被使用。
2、使用抓到的凭证去登陆其他的机器或服务
登陆凭证被盗后,攻击者可以使用hash传递攻击或者Kerberos票据传递攻击的方式访问其他资源,比如说主机或服务(例如Exchange e-mail帐户)。关于这两种攻击的方式可以参考附录中文章。
这里介绍几种攻击场景:
如果没有安装更新补丁的情况下,只要有任意用户之前登陆过这台被接管的机器,攻击者均可以再内存中将该登陆凭证dump出来。
Windows会在内存中缓存登陆凭据以提供单点登录等功能:
使用网络登录或RDP(远程桌面)[限制管理模式登录]到被接管的目标主机的帐户是不会被公开或者缓存到本地内存中。
当采用其他类型的登陆方式时(包括本地登陆,通过域用户或服务账户登陆)有关凭证缓存的更多详细信息,可以参考后面的文章。
有价值的凭证不仅仅局限于明文的用户名、密码。用于请求Kerberos TGT的NT hash,Kerberos票证、Kerberos密钥在横向移动的过程中也存在价值。
攻击者需要管理员权限才能访问本地内存中的凭证(即Windows安全帐户管理器,凭证管理器或lsass进程),可以参考这篇文章:Pass the Hash。如果被接管的用户当前权限较低,可以借助本地权限提升漏洞进行提权。
横向移动不限于访问另一个工作站,也可以用于访问其他资源,例如Exchange服务器或业务一同。
横向移动使用标准协议,如Kerberos和NTLM协议,这使得无法创建专用Windows事件、IDS规则用于检测这种攻击行为。
横向移动攻击的优点之一是攻击者可以抓取凭证并在以后使用它们。
横向移动不仅仅局限于Windows,因为任何使用单点登录的身份验证协议都存在类似的问题。
任何单点登录解决方案都需要以某种有效格式存储凭证,以便它们可以重复使用对其他服务进行身份验证,而无需每次都重新输入密码。
APT攻击中使用横向移动的经典案例
一般来说,APT攻击中有很多情况下都是从一个工作站横向移动到另一个工作站,以期待可以获得高权限账号,直到拿到域管理员登陆凭证为止。
攻击的下一步通常是访问域控制器并dump Windows域用户的全部登陆凭证。
下图展示了APT攻击中横向移动的典型攻击场景:
凭证缓存
正如前一节所述,用户连接到或运行命令(例如在执行RDP(受限制管理模式除外)或runas命令时),登陆凭据(包括域用户或管理员)会缓存在工作站的内存中。
下表总结了,当用户user1已登录主机的状态下,user2(admin用户)的Kerberos TGT票证的缓存情况。
因此,由于user2用户登陆过user1的机器,当user1的机器被攻击者接管,user2的账号凭证也会被攻击者抓到。Microsoft的指导手册提供了有关目标主机上公开的可复用凭据的更详尽的总结(见文末参考链接)。
基于以管理员身份运行的Windows功能的用例,它授予完整的管理员访问token(UAC)。管理员使用runas命令打开应用程序(例如,cmd.exe)时,Windows的行为会有所不同:
当退出应用程序时,以管理员(UAC)身份运行打开,NT hash和ticket仍然保留在内存中。
当使用runas /user:\\dom\user2命令,登陆凭证将会在内存中清除。
有趣的是,最后一种情况(缓存的交互式登录,以管理员身份运行,后面跟着一个netlogon)不需要重新输入netlogon的密码。
注:
所有测试均在非特权交互式会话上完成(在user1的控制台上登录)。
网络登录不是持久的。
测试是通过授权开关完成的(帐户敏感并且不能委派功能)。
注销测试是在注销过程中正确关闭或保持打开目标帐户会话的情况下完成。结果仍然一样。
Pass-the-Hash和Pass-the-Ticket
下表总结了利用pass-the-hash和pass-the-ticket之间的主要区别。
一些有趣的结论:
需要管理权限才能窃取凭证,但不使用Kerberos票据。
密码更改不会导致Kerberos票据失效。
0x03 检测Windows横向移动
一般规则
一个合法的SMB连接请求和协议级别的哈希传递攻击、票据传递攻击没有区别。
事实上,这种攻击并没有利用协议的缺陷。因此,没有预定义的规则来检测它们。
然而,攻击者在行为级别创建异常。
译者注:
就是说从协议包的传递过程中通过hash传递攻击和正常的SMB链接请求时一样的,所以无法设置IDS规则,通过网络流量去检测横向移动的攻击行为。
但是可以通过特定高权限账号的登陆行为判断是否存在异常情况。
举个例子,如果域管理员帐户my-admin只能从特定的工作站使用,则my-admin账号如果登陆其他机器则有较大可能存在问题,表明存在潜在的横向移动攻击。
因此,通过监视Windows事件检测横向移动攻击行为是可行的。
我们可以定义如下规则用于检测横向移动行为:
横向移动可以通过特定账户登录未认证的系统进行检测和识别。
有一些重要的限制条件需要理解:
这一规则的落地的实现方法为限制对特权账户横向移动的检测。检测所有的横向运动行为是有难度的。
为此,需要维护一个用户、工作站、IP地址的对应列表,当出现与预期结果不符的情况则予以告警。
但是这样的话,仍然有一些行为是不能被预期的规则检测到。(例如,从预期的用户、工作站访问资源,但是在限定的规则下进行恶意操作。)
实施这些规则的可行性将强烈依赖于定义的策略,活动目录结构和网络隔离。
策略应该要求为需要监控的帐户使用指定主机,例如专用OU、管理员、工作站。
这些工作站的清单必须保持。
对这些账户和工作站的策略越清晰,检测横向移动和避免误报就越有效。
网络隔离将有助于识别横向移动,特别是在Kerberos情况下,因为Kerberos在相关事件中不提供主机名信息。
使用本地帐户(例如本地管理员)检测横向移动需要收集来自所有潜在目标工作站的事件(4624/4625)。这在某些情况下可能无法做到。
由于Windows主要事件存储在域控制器上,所以在监视域帐户时这个问题不太相关。
微软已经推出了两个SID来简化使用GPO的本地管理员账户的操作。
以下部分介绍执行哈希传递攻击和票据传递攻击时生成的事件以及可以设置为检测横向移动的规则。
公约和假设
本文侧重于使用管理员帐户(命名为ADMIN)检测横向移动,并从其自己的ADMIN-WS以外的工作站发起。
可以对相同的规则进行微调以检测其他情况,例如服务帐户或其他特权帐户。
在下面给出的例子中,我们假设:
通过查询Active Directory可以轻松识别域管理员帐户(使用命令:net group "Domain Admins" /domain)
管理员的工作站可以很容易地被识别。
例如:
通过主机名进行识别
维护OU或列表
通过命名规则进行识别,例如admin-ws-1,admin-ws-2等
通过IP地址进行识别
这些工作站有一个专用的VLAN
使用或强制使用跳板机
检测NTLM横向移动(PtH:哈希传递攻击)
生成的事件摘要
下图总结了如果一个域用户在域控制器中被使用,NTLM凭证请求生成的全部事件。
在被接管的工作站(infected-ws)上记录了事件4648:使用显式凭据尝试登录
这里产生的事件取决于攻击者的操作方式。在这种情况下,攻击者运行一个psexec.exe \\Target cmd.exe,它使用先前注入的NT hash在目标主机上打开命令提示符。更多细节见附录C。
被接管的工作站上的事件对于取证时非常有用,但主动检测hash传递攻击则效率不高。
在这种情况下,该事件提供了横向移动的目的主机名,clean-ws。
在域控制器上记录两个事件4776:域控制器试图验证帐户的凭据
第一个事件4776在机器验证过程中生成,clean-ws$到域控制器。这个事件对于检测pass-the-hash用处不大。
第二个事件4776表示当访问目标工作站clean-ws时,帐户my-admin的确认信息。该事件表明存在横向移动行为,其为监控横向移动攻击行为的关键事件。
目标主机上记录的事件4624(clean-ws):已成功登录帐户
此事件表示目标用户my-admin在目标工作站上clean-ws成功登录。
该事件可用于检测横向移动,但需要从所有工作站收集特定日志。对于数量有限的工作站或服务器来说还是比较实用的。
无论如何,此事件和登录失败事件4625对于取证目的非常有用,因为它们提供了登录类型(本例中为网络登录),同时还包含攻击者从何处发起连接的来源信息(infected-ws)。
登录目标主机的事件4634/4647:已注销帐户/已启动帐户。
此事件表明攻击者已注销。这对于取证来说用处比较大,可以通过事件4624的登录ID值和此事件来确定攻击的完整会话。
通用检测规则
本节提供从各个来源收集的事件以及可用于检测NTLM横向移动的值。
如上所述,要监视的主要事件 – 4776位于域控制器(DC)上。事件4624和4625(登陆失败)是可选的,但建议从关键系统上收集该事件信息。
注意:不要忽略工作站上事件日志,特别是那些敏感或特权帐户的事件日志。
检测Kerberos横向移动(Pass-the-Ticket)
生成的事件ID
下图显示了在执行Kerberos身份验证时每端生成的事件摘要信息。详细的事件信息参考下文。
这个场景没有生成关于pass-the-hash的事件4648。
登录到域控制器的事件4768:请求了Kerberos身份验证票据(TGT)。
生成第一个事件4768以向域控制器请求Kerberos TGT票据。该事件可能在pass-the-ticket攻击过程中看不到,因为TGT票据先前被抓到注入在攻击请求中,而不会再次向Kerberos密钥分发中心、域控制器发起新的请求。
登录到域控制器的事件4769:请求了Kerberos服务票据。
生成此事件以请求访问目标系统或资源,在上例中为clean-ws$。
该事件可以用于检测横向移动行为。
目标主机(clean-ws)登录事件4624:帐户已成功登录
此事件表明用户(my-admin)的在目标系统(clean-ws)的登陆情况。该事件可以应用于主动检测横向移动行为,但需要从所有工作站收集日志信息。
对于数量有限的工作站或服务器来说仍然有用。
在任何情况下,登录失败事件4625对于取证来说非常有用,因为它提供了登录类型(在这种情况下为网络登录),更有趣的是攻击者从何处(infected-ws)发起连接的信息也会记录。
事件4634/4647:已注销帐户/已启动帐户。
此事件表明攻击者已注销。这对于取证来说很有用,通过事件4624的登录ID值和此事件来确定攻击的完整会话。
通用检测规则
本部分提供从各个来源收集的事件以及可用于通过票据传递攻击进行横向移动的事件ID。
如上所述,要监控的主要事件位于域控制器(DC)4769和潜在的4768。需要注意的是,Kerberos事件不提供主机名,所以只能严重IP地址,对于启用DHCP的环境来说,这是一个问题。
事件4624和4625(失败尝试)也是可选做监控的对象,但由于垃圾信息太多,建议从关键系统收集。
可能存在误报的事件ID:
值得注意的是,如果管理员(例如帮助台)正在远程主机上打开应用程序(例如,执行远程访问,然后是带有runas管理员的cmd.exe),则可能会生成事件4768。
检测Golden Ticket
重点账号监控
本文档中描述的监控规则基于域管理员帐户。其他重要账户也需要被监控:
服务账号(例如备份账号)
很少使用的账号
紧急账号
关键业务账号
其他监控事件
可以看一下NSA发的这篇文章(https://www.iad.gov/iad/library/reports/spotting-the-adversary-with-windows-event-log-monitoring.cfm)。这篇文章提供了有助于检测潜在攻击的附加事件。该报告涵盖了广泛的事件和攻击类型,不仅是横向移动。
0x04 技术名称释义
Pass-the-hash:哈希传递攻击,一种攻击技术,允许攻击者通过使用先前抓到的用户密码的NTLM或LanMan hash来验证远程服务器/服务,而不需要输入明文密码进行登陆。
Pass-the-ticket:票据传递攻击,类似于Pass-the-hash,但是使用Kerberos票据而不使用NT hash。
Credentials:认证凭证,不仅仅局限于明文密码,可以使Windows NTLM hash或Kerberos Ticket。具体是什么取决去采用何种Windows身份认证协议。
有些情况下,Windows将登陆凭证缓存在内存中用于提供单点登陆功能。本文重点介绍的是TGT和Kerberos票据。
TGT and ST Kerberos tickets: TGT和服务票据是Kerberos协议的一部分。
KDC:密钥分发中心
0x05 参考链接
[1]Mitigating Pass-the-Hash (PtH) Attacks and Other Credential Theft Techniques http://www. Pass the Hash
[2]Kerberos Authentication Technical Reference TechNet Library Home cc739058(v=ws.10).aspx
[3]Chapter 3 – Recovering from Active Directory Attacks Resources and Tools for IT Professionals library/bb727066.aspx#ECAA
[4]Credential Protection and Management Credentials Protection and Management. aspx
[5]Windows events https://www.ultimatewindowssecurity.com/securitylog/encyclopedia/Default.
aspx
[6]Windows 7 and 2008 Security events Windows, Office, Xbox & More 50034
[7]Techniques for spotting an adversary https://www.iad.gov/iad/library/reports/spotting-the-adversary-with-windows-event-log-monitoring.cfm
[8]Protection from Kerberos Golden Ticket http://cert.europa.eu/static/WhitePapers/UPDATED%20-%20CERT-EU_Security_Whitepaper_2014-007_Kerberos_Golden_Ticket_Protection_v1_4.pdf
0x06 详细事件信息
本节详细介绍由哈希传递攻击和票据传递攻击场景中生成的事件信息,并用log2timeline报告。
被接管的工作站:USER-WS (192.168.89.101)
目标用户:my-admin
目标主机:admin-ws(192.168.89.102)
域名:corp.pass.thehash
网络登录和哈希传递攻击事件
域控制器事件
-PackageName = MICROSOFT_AUTHENTICATION_PACKAGE_V1_0-TargetUserName = my-admin-Workstation = USER-WS-Status = 0x00000000Command: `psexec.exe \\admin-ws cmd.exe`Comment: The domain controller attempted to validate the credentials for an accountTime: 06:33:37Event: 4776Event content:-PackageName = MICROSOFT_AUTHENTICATION_PACKAGE_V1_0-TargetUserName = my-admin-Workstation = USER-WS-Status = 0x00000000Command: robocopy.exe c:\goodies\sch \\admin-ws\c$Comment: The domain controller attempted to validate the credentials for an accountTime: 06:34:16Event: 4776Event content:-PackageName = MICROSOFT_AUTHENTICATION_PACKAGE_V1_0-TargetUserName = my-admin-Workstation = USER-WS-Status = 0x00000000Command: at.exe \\admin-ws 06:35 c:\schedule.batComment: The domain controller attempted to validate the credentials for an account
源主机/被接管的主机事件(user-ws)
Time: 06:32:44Event: 4624Event content:-SubjectUserSid = S-1-5-18 SubjectUserName = USER-WS$-SubjectDomainName = CORP-SubjectLogonId = 0x00000000000003e7 TargetUserSid = S-1-5-18 TargetUserName = SYSTEM TargetDomainName = NT AUTHORITY TargetLogonId = 0x00000000001046e9-LogonType = 9-LogonProcessName = seclogo-AuthenticationPackageName = Negotiate-WorkstationName = LogonGuid = {00000000-0000-0000-0000-000000000000}-TransmittedServices = - LmPackageName = - KeyLength = 0 ProcessId = 0x00000000000003b4-ProcessName = C:/Windows/System32/svchost.exe IpAddress = ::1 IpPort = 0Command: sekurlsa::pth /user:my-admin /domain:corp /ntlm:[nt hash] /run:cmd.exeComment: Succesful logon, TargetLogonId = 0x00000000001046e9Time: 06:32:44Event: 4672Event content:-SubjectUserSid = S-1-5-18 SubjectUserName = SYSTEM SubjectDomainName = NT AUTHORITY-SubjectLogonId = 0x00000000001046e912-PrivilegeList = SeCreateTokenPrivilege SeAssignPrimaryTokenPrivilege SeTcbPrivilege SeSecurityPrivilege SeTakeOwnershipPrivilege SeLoadDriverPrivilege SeBackupPrivilegeSeRestorePrivilege SeDebugPrivilege SeAuditPrivilege SeSystemEnvironmentPrivilegeSeImpersonatePrivilegeComment: Special privileges assigned to new logon, as above. LogonId = 0x00000000001046e9Time: 06:32:55Event: 4648Event content:-SubjectUserSid = S-1-5-18 SubjectUserName = SYSTEM SubjectDomainName = NT AUTHORITY-SubjectLogonId = 0x00000000001046e9 LogonGuid = {00000000-0000-0000-0000-000000000000}-TargetUserName = -------- TargetDomainName = ---- TargetLogonGuid = {00000000-0000-0000-0000-000000000000}-TargetServerName = admin-ws.corp.pass.thehash TargetInfo = admin-ws.corp.pass.thehash-ProcessId = 0x0000000000000004 ProcessName =-IpAddress = - IpPort = -Command: psexec.exe \\admin-ws cmd.exeComment: A logon was attempted using explicit credentials. This event is generated when a process attempts to log on an account by explicitly specifying that accounts credentials. This most commonly occurs in batch-type configurations such as scheduled tasks, or when using the RUNAS command. SubjectLogonId = 0x00000000001046e9Time: 06:32:55Event: 4648Event content:-SubjectUserSid = S-1-5-18 SubjectUserName = SYSTEM SubjectDomainName = NT AUTHORITY-SubjectLogonId = 0x00000000001046e9 LogonGuid = {00000000-0000-0000-0000-000000000000}-TargetUserName = -------- TargetDomainName = ---- TargetLogonGuid = {00000000-0000-0000-0000-000000000000}-TargetServerName = admin-ws.corp.pass.thehash TargetInfo = admin-ws.corp.pass.thehash ProcessId = 0x0000000000000998-ProcessName = C:/goodies/PsExec.exe-IpAddress = - IpPort = -Comment: LogonId = 0x00000000001046e9Time: 06:33:35Event: 4648Event content:-SubjectUserSid = S-1-5-18 SubjectUserName = SYSTEM SubjectDomainName = NT AUTHORITY-SubjectLogonId = 0x00000000001046e9 LogonGuid = {00000000-0000-0000-0000-000000000000}-TargetUserName = -------- TargetDomainName = ---- TargetLogonGuid = {00000000-0000-0000-0000-000000000000}-TargetServerName = admin-ws.corp.pass.thehash TargetInfo = admin-ws.corp.pass.thehash-ProcessId = 0x0000000000000004 ProcessName =-IpAddress = - IpPort = -Command: robocopy.exe c:\goodies\sch \\admin-ws\c$Comment: A logon was attempted using explicit credentials. LogonId = 0x00000000001046e9Time: 06:34:15Event: 4648Event content:-SubjectUserSid = S-1-5-18 SubjectUserName = SYSTEM SubjectDomainName = NT AUTHORITY-SubjectLogonId = 0x00000000001046e9 LogonGuid = {00000000-0000-0000-0000-000000000000}-TargetUserName = -------- TargetDomainName = ---- TargetLogonGuid = {00000000-0000-0000-0000-000000000000}-TargetServerName = admin-ws.corp.pass.thehash TargetInfo = admin-ws.corp.pass.thehash-ProcessId = 0x0000000000000004 ProcessName =-IpAddress = - IpPort = -Command: at.exe \\admin-ws 08:00 c:\schedule.batComment: A logon was attempted using explicit credentials.LogonId = 0x00000000001046e9
目标主机事件(admin-ws)
Time: 06:32:55Event: 4672Event content:-SubjectUserSid = S-1-5-21-2976932740-3244455291-537790045-1105-SubjectUserName = my-admin-SubjectDomainName = CORP SubjectLogonId = 0x00000000000f133c PrivilegeList = SeSecurityPrivilege SeBackupPrivilege SeRestorePrivilege SeTakeOwnershipPrivilege SeDebugPrivilege SeSystemEnvironmentPrivilege SeLoadDriverPrivilegeSeImpersonatePrivilegeComment: Special privileges assigned to new logon.Time: 06:32:55Event: 4624Event content:-SubjectUserSid = S-1-0-0 SubjectUserName = - SubjectDomainName = - SubjectLogonId = 0x0000000000000000 TargetUserSid = S-1-5-21-2976932740-3244455291-537790045-1105-TargetUserName = my-admin-TargetDomainName = CORP-TargetLogonId = 0x00000000000f133c-LogonType = 3-LogonProcessName = NtLmSsp-AuthenticationPackageName = NTLM WorkstationName = USER-WS-LogonGuid = {00000000-0000-0000-0000-000000000000} TransmittedServices = - LmPackageName =NTLM V1 KeyLength = 128 ProcessId = 0x0000000000000000 ProcessName = - IpAddress = 192.168.89.101 IpPort = 49286Command: psexec.exe \\admin-ws cmd.exeComment: Succesful logon. TargetLogonId = 0x00000000000f133cTime: 06:33:32Event: 4634Event content:-TargetUserSid = S-1-5-21-2976932740-3244455291-537790045-1105-TargetUserName = my-admin-TargetDomainName = CORP-TargetLogonId = 0x00000000000f133c-LogonType = 3Comment: TargetLogonId = 0x00000000000f133cTime: 06:33:35Event: 4672Event content:-SubjectUserSid = S-1-5-21-2976932740-3244455291-537790045-1105-SubjectUserName = my-admin-SubjectDomainName = CORP-SubjectLogonId = 0x00000000000f2736-PrivilegeList = SeSecurityPrivilege SeBackupPrivilege SeRestorePrivilege SeTakeOwnershipPrivilege SeDebugPrivilege SeSystemEnvironmentPrivilege SeLoadDriverPrivilege SeImpersonatePrivilegeTime: 06:33:35Event: 4624Event content:-SubjectUserSid = S-1-0-0 SubjectUserName = - SubjectDomainName = - SubjectLogonId = 0x0000000000000000 TargetUserSid = S-1-5-21-2976932740-3244455291-537790045-1105-TargetUserName = my-admin-TargetDomainName = CORP-TargetLogonId = 0x00000000000f273614-LogonType = 3-LogonProcessName = NtLmSsp-AuthenticationPackageName = NTLM-WorkstationName = USER-WS-LogonGuid = {00000000-0000-0000-0000-000000000000} TransmittedServices = - LmPackageName = NTLM V1 KeyLength = 128 ProcessId = 0x0000000000000000 ProcessName = --IpAddress = 192.168.89.101 IpPort = 49298Command: robocopy.exe c:\goodies\sch \\admin-ws\c$Time: 06:34:02Event: 4634Event content:-TargetUserSid = S-1-5-21-2976932740-3244455291-537790045-1105-TargetUserName = my-admin-TargetDomainName = CORP-TargetLogonId = 0x00000000000f2736-LogonType = 3Time: 06:34:15Event: 4672Event content:-SubjectUserSid = S-1-5-21-2976932740-3244455291-537790045-1105-SubjectUserName = my-admin SubjectDomainName = CORP-SubjectLogonId = 0x00000000000f309b-PrivilegeList = SeSecurityPrivilege SeBackupPrivilege SeRestorePrivilegeSeTakeOwnershipPrivilege SeDebugPrivilege SeSystemEnvironmentPrivilege SeLoadDriverPrivilege SeImpersonatePrivilege LogonId = 0x00000000000f309bTime: 06:34:15Event: 4624Event content:-SubjectUserSid = S-1-0-0 SubjectUserName = - SubjectDomainName = - SubjectLogonId = 0x0000000000000000 TargetUserSid = S-1-5-21-2976932740-3244455291-537790045-1105-TargetUserName = my-admin-TargetDomainName = CORP-TargetLogonId = 0x00000000000f309b-LogonType = 3-LogonProcessName = NtLmSsp-AuthenticationPackageName = NTLM-WorkstationName = USER-WS-LogonGuid = {00000000-0000-0000-0000-000000000000} TransmittedServices = - LmPackageName = NTLM V1 KeyLength = 128 ProcessId = 0x0000000000000000 ProcessName = --IpAddress = 192.168.89.101 IpPort = 49299Command: at.exe \\admin-ws 08:00 c:\schedule.batComment: LogonId = 0x00000000000f309bTime: 06:34:26Event: 4634Event content:-TargetUserSid = S-1-5-21-2976932740-3244455291-537790045-1105-TargetUserName = my-admin-TargetDomainName = CORP-TargetLogonId = 0x00000000000f309b-LogonType = 3Comment: LogonId = 0x00000000000f309b
Kerberos认证和票据传递攻击事件
域控制器事件
我们在域控制器上看到Kerberos服务票据从user-ws机器的IP地址(192.168.86.101,event-id 4769)访问admin-ws主机的请求信息。
请注意,没有事件ID 4768(Kerberos TGT请求)。这与票据在攻击中被抓取并重新注入的事实是一致的。
Time: 14:11:12Event: 4769Event content:-TargetUserName = [email protected] = corp-ServiceName = ADMIN-WS$-ServiceSid = S-1-5-21-2976932740-3244455291-537790045-1107-TicketOptions = 0x40810000-TicketEncryptionType = 0x00000012-IpAddress = ::ffff:192.168.89.101 IpPort = 49407-Status = 0x00000000-LogonGuid = {B757831E-D810-CDCC-C1C2-804BB3A2FB2C}-TransmittedServices = -Command: net use \\admin-ws
目标主机事件(admin-ws)
Time: 14:11:12Event: 4624Event content:-SubjectUserSid = S-1-0-0 SubjectUserName = - SubjectDomainName = - SubjectLogonId = 0x0000000000000000-TargetUserSid = S-1-5-21-2976932740-3244455291-537790045-500 TargetUserName = myadmin TargetDomainName = corp-TargetLogonId = 0x000000000051f916-LogonType = 3 LogonProcessName = Kerberos AuthenticationPackageName = Kerberos-WorkstationName =-LogonGuid = {A0706C8D-9BC6-F4D5-1226-FA2A48BB58D9} TransmittedServices = - LmPackageName = - KeyLength = 0 ProcessId = 0x0000000000000000 ProcessName = --IpAddress = 192.168.89.101 IpPort = 49406Command: net use \\admin-wsTime: 14:11:12Event: 4672Event content:-SubjectUserSid = S-1-5-21-2976932740-3244455291-537790045-500 SubjectUserName = myadmin-SubjectDomainName =-SubjectLogonId = 0x000000000051f916-PrivilegeList = SeSecurityPrivilege SeBackupPrivilege SeRestorePrivilegeSeTakeOwnershipPrivilege SeDebugPrivilege SeSystemEnvironmentPrivilege SeLoadDriverPrivilege SeImpersonatePrivilegeCommand: net use \\admin-wsTime: 14:11:3916Event: 4624Event content:-SubjectUserSid = S-1-0-0 SubjectUserName = - SubjectDomainName = - SubjectLogonId = 0x0000000000000000-TargetUserSid = S-1-5-21-2976932740-3244455291-537790045-500 TargetUserName = myadmin TargetDomainName = corp-TargetLogonId = 0x00000000005204ad-LogonType = 3 LogonProcessName = Kerberos AuthenticationPackageName = Kerberos-WorkstationName =-LogonGuid = {B504E2E8-3007-1C03-F480-011559C08D34} TransmittedServices = - LmPackageName = - KeyLength = 0 ProcessId = 0x0000000000000000 ProcessName = --IpAddress = 192.168.89.101 IpPort = 49409Command: psexec.exe \\admin-ws cmd.exeTime: 14:11:39Event: 4672Event content:-SubjectUserSid = S-1-5-21-2976932740-3244455291-537790045-500 SubjectUserName = myadmin SubjectDomainName =-SubjectLogonId = 0x00000000005204ad-PrivilegeList = SeSecurityPrivilege SeBackupPrivilege SeRestorePrivilege SeTakeOwnershipPrivilege SeDebugPrivilege SeSystemEnvironmentPrivilege SeLoadDriverPrivilegeSeImpersonatePrivilegeCommand: psexec.exe \\admin-ws cmd.exe
Security Windows事件
本节描述本文讨论的主要安全事件。
事件ID:4624 帐户已成功登录
Subject:Security ID: %1Account Name: %2Account Domain: %3Logon ID: %4Logon Type: %9New Logon:Security ID: %5Account Name: %6Account Domain: %7Logon ID: %8Logon GUID: %13Process Information:Process ID: %17Process Name: %18Network Information:Workstation Name: %12Source Network Address: %19Source Port: %20Detailed Authentication Information:Logon Process: %1017Authentication Package: %11Transited Services: %14Package Name (NTLM only): %15Key Length: %16This event is generated when a logon session is created. It is generated on the computer that was accessed.The subject fields indicate the account on the local system which requested the logon. This is most commonly a service such as the Server service, or a local process such as Winlogon.exe or Services.exe.The logon type field indicates the kind of logon that occurred. The most common types are 2 (interactive) and 3 (network).The New Logon fields indicate the account for whom the new logon was created, i.e. the account that was logged on.The network fields indicate where a remote logon request originated. Workstation name is not always available and may be left blank in some cases.The authentication information fields provide detailed information about this specific logon request.-Logon GUID is a unique identifier that can be used to correlate this event with a KDC event.-Transited services indicate which intermediate services have participated in this logon request.-Package name indicates which sub-protocol was used among the NTLM protocols.-Key length indicates the length of the generated session key. This will be 0 if no session key was requested.
事件ID:4625 帐户登录失败
Subject:Security ID: %1Account Name: %2Account Domain: %3Logon ID: %4Logon Type: %11Account For Which Logon Failed:Security ID: %5Account Name: %6Account Domain: %7Failure Information:Failure Reason: %9Status: %8Sub Status: %10Process Information:Caller Process ID: %18Caller Process Name: %19Network Information:Workstation Name: %14Source Network Address: %20Source Port: %21Detailed Authentication Information:Logon Process: %12Authentication Package: %13Transited Services: %15Package Name (NTLM only): %1618Key Length: %17This event is generated when a logon request fails. It is generated on the computer where access was attempted.The Subject fields indicate the account on the local system which requested the logon. This is most commonly a service such as the Server service, or a local process such as Winlogon.exe or Services.exe.The Logon Type field indicates the kind of logon that was requested. The most common types are 2 (interactive) and 3 (network).The Process Information fields indicate which account and process on the system requested the logon.The Network Information fields indicate where a remote logon request originated. Workstation name is not always available and may be left blank in some cases.The authentication information fields provide detailed information about this specific logon request.-Transited services indicate which intermediate services have participated in this logon request.-Package name indicates which sub-protocol was used among the NTLM protocols.-Key length indicates the length of the generated session key. This will be 0 if no session key was requested.
事件ID:4634 帐户已注销
Subject:Security ID: %1Account Name: %2Account Domain: %3Logon ID: %4Logon Type: %5This event is generated when a logon session is destroyed. It may be positively correlated with a logon event using the Logon ID value. Logon IDs are only unique between reboots on the same computer.Event ID: 4647User initiated logoff.Subject:Security ID: %1Account Name: %2Account Domain: %3Logon ID: %4This event is generated when a logoff is initiated but the token reference count is not zero and the logon session cannot be destroyed. No further user-initiated activity can occur. This event can be interpreted as a logoff event.
事件ID:4648 使用显式凭据尝试登录
Subject:Security ID: %1Account Name: %2Account Domain: %319Logon ID: %4Logon GUID: %5Account Whose Credentials Were Used:Account Name: %6Account Domain: %7Logon GUID: %8Target Server:Target Server Name: %9Additional Information: %10Process Information:Process ID: %11Process Name: %12Network Information:Network Address: %13Port: %14This event is generated when a process attempts to log on an account by explicitly specifying that accounts credentials. This most commonly occurs in batch-type configurations such as scheduled tasks, or when using the RUNAS command.
事件ID:4672 给新登录用户分配特殊权限
Subject:Security ID: %1Account Name: %2Account Domain: %3Logon ID: %4Privileges: %5
事件ID:4768 请求Kerberos身份验证票据(TGT)
Account Information:Account Name: %1Supplied Realm Name: %2User ID: %3Service Information:Service Name: %4Service ID: %5Network Information:Client Address: %10Client Port: %11Additional Information:Ticket Options: %6Result Code: %7Ticket Encryption Type: %8Pre-Authentication Type: %9Certificate Information:Certificate Issuer Name: %12Certificate Serial Number: %13Certificate Thumbprint: %1420Certificate information is only provided if a certificate was used for pre-authentication.Pre-authentication types, ticket options, encryption types and result codes are defined in RFC 4120.
事件ID:4769 请求Kerberos服务票据
Account Information:Account Name: %1Account Domain: %2Logon GUID: %10Service Information:Service Name: %3Service ID: %4Network Information:Client Address: %7Client Port: %8Additional Information:Ticket Options: %5Ticket Encryption Type: %6Failure Code: %9Transited Services: %11This event is generated every time access is requested to a resource such as a computer or a Windows service. The service name indicates the resource to which access was requested.This event can be correlated with Windows logon events by comparing the Logon GUID fields in each event. The logon event occurs on the machine that was accessed, which is often a different machine than the domain controller which issued the service ticket.Ticket options, encryption types, and failure codes are defined in RFC 4120.
事件ID:4776 域控制器试图验证帐户凭据
Authentication Package: %1Logon Account: %2Source Workstation: %3Error Code: %4
0x07 后记
通过这篇文章可以学习到Windows日志相关的知识,同时接触到了Pass-the-Hash和Pass-the-Ticket的工作原理,以及如何科学的收集日志信息可以做到低误报的针对该类攻击行为的告警。希望对此类知识有兴趣的同学看到本文能有所收获,当然,如行文中有谬误还请不吝赐教。