在正式对每类事件进行分析前,先大概对windows的日志格式进行一个简单的介绍。
每个windows日志都由两部分组成:头字段和描述字段。
头字段是相对内容和格式都固定的部分,包括的信息有:事件的id、日期和时间、事件的结果(成功还是失败)、事件的来源和类别。由于安全日志所有的来源都记为“source”,因此意义不大。而类别就是(一)中提到的9种类别。这里的用户字段用处也不是很大,因为很多事件简单地记为“STSTEM”为用户,所以真正要看是什么用户触发了该条日志还是要看描述字段里面是否有相应的实际用户(这些在随后的日志分析中会涉及到)。
因此很多时候我们需要详细分析描述字段中的信息,这部分出现的信息也会随具体的事件而不同,但是其形式都是为一系列组合信息,每个组合信息是一个内容固定的描述信息(类似占位符的作用),以及后面的动态信息。举个例子来说:ID680事件的描述字段包括:“Logonaccount: Administrator”。这里“Logonaccount:”是固定的前置字段占位符,而后面的“Administrator”则是真实的实例名称,会根据实际的情况而变化。
我们可以打开本地的一条日志,点击描写字段部分的蓝色链接,联网的情况下可以查看到微软的支持中心中对该条日志的详细说明,其中的Message字段通常为以下的内容,很容易看到ID为567的这条日志的描述字段包括7个字段信息,说明其中有7个变量存在,其内容由实际情况生成。
Object Access Attempt:
Object Server: %1
Handle ID: %2
Object Type: %3
Process ID: %4
Image File Name: %5
Accesses: %6
Access Mask: %7因此从上面可以看到很多关键的信息其实都隐藏在描述字段信息中,需要进行仔细地分析!
最后再简单地说下windows自身存储策略的设置:根据Randy大神的经验,最大不要超过199M,200M的话可能会对windows的性能和稳定性有一定影响(这点不好进行实验验证)。此外不论配置最大空间为多少,迟早会有满的时候。所以Randy建议选择“不改写事件(手动地清除)”选项,此时一旦日志大小达到上限,windows会停止记录事件。当选择“改写久于X天的事件“时,如果事件的产生速度很快,在未过期前就达到了上限,windows同样是停止记录日志直到某些日志过期。以下是网上对于这些保存设置的说明和建议,所以如何设置也是在安全性、易维护性等方面权衡了。
按需要改写事件 当日志已满时继续写入新的事件。每个新事件替换日志中时间最旧的事件。该选项对维护要求低的系统是一个不错的选择。 改写久于 [x]天的事件 保留位于指定改写事件的天数之前的日志。默认值为 7天。如果您想每周存档日志文件,该选项是最佳选择。该策略将丢失重要日志项的几率降到最小,同时保持日志的合理大小。 不改写事件 手动而不是自动清除日志。只有在您无法承受丢失事件时才选中该选项(例如,特别强调安全性的站点的安全性日志)。
最后我们还可以把日志事件另存为本地文件查看,其中txt和csv格式可以较为方便地直接查看,而evt格式需要专门的软件来查看,如LogParser。因此在日志量很多的情况下,还是建议由专门的日志管理产品来完成此功能。
ok,一些情况就简单介绍到这里,下面开始对每类事件进行较为详细的分析,Let’s go!
ok,从本篇终于要开心对windows日志进行分析了,首先从最基本的登录活动开始。这也是任何日志分析最基础的开始,涉及到对用户活动的分析,总要从登录开始咯。等等,在开始这激动人心的时刻之前,我们还是想讲清楚windows登录活动的一些原理,然后再分析相关的日志也不迟:)
从windows2000开始,审核策略选项里面涉及到登录的有两项:分别是“审核帐户登录事件”和“审核登录事件”。那么有些人可能不太明白了,为什么用户的登录要有两类事件来记录呢?ok,这里简单的解释一下(来自Randy大神,具体有待考证)。
在windows2000之前,例如NT的时候windows系统只审核登录事件。这样如果使用域帐户登录某台工作站的话,域控服务器(DC)上是没有该用户的登录记录的,只会记录在被访问的工作站上(当然前提是工作站开启了登录审核)。因此DC不记录域用户的认证活动使得想要对域用户的登录活动进行监控十分困难,得收集整个网络中所有工作站和服务器的安全日志。因此呢,微软从windows2000开始增加了一个新的特色功能,也就是“审核帐户登录事件”。但是这个叫法与原来的“审核登录事件”很像,容易让人产生混淆。因此Randy大神认为称之为“审核认证事件”更为恰当!也就是说在windows中认证和登录活动是相关但是不同的两个活动,特别是在它们发生在不同的系统上时表现更为明显!
因此想要有效地使用这两个审计策略,需要很好地理解相关的原理,明白在windows系统中认证和登录是如何发生的。另一个容易让人混淆的是登录使用帐户的类型,是本地还是域帐户,因为这会影响到什么事件记录在哪些系统上。接下来就对windows帐户类型简单介绍下。
windows系统支持两种帐户类型:域帐户(存储在AD中)和本地帐户(存储在本地的SAM文件中)。这样的话也很简单了,使用域帐户登录的话,由DC来完成对用户的认证;如果本地帐户登录的话则由要登录的工作站自己来完成认证。所以需要特别关注使用本地帐户的登录活动,因为攻击者通常会使用本地帐户来进行登录尝试。
接下来我们看看windows的登录方式都有哪些。
windows一共支持5种登录会话类型,都分别描述了用户如何登入系统的方式。本地和域帐户都支持这5种类型。每种登录类型有一个对应的登录权限。登录帐户的类型和登录的方式都会影响到审核日志的具体内容和事件ID,每种类型及其权限如下表所示:
登录类型 登录权限 典型情况 本地交互式:使用本地的控制台登录 本地登录 使用域或者本地帐户登录本地主机 网络方式:从网络上的某个主机访问windows资源 从网络访问主机 例如访问一台主机的某个共享文件夹 远程交换式:通过远程桌面、终端服务或远程帮助登录某个远程主机 运行通过终端服务登录 使用本地mstsc客户端远程登录某台主机 批作业:用于作为一个指定的帐户来运行一个计划任务 作为批作业登录 指定计划任务时指定的以某个具体帐户来运行 服务方式:用于以指定的帐户来运行某个服务 以服务方式登录 指在指定服务运行时以本地系统帐户或者是具体某个帐户运行 当我们尝试网络登录登录时,比如访问某台主机的共享文件夹,工作站默认会再次使用用户登录时输入的凭证。但是用户也可以指定一个不同的本地或者域帐户,例如映射本地磁盘到某个共享文件夹时。
登录VS认证小结
因此,在windows中登录和认证是关联但是不同的两个活动。简言之登录活动发生在最终被访问的主机上,认证活动发生在存储用户帐户的主机上。也就是如果使用本地帐户登录某台主机,该主机同时“看到”认证和登录活动。如果是使用域帐户登录,那么DC可以“看到”认证活动,而被访问的真实主机只“看到”登录活动。
所以“审计帐户登录事件”是主要用于DC上的审计策略,但是在成员工作站上也有用,可以辨识对本地帐户的攻击。
既然通常DC来完成域帐户的认证,那么就会涉及到windows系统支持的2种认证协议:NTLM和Kerberos。
NTLM VSKerberos
当用户使用域帐户登录windows2000及之后版本的操作系统时,工作站首先会尝试通过Kerberos协议联系DC。(如果系统没收到响应的话,会回退使用NTLM)。并且Widows2000及之后的版本使用不同的事件ID记录NTLM和Kerberos活动,所以比较容易区分。由于Kerberos提供了客户端和服务器间的双向认证(NTLM只支持客户端向服务器的认证)。并且NTLM的安全性较Kerberos弱一些,更容易被嗅探数据包进行破解。而且如果外部的攻击者攻击某个域的帐户,通常会看到NTLM认证事件,而不是Kerberos。因为他们不是本域的成员或信任域,登录尝试会使用NTLM。
NTLM和Kerberos协议的工作机理这里暂时不详细说明了,而且由于自己目前对域这一块不是很熟悉,暂且跳过使用域帐户登录方式的日志分析,先从本地用户方式的认证开始。以后有机会再搭建域的实验环境,然后进行使用域帐户的登录活动分析。
ok,终于开始要真枪实干地分析日志了,首先我们对“审计帐户登录事件”下手,也就是用户的认证事件。这里暂时只考虑使用本地帐户进行登录,不包括域用户。以后搭建起来实验环境,对域也比较熟悉后再补上这一课。这里为了排除干扰,每次实验前均清除日志,且只开启要分析类别事件的审计功能。
此次实验均使用windows2003,其它版本的windows系统事件ID和描述可能会有一些出入。
前面已经说过了,windows有5种帐户登录方式,所以我们一个个来看。 1、本地交互式登录,也就是我们每天最常使用的登录方式。如果成功登录的话,会产生ID为680的事件,
如上图所示,我们从中可以获取到的有用信息有:认证事件的时间、结果为成功(审核成功)、登录帐户为“administrator”、(描述中的部分)、被登录的主机名(WIN2003)。接下来看看登录失败是什么记录,这里第1次使用不存在的用户名登录、第2次使用正确的用户名但是错误密码。
从日志中我们可以很遗憾地看到,虽然是登录失败事件,但是事件ID仍然是680(windows2000失败事件ID为681,Windows2003把成功和失败事件都标识为ID680)。但是类型为“审核失败”,并且头字段中的用户名由原来的“Windows2003\Administrator”变成了“NTAUTHORITY\SYSTEM”。描述信息中的登录帐户记录了尝试登录使用的真实用户名,错误代码也会根据认证失败的原因而变化。据微软的说明,每种错误代码对应的原因如下表格:
0xC000006A Anincorrect password was supplied 0xC000006F Theaccount is not allowed to log on at this time 0xC0000064 Theaccount does not exist 0xC0000070 Theaccount is not allowed to log on from this computer 0xC0000071 Thepassword has expired 0xC0000072 Theaccount is disabled
2、使用RDP协议进行远程登录,这也是日常经常遇到的情况。
首先是成功登录,如下图所示,从中可以看到ID仍为680,并且与本地登录没有任何明显区别。并且描述信息中的主机名(源工作站)仍为被尝试登录主机的主机名,而不是源主机名。然后使用不存在的用户名和错误密码分别登录失败1次,产生的日志与第1种一样,所以不再附图。
3、远程访问某台主机的共享资源,如某个共享文件夹。
首先是使用正确的用户名和密码访问远程共享文件夹,如下图所示。从中可以发现头字段和描述字段中的用户名都为访问共享文件夹时使用的用户名,并且描述信息中的源工作站名也为发出访问共享文件夹请求的主机的真实主机名,与头字段中的计算机名字段的主机名不同。
这里说明一下,当访问某个主机的共享资源时,例如在点击“开始—运行”后输入“\\192.168.10.1\share”时,Windows默认使用当前登录的凭证去访问共享资源,如果当前凭证的用户名在被访问主机上不存在或者密码不一致时会产生多条“审核失败”事件,如下图所示。并且会在描述字段中记录真实的用户名和主机名,同样会有错误代码。
此外,如果访问共享资源使用的帐户名、密码正确,但是该用户对指定的共享文件夹没有访问权限时仍然会有ID为680的认证成功事件产生。
4、创建任务计划,并指定以某个用户来执行。
首先使用正确的用户名和密码创建一个任务计划,在该任务计划完成后同样会看到“帐户登录”成功事件,如下图所示。
从图中可以看到头字段中的用户名和描述字段中的用户名都是创建任务计划时指定的有效用户。
如果创建任务计划时输入错误密码,则无法创建任务计划,并且会有“帐户登录”失败日志生成,如右图所示,和一般的认证失败事件没有区别。但奇怪的是使用无效的用户名创建任务计划时没有“帐户登录”失败日志生成。
5、以服务方式运行
启用某个服务,并指定以某个帐户运行。这里同样先使用正确的用户名和密码设置服务,然后手工方式启动服务。可以看到有“帐户登录”的成功事件,如下图所示。从图中可以看到头字段中的用户名和描述字段中的用户名都是开启服务时指定的特定用户。这里说明一下,实验时以某特定用户启动服务但报错,但是会有成功认证的事件生成。如果指定用户为系统默认的“NTAUTHORITY\NetworkService”或“NTAUTHORITY\LocalService”来运行,则密码随意输入也可正常启动服务。且不会有认证事件的日志生成。
如果指定以某特定帐户运行时输入的无效密码,则在服务启动时会报错,且会有“帐户登录”的失败事件生成,如下图所示:
从图中可看到头字段的用户是“SYSTEM”,描述信息中的登录帐户字段才是真正的用户名,并且错误代码指明失败原因是密码错误。
最后我们总结一下,共有5种方式登录Windows主机进行身份认证,分别是:本地交换、远程访问、资源共享访问、任务计划和服务运行。并且从这些日志中我们也可看到有用的信息并不是很多,所以需要配合“登录/登出“事件来一起分析用户的登录行为。ok,那么在下一篇文章我们开始分析“登录/登出“日志,看看它们能否提供更多的信息给我们。
上一篇文章简单分析了用户登录时的认证事件,接下来我们再来看看和之紧密关联的登录/登出事件。
总体来看,登录/登出事件对可以很好地追踪用户在一台主机上完整活动过程的起至点,和登录方式无关。此外可以提供一些“帐户登录”没有的信息,例如登录的类型。此外对终端服务的活动专门用两个事件ID来标识。ok,我们开始分析,同样从5种类型分别进行分析。
1、本地方式的登录和登出
Randy大神在书中只提到了Windows使用两个事件ID528和540记录用户成功的登录(后者对应网络类型的登录),登出使用ID530。然而事实上同时发生的事件不只限于这些,那么让我们来看看用户简单的登录和登出活动至少会触发那些事件。
首先是成功的登录,从日志分析来看至少会有2个事件发生,分别为ID552和528,以下从左到右分别是各自的截图。
现在来各种进行详细分析,首先是ID552事件,该事件说明有人使用身份凭据在尝试登录,并且头字段中的用户名为SYSTEM。看看描述信息中有什么好东西:
使用明确凭据的登录尝试:
(说明有人在尝试登录)
登录的用户:
用户名: WIN2003$ (主机名加了$后缀)
域: WORKGROUP (主机的域名,此例中主机在名称为“WORKGROUP”的工作组中)
登录ID: (0x0,0x3E7)
登录 GUID: -
凭据被使用的用户:
目标用户名: Administrator (登录使用的用户名)
目标域: WIN2003 (要登录的主机名)
目标登录 GUID:- 目标服务器名称:
localhost
目标服务器信息:localhost
调用方进程 ID:1612
源网络地址:127.0.0.1 (从IP地址很容易判断是本地登录)
源端口:0 这里有一点要说明一下,Windows对这条日志的解释是“一个已登录的用户尝试使用另外一个用户凭证创建登录会话,例如使用“RUNAS”命令来运行某个可执行文件”。但事实上第1次用户成功登录后也会产生这个事件。
接着是ID528事件,此时头字段中的用户名也变成真实的用户名,看看描述信息中有什么东西:
登录成功:
(说明用户已成功登录)
用户名: Administrator (登录使用的用户名)
域: WIN2003 (被登录主机所属的域的域名,如果不在域中为主机名)
登录ID: (0x0,0x37BF9) (此登录ID在计算机重启前会保持其唯一性,重启后可能会被再次使用。该ID很重要,因为可以关联用户随后的很多活动如对象访问!)
登录类型: 2 (各种类型含义及数字见后面的表格)
登录进程: User32
身份验证数据包: Negotiate
工作站名: WIN2003 (记录发起登录请求的计算机的Netbios名)
登录 GUID: -
调用方用户名: WIN2003$
调用方域: WORKGROUP
调用方登录ID: (0x0,0x3E7) (注意,此ID和ID552事件描述信息的登录ID是一样的)
调用方进程 ID: 1612
传递服务: -
源网络地址: 127.0.0.1 (同样从IP地址很容易判断是本地登录)
源端口: 0
有意思的事情发生了,ID528事件的调用方登录ID和和ID552的登录ID是一样,那么我们能不能做个大胆的猜想呢?在本地登录成功前,系统本身先已创建了登录会话,然后此会话再创建真实的用户会话。呵呵,只是随便猜猜而已。 登录类型对应含义如下表,上篇文章中常见5种登录方式对应数字分别为2、3、4、5、10。
登录类型ID
登录方式
描述信息
2
Interactive
A user logged on to this computer at theconsole
3
Network
A user or computer logged on to this computerfrom the network
4
Batch
Batch logon type isused by batch servers, where processes might run on behalf of auser without the user's direct intervention
5
Service
A service was startedby the Service Control Manager 7
Unlock
This workstation was unlocked
8
NetworkCleartext
A user logged on to a network and theuser password was passed to the authentication package in itsunhashed (plain text) form. It is possible that the unhashedpassword was passed across the network, for example, when IISperformed basic authentication
9
NewCredentials A caller (process, thread, or program)cloned its current token and specified new credentials for outboundconnections. The new logon session has the same local identity, butit uses different credentials for other network connections. 10 RemoteInteractive A user logged on to this computerremotely using Terminal Services or a Remote Desktopconnection. 11 CachedInteractive A user logged on to this computer withnetwork credentials that were stored locally on the computer. Thedomain controller was not contacted to verify the credentials
此外,如果登录的用户名有某些权限(通过”本地安全策略“分配给该用户),在用户成功登录时还会有ID576事件发生,如下图所示:
描述信息如下:
指派给新登录的特殊权限:
用户名: Administrator
域: WIN2003
登录ID: (0x0,0x37BF9)
特权: SeSecurityPrivilege
SeBackupPrivilege
SeRestorePrivilege
SeTakeOwnershipPrivilege
SeDebugPrivilege
SeSystemEnvironmentPrivi lege
SeLoadDriverPrivilege
SeImpersonatePrivilege 从描述信息中我们可以看到名称为“Administrator”的用户所拥有的权限列表。
接下来看看失败的本地登录,首先是无效用户名、其次是有效用户名但是错误密码。
从图中可以看到,登录失败后会有ID529的事件产生。并且两者头字段的信息没有什么区别,用户名都是“SYSTEM”。那么看看描述信息中有什么信息和区别。
登录失败:
原因: 用户名未知或密码错误
用户名: test1
域: WIN2003
登录类型: 2
登录进程: User32
身份验证数据包: Negotiate
工作站名称: WIN2003
调用方用户名: WIN2003$
调用方域: WORKGROUP
调用方登录ID: (0x0,0x3E7)
调用方进程ID: 1100
传递服务: -
源网络地址: 127.0.0.1
源端口: 0 登录失败:
原因: 用户名未知或密码错误
用户名: administrator
域: WIN2003
登录类型: 2
登录进程: User32
身份验证数据包: Negotiate
工作站名称: WIN2003
调用方用户名: WIN2003$
调用方域: WORKGROUP
调用方登录ID: (0x0,0x3E7)
调用方进程ID: 1100
传递服务: -
源网络地址: 127.0.0.1
源端口: 0 从描述信息可以看到两者没有什么区别,唯一不同的是用户名,并且登录失败原因都一样。登录类型同样给出了用户登录的方式,为本地登录(数字为2)。有意思的是调用方用户名也是“主机名+$”的形式。
用户正常注销登出的话,也不是简单的一个事件。事实上会有2个事件产生,ID分别为551和538。截图如下:
看来微软在这点做得够细致了,先会有ID551事件说明有用户要求注销,接着ID538事件说明用户已成功注销。从头字段和描述信息中都可以看到真实的用户名,登录ID,并且ID538事件还包括用户的登录方式。微软的官方解释中有这样的说明:“ID551事件说明用户发起注销请求,因此包含用户的安全信息和允许用户访问对象的主要访问令牌会从内存中擦除。因此在令牌擦除后用户无法访问资源如文件、注册表。当注销过程完成后ID538事件产生。如果ID538事件没有在551事件后出现,一个程序或服务可能没有正确地管理访问令牌。尽管用户无法访问对象,这个程序或服务可能有缓存的访问令牌并保留访问对象的能力”。
2、远程方式的登录和登出
使用mstsc远程登录某个主机时,使用的帐户是普通用户的话(没有分配该用户任何权限)成功的情况下会有ID为552、528的事件产生,没有ID576事件。
这2个事件的头字段和本地方式基本没有什么区别,看看描述信息有什么不一样的地方:
使用明确凭据的登录尝试:
登录的用户:
用户名: WIN2003$
域: WORKGROUP
登录ID: (0x0,0x3E7)
登录 GUID: -
凭据被使用的用户:
目标用户名: rdp
目标域: WIN2003
目标登录 GUID:- 目标服务器名称:
localhost
目标服务器信息:localhost
调用方进程 ID:1984
源网络地址:192.168.10.2
源端口:1035 登录成功:
用户名: rdp
域: WIN2003
登录ID: (0x0,0x4C715)
登录类型: 10
登录进程: User32
身份验证数据包: Negotiate
工作站名: WIN2003
登录 GUID: -
调用方用户名: WIN2003$
调用方域: WORKGROUP
调用方登录ID: (0x0,0x3E7)
调用方进程 ID: 1984
传递服务: -
源网络地址: 192.168.10.2
源端口: 1035 从这里可以看出至少有3个地方不一样,首先登录类型的ID为10,说明是远程交互式登录,其次是源网络地址和源端口。如果有防火墙的日志的话,可以进行关联分析。
登录失败同样分别使用无效用户名和有效用户名、无效密码2种方式,结果都是产生ID529事件,与之前也没有什么区别。描述信息如下:
登录失败:
原因: 用户名未知或密码错误
用户名: rdp
域: WIN2003
登录类型: 10
登录进程: User32
身份验证数据包: Negotiate
工作站名称: WIN2003
调用方用户名: WIN2003$
调用方域: WORKGROUP
调用方登录ID: (0x0,0x3E7)
调用方进程ID: 2640
传递服务: -
源网络地址: 192.168.10.2
源端口: 1040 从信息中可以看到,唯一不同且有价值的是登录类型的ID、源IP地址和源端口。
用户注销的话同样会有ID551和538事件产生,与本地登录一样(除了登录类型的数值),因此不再附图说明。但是ID538事件产生时间会比551晚一点,做了几次实验有1分30秒、2分多都有,似乎不是固定的值。
如果使用RDP远程登录主机后,没有注销而是直接点×关闭窗口,会产生ID683事件,如果再次使用该用户和密码连接时,会产生ID682事件,截图分别如下:
从描述信息中可以很清楚地看到会话中断和重新连接的事件,此时登录ID都一样,但是会话名称已经发生变化。
另外一种远程访问方式为远程协助,也会产生ID552、528、551和538事件(会伴随用户名为“ANONYMOUSLOGON”的成对ID540和538事件)。只是其中的真实用户名变成“HelpAssistant_abae4f”,其中的“abae4f”不知道是不是随机生成,反正我做了2次实验都是这个。 3、网络访问的登录和登出
这里访问共享文件夹的情况根据不同的情况会有几种不同的事件模式产生,分别进行说明。 这里先假设主机A上C盘目录下有名为“share”的文件夹,开启网络共享并且权限为A主机上的名为“rdp”的用户。架设B主机上也有名为“Administrator”的管理员和名为“rdp”的用户。
a、没有给A主机上的”rdp“用户赋予任何权限,设置B主机的rdp用户和A主机上的密码一致,以rdp用户登录B主机,然后以在运行中输入“\\192.168.10.1\share”的方式访问A主机的共享文件夹,然后关闭共享文件夹窗口。此时在A主机上会有事件模式为:有用户名为“rdp”的ID为540和538的事件产生(注意:此时登录时没有ID552事件),如下图所示:
这些登录、登出事件的头字段中用户名均为rdp,但是计算机名还是被访问的主机名。现在看看ID540事件的描述信息:
成功的网络登录:
用户名: rdp
域: WIN2003
登录ID: (0x0,0x75BCF)
登录类型: 3
登录过程: NtLmSsp
身份验证数据包: NTLM
工作站名: WIN2K3
登录GUID: -
调用方用户名: -
调用方域: -
调用方登录ID: -
调用方进程 ID: -
传递服务: -
源网络地址: 192.168.10.2
源端口: 0 从中我们可以发现除了登录类型变为“3”以为,身份验证数据包也变为“NTLM”,并且工作站的名称也是发出访问共享文件夹请求的B主机的真实主机名(这里让我很奇怪的是使用RDP方式访问时工作站名仍为被访问主机的主机名)。
除了上述2个事件外,在用户成功登录同时还会有用户名为“ANONYMOUSLOGON”的2个事件,ID也同样分别为:540和538,并且没有时间间隔,如下图所示:
ID540事件的描述信息如下。
成功的网络登录:
用户名:
域:
登录ID: (0x0,0x75BE1)
登录类型: 3
登录过程: NtLmSsp
身份验证数据包: NTLM
工作站名: WIN2K3
登录 GUID: -
调用方用户名: -
调用方域: -
调用方登录ID: -
调用方进程 ID: -
传递服务: -
源网络地址: 192.168.10.2
源端口: 0 b、没有给A主机上的”rdp“用户赋予任何权限,设置B主机的rdp用户和A主机上的密码一致,以rdp用户登录B主机,然后以在运行中输入“\\192.168.10.1”的方式访问A主机的共享资源。此时在只弹出A主机共享资源窗口的情况下,A主机上会有2组ID540和538事件产生。如果此时双击某个共享文件夹,同样会有2组ID540和538事件产生。中间会有用户名为“ANONYMOUSLOGON”的ID540和538事件。如果A主机共享了多个文件夹,那么在B主机上A主机在不同的文件夹和A主机共享资源窗口之间来回切换的情况下会有大量的ID540和538事件产生!
c、设置B主机上的rdp用户密码与A主机不一样,然后以用户rdp登录B主机,然后以“\\192.168.10.1\share”的方式访问A主机的共享文件夹,此时会弹出窗口让用户输入A主机上可以访问该文件夹的用户名和密码。此时A主机上会有很多登录失败的ID529事件,以及成对出现的ID540和538出现,如下图所示:
此时在窗口输入正确的用户名和密码,产生用户名为rdp的ID540事件,同样关闭共享窗口后会有ID538事件。
如果输入无效的用户名或密码,同样在A机上会产生如上图所示的大量ID529和成对的ID540、538事件。
最后,如果A主机上的rdp用户有已分配的特权,那么成功访问共享文件夹时同样会有ID576事件产生。
4、以任务计划的方式登录
如果使用正确的用户名和密码创建任务计划时,系统会用提供的用户名和密码进行登录尝试。因此至少会有ID552、528和538事件产生(即瞬时的登录并登出),并且528和538事件的登录类型为4。如果指定的用户具有特权还会有ID576事件产生。在该任务计划执行时也会有一系列事件产生。如果使用无效用户名和密码创建任务计划,则会失败并且产生ID529事件。其描述性信息如下: 登录失败:
原因: 用户名未知或密码错误
用户名: Administrator
域: WIN2003
登录类型: 4
登录进程: Advapi
身份验证数据包: Negotiate
工作站名称: WIN2003
调用方用户名: WIN2003$
调用方域: WORKGROUP
调用方登录ID: (0x0,0x3E7)
调用方进程ID: 1648
传递服务: -
源网络地址: -
源端口: - 5、以服务方式运行
使用有效的用户名和密码指定服务并启动时,也会有ID552、528和538事件(576事件看用户是否有特权)。主要的区别也是登录类型为5,其它基本一致。下面是ID528事件的描述性信息: 登录成功:
用户名: rdp
域: WIN2003
登录ID: (0x0,0x4E51C)
登录类型: 5
登录进程: Advapi
身份验证数据包: Negotiate
工作站名: WIN2003
登录 GUID: -
调用方用户名: WIN2003$
调用方域: WORKGROUP
调用方登录ID: (0x0,0x3E7)
调用方进程 ID: 1224
传递服务: -
源网络地址: -
源端口: - 如果使用无效的用户名或密码指定服务时,在启动服务时会报错并且产生ID529事件。
最后我们总结一下“审计登录”事件: ok,对用户的认证和登录过程的分析暂以告一段落,现在就开始我们最为关注的部分,用户登录上计算机上后到底做了什么操作?从本节开始我们就开始详细地分析用户的活动,先从“过程追踪”开始,因为这类事件可以和用户的登录活动关联起来(就是之前我们谈到过的登录ID)。过程追踪还能够对服务的安装、移除以及计划任务的维护进行监控。
- 成功的登录通常会有528事件产生,如果用户有特权会有576事件产生;如果是访问网络共享资源的方式没有552事件,其它4种类型都有。
- 比“帐户登录”包含更多的信息,如源IP、端口、登录类型ID,成功登录用户是否有对应的特权等等。
- 通常情况下只需关注登录类型为2、3、10类型的登录失败事件。
首先从进程的追踪开始,Windows提供了2个事件ID来追踪一个进程的开启和结束,分别是592和593。当一个新的进程创建后会有ID592事件产生,当进程退出后会有593事件产生。截图如下:
从中我们可以看到是哪个用户,在什么时间、执行了什么程序,该程序的完整路径名。其中需要我们关注的是登录ID字段,因为可以和用户的登录行为进行关联。同时我们也可以注意到,新创建的进程ID和退出进程ID都为2232,而创建该进程的进程ID为424,当时看了一下任务管理器,为explorer.exe进程。
接着是服务的安装和任务计划的创建。Windows2003使用ID601事件记录服务安装的活动,无论其成功还是失败。可以用于发现被安装的新服务。但是软件的安装并不产生该事件,而且木马或后门程序也很少以服务方式安装,因此价值不会很大。其截图如下:
描述信息为:
尝试安装服务:
服务名称: OpenVPNService
服务文件名称: C:\Program Files\OpenVPN\bin\openvpnserv.exe
服务类型: 16
服务启动类型: 3
服务帐户: LocalSystem
由:
用户名称: Administrator
域: WIN2003
登录ID: (0x0,0x1CA46) 从描述信息中可以看到要安装服务的名称(可以在命令行使用“sc qurey服务名称”的方式查询服务当前的状态),该服务对应的可执行文件。
服务类型的表格如下:
服务类型 名称 0x2 SERVICE_FILE_SYSTEM_DRIVER 0x4 SERVICE_ADAPTER 0x8 SERVICE_RECOGNIZER_DRIVER 0xB SERVICE_DRIVER 0x10 SERVICE_WIN32_OWN_PROCESS 0x20 SERVICE_WIN32_SHARE_PROCESS 0x30 SERVICE_WIN32 0x100 SERVICE_INTERACTIVE_PROCESS 0x110 SERVICE_INTERACTIVE_OWN_PROCESS 0x120 SERVICE_INTERACTIVE_SHARE_PROCESS
服务启动类型表格如下:
服务启动类型 名称 显示类型 0x1 SYSTEM_START n/a 0x2 AUTO_START Automatic 0x3 DEMAND_START Manual 0x4 DISABLED Disabled
关于服务帐户的详细说明请参见微软官方链接:
http://technet.microsoft/zh-cn/library/aa998749(EXCHG.65).aspx
创建任务计划或者是修改已有的任务计划时会触发ID602事件,其截图如下:
描述信息为: 已创建的计划任务:
文件名: C:\WINDOWS\Tasks\屏幕键盘.job
命令: C:\WINDOWS\system32\osk.exe
触发器: 2010-4-14,23:51.
时间: 1700-1-1 8:00:00
标记: 0x1C000C0
目标用户: WIN2003\Administrator
由:
用户: Administrator
域: WIN2003
登录ID: (0x0,0x1CA46)
从中可以看到创建的计划任务名,要执行的程序和什么时间会执行。目标用户说明已哪个用户身份来执行,用户字段说明是谁创建了该计划任务。
进程追踪类别还提供了3个事件,但是对于常见的监控价值不高,如下表:
事件ID 类型 描述 594 Success A handle to an object has beenduplicated 595 Success Indirect access to an object has beenobtained 600 Success A process was assigned a primarytoken
正如我们看到的这样,进程追踪类别提供的事件较少,其中比较有价值的是ID592和593事件,因为它们完整地记录了一个Windows上可执行程序的整个过程。同时也可以记录服务的安装和计划任务的创建、修改。但是对于那些不是可执行文件的执行则无法记录,例如我们执行一个VBS脚本,只会看到cscript.exe或wscript.exe的执行记录。
要审查对一些对象如文件、文件夹的访问,需要对“对象访问”事件进行审查,我们在下篇文章进行分析。
ok,上一篇文章我们简单分析了用户登录Windows主机后执行了什么程序。同时我们还可以对用户的资源访问行为进行审计和监控,Windows自身提供对象访问和目录服务访问这两类审计事件监控。对象访问事件可以审计所有尝试访问文件和其它Windows对象的活动,不包括AD对象(专门由目录服务访问类别事件来实现)。这里的Windows对象包括对文件夹、文件、服务、注册表和打印对象。本篇文章主要分析对象访问审核事件,目录服务访问事件以后在做分析。
下面的表格列出了访问类型的完整列表,对象访问日志中使用的对应名称和应用于的解释。
访问权限 | 对象访问事件中的名称 | 文件夹 | 文件 |
遍历文件夹/运行文件 | 执行/遍历 | 指浏览文件时的遍历文件夹行为 | 执行脚本或者exe文件 |
列出文件夹 /读取数据 | 读数据(列出文件夹) | 使用explorer进程、dir命令或者其它应用查询子文件夹或者文件的行为 | 读取文件的实际内容 |
读取属性 | 读取属性 | 使用explorer进程、attrib命令或者其它应用查询属性(只读、归档、系统、隐藏)的行为 | 同左 |
读取扩展属性 | 读取扩展属性 | 使用explorer进程、attrib命令或者其它应用查询扩展属性的行为 | 同左 |
创建文件/写入数据 | 写数据(增加文件) | 创建新文件 | 修改文件的内容 |
创建文件夹/附加数据 | 附加数据(添加子目录) | 创建新的子文件夹 | 在文件结尾附加数据 |
写入属性 | | 使用explorer进程、attrib命令或者其它应用修改属性(只读、归档、系统、隐藏)的行为 | 同左 |
写入扩展属性 | | 使用explorer进程、attrib命令或者其它应用修改扩展属性的行为 | 同左 |
删除子文件夹及文件 | | 删除对象、包括子文件夹和文件 | 同左 |
删除 | | 对象删除、会被父文件夹的删除子文件夹及文件的设置覆盖 | |
读取权限 | | 查询对象的ACL | |
更改权限 | | 修改对象的ACL | |
取得所有权 | | 对象拥有者的修改 | |
目标 | 类型 | 访问活动 |
审计对文件的修改活动 | 成功 | 写入数据 、附加数据 |
某些人试图访问未授权的对象的活动 | 失败 | 所有的权限 |
审计对文件夹的访问控制变更活动 | 成功 | 更改权限、取得所有权 |
审计对文件夹或者某个文件夹内任意文件的删除活动 | 成功 | 删除子文件夹及文件 |
打开的对象:
对象访问尝试:
这里的“特权”特指通过安全设置—>本地策略—>用户权限分配界面授予用户的权限(这些权限具体的含义请参考操作系统的帮助)。如下图所示:
描述信息字段为:
指派给新登录的特殊权限:
调用的特许服务:
描述信息如下:
特许的对象操作:
从这篇文章开始本人开始结合Windows产品日志分析大神(RANDY FRANKLINSMITH)的电子书,以及自己的实验对Windows操作系统的日志开始分析。也是对自己的一种激励,至少希望自己能坚持下去这个分析。并且希望自己可以通过这个过程对于安全事件管理有更多的认识和理解,好了,废话不多说了,回归正题。
在正式对每类事件进行分析前,先大概对windows的日志格式进行一个简单的介绍。
每个windows日志都由两部分组成:头字段和描述字段。
头字段是相对内容和格式都固定的部分,包括的信息有:事件的id、日期和时间、事件的结果(成功还是失败)、事件的来源和类别。由于安全日志所有的来源都记为“source”,因此意义不大。而类别就是(一)中提到的9种类别。这里的用户字段用处也不是很大,因为很多事件简单地记为“STSTEM”为用户,所以真正要看是什么用户触发了该条日志还是要看描述字段里面是否有相应的实际用户(这些在随后的日志分析中会涉及到)。
因此很多时候我们需要详细分析描述字段中的信息,这部分出现的信息也会随具体的事件而不同,但是其形式都是为一系列组合信息,每个组合信息是一个内容固定的描述信息(类似占位符的作用),以及后面的动态信息。举个例子来说:ID680事件的描述字段包括:“Logonaccount: Administrator”。这里“Logonaccount:”是固定的前置字段占位符,而后面的“Administrator”则是真实的实例名称,会根据实际的情况而变化。
我们可以打开本地的一条日志,点击描写字段部分的蓝色链接,联网的情况下可以查看到微软的支持中心中对该条日志的详细说明,其中的Message字段通常为以下的内容,很容易看到ID为567的这条日志的描述字段包括7个字段信息,说明其中有7个变量存在,其内容由实际情况生成。
Object Access Attempt:
Object Server: %1
Handle ID: %2
Object Type: %3
Process ID: %4
Image File Name: %5
Accesses: %6
Access Mask: %7因此从上面可以看到很多关键的信息其实都隐藏在描述字段信息中,需要进行仔细地分析!
最后再简单地说下windows自身存储策略的设置:根据Randy大神的经验,最大不要超过199M,200M的话可能会对windows的性能和稳定性有一定影响(这点不好进行实验验证)。此外不论配置最大空间为多少,迟早会有满的时候。所以Randy建议选择“不改写事件(手动地清除)”选项,此时一旦日志大小达到上限,windows会停止记录事件。当选择“改写久于X天的事件“时,如果事件的产生速度很快,在未过期前就达到了上限,windows同样是停止记录日志直到某些日志过期。以下是网上对于这些保存设置的说明和建议,所以如何设置也是在安全性、易维护性等方面权衡了。
按需要改写事件 当日志已满时继续写入新的事件。每个新事件替换日志中时间最旧的事件。该选项对维护要求低的系统是一个不错的选择。 改写久于 [x]天的事件 保留位于指定改写事件的天数之前的日志。默认值为 7天。如果您想每周存档日志文件,该选项是最佳选择。该策略将丢失重要日志项的几率降到最小,同时保持日志的合理大小。 不改写事件 手动而不是自动清除日志。只有在您无法承受丢失事件时才选中该选项(例如,特别强调安全性的站点的安全性日志)。
最后我们还可以把日志事件另存为本地文件查看,其中txt和csv格式可以较为方便地直接查看,而evt格式需要专门的软件来查看,如LogParser。因此在日志量很多的情况下,还是建议由专门的日志管理产品来完成此功能。
ok,一些情况就简单介绍到这里,下面开始对每类事件进行较为详细的分析,Let’s go!
ok,从本篇终于要开心对windows日志进行分析了,首先从最基本的登录活动开始。这也是任何日志分析最基础的开始,涉及到对用户活动的分析,总要从登录开始咯。等等,在开始这激动人心的时刻之前,我们还是想讲清楚windows登录活动的一些原理,然后再分析相关的日志也不迟:)
从windows2000开始,审核策略选项里面涉及到登录的有两项:分别是“审核帐户登录事件”和“审核登录事件”。那么有些人可能不太明白了,为什么用户的登录要有两类事件来记录呢?ok,这里简单的解释一下(来自Randy大神,具体有待考证)。
在windows2000之前,例如NT的时候windows系统只审核登录事件。这样如果使用域帐户登录某台工作站的话,域控服务器(DC)上是没有该用户的登录记录的,只会记录在被访问的工作站上(当然前提是工作站开启了登录审核)。因此DC不记录域用户的认证活动使得想要对域用户的登录活动进行监控十分困难,得收集整个网络中所有工作站和服务器的安全日志。因此呢,微软从windows2000开始增加了一个新的特色功能,也就是“审核帐户登录事件”。但是这个叫法与原来的“审核登录事件”很像,容易让人产生混淆。因此Randy大神认为称之为“审核认证事件”更为恰当!也就是说在windows中认证和登录活动是相关但是不同的两个活动,特别是在它们发生在不同的系统上时表现更为明显!
因此想要有效地使用这两个审计策略,需要很好地理解相关的原理,明白在windows系统中认证和登录是如何发生的。另一个容易让人混淆的是登录使用帐户的类型,是本地还是域帐户,因为这会影响到什么事件记录在哪些系统上。接下来就对windows帐户类型简单介绍下。
windows系统支持两种帐户类型:域帐户(存储在AD中)和本地帐户(存储在本地的SAM文件中)。这样的话也很简单了,使用域帐户登录的话,由DC来完成对用户的认证;如果本地帐户登录的话则由要登录的工作站自己来完成认证。所以需要特别关注使用本地帐户的登录活动,因为攻击者通常会使用本地帐户来进行登录尝试。
接下来我们看看windows的登录方式都有哪些。
windows一共支持5种登录会话类型,都分别描述了用户如何登入系统的方式。本地和域帐户都支持这5种类型。每种登录类型有一个对应的登录权限。登录帐户的类型和登录的方式都会影响到审核日志的具体内容和事件ID,每种类型及其权限如下表所示:
登录类型 登录权限 典型情况 本地交互式:使用本地的控制台登录 本地登录 使用域或者本地帐户登录本地主机 网络方式:从网络上的某个主机访问windows资源 从网络访问主机 例如访问一台主机的某个共享文件夹 远程交换式:通过远程桌面、终端服务或远程帮助登录某个远程主机 运行通过终端服务登录 使用本地mstsc客户端远程登录某台主机 批作业:用于作为一个指定的帐户来运行一个计划任务 作为批作业登录 指定计划任务时指定的以某个具体帐户来运行 服务方式:用于以指定的帐户来运行某个服务 以服务方式登录 指在指定服务运行时以本地系统帐户或者是具体某个帐户运行 当我们尝试网络登录登录时,比如访问某台主机的共享文件夹,工作站默认会再次使用用户登录时输入的凭证。但是用户也可以指定一个不同的本地或者域帐户,例如映射本地磁盘到某个共享文件夹时。
登录VS认证小结
因此,在windows中登录和认证是关联但是不同的两个活动。简言之登录活动发生在最终被访问的主机上,认证活动发生在存储用户帐户的主机上。也就是如果使用本地帐户登录某台主机,该主机同时“看到”认证和登录活动。如果是使用域帐户登录,那么DC可以“看到”认证活动,而被访问的真实主机只“看到”登录活动。
所以“审计帐户登录事件”是主要用于DC上的审计策略,但是在成员工作站上也有用,可以辨识对本地帐户的攻击。
既然通常DC来完成域帐户的认证,那么就会涉及到windows系统支持的2种认证协议:NTLM和Kerberos。
NTLM VSKerberos
当用户使用域帐户登录windows2000及之后版本的操作系统时,工作站首先会尝试通过Kerberos协议联系DC。(如果系统没收到响应的话,会回退使用NTLM)。并且Widows2000及之后的版本使用不同的事件ID记录NTLM和Kerberos活动,所以比较容易区分。由于Kerberos提供了客户端和服务器间的双向认证(NTLM只支持客户端向服务器的认证)。并且NTLM的安全性较Kerberos弱一些,更容易被嗅探数据包进行破解。而且如果外部的攻击者攻击某个域的帐户,通常会看到NTLM认证事件,而不是Kerberos。因为他们不是本域的成员或信任域,登录尝试会使用NTLM。
NTLM和Kerberos协议的工作机理这里暂时不详细说明了,而且由于自己目前对域这一块不是很熟悉,暂且跳过使用域帐户登录方式的日志分析,先从本地用户方式的认证开始。以后有机会再搭建域的实验环境,然后进行使用域帐户的登录活动分析。
ok,终于开始要真枪实干地分析日志了,首先我们对“审计帐户登录事件”下手,也就是用户的认证事件。这里暂时只考虑使用本地帐户进行登录,不包括域用户。以后搭建起来实验环境,对域也比较熟悉后再补上这一课。这里为了排除干扰,每次实验前均清除日志,且只开启要分析类别事件的审计功能。
此次实验均使用windows2003,其它版本的windows系统事件ID和描述可能会有一些出入。
前面已经说过了,windows有5种帐户登录方式,所以我们一个个来看。 1、本地交互式登录,也就是我们每天最常使用的登录方式。如果成功登录的话,会产生ID为680的事件,
如上图所示,我们从中可以获取到的有用信息有:认证事件的时间、结果为成功(审核成功)、登录帐户为“administrator”、(描述中的部分)、被登录的主机名(WIN2003)。接下来看看登录失败是什么记录,这里第1次使用不存在的用户名登录、第2次使用正确的用户名但是错误密码。
从日志中我们可以很遗憾地看到,虽然是登录失败事件,但是事件ID仍然是680(windows2000失败事件ID为681,Windows2003把成功和失败事件都标识为ID680)。但是类型为“审核失败”,并且头字段中的用户名由原来的“Windows2003\Administrator”变成了“NTAUTHORITY\SYSTEM”。描述信息中的登录帐户记录了尝试登录使用的真实用户名,错误代码也会根据认证失败的原因而变化。据微软的说明,每种错误代码对应的原因如下表格:
0xC000006A Anincorrect password was supplied 0xC000006F Theaccount is not allowed to log on at this time 0xC0000064 Theaccount does not exist 0xC0000070 Theaccount is not allowed to log on from this computer 0xC0000071 Thepassword has expired 0xC0000072 Theaccount is disabled
2、使用RDP协议进行远程登录,这也是日常经常遇到的情况。
首先是成功登录,如下图所示,从中可以看到ID仍为680,并且与本地登录没有任何明显区别。并且描述信息中的主机名(源工作站)仍为被尝试登录主机的主机名,而不是源主机名。然后使用不存在的用户名和错误密码分别登录失败1次,产生的日志与第1种一样,所以不再附图。
3、远程访问某台主机的共享资源,如某个共享文件夹。
首先是使用正确的用户名和密码访问远程共享文件夹,如下图所示。从中可以发现头字段和描述字段中的用户名都为访问共享文件夹时使用的用户名,并且描述信息中的源工作站名也为发出访问共享文件夹请求的主机的真实主机名,与头字段中的计算机名字段的主机名不同。
这里说明一下,当访问某个主机的共享资源时,例如在点击“开始—运行”后输入“\\192.168.10.1\share”时,Windows默认使用当前登录的凭证去访问共享资源,如果当前凭证的用户名在被访问主机上不存在或者密码不一致时会产生多条“审核失败”事件,如下图所示。并且会在描述字段中记录真实的用户名和主机名,同样会有错误代码。
此外,如果访问共享资源使用的帐户名、密码正确,但是该用户对指定的共享文件夹没有访问权限时仍然会有ID为680的认证成功事件产生。
4、创建任务计划,并指定以某个用户来执行。
首先使用正确的用户名和密码创建一个任务计划,在该任务计划完成后同样会看到“帐户登录”成功事件,如下图所示。
从图中可以看到头字段中的用户名和描述字段中的用户名都是创建任务计划时指定的有效用户。
如果创建任务计划时输入错误密码,则无法创建任务计划,并且会有“帐户登录”失败日志生成,如右图所示,和一般的认证失败事件没有区别。但奇怪的是使用无效的用户名创建任务计划时没有“帐户登录”失败日志生成。
5、以服务方式运行
启用某个服务,并指定以某个帐户运行。这里同样先使用正确的用户名和密码设置服务,然后手工方式启动服务。可以看到有“帐户登录”的成功事件,如下图所示。从图中可以看到头字段中的用户名和描述字段中的用户名都是开启服务时指定的特定用户。这里说明一下,实验时以某特定用户启动服务但报错,但是会有成功认证的事件生成。如果指定用户为系统默认的“NTAUTHORITY\NetworkService”或“NTAUTHORITY\LocalService”来运行,则密码随意输入也可正常启动服务。且不会有认证事件的日志生成。
如果指定以某特定帐户运行时输入的无效密码,则在服务启动时会报错,且会有“帐户登录”的失败事件生成,如下图所示:
从图中可看到头字段的用户是“SYSTEM”,描述信息中的登录帐户字段才是真正的用户名,并且错误代码指明失败原因是密码错误。
最后我们总结一下,共有5种方式登录Windows主机进行身份认证,分别是:本地交换、远程访问、资源共享访问、任务计划和服务运行。并且从这些日志中我们也可看到有用的信息并不是很多,所以需要配合“登录/登出“事件来一起分析用户的登录行为。ok,那么在下一篇文章我们开始分析“登录/登出“日志,看看它们能否提供更多的信息给我们。
上一篇文章简单分析了用户登录时的认证事件,接下来我们再来看看和之紧密关联的登录/登出事件。
总体来看,登录/登出事件对可以很好地追踪用户在一台主机上完整活动过程的起至点,和登录方式无关。此外可以提供一些“帐户登录”没有的信息,例如登录的类型。此外对终端服务的活动专门用两个事件ID来标识。ok,我们开始分析,同样从5种类型分别进行分析。
1、本地方式的登录和登出
Randy大神在书中只提到了Windows使用两个事件ID528和540记录用户成功的登录(后者对应网络类型的登录),登出使用ID530。然而事实上同时发生的事件不只限于这些,那么让我们来看看用户简单的登录和登出活动至少会触发那些事件。
首先是成功的登录,从日志分析来看至少会有2个事件发生,分别为ID552和528,以下从左到右分别是各自的截图。
现在来各种进行详细分析,首先是ID552事件,该事件说明有人使用身份凭据在尝试登录,并且头字段中的用户名为SYSTEM。看看描述信息中有什么好东西:
使用明确凭据的登录尝试:
(说明有人在尝试登录)
登录的用户:
用户名: WIN2003$ (主机名加了$后缀)
域: WORKGROUP (主机的域名,此例中主机在名称为“WORKGROUP”的工作组中)
登录ID: (0x0,0x3E7)
登录 GUID: -
凭据被使用的用户:
目标用户名: Administrator (登录使用的用户名)
目标域: WIN2003 (要登录的主机名)
目标登录 GUID:- 目标服务器名称:
localhost
目标服务器信息:localhost
调用方进程 ID:1612
源网络地址:127.0.0.1 (从IP地址很容易判断是本地登录)
源端口:0 这里有一点要说明一下,Windows对这条日志的解释是“一个已登录的用户尝试使用另外一个用户凭证创建登录会话,例如使用“RUNAS”命令来运行某个可执行文件”。但事实上第1次用户成功登录后也会产生这个事件。
接着是ID528事件,此时头字段中的用户名也变成真实的用户名,看看描述信息中有什么东西:
登录成功:
(说明用户已成功登录)
用户名: Administrator (登录使用的用户名)
域: WIN2003 (被登录主机所属的域的域名,如果不在域中为主机名)
登录ID: (0x0,0x37BF9) (此登录ID在计算机重启前会保持其唯一性,重启后可能会被再次使用。该ID很重要,因为可以关联用户随后的很多活动如对象访问!)
登录类型: 2 (各种类型含义及数字见后面的表格)
登录进程: User32
身份验证数据包: Negotiate
工作站名: WIN2003 (记录发起登录请求的计算机的Netbios名)
登录 GUID: -
调用方用户名: WIN2003$
调用方域: WORKGROUP
调用方登录ID: (0x0,0x3E7) (注意,此ID和ID552事件描述信息的登录ID是一样的)
调用方进程 ID: 1612
传递服务: -
源网络地址: 127.0.0.1 (同样从IP地址很容易判断是本地登录)
源端口: 0
有意思的事情发生了,ID528事件的调用方登录ID和和ID552的登录ID是一样,那么我们能不能做个大胆的猜想呢?在本地登录成功前,系统本身先已创建了登录会话,然后此会话再创建真实的用户会话。呵呵,只是随便猜猜而已。 登录类型对应含义如下表,上篇文章中常见5种登录方式对应数字分别为2、3、4、5、10。
登录类型ID
登录方式
描述信息
2
Interactive
A user logged on to this computer at theconsole
3
Network
A user or computer logged on to this computerfrom the network
4
Batch
Batch logon type isused by batch servers, where processes might run on behalf of auser without the user's direct intervention
5
Service
A service was startedby the Service Control Manager 7
Unlock
This workstation was unlocked
8
NetworkCleartext
A user logged on to a network and theuser password was passed to the authentication package in itsunhashed (plain text) form. It is possible that the unhashedpassword was passed across the network, for example, when IISperformed basic authentication
9
NewCredentials A caller (process, thread, or program)cloned its current token and specified new credentials for outboundconnections. The new logon session has the same local identity, butit uses different credentials for other network connections. 10 RemoteInteractive A user logged on to this computerremotely using Terminal Services or a Remote Desktopconnection. 11 CachedInteractive A user logged on to this computer withnetwork credentials that were stored locally on the computer. Thedomain controller was not contacted to verify the credentials
此外,如果登录的用户名有某些权限(通过”本地安全策略“分配给该用户),在用户成功登录时还会有ID576事件发生,如下图所示:
描述信息如下:
指派给新登录的特殊权限:
用户名: Administrator
域: WIN2003
登录ID: (0x0,0x37BF9)
特权: SeSecurityPrivilege
SeBackupPrivilege
SeRestorePrivilege
SeTakeOwnershipPrivilege
SeDebugPrivilege
SeSystemEnvironmentPrivi lege
SeLoadDriverPrivilege
SeImpersonatePrivilege 从描述信息中我们可以看到名称为“Administrator”的用户所拥有的权限列表。
接下来看看失败的本地登录,首先是无效用户名、其次是有效用户名但是错误密码。
从图中可以看到,登录失败后会有ID529的事件产生。并且两者头字段的信息没有什么区别,用户名都是“SYSTEM”。那么看看描述信息中有什么信息和区别。
登录失败:
原因: 用户名未知或密码错误
用户名: test1
域: WIN2003
登录类型: 2
登录进程: User32
身份验证数据包: Negotiate
工作站名称: WIN2003
调用方用户名: WIN2003$
调用方域: WORKGROUP
调用方登录ID: (0x0,0x3E7)
调用方进程ID: 1100
传递服务: -
源网络地址: 127.0.0.1
源端口: 0 登录失败:
原因: 用户名未知或密码错误
用户名: administrator
域: WIN2003
登录类型: 2
登录进程: User32
身份验证数据包: Negotiate
工作站名称: WIN2003
调用方用户名: WIN2003$
调用方域: WORKGROUP
调用方登录ID: (0x0,0x3E7)
调用方进程ID: 1100
传递服务: -
源网络地址: 127.0.0.1
源端口: 0 从描述信息可以看到两者没有什么区别,唯一不同的是用户名,并且登录失败原因都一样。登录类型同样给出了用户登录的方式,为本地登录(数字为2)。有意思的是调用方用户名也是“主机名+$”的形式。
用户正常注销登出的话,也不是简单的一个事件。事实上会有2个事件产生,ID分别为551和538。截图如下:
看来微软在这点做得够细致了,先会有ID551事件说明有用户要求注销,接着ID538事件说明用户已成功注销。从头字段和描述信息中都可以看到真实的用户名,登录ID,并且ID538事件还包括用户的登录方式。微软的官方解释中有这样的说明:“ID551事件说明用户发起注销请求,因此包含用户的安全信息和允许用户访问对象的主要访问令牌会从内存中擦除。因此在令牌擦除后用户无法访问资源如文件、注册表。当注销过程完成后ID538事件产生。如果ID538事件没有在551事件后出现,一个程序或服务可能没有正确地管理访问令牌。尽管用户无法访问对象,这个程序或服务可能有缓存的访问令牌并保留访问对象的能力”。
2、远程方式的登录和登出
使用mstsc远程登录某个主机时,使用的帐户是普通用户的话(没有分配该用户任何权限)成功的情况下会有ID为552、528的事件产生,没有ID576事件。
这2个事件的头字段和本地方式基本没有什么区别,看看描述信息有什么不一样的地方:
使用明确凭据的登录尝试:
登录的用户:
用户名: WIN2003$
域: WORKGROUP
登录ID: (0x0,0x3E7)
登录 GUID: -
凭据被使用的用户:
目标用户名: rdp
目标域: WIN2003
目标登录 GUID:- 目标服务器名称:
localhost
目标服务器信息:localhost
调用方进程 ID:1984
源网络地址:192.168.10.2
源端口:1035 登录成功:
用户名: rdp
域: WIN2003
登录ID: (0x0,0x4C715)
登录类型: 10
登录进程: User32
身份验证数据包: Negotiate
工作站名: WIN2003
登录 GUID: -
调用方用户名: WIN2003$
调用方域: WORKGROUP
调用方登录ID: (0x0,0x3E7)
调用方进程 ID: 1984
传递服务: -
源网络地址: 192.168.10.2
源端口: 1035 从这里可以看出至少有3个地方不一样,首先登录类型的ID为10,说明是远程交互式登录,其次是源网络地址和源端口。如果有防火墙的日志的话,可以进行关联分析。
登录失败同样分别使用无效用户名和有效用户名、无效密码2种方式,结果都是产生ID529事件,与之前也没有什么区别。描述信息如下:
登录失败:
原因: 用户名未知或密码错误
用户名: rdp
域: WIN2003
登录类型: 10
登录进程: User32
身份验证数据包: Negotiate
工作站名称: WIN2003
调用方用户名: WIN2003$
调用方域: WORKGROUP
调用方登录ID: (0x0,0x3E7)
调用方进程ID: 2640
传递服务: -
源网络地址: 192.168.10.2
源端口: 1040 从信息中可以看到,唯一不同且有价值的是登录类型的ID、源IP地址和源端口。
用户注销的话同样会有ID551和538事件产生,与本地登录一样(除了登录类型的数值),因此不再附图说明。但是ID538事件产生时间会比551晚一点,做了几次实验有1分30秒、2分多都有,似乎不是固定的值。
如果使用RDP远程登录主机后,没有注销而是直接点×关闭窗口,会产生ID683事件,如果再次使用该用户和密码连接时,会产生ID682事件,截图分别如下:
从描述信息中可以很清楚地看到会话中断和重新连接的事件,此时登录ID都一样,但是会话名称已经发生变化。
另外一种远程访问方式为远程协助,也会产生ID552、528、551和538事件(会伴随用户名为“ANONYMOUSLOGON”的成对ID540和538事件)。只是其中的真实用户名变成“HelpAssistant_abae4f”,其中的“abae4f”不知道是不是随机生成,反正我做了2次实验都是这个。 3、网络访问的登录和登出
这里访问共享文件夹的情况根据不同的情况会有几种不同的事件模式产生,分别进行说明。 这里先假设主机A上C盘目录下有名为“share”的文件夹,开启网络共享并且权限为A主机上的名为“rdp”的用户。架设B主机上也有名为“Administrator”的管理员和名为“rdp”的用户。
a、没有给A主机上的”rdp“用户赋予任何权限,设置B主机的rdp用户和A主机上的密码一致,以rdp用户登录B主机,然后以在运行中输入“\\192.168.10.1\share”的方式访问A主机的共享文件夹,然后关闭共享文件夹窗口。此时在A主机上会有事件模式为:有用户名为“rdp”的ID为540和538的事件产生(注意:此时登录时没有ID552事件),如下图所示:
这些登录、登出事件的头字段中用户名均为rdp,但是计算机名还是被访问的主机名。现在看看ID540事件的描述信息:
成功的网络登录:
用户名: rdp
域: WIN2003
登录ID: (0x0,0x75BCF)
登录类型: 3
登录过程: NtLmSsp
身份验证数据包: NTLM
工作站名: WIN2K3
登录GUID: -
调用方用户名: -
调用方域: -
调用方登录ID: -
调用方进程 ID: -
传递服务: -
源网络地址: 192.168.10.2
源端口: 0 从中我们可以发现除了登录类型变为“3”以为,身份验证数据包也变为“NTLM”,并且工作站的名称也是发出访问共享文件夹请求的B主机的真实主机名(这里让我很奇怪的是使用RDP方式访问时工作站名仍为被访问主机的主机名)。
除了上述2个事件外,在用户成功登录同时还会有用户名为“ANONYMOUSLOGON”的2个事件,ID也同样分别为:540和538,并且没有时间间隔,如下图所示:
ID540事件的描述信息如下。
成功的网络登录:
用户名:
域:
登录ID: (0x0,0x75BE1)
登录类型: 3
登录过程: NtLmSsp
身份验证数据包: NTLM
工作站名: WIN2K3
登录 GUID: -
调用方用户名: -
调用方域: -
调用方登录ID: -
调用方进程 ID: -
传递服务: -
源网络地址: 192.168.10.2
源端口: 0 b、没有给A主机上的”rdp“用户赋予任何权限,设置B主机的rdp用户和A主机上的密码一致,以rdp用户登录B主机,然后以在运行中输入“\\192.168.10.1”的方式访问A主机的共享资源。此时在只弹出A主机共享资源窗口的情况下,A主机上会有2组ID540和538事件产生。如果此时双击某个共享文件夹,同样会有2组ID540和538事件产生。中间会有用户名为“ANONYMOUSLOGON”的ID540和538事件。如果A主机共享了多个文件夹,那么在B主机上A主机在不同的文件夹和A主机共享资源窗口之间来回切换的情况下会有大量的ID540和538事件产生!
c、设置B主机上的rdp用户密码与A主机不一样,然后以用户rdp登录B主机,然后以“\\192.168.10.1\share”的方式访问A主机的共享文件夹,此时会弹出窗口让用户输入A主机上可以访问该文件夹的用户名和密码。此时A主机上会有很多登录失败的ID529事件,以及成对出现的ID540和538出现,如下图所示:
此时在窗口输入正确的用户名和密码,产生用户名为rdp的ID540事件,同样关闭共享窗口后会有ID538事件。
如果输入无效的用户名或密码,同样在A机上会产生如上图所示的大量ID529和成对的ID540、538事件。
最后,如果A主机上的rdp用户有已分配的特权,那么成功访问共享文件夹时同样会有ID576事件产生。
4、以任务计划的方式登录
如果使用正确的用户名和密码创建任务计划时,系统会用提供的用户名和密码进行登录尝试。因此至少会有ID552、528和538事件产生(即瞬时的登录并登出),并且528和538事件的登录类型为4。如果指定的用户具有特权还会有ID576事件产生。在该任务计划执行时也会有一系列事件产生。如果使用无效用户名和密码创建任务计划,则会失败并且产生ID529事件。其描述性信息如下: 登录失败:
原因: 用户名未知或密码错误
用户名: Administrator
域: WIN2003
登录类型: 4
登录进程: Advapi
身份验证数据包: Negotiate
工作站名称: WIN2003
调用方用户名: WIN2003$
调用方域: WORKGROUP
调用方登录ID: (0x0,0x3E7)
调用方进程ID: 1648
传递服务: -
源网络地址: -
源端口: - 5、以服务方式运行
使用有效的用户名和密码指定服务并启动时,也会有ID552、528和538事件(576事件看用户是否有特权)。主要的区别也是登录类型为5,其它基本一致。下面是ID528事件的描述性信息: 登录成功:
用户名: rdp
域: WIN2003
登录ID: (0x0,0x4E51C)
登录类型: 5
登录进程: Advapi
身份验证数据包: Negotiate
工作站名: WIN2003
登录 GUID: -
调用方用户名: WIN2003$
调用方域: WORKGROUP
调用方登录ID: (0x0,0x3E7)
调用方进程 ID: 1224
传递服务: -
源网络地址: -
源端口: - 如果使用无效的用户名或密码指定服务时,在启动服务时会报错并且产生ID529事件。
最后我们总结一下“审计登录”事件: ok,对用户的认证和登录过程的分析暂以告一段落,现在就开始我们最为关注的部分,用户登录上计算机上后到底做了什么操作?从本节开始我们就开始详细地分析用户的活动,先从“过程追踪”开始,因为这类事件可以和用户的登录活动关联起来(就是之前我们谈到过的登录ID)。过程追踪还能够对服务的安装、移除以及计划任务的维护进行监控。
- 成功的登录通常会有528事件产生,如果用户有特权会有576事件产生;如果是访问网络共享资源的方式没有552事件,其它4种类型都有。
- 比“帐户登录”包含更多的信息,如源IP、端口、登录类型ID,成功登录用户是否有对应的特权等等。
- 通常情况下只需关注登录类型为2、3、10类型的登录失败事件。
首先从进程的追踪开始,Windows提供了2个事件ID来追踪一个进程的开启和结束,分别是592和593。当一个新的进程创建后会有ID592事件产生,当进程退出后会有593事件产生。截图如下:
从中我们可以看到是哪个用户,在什么时间、执行了什么程序,该程序的完整路径名。其中需要我们关注的是登录ID字段,因为可以和用户的登录行为进行关联。同时我们也可以注意到,新创建的进程ID和退出进程ID都为2232,而创建该进程的进程ID为424,当时看了一下任务管理器,为explorer.exe进程。
接着是服务的安装和任务计划的创建。Windows2003使用ID601事件记录服务安装的活动,无论其成功还是失败。可以用于发现被安装的新服务。但是软件的安装并不产生该事件,而且木马或后门程序也很少以服务方式安装,因此价值不会很大。其截图如下:
描述信息为:
尝试安装服务:
服务名称: OpenVPNService
服务文件名称: C:\Program Files\OpenVPN\bin\openvpnserv.exe
服务类型: 16
服务启动类型: 3
服务帐户: LocalSystem
由:
用户名称: Administrator
域: WIN2003
登录ID: (0x0,0x1CA46) 从描述信息中可以看到要安装服务的名称(可以在命令行使用“sc qurey服务名称”的方式查询服务当前的状态),该服务对应的可执行文件。
服务类型的表格如下:
服务类型 名称 0x2 SERVICE_FILE_SYSTEM_DRIVER 0x4 SERVICE_ADAPTER 0x8 SERVICE_RECOGNIZER_DRIVER 0xB SERVICE_DRIVER 0x10 SERVICE_WIN32_OWN_PROCESS 0x20 SERVICE_WIN32_SHARE_PROCESS 0x30 SERVICE_WIN32 0x100 SERVICE_INTERACTIVE_PROCESS 0x110 SERVICE_INTERACTIVE_OWN_PROCESS 0x120 SERVICE_INTERACTIVE_SHARE_PROCESS
服务启动类型表格如下:
服务启动类型 名称 显示类型 0x1 SYSTEM_START n/a 0x2 AUTO_START Automatic 0x3 DEMAND_START Manual 0x4 DISABLED Disabled
关于服务帐户的详细说明请参见微软官方链接:
http://technet.microsoft/zh-cn/library/aa998749(EXCHG.65).aspx
创建任务计划或者是修改已有的任务计划时会触发ID602事件,其截图如下:
描述信息为: 已创建的计划任务:
文件名: C:\WINDOWS\Tasks\屏幕键盘.job
命令: C:\WINDOWS\system32\osk.exe
触发器: 2010-4-14,23:51.
时间: 1700-1-1 8:00:00
标记: 0x1C000C0
目标用户: WIN2003\Administrator
由:
用户: Administrator
域: WIN2003
登录ID: (0x0,0x1CA46)
从中可以看到创建的计划任务名,要执行的程序和什么时间会执行。目标用户说明已哪个用户身份来执行,用户字段说明是谁创建了该计划任务。
进程追踪类别还提供了3个事件,但是对于常见的监控价值不高,如下表:
事件ID 类型 描述 594 Success A handle to an object has beenduplicated 595 Success Indirect access to an object has beenobtained 600 Success A process was assigned a primarytoken
正如我们看到的这样,进程追踪类别提供的事件较少,其中比较有价值的是ID592和593事件,因为它们完整地记录了一个Windows上可执行程序的整个过程。同时也可以记录服务的安装和计划任务的创建、修改。但是对于那些不是可执行文件的执行则无法记录,例如我们执行一个VBS脚本,只会看到cscript.exe或wscript.exe的执行记录。
要审查对一些对象如文件、文件夹的访问,需要对“对象访问”事件进行审查,我们在下篇文章进行分析。
ok,上一篇文章我们简单分析了用户登录Windows主机后执行了什么程序。同时我们还可以对用户的资源访问行为进行审计和监控,Windows自身提供对象访问和目录服务访问这两类审计事件监控。对象访问事件可以审计所有尝试访问文件和其它Windows对象的活动,不包括AD对象(专门由目录服务访问类别事件来实现)。这里的Windows对象包括对文件夹、文件、服务、注册表和打印对象。本篇文章主要分析对象访问审核事件,目录服务访问事件以后在做分析。
下面的表格列出了访问类型的完整列表,对象访问日志中使用的对应名称和应用于的解释。
访问权限 | 对象访问事件中的名称 | 文件夹 | 文件 |
遍历文件夹/运行文件 | 执行/遍历 | 指浏览文件时的遍历文件夹行为 | 执行脚本或者exe文件 |
列出文件夹 /读取数据 | 读数据(列出文件夹) | 使用explorer进程、dir命令或者其它应用查询子文件夹或者文件的行为 | 读取文件的实际内容 |
读取属性 | 读取属性 | 使用explorer进程、attrib命令或者其它应用查询属性(只读、归档、系统、隐藏)的行为 | 同左 |
读取扩展属性 | 读取扩展属性 | 使用explorer进程、attrib命令或者其它应用查询扩展属性的行为 | 同左 |
创建文件/写入数据 | 写数据(增加文件) | 创建新文件 | 修改文件的内容 |
创建文件夹/附加数据 | 附加数据(添加子目录) | 创建新的子文件夹 | 在文件结尾附加数据 |
写入属性 | | 使用explorer进程、attrib命令或者其它应用修改属性(只读、归档、系统、隐藏)的行为 | 同左 |
写入扩展属性 | | 使用explorer进程、attrib命令或者其它应用修改扩展属性的行为 | 同左 |
删除子文件夹及文件 | | 删除对象、包括子文件夹和文件 | 同左 |
删除 | | 对象删除、会被父文件夹的删除子文件夹及文件的设置覆盖 | |
读取权限 | | 查询对象的ACL | |
更改权限 | | 修改对象的ACL | |
取得所有权 | | 对象拥有者的修改 | |
目标 | 类型 | 访问活动 |
审计对文件的修改活动 | 成功 | 写入数据 、附加数据 |
某些人试图访问未授权的对象的活动 | 失败 | 所有的权限 |
审计对文件夹的访问控制变更活动 | 成功 | 更改权限、取得所有权 |
审计对文件夹或者某个文件夹内任意文件的删除活动 | 成功 | 删除子文件夹及文件 |
打开的对象:
对象访问尝试:
这里的“特权”特指通过安全设置—>本地策略—>用户权限分配界面授予用户的权限(这些权限具体的含义请参考操作系统的帮助)。如下图所示:
描述信息字段为:
指派给新登录的特殊权限:
调用的特许服务:
描述信息如下:
特许的对象操作: