高级持续威胁- Windows基础设施中的横向移动检测

来源:https://resources.infosecinstitute.com/topic/advance-persistent-threat-lateral-movement-detection-windows-infrastructure-part/

https://media.cert.europa.eu/static/WhitePapers/CERT-EU_SWP_17-002_Lateral_Movements.pdf

https://www.manageengine.com/products/active-directory-audit/kb/windows-security-log-event-id-4625.html

(1)相关攻击工具整理:https://jpcertcc.github.io/ToolAnalysisResultSheet/(产生攻击)

(2)Sysmon的安装和审计策略的配置:https://www.jpcert.or.jp/english/pub/sr/DetectingLateralMovementThroughTrackingEventLogs_version2.pdf(收集数据)

https://baijiahao.baidu.com/s?id=1672182836305846957&wfr=spider&for=pc

https://github.com/SwiftOnSecurity/sysmon-config

(3)导出事件:https://www.cnblogs.com/0day-li/p/14675584.html,可以使用wevtutil工具导出日志文件。(收集数据)

https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/wevtutil

(4)APT-Hunter:https://github.com/ahmedkhlief/APT-Hunter(APT-Hunter是windows事件日志的威胁搜索工具,它由purple team mindset制作,提供隐藏在windows事件日志海洋中的APT运动,以减少发现可疑活动的时间)(检测攻击)

注意:本文中图,是增补的图,原文图缺失

对手从一个系统跳转到另一个系统,他们经常试图获取诸如当前与哪个用户一起运行、拥有什么级别的访问权、系统上运行什么服务以及周围的其他系统是什么等信息。为了实现这一点,他们通常使用合法的windows二进制文件;这些工具可能因攻击而异,但策略是相同的。

考虑到以上的横向运动策略,我们可以说,会发生以下情况:

(1)衍生进程Spawned Processes

(2)认证和特权用户帐户

它也被证明,工具将通过网络移动,以促进侦察,特权升级,数据打包,和外泄recon, privilege escalation, data packaging, and exfiltration

一、衍生进程:

按照维基百科的说法,进程衍生:计算中的衍生指的是一个加载并执行新子进程的函数。当前进程可以等待子进程终止,也可以继续执行并发计算。创建新的子进程需要足够的内存,子进程和当前程序都可以在其中执行。

a)进程执行(.exe)

正如我们在本文前面讨论的,从一台机器移动到另一台机器时,威胁行为者收集情报,他们通常通过使用合法的windows二进制文件来确定这一点。

下面是对手可能使用的一些标准程序

net.exe

ipconfig.exe

whoami.exe

nbtstat.exe

powershell.exe

wmic.exe

为了利用这些windows程序,威胁行为者从他们已经利用并可以控制的另一个应用程序启动这些程序,如Internet Explorer、宏加载的word文档。不管他们是使用脚本还是在命令行上输入命令,他们通常会在几分钟或几小时内完成这项工作。

所以,问题是我们如何检测这些活动?这里有Windows事件日志来拯救组织从这些高级持续威胁。

1、Event ID – 4688:已创建新进程

Event 4688记录了程序作为其运行时所执行的每个程序以及启动该进程的进程。默认情况下,进程跟踪的审计策略在窗口中是禁用的;我们必须从Windows本地安全策略中启用它,以充分利用这个过程跟踪审计,同时检测跨网络的横向移动。(https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/manage/component-updates/command-line-process-auditing)描述了启用审计过程跟踪的本地安全策略。

通过查看事件描述,我们可以收集相当多的信息,下面列出的是事件ID 4688的一些关键字段。

安全ID Security ID:帐户的SID。

帐号名 Account Name:帐号登录名。

新进程ID New Process ID:标识进程的半唯一数字。进程ID (PID)允许您关联同一进程中记录的其他事件。要确定程序何时结束,请查找具有相同进程ID的后续事件4689。

新进程名 New Process Name:可执行文件的完整路径

