查看原文
其他

Linux应急响应

aFa攻防实验室 aFa攻防实验室 2022-12-06


引子


总结一篇Linux应急响应的笔记,原因有以下几个。1,就是应急响应本身。2,做溯源不能光是人肉,不论从沦陷的机器来说,还是反溯到傀儡机,都需要应急的能力。3,作为RT,了解了应急的手段,可以更好的去隐藏自己。


系统基本信息


命令lscpu查看CPU相关信息:



uname -a命令查看当前操作系统信息:



使用lsb_release -a和cat /proc/version命令查看操作系统版本信息:



lsmod命令查看系统已载入的模块信息:



用户信息


使用cat /etc/passwd命令查看系统上所有的用户,并查看默认登录的shell及是否可登录等情况:



命令awk -F: '{if($3==0)print $1}' /etc/passwd查看UID为0的用户,如果除root外有其它账号,则建议排查:



查看可登录的账号,可用命令cat /etc/passwd | grep '/bin/bash'查看,但可能有一些账号默认的登录shell不是bash,这样查看结果不是很全面:



这里可以继续使用awk命令,把第7项不是/usr/sbin/nologin的列出来:



使用lastb查看登录失败的用户信息,实际上是读取的/var/log/btmp文件的内容:



使用lastlog查看系统中所有用户最后的登录信息,实际上相当于读取的/var/log/lastlog文件的内容,如果一个用户从未登录过,那么显示为never logged。



使用last命令查看用户最近的登录信息,相当于查看了/var/log/wtmp,/var/log/btmp,/var/log/utmp三个文件,wtmp存储登录成功的信息,btmp存储登录失败的信息,utmp存储当前正在登录的信息。



输入who命令,查看当前用户登录系统的情况:



使用awk -F: 'length($2)==0 {print $1}' /etc/shadow来查看空密码的账号:



启动项


启动项可查看/etc/init.d/rc.local和/etc/rc.local文件内容,这两个文件中的命令会在系统启动时执行。同时也可以看下/etc/init.d文件夹下的文件,该文件夹下包含了相关服务的启动和停止脚本。



任务计划


通过命令crontab -l来查看计划任务,也可以通过u参数来查看指定用户的计划任务。



同时也需要查看/etc目录下的计划任务文件,都是以cron开头:



可以看到包括了cron.d,cron.hourly等等子目录的情况,基本就差不多了,还有一个位置是/etc/anacrontab。


进程排查


使用netstat -anop查看系统的进程情况,如果某个进程有恶意的或者不确定的外联,则可以根据其PID进一步查看:



例如PID为1111的有恶意的外联,则可以使用命令ls -alt /proc/1111命令查看其对应的可执行程序。



proc是一个虚拟的文件系统,每个进程下都对应了多个文件,这些文件的作用也不同,例如还是1111,查看该PID下的可执行程序,那么就可以查看/proc/1111/exe:



或者使用lsof命令的p参数指定PID,来查看其进程所打开的文件:



如果发现了恶意进程,则可以使用kill -9 PID命令进行结束,然后使用rm -rf filename进行文件删除,如果root也无法删除相关文件,那么该文件可能被添加了i属性,可以先通过chattr -i进行去除再进行删除操作。



有时攻击者会将进程隐藏,所以需要查看隐藏进程,按顺序执行以下命令:


ps -ef | awk '{print}' | sort -n | uniq >1ls /proc | sort -n | uniq >2diff 1 2


上面三条命令相当于是把ps的信息和proc的信息进行了对比,找出不一样的地方,如果嫌麻烦,则可以安装unhide工具,进行检查。


apt-get install unhideyum install unhide


根据自己操作系统安装后,执行unhide proc命令,unhide会将ps和proc进行对比,相当于上面我们手动执行的那三条命令,更多用法可参考man手册。



对于一些挖矿等程序,可以使用top命令把程序按cpu占比列出来查看:



服务排查


命令systemctl | grep running查看系统运行的服务:



之前老版本系统可以使用chkconfig --list查看,现在基本不多了,被sysv-rc-conf命令替代了。



使用service --status-all查看所有服务的状态:



敏感文件排查


1,一些敏感目录,例如/tmp、/usr/bin、/usr/sbin等常被作为恶意软件的下载目录和关键文件替换的目录,查看这些目录是否有不想管或恶意文件。



对于一些可执行文件,如果事先安装了tripwrie或者aide等检查工具,则可以通过这些工具来检查系统可执行文件是否有过改动,如果没有相关的监控工具,则可以找一个没有被改过的系统计算其hash进行对比。


2,~/.ssh和/etc/ssh也会常被作为后面配置路径,需进行相关检查,看是否有其它的公私钥免密登录:



3,再一个就是对攻击日期内变动的文件进行排查,通过find命令查找指定时间段内增加或修改过的文件:


-type b/d/c/p/l/f:块设备、目录、字符设备、管道、符号链接、普通文件。-mtime -n +n:按更改时间查找,-n指n天以内,+n指n天前。-atime -n +n:按访问时间查找。-ctime -n +n:按创建时间查找。


例如查找一天内新增的sh文件,则运行命令find / -ctime 0 -name "*.sh"



4,使用stat命令可查看文件的创建时间、修改时间和访问时间,如果离响应时间较近,则可能被篡改。



5,特殊文件排查,例如查找777权限的文件,命令:find /tmp -perm 777



6,webshell查找,linux下可以通过findwebshell、scan_webshell.py等来进行扫描排查。这里就不尝试了,都是python脚本,机器装有python环境下载执行即可。


7,系统命令排查,像ls、ps等命令可能存在被替换的风险,可以查看系统命令的修改时间或者文件大小来判断。或者进行hash比对。



8,后门检查,可以使用第三方查杀工具进行查杀。例如chkrootkit,rkhunter。


使用chkrootkit来检测rootkit后门程序:



使用rkhunter来检测系统命令,包括md5校验、rootkit检测、本机敏感目录检测、系统配置检测、服务及套件异常检测、第三方应用程序检测等。



日志分析


linux的相关日志基本都在/var/log/下,相关说明如下:


/var/log/wtmp:记录登入、退出、关机、重启等,相当于last命令。/var/log/cron:记录定时任务的相关日志。/var/log/messages:记录系统启动后的信息和错误日志,其中也会记录某个用户切换到root权限的日志。/var/log/apache2/access.log:记录apache访问日志。/var/log/auth.log:记录授权信息。/var/log/userlog:记录所有等级用户信息的日志。/var/log/xferlog(vsftpd.log):记录ftp日志。/var/log/lastlog:记录登录的用户,可用lastlog查看。/var/log/secure:记录大多数应用登录成功和失败的日志。/var/log/faillog:记录系统登录失败的账号信息。


除上面系统自己的日志外,一些常见的中间件日志,例如apache、nginx、tomcat等,数据库日志,例如mysql等等都建议进行排查。


历史命令


通过history查看用户的历史命令,查找蛛丝马迹。有的公司可能会经常ssh远程登录,导致history记录了相关的密码,所以对history有限制,可能只能查看几条,这种情况不方便排查,但也方便了攻击者。


这里顺便测试下如何不被history记录,如果执行以下命令unset命令,则后续命令不会被记录,包括.bash_history和history,上下键也不行。


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



还有一种是通过类似于vim带内联命令行的,执行命令history不会记录,但工具可能会有日志,例如vim的日志中就记录了内联命令行运行的命令,所以如果使用这种方法,则要记得清理工具日志。



流量分析


Linux上也支持Wireshark,可以使用Wireshark进行流量分析。


威胁情报


这个和Windows应急响应中的通用,还是那些平台,搜集IP或域名等情报。


相关工具


检测工具像上面说到的chkrootkit、rkhunter等,监测文件变化的tripwrie、aide、inotifywait 等。流量分析使用Wireshark等。


维导图


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存