本文目录
0x01 概述
0x02 Windows日志简介
0x03 日志"登录类型"解析
0x04 场景1:系统启动
0x05 场景2:远程控制
5.1 IPC连接
5.2 PSEXEC
5.3 WMIC
5.4 WinRM
5.4.1 winrs
5.4.2 PsRemoting
5.5 SharpRDP.exe
0x06 场景3:MSSQL命令执行
0x07 总结
0x01 概述
在初步的应急响应后,我们会得到可疑的恶意代码、日志文件、可能还有其他的记录,具体的参考之前的《Windows应急响应入门手册》。这个时候,我们就要进一步对这些文件进行分析:对恶意代码进行逆向、分析日志文件、梳理入侵时间线和入侵路径等。本文将以《内网渗透之远程控制》里的入侵方法举例对Windows日志进行分析取证。
本次实验环境:
靶机环境:
win2008:192.168.80.134 WIN-0UUSJBBOI8S\administrator/bluedon123,.
win2012:192.168.80.133 administrator/win2012!@
数据库环境:Microsoft SQL Server 2008 R2:192.168.80.129
本机环境:win10:192.168.80.1 foxyu_pc\fox-yu
0x02 Windows日志简介
Windows的日志文件主要有系统日志、应用程序日志、安全日志这三类,另外,根据不同的系统服务配置可能还会产生其他的日志文件,如Powershell日志、WWW日志、FTP日志、DNS服务器日志等。这些日志文件由Windows的EventLog服务生成并记录,EventLog服务由Windows服务管理器(%SystemRoot%\system32\services.exe)启动并管理。
常用日志:
系统日志:系统日志包含由Windows系统组件记录的事件,记录系统进程和设备驱动程序的活动。由它审核的系统事件包括启动失败的设备驱动程序、硬件错误、重复的IP地址以及服务启动、暂停和停止。系统日志也记录启动期间要加载的驱动程序或其他系统组件的故障,记录的事件类型也是预先确定的。
安全日志:安全日志记录各种系统审核和安全处理,包括用户权限的变化、文件和目录的访问、打印以及用户系统登陆和注销,如有效或无效的登陆尝试、与资源使用有关的事件。管理员有按需要指定安全日志中要记录的事件类型,安全日志只有系统管理员可以访问。
应用日志:应用程序日志包含计算机系统中的用户程序和商业程序在运行时出现的错误活动,它审核的事件包括所有应用程序产生的错误以及其他报告的信息,如性能监视审核的事件或一般程序事件。记录事件的种类大致有:硬盘使用情况、数据库文件的文件错误、设备驱动程序加载失败、用户登录系统失败计数等。
PowerShell日志:在执行任何PowerShell命令或脚本时,无论是本地还是通过远程处理,Windows都会将事件写入以下三个日志文件:
Windows PowerShell.evtx
Microsoft-Windows-PowerShell/Operational.evtx
Microsoft-Windows-PowerShell/Analytic.etl
Windows远程管理日志:Windows远程管理(WinRM)日志记录了Windows远程管理服务的所有操作
Microsoft-Windows-WinRM/Operational.evtx
Microsoft-Windows-WinRM/Analytic.etl
Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/perational.evtx
Microsoft-Windows-TerminalServices-RemoteConnectionManager/perational.evtx
Microsoft-Windows-TerminalServices-LocalSessionManager/perational.evtx
0x03 日志"登录类型"解析
当我们分析用户登录记录的时候就会发现,在Windows系统的安全日志中,有一个“登录类型”的说明。其实这个登陆类型就是记录了用户登录到Windows系统的方式,感兴趣的朋友可以上百度搜一下详细说明,这里我们简单了解几种常见的:
登录类型2:交互式登录(Interactive)
所谓交互式登录就是指用户在计算机的控制台上进行的登录,也就是在本地键盘上进行的登录。
场景:本地电脑登录、PSEXEC、KVM登录
登录类型3:网络(Network)
当你从网络的上访问一台计算机时在大多数情况下Windows记为类型3,最常见的情况就是连接到共享文件夹或者共享打印机时。另外大多数情况下通过网络登录IIS时也被记为这种类型,但基本验证方式的IIS登录是个例外,它将被记为类型8,下面将讲述。
场景:IPC、WMIC、WinRM
登录类型5:服务(Service)
在Windows系统中,每种服务都被配置在某个特定的用户账户下运行,当一个服务开始时,Windows首先为这个特定的用户创建一个登录会话,这将被记为类型5。
登录类型7:解锁(Unlock)
你可能希望当一个用户离开他的计算机时相应的工作站自动开始一个密码保护的屏保,当一个用户回来解锁时,Windows就把这种解锁操作认为是一个类型7的登录,失败的类型7登录表明有人输入了错误的密码或者有人在尝试解锁计算机。
场景:解锁
登录类型8:网络明文(NetworkCleartext)
这种登录表明这是一个像类型3一样的网络登录,但是这种登录的密码在网络上是通过明文传输的,WindowsServer服务是不允许通过明文验证连接到共享文件夹或打印机的,据我所知只有当从一个使用Advapi的ASP脚本登录或者一个用户使用基本验证方式登录IIS才会是这种登录类型。“登录过程”栏都将列出Advapi。
登录类型10:远程交互(RemoteInteractive)
当你通过终端服务、远程桌面或远程协助访问计算机时,Windows将记为类型10,以便与真正的控制台登录相区别,注意XP之前的版本不支持这种登录类型,比如Windows2000仍然会把终端服务登录记为类型2。
场景:3389登陆、SharpRDP
0x04 场景1:系统启动
当我们电脑开机时,常常会产生大量的安全日志:
其中,【事件ID 4608】表示Windows正在启动。之后伴随着一条特殊的登陆成功记录,为什么说特殊呢?因为这一条【事件ID 4624】登陆成功记录中的登陆类型为:0
之后便是许多登陆类型为5的登陆成功记录。
这个很好理解,上面说到登陆类型5,代表是服务账户登陆,而我们的Windows系统启动时,就会有许多服务启动,因此会有许多服务账户登陆记录。然后是启动防火墙驱动、启动防火墙等其他系统事件。
当Windows系统初始化完成后,就到我们的登陆界面了。当我们通过登陆界面登陆时,会产生4条记录如下:
【事件ID 4776】计算机试图验证帐户的凭据。记录了登陆用户名、来源机器名。
【事件ID 4684】试图使用显式凭据登录。同样记录了登陆用户名、来源机器名、来源地址。进程名为:C:\Windows\System32\winlogon.exe
【事件ID 4624】登陆成功。登陆类型2,也就是在本地键盘上进行的登录。
【事件ID 4672】为新登录分配了特殊权限。记录了登陆用户名、登陆用户权限。
其中,4684表示我们是通过登陆界面登陆的。而其他三条,是正常使用账号密码进行登陆都会产生的。也就是说,登录一次产生3条日志:验证凭据、登陆成功、分配权限。
0x05 场景2:远程控制
5.1 IPC连接
首先要分析的还是最经典的IPC连接,执行命令如下:
此时已经成功建立IPC连接,既然涉及到账号密码的登陆,那么我们查看安全日志:
有两条【事件ID 4625】记录,为帐户登陆失败,与我们的操作符合,然后是登陆成功的,登录一次产生3条日志。这里与场景1对比,就少了一个【事件ID 4648】,因为我们不是通过登陆界面进行登陆的。
【事件ID 4776】计算机试图验证帐户的凭据。记录了登陆用户名、来源机器名。
【事件ID 4672】为新登录分配了特殊权限。记录了登陆用户名、登陆用户权限。这里就不截图了。
【事件ID 4624】登陆成功:
这里记录了:
登陆的用户名:Administrator
登录类型:3 网络(Network)
来源主机名:FOXYU_PC
来源IP:192.168.80.1。
其他日志未发现有所记录。
5.2 PSEXEC
执行命令如下:
PsExec.exe \\\192.168.80.134 -u administrator -p bluedon123,. "whoami" -accepteula
安全日志记录如下:
执行上述命令,产生了10条安全日志,我们一个个看:
这三条登陆成功的记录跟我们上面说的一样,不再细说。接下来是一条【事件ID 4625】登陆失败的记录,而且,登陆失败的帐户名是我们本机的用户名:
接下来是4条登陆成功的记录:
可以看到这里的登陆类型居然是2,跟我们系统启动,也就是在本地键盘上进行的登录类型一样。
最后是注销记录,以及再一条使用本地用户名登陆失败的记录。
其实到这里我是有点晕的额,还是没怎么搞懂。于是查了一下psexec的执行原理:
通过ipc$连接,释放psexecsvc.exe到目标服务器上。
通过服务管理SCManager远程创建psexecsvc服务,并启动服务。
客户端连接执行命令,服务端启动相应的程序并执行回显数据。
运行完后删除服务。
结合上面的日志记录,我们就可以梳理出psexec的执行顺序了:
第一次三条登陆成功的日志,是为了建立IPC连接,释放psexecsvc.exe到目标服务器上。然后创建服务、启动服务,具体参照上面的IPC连接分析。
第二次四条登陆成功的记录,是模拟客户端登陆,由服务启动相应的程序并执行回显数据。
这里涉及到服务的创建和启动,那么我们可以再查看一下系统日志:
产生3条日志:
【事件ID 7045】服务创建,记录了:
服务名称(PSEXESVC)、服务文件名(%SystemRoot%\PSEXESVC.exe)、服务启动类型(按需启动)、服务帐户(LocalSystem)等。
【事件ID 7036】服务运行状态,分别有正在运行状态和停止状态。
PS: 另外这里再提一下,网上看到说psexec可能会遇到退出的时候,服务不能删除,我本地测试的时候没遇得到这种情况,但是我在使用交互式cmd的时候,查看系统服务和启动项分别有以下记录,虽然结束掉shell就消失了,所以不知道网上说的服务没删除是不是这种情况:
5.3 WMIC
WMIC远程控制有多种方式,这里以wmiexec.vbs进行测试,命令如下:
cscript.exe "wmiexec.vbs" /cmd 192.168.80.134 administrator bluedon123,. "whoami"
查看安全日志,这种方式产生了16条日志记录:
从最后的4条【事件ID 4634】注销账户可以知道,共登陆了4次。
每一次登陆产生的日志都跟上面分析的一样:验证凭据、登陆成功、分配权限、注销。且登陆类型都为3,与上面一样,这里不再详细分析。
5.4 WinRM
5.4.1 winrs
具体配置请看之前的文章《内网渗透之远程控制》,然后执行如下命令:
winrs -r:http://192.168.80.133:5985 -u:administrator -p:win2012!@ "whoami"
安全日志:在安全日志中同样产生3条记录:
验证凭据、登陆成功、分配权限。其中登陆类型为3
Windows远程管理日志:WinRM代表Windows远程管理,因此我们还可以查看一下Windows远程管理日志:
Microsoft-Windows-WinRM/Operational.evtx:
【事件ID 91】 表示会话的创建,从这里也可以看出有远程管理的记录。
5.4.2 PsRemoting
这里我们还要测试一下WinRM的另一种执行命令方法:PsRemoting,因为这种方法是通过powershell,因此会有一些其他的记录,执行如下命令:
Enter-PSSession 192.168.80.133 -Credential administrator
安全日志:安全日志中同样产生3条记录。登陆类型为3,这里不再赘述。
Powershell日志:
Windows PowerShell.evtx:
【事件ID 403】:引擎状态从可用状态更改为停止,记录PowerShell活动结束。
【事件ID 400】:引擎状态从无更改为可用,记录任何本地或远程PowerShell活动的开始;
【事件ID 600】:记录类似“WSMan”等提供程序在系统上进行PowerShell处理活动的开始,比如”Provider WSMan Is Started“;
事件ID 400和事件ID 403,详细信息包括HostName字段。如果在本地执行,则此字段将记录为HostName = ConsoleHost。如果正在使用PowerShell远程处理,则访问的系统将使用HostName = ServerRemoteHost记录这些事件。
虽然这两个事件都不记录与PowerShell活动关联的用户帐户。但是,通过使用这些事件,分析人员可以确定PowerShell会话的持续时间,以及它是在本地运行还是通过远程运行。
远程连接管理日志:
Microsoft-Windows-Windows RM/Operational.evtx
产生4条日志:
【事件ID 91】会话创建。
【事件ID 145】启动WSMan操作验证。
【事件ID 254】活动传送。
【事件ID 132】WSMan操作验证成功完成。
这里虽然没有记录用户名、来源等,但是通过这些记录能够知道会话的创建时间。
5.5 SharpRDP.exe
执行如下命令:
SharpRDP.exe computername=192.168.80.134 username=administrator password=bluedon123,. command=calc
安全日志:
从安全日志中的记录中可以看到有三次登陆成功的记录。一个是登陆类型3的,产生3条日志。还有两次使用显式凭据登陆的记录,一次显式凭据登陆产生4条记录,加上注销的共14条记录。
其中两次使用显式凭据登陆的记录,一个登陆类型为10,一个登陆类型为2。翻看上面的记录,可以知道登陆类型10,表示登陆方式为RDP远程桌面登陆,而登陆类型2的则是我们登陆查看的记录。
远程连接管理日志:既然是通过RDP登陆的,那么我们继续查看远程连接管理日志:
Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational.evtx
【事件ID 1149】用户身份验证成功。记录了登陆用户名、来源IP。如果用户名为空白,则表明可能使用sticky Keys。1149并不代表成功登录到目标系统,只是表明RDP客户端和服务端网络连接成功。
【事件ID 261】收到一个RDP-Tcp连接。
Microsoft-Windows-TerminalServices-LocalSessionManager/Operational.evtx
【事件ID 25】会话连接成功。记录了登陆用户名、来源IP。
【事件ID 24】会话断开连接。同样记录了登陆用户名、来源IP。
0x06 场景3:MSSQL命令执行
这里我们直接以内网连接到MSSQL数据库执行命令为测试环境,webshell上的不做考虑,有兴趣的朋友可以自己测试一下。
MSSQL的数据库日志位置如下:
首先先测试一下连接数据库是否有记录:
1、登陆失败:
此时数据库中的记录如下:
其中左边的Windows NT为Windows日志,可以一并查看。这里我们可以看到,当登陆失败的时候,SqlServer和Windows都有日志产生,记录了登陆用户名、客户端IP也就是来源IP以及日志产生时间也就是登陆时间。
那么当内网中有人批量的扫描MSSQL数据库弱口令的时候,我们就能够从日志中找到内网中失陷的主机。毕竟内网中除了渗透人员,谁会去爆破数据库弱口令呢。
2、登陆成功:
这里测试发现,登陆成功在MSSQL数据库中并不会产生日志。因此如果是从其他途径拿到账号密码直接登陆的,我们只能从其他日志上找找痕迹了。
3、执行命令:
MSSQL执行命令有几种方法,这里以常规的xp_cmdshell举例,xp_cmdshell存储过程在MSSQL 2005及以上版本中默认是禁用的。所以我们要先激活 xp_cmdshell,执行如下语句:
产生日志如下:
可以看到,有4条应用日志和4条数据库日志。分别记录了数据库配置项的更改。而一般正常的数据库操作是很少涉及到这两个配置的更改的,因此当发生安全事件时查看数据库日志发现相关记录,就要思考一下是否有可能是通过数据库进来拿到权限的。
接着执行命令:
测试发现,正常执行命令MSSQL日志也没有相关记录,因此如果是内网中通过MSSQL进行渗透的,目前了解到的只能通过登陆失败记录和开启命令执行配置的记录进行溯源。
PS:网上查到的查询用户登录记录语句:
select * from sys.syslogins
select loginname,accdate from sys.syslogins
记录的是本地客户端的登陆记录,远程连接的没有记录到。如果有其他方法,希望各位师傅能指导一下,不胜感激。
0x07 总结
1、归纳了常见远程控制各自会产生什么日志,其中登陆类型总结如下:
远程控制方式 | 登陆记录 |
---|---|
IPC连接 | 登陆一次,登陆类型3 |
PSEXEC | 登陆两次,一次IPC连接、登陆类型3。一次模拟客户端登陆,登陆类型2。 |
WMIC | 登陆四次,登陆类型都为3 |
WinRMI | 登陆一次,登陆类型3 |
SharpRDP | 登陆两次,一次登陆类型3,一次登陆类型10。 |
为什么要记住这些登陆类型呢?举个例子,当感染恶意程序的主机为个人终端,而我们又在日志记录发现登陆类型为3的登陆成功的记录,那么我们是不是可以大胆猜测攻击来源是内网中的某一台机器呢?
2、凡是涉及到powershell的,可以查看powershell相关日志,无论是本地还是通过远程处理,Windows都会将事件写入以下三个日志文件:
Windows PowerShell.evtx
Microsoft-Windows-PowerShell/Operational.evtx
Microsoft-Windows-PowerShell/Analytic.etl
3、如果是远程管理相关的操作,可以查看一下两个日志文件:
Microsoft-Windows-Windows Remote Management/Operational.evtx
Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational.evtx
Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational.evtx
Microsoft-Windows-TerminalServices-LocalSessionManager/Operational.evtx
日志分析的最终目的是要知道入侵者使用的手法、入侵的时间线以及入侵来源。但是由于日志本身特殊性,我们无法具体的查看每一条记录,因此还是要配合前期的应急响应所发现的相关痕迹,借助一些辅助工具进行针对性的分析,这样才能够事半功倍。前期应急响应流程方法参考公众号文章《Windows应急响应入门手册》。
如文章有错误不对的地方,请在"公众号留言",欢迎各位师傅一起学习交流。祝各位师傅升职加薪、洞洞高危。