令牌提升类型 Token Elevation Type:这对于检测用户是否在用户帐户控制下运行具有管理权限的程序非常有用——查找Type 2。

创建者进程ID Creator Process ID:标识启动该进程的进程。查找前面的事件4688,其新进程ID与这个Creator进程PID相匹配。

Creator Process Name:这是一个有用的字段,记录了启动这个新进程的程序的名称。

Process Command Line:如果启用该字段,则记录进程启动时传入EXE的命令行参数(包括任何密码)。

微软在其最新的Windows系统中发布了事件ID 4688的附加字段,即“创建者进程名”“Creator Process Name”,它显示父进程名。这使得研究人员在识别父进程时很容易,因为我们必须手动将4688事件id中的pid关联起来。

在windows事件日志和事件ID 4688的帮助下,我们可以查看进程信息并分析下面的数据任务,例如

(1)是否运行的进程是合法的和可执行文件的路径

(2)是否进程的所有者看起来是真实的并且应该执行该进程

(3)进程在其上执行的机器的角色

(4)是否父进程/创建者进程名是合法的并且应该执行子进程

(5)同样的进程会产生这些吗

(6)是否所有派生进程和父进程都属于同一用户

我们可以利用它,识别以下内容,帮助我们在攻击生命周期的早期检测到威胁行为者:

(1)Net.exe、ipconfig.exe、whoami.exe、nbtstat.exe、pwershell.exe、wmic.exe、Cscript.exe等。

(2)堆栈x在一个时间窗口内执行的进程数。

为了演示这一点,我创建了一个示例excel宏文件(你可以从这里得到它),它打开命令提示符并点击命令net.exe用户。运行此excel宏之后,windows安全审计将生成下面的事件。

Sample Excel Macro to validate windows Event ID - 4688

Sub RunAndGetCmd()

Shell "cmd.exe /c net users"

End Sub


在上面的例子中,我们可以清楚地看到,名为“C:WindowsSystem32cmd.exe”的新进程已经被创建,所有者帐户名为“Suresh Khutale”,创建者进程名为“C:Program FilesMicrosoft OfficerootOffice16EXCEL.EXE”。

新创建的进程轮流调用另一个进程“C:WindowsSystem32net.exe”,这是我们在命令net.exe用户中使用的。同样,看看创建的PID,我们可以关联这些东西。

从上面的插图中,它证实了在Windows安全事件的帮助下,我们可以观察生成的进程的真实性,调查它们并追踪在系统上执行的活动是由合法用户或威胁参与者完成的。

b)本地账户和组:

此外,在最常见的横向移动技术中,威胁参与者经常查看系统上的本地组是什么,以枚举成员,所有其他用户都在那里,以及他们在系统上属于哪些组,他们首先妥协。普通用户通常不会查看或尝试枚举这类信息。正如我们所知,每个windows系统或服务器都有本地组,我们可以使用下面截图所示的计算机管理查看这些组和组中的成员。

如上面的截图所示,通过查看本地组和用户帐户,我们可以收集关于组成员的大量信息,他们拥有的特权以及哪些组是重要的,这有助于威胁行动者进一步移动。在这里,我们使用计算机管理(也就是微软管理控制台)来查看这些信息,但在真实的攻击场景中,威胁参与者可能使用脚本、PowerShell命令或窗口api来收集这些信息。

Windows已经发布了一些新的事件,并在最新版本中添加了一些新的字段,这些字段有助于识别攻击生命周期早期威胁行动者正在执行的活动。如果有人试图枚举本地组信息,Windows通常会生成安全事件,无论是使用Microsoft管理控制台(MMC)还是使用命令行PowerShell脚本。

2、Event ID - 4798:用户的本地组成员枚举

这与我们在上述场景中看到的情况相反;在这里,威胁行动者将查看用户的本地组成员身份,并试图找出该用户所属的所有组。让我们看看下面的插图并理解。

