Linux痕迹清除技术

系统入侵后要对操作痕迹进行清除,如果上传工具和木马文件要做隐藏和伪装,以免引起警觉甚至丢失目标,“清道夫”的工作虽有些烦杂,但这些工作直接影响到目标控守的持久性。

The quieter you become, the more you are able to hear.

文章目录

    • 一、痕迹清除
      • (一) History记录
      • (二) 日志文件
    • 二、文件伪装
      • (一) 伪装&隐藏
      • (二) 文件擦除

一、痕迹清除

(一) History记录

首先要区分Linux用来配置shell环境的初始化脚本,参考文章:Linux配置shell环境:profile和bashrc初始化脚本

History记录原理:当前shell执行的命令记录放置在缓存中,history命令查看的也是缓存中的命令,当exit退出时系统会将缓存的命令写入history文件~/.bash_history。如果在shell运行过程中kill掉其进程,则缓存命令不会写入history。

1.部分删除

方法一:在执行命令前加上空格,这样命令就不会被记录。这种方法在配置环境变量$HISTCONTROL=ignoreboth条件下有效 (缺省配置),如果没有该项配置,将其加到配置脚本中 echo HISTCONTROL=ignorespace >> ~/.bashrc,然后运行source ~/.bashrc即可。

方法二:设置当前session不再记录历史命令:set +o history,在执行该命令之前的命令仍然会记录,不会删除history文件中的记录,恢复记录历史命令:set -o history。注意在命令前加空格,否则set命令本身会被记录。

方法三:清除当前session缓存的命令记录:history -c,history命令本身不会被记录,但执行该命令之后的命令仍然会记录,所以要在退出前运行,不会删除history文件中的记录。

方法四:清除当前session缓存的命令记录:unset HISTORY HISTFILE HISTSAVE HISTZONE HISTLOG,无论在执行该命令之前还是之后的命令都不会被记录,且unset命令本身也不会被记录,不会删除history文件中的记录。

方法五:编辑删除当前用户history文件~/.bash_history中的记录。

2.全部删除

方法:设置环境变量,添加对历史命令记录数量的限制:HISTSIZE=0,以及对history文件.bash_history行数的限制:HISTFILESIZE=0

在当前shell中直接输入命令HISTSIZE=0 && HISTFILESIZE=0,这样会将缓存的history记录和~/.bash_history中的记录全部清空;如果在~/.bashrc初始化文件中添加命令:HISTSIZE=0 && HISTFILESIZE=0,这样每次开启shell都不会再记录history命令。

(二) 日志文件

Linux中有多种系统日志,记录主机运行和用户登录情况:

日志 作用
/var/log/btmp 记录所有用户错误登录信息,二进制文件, 使用lastb命令查看
/var/log/wtmp 记录所有用户成功登录、注销信息,二进制文件,使用last命令查看
/run/utmp 记录当前已经登录的用户信息,二进制文件,使用w、who、users等命令查看
/var/log/secure 或 /var/log/auth.log 记录与安全相关的日志信息,涉及使用账户和密码登录的程序都会记录
/var/log/lastlog 记录所有用户最后一次的登录时间的曰志,二进制文件,使用lastlog命令查看
/var/log/messages 记录系统启动后的信息和错误日志

和系统日志相同,Linux中绝大多数应用日志默认路径都在/var/log/目录下,比如:/var/log/apache2/access.log/var/log/nginx/access.log,root权限直接可以查看并删改,而且不需要停止当前应用运行的服务,日志的删改方法都是相同的,如下:

1.全部删除

不留下任何痕迹,但是特征也很明显,容易被察觉,一般不推荐使用。将日志文件全部删除即将空字符写入日志文件,需要root权限,有五种命令可以实现:

  • cat /dev/null > filename
  • : > filename
  • > filename
  • echo "" > filename
  • echo > filename

区别:前三种命令清空文件后文件大小为0,后两种命令清空文件后会留下一个换行符,文件大小为1byte。

2.部分删除

对于文本格式的日志文件,可以直接进入文件进行删改,也可以利用流编辑命令sed删除文件中匹配的行:

# 删除所有匹配到字符串的行,比如自己的登录ip
sed -i '/ip/'d /var/log/messages

# 全局替换登录IP地址:
sed -i 's/ip1/ip2/g' /var/log/auth.log

对于二进制日志文件,部分删除需要使用utmpdump命令,utmpdump可以将wtmp和utmp转换为文本文件,将文本文件编辑修改后恢复成二进制文件即可,如下面针对wtmp进行修改:

# 将二进制日志文件转换为可编辑的文本文件
utmpdump /var/log/wtmp >/var/log/wtmp.file

# 对文本文件进行编辑和修改
# 将编辑修改后的文本文件转换为二进制日志文件
utmpdump -r < /var/log/wtmp.file > /var/log/wtmp
3.隐藏记录

从应用层面通过参数选择隐藏记录,如ssh远程隐藏登录:

  • 登录时不分配伪终端,不会记录在utmp、wtmp、btmp中,不会被w、who、users、last、lastb命令发现:
ssh -T [email protected] /bin/bash -i
# -T:不分配伪终端
# -i:bash的参数,表示交互式shell
  • 登录时不将ssh公钥保存在本地.ssh目录中:
ssh -o UserKnownHostsFile=/dev/null -T [email protected] /bin/bash –i
# -o:options选择信息

注:使用ps命令可以查看到ssh隐藏登录的进程

二、文件伪装

(一) 伪装&隐藏

1.修改时间戳

Linux文件时间戳包括三种,用stat filename命令查看:

  • 访问时间(access time,atime):文件内容最后一次被读取的时间,如用cat、more命令查看文件
  • 修改时间(modify time,mtime):文件内容最后一次被修改的时间,如用vim编辑器修改文件内容
  • 改变时间(change time,ctime):文件属性被最后一次被修改的时间,inode节点信息被修改时间(大小、属组、属主、权限),如用chmod、chown命令修改文件属性,或修改文件内容

Linux痕迹清除技术_第1张图片
ls -l命令查看的是文件最后一次被修改的时间mtime。

上传工具或木马文件后,要将其修改为和当前目录中文件相近的时间,利用touch命令进行修改atime和mtime(不能修改ctime),命令参数如下:

  • -m:等同于–time=mtime,修改mtime
  • -a:等同于–time=atime,修改atime
  • -t:时间戳修改为指定时间[[CC]YY]MMDDhhmm[.ss],如果不指定时间戳,则默认时间为当前时间
  • -d:时间戳修改为指定字符串,如"2020-12-12 12:12:12.00",如果不指定时间戳,则默认时间为当前时间
  • -r file:等同于–reference=file,时间戳修改为与file相同

注意:-d-t参数都有指定时间戳的功能,但是-t参数只能精确到秒,使用stat查看文件很容易看出破绽,使用-d参数更加精确隐蔽。

例如:

# 将test.txt的atime和mtime修改为"2020-12-12 12:12:12"
touch -t 202012121212.12 test.txt

# 将test.txt的mtime修改为"2020-12-12 12:12:12.8731390581"
touch -m -d "2020-12-12 12:12:12.831390581" test.txt

# 首先将test.txt的atime和mtime时间戳备份,待修改test.txt后,再将其时间戳恢复
touch temp -r test.txt
vim test.txt
touch test.txt -r temp
rm temp
2.文件隐藏

Linux中以.开头命名的文件或文件夹即为隐藏文件,因此要隐藏某个文件或文件夹直接将其名字前加一个.就可以了。

查看所有文件(包括隐藏文件)可以用ls -a命令,只查看隐藏文件可以用ls -d .*命令。

3.文件属性

需要修改的文件属性除了时间戳,主要还包括所属用户/组、读写权限等,常见命令如下:

chown:修改文件所属用户,chown [options] [user][:[group]] file

chgrp:修改文件所属组,chgrp [options] [group] file

chmod:修改文件读/写/执行权限,有两种命令:

  • chmod [options] mode[,mode] file,其中mode为[ugoa][-+=][rwx],具体含义为:
    u/g/o/a:user文件的所属用户/group文件的所属组/others其他用户/all所有用户及用户组
    -/+/=:权限的去除/添加/设置
    r/w/x:读/写/执行
  • chmod [options] octal-mode file,rwx对应各自权重,分别为二进制100、010、001,即421
    比如以下这两句命令是等同的:chmod u=rwx,g=rx,o=r test.txtchmod 754 test.txt

以上三种命令options有一个共同的参数-R:递归改变该目录及其子目录中的文件

(二) 文件擦除

为避免数据被恢复,对于敏感文件和工具,不应使用常规的rmrmdir删除命令,而应使用覆写删除命令进行删除:

1.shred命令

实现安全的从硬盘上擦除数据,命令格式为:shred [options] file,options具体参数如下:

  • -f, --force:必要时修改权限以使目标可写
  • -n, --iterations=N:覆盖N次,不指定次数则默认3 次
  • -s, --size=N:将文件内容粉碎为指定字节大小的碎片(可使用K、M 和G 作为单位)
  • -u, --remove:覆盖后截断并删除文件
  • -v, --verbose:显示详细信息
  • -z, --zero:最后一次使用ascii的0x00进行覆盖以隐藏覆盖动作

例如删除test1工具:

# 将test1覆写6次后再填0x00,最后将其删除
shred -zufvn 6 test1
2.dd命令

dd命令通常用来备份、恢复、转换磁盘上的分区和文件,也可以实现安全擦除数据,命令格式为:dd options,options包括:

  • if=file:输入文件名,缺省为标准输入
  • of=file:输出文件名,缺省为标准输出
  • ibs=size:读入块大小为size bytes
  • obs=size:写出块大小为size bytes
  • bs=size:同时设置读写块的大小为size bytes
  • count=N:仅拷贝N个块,每块的大小为size bytes

size单位默认为byte,同时也可以使用K、M、G为单位。常使用方法如下:

全盘数据备份:

dd if=/dev/sda1 of=~/image

备份磁盘开始的512个字节大小的MBR信息到指定文件:

dd if=/dev/sda1 of=~/image bs=512 count=1 

利用0填充销毁磁盘数据:

dd if=/dev/zero of=/dev/hda1

利用随机数填充销毁文件数据,文件大小为1K,覆写6次:

dd if=/dev/urandom of=~/test bs=1k count=6 

你可能感兴趣的:(内网渗透,渗透测试,linux)