Fork me on GitHub

日志隐匿

本篇文章主要记录在内网渗透过程中日志清理技术。一个真正成功的渗透测试是一个达到目后实现全身而退。要想做到全身而退,那么适宜的日志清理技术是一个十分关键的步骤。

windows

通过微软图形化工具,可以看到windows的日志系统大致分为以下五种:

1
2
3
4
5
应用程序
安全
Setup
系统
Forwarded events

常见的windows应用日志保存位置

由于不同的windows发行版具体位置可能有些许不一致,可以通过注册表查看具体的日志存位置:HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Eventlog

下面为windows Server 2012 和windows 10 的日志位置

1
2
3
4
5
6
7
8
- system
%SystemRoot%\system32\winevt\Logs\System.evtx
- Security
%SystemRoot%\System32\winevt\Logs\Security.evtx
- HardwareEvents
%systemroot%\system32\winevt\logs\HardwareEvents.evtx
- Application
%SystemRoot%\system32\winevt\Logs\Application.evtx

常用的日志操作命令

https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/cc732848(v=ws.11)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- 默认视图格式(xml)查看最近的10条 security 记录,可以通过查看xml格式获得日志对应的EventRecordID
wevtutil.exe qe Security /rd:true /c:10

- 以txt视图格式查看最近的10条application记录
wevtutil.exe qe Application /rd:true /c:10 /f:txt

- 导出Security所有日志并保存为1.evtx
wevtutil.exe epl Security 1.evtx

- 删除Security下的单条日志(EventRecordID=1112),并保存为1.evtx
wevtutil epl Security 1.evtx "/q:*[System [(EventRecordID!=1112)]]"

- 删除Security下的多条日志(EventRecordID为13030、13031和13032),结果保存为1.evtx
wevtutil epl Security 1.evtx "/q:*[System [(EventRecordID>13032) or (EventRecordID<13030)]]"

- 删除SystemTime为2018-08-10T03:20:00至2018-08-10T03:21:00之间的日志,结果保存为1.evtx
wevtutil epl Security 1.evtx "/q:*[System [TimeCreated[@SystemTime >'2018-08-10T03:21:00' or @SystemTime <'2018-08-10T03:20:00']]]"

windows日志隐匿