正如我们在上图中看到的,当有人试图访问用户的属性(如成员资格)时 someone tries to access the user’s properties such as membership,窗口会生成安全事件ID 4798。第二张截图显示登录用户“Suresh Khutale”已经枚举了用户名“Administrators”的组成员,使用进程mmc.exe。

我们可以说生成的这些活动或事件是合法的,因为用来枚举本地组信息的进程是mmc.exe。在一个真实的场景中,威胁行动者使用远程访问木马(RAT),它利用windows实用程序或工具来收集这种情报,如PowerShell脚本。因此,如果我们发现任何事件ID 4798或4799与进程名看起来可疑,如“C:WindowsSystem32WindowsPowerShellv1.0powershell.exe”,然后我们需要提高警报和进一步调查。

这就是本文的内容,在下一篇文章中,我们将研究第二种技术,即分析身份验证和特权用户帐户活动窗口中的安全事件日志,以检测横向移动。我们还将报道威胁行为者在目标网络中传播所使用的标准工具。

二、身份验证和特权用户帐户活动

在这里,我们需要记住,在穿越网络时,网络攻击者永远不会试图识别和利用每个系统中的漏洞来获得shell访问权限。相反,他们利用合法凭证登录这些系统。他们使用各种技术和工具来提取或转储特权帐户的凭证。

在攻击生命周期的早期检测可疑的身份验证活动对于阻止目标攻击的横向移动非常重要。我们可以跟踪使用特权用户帐户(域或本地管理员帐户)进行的未经授权的活动。

网络攻击者倾向于以域帐户而不是本地特权用户帐户为目标,因为他们可以访问整个网络来执行特权活动。网络攻击者通过使用下列技术之一访问这些帐户:

(1)域控制器或活动目录中的漏洞;

(2)本地系统的密码散列。

那么,我们如何识别对手是否已获得访问权或试图连接网络中的任何系统?在这里,再次使用windows安全事件日志,因为它们跟踪所有与身份验证相关的活动。

对于活动目录基础结构,您可能需要在域控制器级别配置审计策略。以下是一些我们可以监控的重要事件id:

4624:账号登录成功;

•登录类型Logon Type:该字段显示发生的登录类型。换句话说,它指出用户是如何登录的。总共有9种不同的登录类型,最常见的登录类型是:登录类型2(交互式)和登录类型3(网络)。除了5(表示服务启动)之外的任何登录类型都是一个危险标志。

•新登录New Logon:此部分显示为其创建新登录的用户的帐户名和登录ID,一个有助于将此事件与其他事件关联起来的十六进制值。

4625:账号登录失败;

•登录类型:该字段显示尝试登录的类型。换句话说,它指出用户尝试登录的方式。总共有9种不同类型的登录。最常见的登录类型是:登录类型2(交互式)和登录类型3(网络)。除了5(表示服务启动)之外的任何登录类型都是一个危险标志。有关不同登录类型的说明,请参见事件ID 4624。

•登录失败的帐号:此部分显示试图登录的用户的帐号名。

•失败信息:登录失败的原因。失败原因字段包括一个简短的解释,而状态和子状态字段列出了十六进制代码,下面将对最常见的代码进行解释。

4627:组成员信息;

4648:试图使用显式凭据登录;

4672:分配给新登录的特权。

跨各种windows版本的附加事件id

529:未知的用户名或密码

530:登录失败-账户登录时间限制违反

531:当前禁用的帐户

532:用户帐号已过期

533:用户不允许登录到计算机

534:没有授予所请求的用户登录类型

535:账号密码已经过期

536: NetLogon组件未激活

537:登录尝试失败的其他原因

539:帐户锁定

4768: Kerberos身份验证

4776: Kerberos服务票据

1102:清除审计日志

这不是一个全面的列表,而是您可以在监视和分析中包含的关键事件。我们将重点关注上面列出的一些重要事件id,用于横向移动检测分析中使用的身份验证活动。其中一些事件在windows系统中默认是禁用的,所以我们必须从审计策略中启用这些事件.

1、登录类型

在转到事件ID之前,我们需要检查针对身份验证活动生成的每个事件ID中遇到的登录类型。这是一个方便的信息,因为它告诉您用户是如何登录或试图登录到系统的。https://www.ultimatewindowssecurity.com/securitylog/encyclopedia/event.aspx?eventID=4624

2、Event ID 4624:账号登录成功

当使用前面描述的登录类型之一成功登录到系统时,将出现Windows日志事件ID 4624。Windows根据此事件ID跟踪每个成功的登录活动,而不管帐户类型、位置或登录类型。下图显示了在这个事件ID下记录的信息:

本事件的主题部分没有提供任何重要信息,因此可以忽略。以下是帮助我们分析认证活动的一些重要字段:

登录类型Logon type:该字段提供有关用户如何登录到系统的信息,这在识别异常时非常有用。在上面的示例中,我们可以看到登录类型为2,这意味着用户已经在本地登录到系统。

安全ID Security ID:这是登录到系统的帐户的SID。

账号名 Account Name:这是用户登录系统时的账号名,我们可以在上面的截图中看到,账号名为“Suresh Khutale”。

帐户域 Account Domain:这是帐户所属的域名,对于域系统,它将是相应的域名。

登录GUID Logon GUID: GUID帮助将计算机上的身份验证与域控制器上的相应身份验证事件关联起来。

工作站名 Workstation Name:这是用户登录的工作站名。

源网络地址Source Network Address:这是用户登录到目标系统的系统的IP地址。如果登录是在本地初始化的,有时IP地址将是127.0.0.1而不是实际的IP地址。

通过查看上面截图中的字段,我们可以开发场景并微调规则集,以监控可疑活动。重要的是:

查找多个用户相对较短的时间同时登录到终端用户工作站的实例;

同一用户帐户登录到多个主机;

其中,网络登录引用目标系统上的无域帐户。

重要的是要跟踪管理尝试的总数,并分析这些活动,以寻找任何偏差,如:

尝试的总数;

涉及这些企图的账户或发生这些企图的电脑。

正如我们之前讨论过的提供重要信息的登录类型,我们可以在这些事件的帮助下追踪任何异常,并检测整个网络的横向移动。


3、Event  ID 4625:账号登录失败

Windows在事件ID 4625下跟踪失败活动的帐户日志。它提供关于系统上发生的每次失败登录尝试的有用信息。下图显示了Event ID 4625中的重要字段:

上面截图中的一些字段与事件ID 4624的字段相同。失败信息部分提供了关于帐户登录失败事件的重要信息。下表给出了故障状态的描述,https://www.ultimatewindowssecurity.com/securitylog/encyclopedia/event.aspx?eventid=4625其来源如下:

我们现在可以查找连续失败的登录失败的尝试事件ID 4625,然后是成功登录到系统事件ID 4624。这将提供对远程系统上发生的任何恶意活动的洞察。

4、Event  ID 4627:组成员信息

这是微软在最新版本的windows系统中引入的新的事件ID。它记录了用户所属的所有嵌套组的组成员关系。该事件ID在windows中默认是禁用的。因此,我们必须在windows审计策略中启用“审计组策略”和“审计登录”特性。

下图显示了在这个事件ID下记录的信息:

我们可以看到,除了Group Membership部分之外,所有其他字段对于前面描述的其他安全事件都是通用的。帐户名account name 是用户最近登录的帐户名,对应于Event ID 4624。

组成员Group Membership:本节记录用户登录时所属的所有组,具体如下:

用户所属的Local和Domain组;

具有特殊权利的用户;

所有组和嵌套的组成员关系。

在这里,帐户名account name“Suresh Khutale”已用于登录系统,是各种组的成员,如上面截图突出显示的“Administrators”。

