系统入侵后要对操作痕迹进行清除,如果上传工具和木马文件要做隐藏和伪装,以免引起警觉甚至丢失目标,“清道夫”的工作虽有些烦杂,但这些工作直接影响到目标控守的持久性。
The quieter you become, the more you are able to hear.
一、痕迹清除
(一) History记录
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 root@192.168.126.1 /bin/bash -i
# -T:不分配伪终端
# -i:bash的参数,表示交互式shell
- 登录时不将ssh公钥保存在本地
.ssh
目录中:
ssh -o UserKnownHostsFile=/dev/null -T root@192.168.126.2 /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命令修改文件属性,或修改文件内容
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.txt、chmod 754 test.txt
以上三种命令options有一个共同的参数-R
:递归改变该目录及其子目录中的文件
二) 文件擦除
为避免数据被恢复,对于敏感文件和工具,不应使用常规的rm
、rmdir
删除命令,而应使用覆写删除命令进行删除:
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
————————————————
版权声明:本文为CSDN博主「Captain_RB」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Captain_RB/article/details/111653887