醉心于技术。
全部博文(119)
分类: Windows平台
2018-10-03 17:38:50
<系统安全运维> Server 2008 R2 事件查看器实现日志分析
在 windows server 2008 R2 中,可以通过点击 "开始" -> "管理工具" -> "事件查看器" ,来打开并查看各种类型的系统内置日志记录;让我们来做一个实际练习:使用事件查看器检查各种帐户的登录事件,包括系统内置的特殊帐户,以及大家熟悉的 administrator 管理员帐户。
一般而言,在启动服务器后,一个叫做 winlogon.exe 的进程会先以
NT AUTHORITY\SYSTEM (帐户域\帐户权限)登录,然后进入要求用户键入 ctrl + alt + del 并输入帐密的登录界面,此时,winlogon.exe 检查并验证用户的输入,通常的做法是将用户键入的密码以某种哈希算法生成密文,将其与 SAM 数据库文件中的密文进行比对,如果一致则该账户通过验证并登录,然后赋予相应的权限。
所有这些过程都会被记录进系统内置的"安全"类型日志,可以通过事件查看器浏览;
除了 winlogon.exe 进程外,其它一些系统进程也会在用户登录前,使用特殊帐户先行登录。这些登录事件同样可以在事件查看器中一览无遗,
(例如,一个叫做 services.exe 的系统服务进程,使用 NT AUTHORITY\SYSTEM (帐户域\帐户权限)登录,然后它会创建数个 svchost.exe 子进程,而每个 svchost.exe 进程都会启动并纳宿一些基本的 windows 服务,而许多用户空间的应用程序将使用这些服务,实现它们的功能)
下面结合图片讲解事件查看器在这两个场景中的应用:
一,首先按照上述步骤打开事件查看器,在左侧窗口中展开 "Windows 日志"节点,选取"安全"项目,此时在中间的窗口会列出自系统安装以来,记录的所有安全事件,假设我们要查看最近 24 小时以内的帐户登录与验证,审核,权力指派等事件,可以在"安全"项目上右击鼠标,在弹出的上下文菜单中选择"筛选当前日志(L)"
二,在打开的对话框中,切换到"筛选器"标签,在"记录时间(G)"右侧的下拉列表中,选择"近 24 小时",然后点击下方的确定按钮
三,显示出筛选的结果,下面这张图显示了在 24 小时内纪录的 73 项安全事件(Microsoft Windows 安全审核是准确的称呼),你可以按照日期与时间列排序事件,或者按照事件ID,任务类别(我觉得翻译成事件类别会比较好理解)来排序时间,
我们关注的是"登录"与"特殊登录"事件,因此需要选择以任务类别排序.
下图中没有按照任务类别排序,而是默认按照日期与时间排序,其优点是,可以追踪在系统启动过程中,哪个系统进程使用哪个系统内置帐户登录,并且可以直观地看出它们之间的先后次序.
通过上面的分析,你是否已经直观地感受到事件查看器的强大功能?
下面让我们再看另一个例子:使用事件查看器浏览,因远程过程调用(RPC)服务启动失败,导致我们无法以管理员登录 windows server 2008 R2 的事件记录.
先纠正一个普遍存在的错误理解;
RPC 监听在本地环回(127.0.0.1)地址的 135 端口,出于安全考虑,很多人会将这个端口关闭,以阻止蠕虫病毒与攻击者入侵,但是我们会发现这个地址上的 135 端口始终关不掉而因此忧心忡忡;
其实,127.0.0.1:135 是必须的,如果该端口不打开,则说明 RPC 服务没有启动,从而导致很多依赖 RPC 的其它系统服务无法启动,
再说,除非你手动通过 services.msc 服务管理器来禁用它,否则通过其它手段是很难关闭的(包括修改注册表键值),
我们真正应该关闭并警惕的,是那些监听在非本地环回的 135 端口,例如 192.168.0.1:135 ,因为这个地址是可以与远程主机的地址通信的,攻击者可以扫描监听在这个地址端口上的程序漏洞,并远程执行恶意代码(通过 Metasploit 即可办到),从而入侵我们的服务器.
如果关不掉,也可以使用 windows 高级防火墙来禁止该地址端口上的出入站流量.
总之,本地环回的 135 端口是必须打开的,这并非是恶意软件,木马程序开放的端口,否则你连 windows 桌面都无法登录.
如果无法登录 windows server 2008 R2 服务器的桌面,并且系统提示 RPC 服务启动失败,无法读取用户 profile ,那么可以进入安全模式,运行 services.msc ,找到其中的 Remote Procedure Call (RPC) 以及 RPC Endpoint Mapper(RpcEptMapper) ,将这两个服务设置为自动启动,然后运行 msconfig ,
在"服务"标签中,确保勾选了 RPC Endpoint Mapper ,点确定后重启系统,以正常模式进入,应该就能用管理员账户登录了.
下图给出了一个事件查看器中的一项 RPC 服务启动失败信息:
为了深入理解RPC-EPMAP(即RPC Endpoint Mapper,下文简称RPC端点映射)使用的135端口,以及RPCSS(远程过程调用,下文简称RPC)使用的动态端口,考虑下面的例子:
现在有2台windows server 2008 R2 服务器A与B,A的IP为192.168.5.1;B的IP为192.168.5.2,A要“远程管理”B上的windows高级安全防火墙,就需要在两台计算机上都启用RPC-EPMAP与RPC服务,首先在B的命令行输入:
这等同于将该服务器上的高级安全windows防火墙中,针对当前活动的配置文件(专用/公用/域)的入站策略的预定义规则中的 “windows防火墙远程管理(RPC)”以及“windows防火墙远程管理(RPC-EPMAP)”这2条规则启用,查看B的高级安全防火墙,发现RPC-EPMAP的本地端口为终结点映射器,实际上就是TCP的135端口(后面截图会验证);RPC的本地端口为动态端口:
然后在A计算机上,通过MMC去远程连接B(192.168.5.2)的高级安全防火墙:
仔细检视上面2张图,它验证了前面我们讨论的关于RPC使用的端口的内容;如果在services.msc 中,将B上的RPC-EPMAP 服务停止或禁用,(如果无法禁用,根据netstat -ano 列出的B上打开TCP 135端口的PID,就可以在任务管理器中找到启动RPC-EPMAP 服务的svchost.exe进程,将其杀掉,TCP 135端口就关闭了)
此时我们就无法在A上远程管理B上的高级安全防火墙。由此可知,RPC-EPMAP是很重要的基础系统服务,不仅远程管理防火墙和RPC动态端口服务依赖于它,一堆系统服务也构建在它之上。
下面是services.msc中关于该服务的解释:
解析RPC接口标识符以传输端点,如果此服务被停止或禁用(实质上就是关闭了本地环回或0.0.0.0上的TCP135端口),使用远程过程调用(RPC)服务的 程序将无法正常运行。
综上所述,在服务器上,我们应该通过正确的配置防火墙策略来在出入站方向限制对本地打开的TCP 135端口发起的连接,而不是盲目的将其关闭,作为生产服务器关闭该端口的后果是很严重的。
**********************
关于日志存储与清除的一般性原则
如果你任职的企业组织对于系统日志的存储要求比较严格,例如,每一种类型的操作都要记录下来并持续保留一段时间,那么就要制订好日志的存储与清除策略.
在事件查看器左侧的日志树中,只有"windows 日志"以及"应用程序和服务日志"这两个节点下的日志,可以自定义日志文件大小与存储路径;
在"自定义视图"节点下的所有日志都无法调整大小与改变路径,这是因为,自定义视图日志仅仅是根据用户创建的过滤规则,然后在前述两个日志树中查找匹配的日志条目并汇总在一起显示,并没有创建这些筛选出来的日志副本,只能通过原始日志修改.
作为服务器操作系统,windows server 2008 R2 明显考虑到了企业组织对于日志"备案"的需求,因此当管理员因试图清除某个系统日志文件中的内容时,会给出明显的提示要求用户首先备份该日志,也就是将其副本另行存储,假设日后公司出现信息安全突发事件,这些备案的日志将会是追查取证的强有力工具.
*******************************
事件查看器还支持将自定义的任务"附加"到事件,举例来说,特定事件发生时,在桌面弹出信息提示框,或者运行指定的程序脚本(支持 VBScript),或者向用户发邮件等等.
让我们来看一个例子:
Software Protection 服务与 SPP Notification Service 服务是微软用来定期检查用户的 windows 产品许可证是否以过期,激活是否有效的两个"软件保护服务",
一般而言,MSDN 下载的 windows server 2008 R2 有一个免费的"评估期限",为180天,过后需要用户购买许可证来激活 windows ,当然,加上最多五次,每次10天的宽容期,最长可免费使用 230 天,试用期内所有功能不受限制.
尽管在评估期过后,我们可以通过 services.msc 服务管理器来手动禁止该服务运行,并且通过 msconfig 禁止它在系统启动时运行,但是这两种办法的效果都不太理想: 在内核代码的逻辑层面,系统可以"随时"启动这两个服务,检查我们的授权状态,
系统运行这两个服务的时候,会被记录并且可以在事件查看器中浏览,
但是注意,这两个服务没有"任务类别"的概念,而且属于"应用程序"日志节点,因此需要通过"来源"为 Security-SPP,级别为"信息"的多种过滤手段来筛选,如下图所示:
下面是过滤出来的一条 Secyrity-SPP 服务正在启动的记录,该事件的 ID 为 900,我们需要对该事件附加任务,注意,不要对 Secyrity-SPP 服务后续的事件,如"完成授权检查状态(ID 1003)","软件保护服务已启动(ID 902)"附加事件,因为这个时候你再来改系统时间,重置宽限期就为时已晚,需要在它启动的时候变更才有效.
单击上面第一张图右侧的"将任务附加到此事件",就会打开一个创建基本任务的向导,你可以设置当事件被记录时(即 Secyrity-SPP 服务运行时)的操作: 运行其它应用程序或脚本;发送电子邮件,向用户显示桌面消息等3个选项.
这里我自定义了一串提示信息,提醒我当 windows 检查我的许可证时,立刻运行激活工具重新激活(我的 230 天评估期已到;当然你也可以重装系统....),因为我的激活工具即便在评估到期后依然可以激活,所以这里选择发送提醒消息,如果你是通过重置5天宽限期,或者更改时间的办法,可能就需要将"操作"选择为"启动程序",然后定位到你的重置脚本或改时间脚本,才能绕过验证.
注意,事件查看器实际上是借助 windows 任务计划程序来支持"将任务附加到此事件"功能的,也就是说,经过上图的向导设置后,还需要在管理工具中打开任务计划程序,点击左侧的"事件查看器任务"节点,然后中间窗口会列出我们刚才附加的任务,在其上右击,选择"启动".作为测试,你可以手动运行 Security-SPP 服务,就会看到上面的小提示对话框,说明成功将自定义任务附加到事件!
以上例子仅是抛砖引玉,你可以附加任何任务到任何能够记录的事件,例如某个重要的系统目录被访问,读取时,设置特殊权限;以及远程登录尝试频繁失败时,锁定账户...只有想不到,没有做不到,后续会介绍一些对比较敏感的安全事件执行特定任务响应的例子.