我们知道,当网络攻击者发起凭据伪攻击credential artifact attacks时,他们通常会使用特权帐户登录。通过将事件ID 4627与事件ID 4624关联起来,我们可能会看到一些有趣的事实,比如使用特权帐户登录到正常系统。

在Event ID 4627的帮助下,我们现在可以微调规则集并可视化可疑活动。例如,如果登录的帐户属于一个特权组,如Domain_Administators或Administrators,这将引起严重的关注。

5、4648:试图使用显式凭据登录

这是一个非常有用的事件,通过显式地提供一组单独的凭据来跟踪几个特权活动。每当用户尝试使用替代凭据在本地运行程序时,Windows都会记录此事件ID。事件ID 4648的一个典型示例是,当用户通过指定其他人的凭证映射远程服务器的共享驱动器时。

为了演示这一点,我创建了一个具有管理员组权限的本地用户“test”。我将启动一个名为Chrome.exe的程序,以不同的用户运行。如下面的截图所示:

在上述凭据成功登录后,windows将记录事件ID 4648。下面的截图显示了在事件ID 4648下为上述显式登录活动记录的信息。

正如我们在上面的截图中看到的,名为“test”的帐户 account被用于显式登录。进程名DpHostW.exe是与HP ProtectTools安全管理器关联的文件。https://frsecure.com/blog/rdp-connection-event-logs/

此外,通过查看事件ID 4638,我们可以收集更多信息,如发起该活动的个人信息。

每当记录事件ID 4648时,它后面都跟着事件ID 4624和4627。下面的截图显示了针对用户“test”的4648事件ID记录的这些事件的详细信息。

现在,我们将查找使用显式凭证启动的确切流程。这是Chrome.exe。我们将看到事件ID 4688后面跟着事件ID 4648,如下面的截图所示:

现在我们将简要回顾一些网络攻击者使用的常用工具。他们经常将这些工具转移到管理共享中,比如(ADMIN$, IPC$, C$)。要查看它们,我们可以使用事件ID 5145。

PsExec.exe:这是由Sysinternals开发的。它能够执行管理活动,如上传、执行和与远程主机上的可执行文件交互。这个程序可以从命令行脚本使用,杀毒软件不会标记它。网络攻击者专门使用这个程序来避免被发现。

我们还可以通过探测事件日志来查找PsExec.exe执行的实例,并根据事件ID 5145堆叠审计日志。

PowerShell.exe:这是微软的面向对象脚本程序;所有最新版本的Windows都有这个功能。它是一个非常强大的工具,Cyber攻击者经常使用它来捕获内存中的凭证、修改配置和从一个系统横向移动到下一个系统。

通过查看Event ID 4688(在第1部分中讨论),可以识别生成的进程安全日志并分析PowerShell调用的合法性。PowerShell审计是检测恶意PowerShell活动的另一种方法。

WMI和WinRM: Windows Management Instrumentation也是Windows中的一个内置程序。它是WMI的一个衍生进程,可以用于:

启动远程进程;

查询系统信息;

存储在传统意义上不接触磁盘的持久恶意软件。

网络攻击者利用WinRM枚举系统情报来识别要攻击的目标。

At Jobs:与WMI类似,At作业用于调度和启动具有本地管理权限的远程系统上的进程。网络攻击者使用此程序通过任务调度程序远程执行脚本、启动工具、删除已执行的工具等。

这还伴随着TaskScheduler/Operational事件日志特性,可以用于远程检测可疑的At作业。

远程桌面(RDP):

远程桌面用于在不中断用户会话的情况下连接到远程系统。RDP连接很容易被网络攻击者检测到。

常用密码散列转储工具:

以下是Cyber攻击者用来转储密码哈希值、授权令牌等的一些知名工具和脚本:

Mimikatz (steal password hash/pass the hash method)

Mimikatz (steal ticket/pass the ticket method)

Windows Credentials Editor (WCE)

PWDump7

PWDumpX

Quarks PwDump

你可能感兴趣的:(高级持续威胁- Windows基础设施中的横向移动检测)