windows后渗透日志相关现成的工具
[1]clearlog(http://ntsecurity.nu/toolbox/clearlogs/)
[2]phant0m(https://artofpwn.com/phant0m-killing-windows-event-log.html)
[3]Elsave(http://www.ibt.ku.dk/jesper/elsave/)

删除指定日志

在Windows日志中记录了很多操作事件,为了方便用户对它们的管理,每种类型的事件都赋予了一个惟一的编号,这就是事件ID。一个完美的攻击流程是不再目标系统上留下攻击者的任何蛛丝马迹。这就要求我们对日志有选择的删除,制造不曾来过的假象。然而在windwos10系统上做到非全盘删除日志有一定的技术难度。大致流程如下:

具体可以参考三号学生前辈的系列文章:https://3gstudent.github.io/3gstudent.github.io/%E6%B8%97%E9%80%8F%E6%8A%80%E5%B7%A7-Windows%E5%8D%95%E6%9D%A1%E6%97%A5%E5%BF%97%E7%9A%84%E5%88%A0%E9%99%A4/

1
2
1. 有选择的将日志文件导出(过滤掉hacker操作后的日志)
2. 将导出的日志文件对原日志文件进行替换操作。

阻止进程产生日志

windows日志服务的对应的宿主进程为 Services.exe,大致的实现思路如下:

1
2
3
4
5
6
7
1、定位eventlog服务对应进程svchost.exe的pid

2、遍历该进程中的所有线程

3、判断线程是否满足条件

4. 调用API终止满足条件的线程

上述工具[2]就是实现了上述的流程的自动化工具。更多的细节可以点进工具主页。

组织实时日志记录

在大型的企业架构上,相关组件的日志是实时采集并集中处理的,如ELK,上述的windows日志隐匿操作知识在这里就比较局限。在这个时候做到行踪隐匿比较费劲。大致有两种思路,其一是完全拿下日志集中处理的服务器,这样就可以为所欲为。其二,找到客户机的日志agent,通过进程注入hook,忽略修改日志报备的细节。可以说实时日志记录的大型架构下的渗透要做到无痕的难度大了许多。笔者对这类大型架构的接触很少,没有相关的实战操作,所以这部分只能待日后阅历上来后,继续完善。

Linux

windows和linux的日志机制有较大的区别。linux下的日志目录比较规范

1
2
删除/var/log下的文件即可: 
rm -f -r /var/log

linux常用日志介绍

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
- 对于明文的Apache文件,通过正则表达式就可以搞定:
sed –i 's/192.168.1.3/192.168.1.4/g' /var/log/apache/ access.log
sed –i 's/192.168.1.3/192.168.1.4/g' /var/log/apache/error_log
其中192.168.1.3是我们的IP,192.168.1.4使我们伪造的IP。

MySQL日志文件
log-error=/var/log/mysql/mysql_error.log #错误日志
log=/var/log/mysql/mysql.log#最好注释掉,会产生大量的日志,包括每一个执行的sql及环境变量的改变等等
log-bin=/var/log/mysql/mysql_bin.log # 用于备份恢复,或主从复制.这里不涉及。
log-slow-queries=/var/log/mysql/mysql_slow.log #慢查询日志
log-error=/var/log/mysql/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

sed –i 's/192.168.1.3/192.168.1.4/g'
/var/log/mysql/mysql_slow.log
至于二进制日志文件,需要登录mysql client来修改删除,建议这种操作最先执行。

php日志修改
sed –i 's/192.168.1.3/192.168.1.4/g'
/var/log/apache/php_error.log
最后就是Linux的日志文件了,这个比较多,记录的也比较复杂,我的环境是CentOS 6.3。我现在只把和渗透有关的文件列出来,主要在/etc/logrotate.d/syslog中

/var/log/maillog,该日志文件记录了每一个发送到系统或从系统发出的电子邮件的活动,它可以用来查看用户使用哪个系统发送工具或把数据发送到哪个系统

var/log/messages,该文件的格式是每一行包含日期、主机名、程序名,后面是包含PID或内核标识的方括号,一个冒号和一个空格

/var/log/wtmp,该日志文件永久记录每个用户登录、注销及系统的启动,停机的事件。该日志文件可以用来查看用户的登录记录,last命令就通过访问这个文件获得这些信息,并以反序从后向前显示用户的登录记录,last也能根据用户,终端tty或时间显示相应的记录

/var/run/utmp,该日志文件记录有关当前登录的每个用户的信息,因此这个文件会随着用户登录和注销系统而不断变化,它只保留当时联机的用户记录,不会为用户保留永久的记录。系统中需要查询当前用户状态的程序,如who、w、users、finger等就需要访问这个文件

/var/log/xferlog,该日志文件记录FTP会话,可以显示出用户向FTP服务器或从服务器拷贝了什么文件。该文件会显示用户拷贝到服务器上的用来入侵服务器的恶意程序,以及该用户拷贝了哪些文件供他使用。

linux下有bash的历史命令记录,这点不要忘记

1
2
3
4
5
6
7

- 修改history保存历史命令个数
export HISTSIZE=0
- 使用0覆盖history历史文件
shred -zu /root/.bash_history
- 修改history命令历史记录保存文件为空文件
export HISTFILE=/dev/null

参考

[1]https://artofpwn.com/phant0m-killing-windows-event-log.html
[2]https://3gstudent.github.io/3gstudent.github.io/%E6%B8%97%E9%80%8F%E6%8A%80%E5%B7%A7-Windows%E5%8D%95%E6%9D%A1%E6%97%A5%E5%BF%97%E7%9A%84%E5%88%A0%E9%99%A4/
[3]https://threathunter.org/topic/593eb1bbb33ad233198afcfa
[4]http://www.4hou.com/penetration/5998.html

-------------本文结束感谢您的阅读-------------