前言
在渗透测试过程中,Windows日志往往会记录系统上的敏感操作,如添加用户、写计划任务、远程登录执行等操作,对于会审计的安全运维人员或者网络管理员来说,简直就是脱掉衣服走路,被看的一清二楚。对于比较高阶的渗透操作中,要讲究的是动作无感化,来无影去无踪。而对于防御者来说,了解常用的绕过方法也有助于更好的保护自己的系统。
Windows日志介绍
Windows系统日志是记录系统中硬件、软件和系统问题的信息,同时还可以监视系统中发生的事件。用户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。
Windows主要有以下三类日志记录系统事件:应用程序日志、系统日志和安全日志。
1.1 系统日志
记录操作系统组件产生的事件,主要包括驱动程序、系统组件和应用软件的崩溃以及数据丢失错误等。系统日志中记录的时间类型由Windows NT/2000操作系统预先定义。
默认位置:
%SystemRoot%\System32\Winevt\Logs\System.evtx
1.2 应用程序日志
包含由应用程序或系统程序记录的事件,主要记录程序运行方面的事件,例如数据库程序可以在应用程序日志中记录文件错误,程序开发人员可以自行决定监视哪些事件。如果某个应用程序出现崩溃情况,那么我们可以从程序事件日志中找到相应的记录,也许会有助于你解决问题。
默认位置:
%SystemRoot%\System32\Winevt\Logs\Application.evtx
1.3 安全日志
记录系统的安全审计事件,包含各种类型的登录日志、对象访问日志、进程追踪日志、特权使用、帐号管理、策略变更、系统事件。安全日志也是调查取证中最常用到的日志。默认设置下,安全性日志是关闭的,管理员可以使用组策略来启动安全性日志,或者在注册表中设置审核策略,以便当安全性日志满后使系统停止响应。
默认位置:
%SystemRoot%\System32\Winevt\Logs\Security.evtx
Windows日志信息分析
对于Windows事件日志分析,不同的EVENT ID代表了不同的意义,摘录一些常见的安全事件的说明:
事件ID | 说明 |
---|---|
4624 | 登录成功 |
4625 | 登录失败 |
4634 | 注销成功 |
4647 | 用户启动的注销 |
4648 | 试图使用显式凭据登录。 |
4672 | 使用超级用户(如管理员)进行登录 |
4720 | 创建用户 |
4774 | 帐户已登录映射。 |
4775 | 无法映射的登录帐户。 |
4776 | 计算机试图验证的帐户凭据。 |
4777 | 域控制器无法验证帐户的凭据 |
4778 | 到窗口站重新连接会话。 |
4779 | 从窗口站,会话已断开连接。 |
6005 | 表示计算机日志服务已启动,如果在事件查看器中发现某日的事件D号为6005,就说明这天正常启动了windows系统。 |
6006 | 表示事件日志服务已停止,如果没有在事件查看器中发现某日的事牛ID为6006的事件,就表示计算机在这天没关机或没有正常关机 |
每个成功登录的事件都会标记一个登录类型,不同登录类型代表不同的方式:
对于比较熟练操作日志的管理员来说,很快就可以将日志筛选出来。如果看出来有高危的。那小则排查发现主机,大则溯源。这样你的权限就会摇摇欲坠。
有的人说了,那我删掉不就好了。确实可以,没问题。但是windows也考虑到这一点了。比如不能单条删除、删除会有日志ID:6006。删掉对于一个合格的红队人员来说,为下下策。如下我将介绍删除的方法:
Windows日志的常用清除方法
Wevtutil.exe(不支持删除多条)
操作系统默认包含,支持系统:Win7及以上
常用命令如下:
(1) 统计日志列表,查询所有日志信息,包含时间,数目
wevtutil.exe gli Application
(2) 查看指定类别的日志内容
wevtutil qe /f:text Security
(3) 删除该类日志所有内容
wevtutil cl Application
Application日志全部清除,数目为0
Windows日志的绕过方法
绕过原理
Windows日志对应于eventlog服务,找到该服务对应的进程svchost.exe,进而筛选出svchost.exe进程中具体实现日志功能的线程,调用TerminateThread结束线程,破坏日志记录功能
由于只结束了实现日志功能的线程,所以Windows Event Log服务没有被破坏,状态仍为正在运行
我的思路如下:
- 定位eventlog服务对应进程svchost.exe的PID
- 遍历该进程中的所有线程
- 判断线程是否满足条件
Windows Event Log 服务需要调用wevtsvc.dll,完整路径
%WinDir%\System32\wevtsvc.dll
并且,如果线程调用了wevtsvc.dll,就可以判读该线程实现了日志记录功能
- Kill掉记录日志线程,注意是线程
这里我使用C++完成了这个功能:
运行如下:
运行前:
运行后:
看到日志已经关闭
启动还原
可以使用启动服务方式重新加载线程
net start eventlog
或主机重启后自己加载。