系统入侵后要对操作痕迹进行清除,如果上传工具和木马文件要做隐藏和伪装,以免引起警觉甚至丢失目标,“清道夫”的工作虽有些烦杂,但这些工作直接影响到目标控守的持久性。
The quieter you become, the more you are able to hear.
首先要区分Linux用来配置shell环境的初始化脚本,参考文章:Linux配置shell环境:profile和bashrc初始化脚本
History记录原理:当前shell执行的命令记录放置在缓存中,history
命令查看的也是缓存中的命令,当exit退出时系统会将缓存的命令写入history文件~/.bash_history
。如果在shell运行过程中kill掉其进程,则缓存命令不会写入history。
方法一:在执行命令前加上空格,这样命令就不会被记录。这种方法在配置环境变量$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
中的记录。
方法:设置环境变量,添加对历史命令记录数量的限制: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权限直接可以查看并删改,而且不需要停止当前应用运行的服务,日志的删改方法都是相同的,如下:
不留下任何痕迹,但是特征也很明显,容易被察觉,一般不推荐使用。将日志文件全部删除即将空字符写入日志文件,需要root权限,有五种命令可以实现:
cat /dev/null > filename
: > filename
> filename
echo "" > filename
echo > filename
区别:前三种命令清空文件后文件大小为0,后两种命令清空文件后会留下一个换行符,文件大小为1byte。
对于文本格式的日志文件,可以直接进入文件进行删改,也可以利用流编辑命令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
从应用层面通过参数选择隐藏记录,如ssh远程隐藏登录:
ssh -T [email protected] /bin/bash -i
# -T:不分配伪终端
# -i:bash的参数,表示交互式shell
.ssh
目录中:ssh -o UserKnownHostsFile=/dev/null -T [email protected] /bin/bash –i
# -o:options选择信息
注:使用ps
命令可以查看到ssh隐藏登录的进程
Linux文件时间戳包括三种,用stat filename
命令查看:
上传工具或木马文件后,要将其修改为和当前目录中文件相近的时间,利用touch
命令进行修改atime和mtime(不能修改ctime),命令参数如下:
[[CC]YY]MMDDhhmm[.ss]
,如果不指定时间戳,则默认时间为当前时间"2020-12-12 12:12:12.00"
,如果不指定时间戳,则默认时间为当前时间注意:-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
Linux中以.
开头命名的文件或文件夹即为隐藏文件,因此要隐藏某个文件或文件夹直接将其名字前加一个.
就可以了。
查看所有文件(包括隐藏文件)可以用ls -a
命令,只查看隐藏文件可以用ls -d .*
命令。
需要修改的文件属性除了时间戳,主要还包括所属用户/组、读写权限等,常见命令如下:
chown:修改文件所属用户,chown [options] [user][:[group]] file
chgrp:修改文件所属组,chgrp [options] [group] file
chmod:修改文件读/写/执行权限,有两种命令:
chmod [options] mode[,mode] file
,其中mode为[ugoa][-+=][rwx]
,具体含义为:chmod [options] octal-mode file
,rwx对应各自权重,分别为二进制100、010、001,即421chmod u=rwx,g=rx,o=r test.txt
、chmod 754 test.txt
以上三种命令options有一个共同的参数-R
:递归改变该目录及其子目录中的文件
为避免数据被恢复,对于敏感文件和工具,不应使用常规的rm
、rmdir
删除命令,而应使用覆写删除命令进行删除:
实现安全的从硬盘上擦除数据,命令格式为:shred [options] file
,options具体参数如下:
例如删除test1工具:
# 将test1覆写6次后再填0x00,最后将其删除
shred -zufvn 6 test1
dd命令通常用来备份、恢复、转换磁盘上的分区和文件,也可以实现安全擦除数据,命令格式为:dd options
,options包括:
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