0x00 Linux 痕迹清理

Linux 痕迹清理

常见命令

history 命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
history 查看当前session历史命令缓冲区及历史命令文件
高级用法
export HISTTIMEFORMAT='%F %T '
history |more 可以查看到历史命令的具体时间 /bin/bash下测试有效

CTRL+r 进入历史命令搜索模式 输入部分关键字 搜索后回车执行

快速执行上一条命令
!!

!-1(同样在查看到编号后可以!+数字执行)
ctrl p

有关变量
HISTSIZE 指定历史记录文件的大小
HISTFILE 指定记录历史命令的文件

history -c 清除当前shell对应的所有的命令历史(直接清空文件) 需要注意不同的执行环境
history -a 将历史命令缓冲区内容写入到文件中(多个session)
history -w 将当前历史命令缓冲区内容立即写入到文件中
history -r 清除当前历史命令缓冲区的内容

根据上述命令,每一次session结束后会自动将命令执行,缓冲区的内容写入到历史命令记录文件中。因此可以在每次执行结束后执行history -r清除。也可以指定export HISTFILE=为空或者置为/dev/null让结束后命令历史写入的文件不存在。也可以修改HISTSIZE为0,禁止写入到历史记录文件中。

unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG; export HISTFILE=/dev/null; export HISTSIZE=0; export HISTFILESIZE=0

如果在日志中已经有了记录,可以在无痕状态下使用sed进行清除sed -i '/content/'d file

也可以下载历史记录文件,本地清除后上传覆盖,时间需要进行修改。

相关文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
last-----> /var/log/wtmp       记录计算机重启和登入的情况
lastlog-----> /var/log/lastlog 记录用户上一次登录历史
lastb------> /var/log/btmp 记录登录失败历史
w---------->/varr/run/utmp w命令查看当前在线

/var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一
/var/log/secure 与安全相关的日志信息
/var/log/maillog 与邮件相关的日志信息
/var/log/cron 与定时任务相关的日志信息
/var/log/spooler 与UUCP和news设备相关的日志信息
/var/log/boot.log 守护进程启动和停止相关的日志消息
/var/log/auth.log 系统登录日志(debian系统)


~/.bash_history 其余的tcsh、zsh、sh、ksh等
~/.mysql_history mysql命令执行历史
~/.viminfo 记录vim 操作记录 可还原写入文件

其余一些web服务的日志
/var/log/apache2/access.log ---error.log等
/var/log/nginx/access.log
很多Java中间件或组件的日志会存在应用目录的log目录下
如tomcat的catalina.out,activeMq的activemq.log
更具体的路径可以相应查看log.properties或者log4j.properties以及代码中的设置

对于文件的删除比较粗糙可以直接echo > file清空,也可以稍微精细一点使用sed对文本文件进行删除。对于wtmp,btmp,utmp这种二进制文件可以使用logtamper(可以隐藏w连接并清除掉指定的ip登录记录,对于lastlog只能修改登录时间),fake_login_log.py可以进一步对登录信息进行隐藏。

  • 删除w和who历史(/var/run/utmp)
    w
  • 删除last历史(/var/log/wtmp 主机运行及用户历史登录情况)
    会删除所有来源的用户记录
    last
  • 删除lastlog历史(/var/log/lastlog 每个用户的历史登录情况,每次登录均会覆盖)
    只能通过时间和host清除
    lastlog
    时间格式为"%Y-%m-%d %H:%M:%S"
    lastlog
  • 删除登录失败历史(/var/log/btmp)
    btmp
    除了删除历史之外,由于lastlog等文件在管理员配置过程中肯定存在记录,直接清空显得很异常,可以借助fake_login_log.py进行伪造。
    1
    2
    3
    4
    Linux可以使用如下命令将二进制文件转换为文本后操作
    utmpdump /var/log/wtmp |sed "s/192.168.233.132/1.1.1.1/g" |utmpdump -r >/tmp/wtmp1 &&\mv /tmp/wtmp1 /var/log/wtmp
    Unix
    /usr/lib/acct/fwtmp < /var/adm/wtmpx | sed "s/192.168.8.88/localhost/g" | /usr/lib/acct/fwtmp -ic > /var/adm/wtmpx

    Tip

    1
    2
    3
    4
    5
    6
    7
    8
    9
    ssh -T root@127.0.0.1 /bin/bash -i -T参数隐藏w命令查看
    ssh -o UserKnownHostsFile=/dev/null -T user@host /bin/bash –i 不记录Linux公钥到known_hosts中
    直接查看网络连接netstat -antp| grep 22还是存在的

    进一步简单的隐藏可以备份bin文件替换成其他可执行sh文件写入命令过滤自己的连接
    which netstat
    cp /path/netstat /path/netstat.bak
    vi /path/netstat ----> /path/netstat.bak ${*} } |grep -v ip
    更深层次就需要进行Hook或者驱动级隐藏
    通过-T参数,可以防止登录成功后被记录到对应文件中,需要注意的是登录失败日志仍然会记录到/var/log/btmp
    btmp