注:下面来自半翻译,半实践
对Linux进程进行取证,可以通过/proc/<PID>/environ
来查看某个进程的环境变量,来获取一些信息。
所以说,遇到可疑的进程不要立即杀掉,不然取证都可能无从下手。
背景
当在Linux上启动一个进程时,该进程的许多环境变量将在其运行期间保持不变。那么虽然启动该进程的原始shell已经消失很久,但在有一些shell变量仍然继承下来了。
在进程的环境变量中可以获得什么呢?
history anti-forensics的证据
二进制文件的命令行和路径
启动进程的用户
启动时二进制文件使用的自定义变量,可能包含密钥和其他内容
SSH连接信息:哪个ip启动的
……
对于第5点,即使攻击者从日志中清除了他们的IP地址,如果他们通过SSH进入,很有可能他们使用的IP地址仍然留在他们启动的进程中,等待被获取。
模拟实验
模拟攻击
假如我们是攻击者,连上一台机子的ssh
注: HISTSIZE是一个环境变量,用于控制命令历史记录的大小。通过将HISTSIZE设置为0,即export HISTSIZE=0,实际上是告诉操作系统不保存任何命令历史记录。这意味着你运行的每个命令都不会被记录下来,无法通过上下箭头键或history命令访问之前执行的命令。
ssh连上后我们在机子上执行
1 | export HISTSIZE=0 |
取证
通过列出正在监听的端口,可以查看到一个x的可疑进程。
1 | $ netstat -antp | grep LISTEN |
查看进程环境变量(我手动将ip用X打码了)
1 | $ strings /proc/16343/environ |
从上面我们可以提取出下面有用的信息
HISTSIZE=0,这个说过了,属于反取证的方式
SSH_CONNECTION=10.82.X.X 5561 172.16.2.3 22 这个比下面的多了本机的网卡的ip
SSH_CLIENT=10.82.X.X 5561 22 这两个就是ssh的信息,10.82.X.X就是攻击者所使用的ip,该ip或许只是攻击者的跳板
SHELL=/bin/bash 启动所使用的shell
PWD=/tmp 启动时的路径
OLDPWD=/root 进入/tmp目录之前的路径
USER=root 启动进程的用户
总结
可以看到,在调查进程活动之前,不要草率地终止可疑的进程。在弄清楚进程活动之前就终止进程,会立即丢失许多有用的信息,比如进程环境变量。
参考
https://sandflysecurity.com/blog/using-linux-process-environment-variables-for-live-forensics/