一、简介

Linux是一种广泛使用的开源操作系统,具有高效、稳定、安全等优点。但是,Linux也不是绝对安全的,它也可能遭受各种攻击和入侵。因此,Linux应急响应是一项超级重大和必要的安全工作,它涉及到对被攻击主机的排查、分析、止损和修复等操作。
本文旨在介绍日常工作中Linux应急响应的思路和常规排查方向,协助读者快速定位攻击者的来源和行为,并采取有效的应对措施。
应急响应,主要是回答两个问题:
- 攻击者从哪里来
- 攻击者做了什么
弄清楚了这两个问题,就可以精准的进行止损和修复。
本文仅介绍日常工作中应急响应的思路和常规排查方向,对于同安全产品之间的攻防对抗,后来有机会专门讲述,本文暂不涉及。
二、主要排查方向
2.1 进程
进程的排查是应急响应中最重大的方向,没有之一。由于无论攻击者从哪里来,做了什么,他都要通过机器上的进程来完成他的目的。
对于进程来说,重大的信息有以下几个方面:
- 启动时间:通过启动时间可快速从机器上筛选出可疑的进程,而且恶意进程的启动时间是一个超级重大的信息,通过它可以关联追溯出整个攻击行为的时间线。
- 进程树:恶意进程的进程树清晰直观的反映了该恶意进程的来源,通过进程树可快速判断出部分入侵的入口。
- 进程启动目录:进程启动目录也可泄露出部分入侵者的攻击入口。列如攻击者通过Web应用获取到了主机权限,那么他后续的恶意进程就可能在Web目录下。
- 启动用户:部分特殊的进程启动用户也可反映出攻击入口,如git用户、www用户等。
通过2、3、4可判断出攻击者具体的攻击入口,然后再去排查入口应用的详细日志,就可回答我们的第一个问题:攻击者从哪里来。
当发现恶意进程后,即使在排查完相关信息后,也不要着急把它杀掉。如果攻击者进行了必定程度的对抗行为,列如删除了执行的脚本或配置文件等,如果进程还在,相关文件是可能能够恢复的。只要进程没关闭,该文件对应的inode和数据块依然保存着文件内容,不会立即释放,所以我们可以通过 /proc/pid/fd目录里的符号链接,找到被打开文件的inode,并读出数据块中的内容。
2.2 日志
- 安全产品日志 安全产品日志毫无疑问是我们手中最有力的武器之一。安全建设足够完善的理想情况下,仅通过安全产品就可还原出攻击者的整个攻击链路。列如WAF、Rasp日志查看攻击者的攻击入口和Payload,HIDS日志查看攻击者的行为,NIDS日志根据攻击者特征排查是否有其他失陷主机。
- 应用日志 这个是最重大的日志之一,只有通过它我们才能实锤攻击者具体的攻击入口和使用的漏洞。但是这个超级依赖公司的基础设施建设,如果公司基建超级好的情况下,能通过公司统一的日志服务来查询具体应用的日志。如果公司基建待完善,就只能祈祷业务自己开启了日志记录,否则攻击入口就只能通过各种线索来间接推断。我们可以通过查看应用服务器(如Apache、Nginx、Tomcat等)自带的access_log 和 error_log文件来查看Web请求和错误信息,并根据时间、IP、URL等条件进行筛选和分析。
- 命令执行日志 命令执行日志记录了攻击者在主机上的所有行为,毫无疑问是最直接的线索。我们可以通过查看系统自带的history、last、lastb、lastlog等命令来查看用户的历史命令和登录情况,并根据时间、用户、IP等条件进行筛选和分析。
通过对命令日志,安全产品日志以及系统文件、系统配置等方面的全面排查,就可回答我们的第二个问题:攻击者做了什么。
三、CheckList
下面是一个排查项的具体列表,可供应急响应时参考。
总体信息
进程
- top
- lsof -p pid
- cat /proc/pid/* |strings -n 5 |more
- cat /proc/pid/cmdline
- /proc/pid/exe
- 进程的二进制文件
- strings 可查看二进制文件中的字符串,列如有些sshd后门会通过邮件发送登录信息
- /proc/pid/cwd 进程当前工作目录
- /proc/pid/fd 进程文件描述符
- ps aux / ps -ef 中,start/stime列为进程开始执行的时间
- 注意观察可疑进程的启动权限和父进程
网络
- netstat -anpt | ss -anpt
- lsof -i:port
开机启动项
- runlevel
- ls -alt /etc/rc.d/init.d/
- 查看各个启动级别全部的开机启动脚本
- 该目录下和/etc/init.d/目录中内容一样
- /etc/rcN.d/目录下的文件为指向部分/etc/rc.d/init.d/中文件的软连接,由于不同启动级别要启动的脚本不同
- cat /etc/rc.d/rc.local
- chkconfig --list
定时任务
- crontab-u root -l
- 重点关注以下目录
- /var/spool/cron/*
- /etc/crontab
- /etc/cron.d/*
- /etc/cron.daily/*
- /etc/cron.hourly/*
- /etc/cron.monthly/*
- /etc/cron.weekly/
- /etc/anacrontab
- /var/spool/anacron/*
- more /etc/cron.d/*
账号
- ls -l /etc/passwd | /etc/shadow
- awk -F: '$3==0{print $1}' /etc/passwd
- awk '/$1|$6/{print $1}' /etc/shadow
- grep -v "$" /etc/sudoers
日志
- history
- /var/log/message
- /var/log/sudo.log
- /var/log/secure
- /var/log/cron
- last | lastb | lastlog
- Web服务器,access_log 和 error_log日志
文件&目录
- /tmp, /var/tmp, /dev/shm
- ls -alt 可疑目录/文件
- 先用stat记录下时间点,不要直接用vim查看编辑文件内容,这样会更改文件的mtime,对于应急响应来说,时间点很重大。对比时间点更容易在Log找到其他的攻击痕迹。stat可看到mtime,atime,ctime。根据mtime查找其他后门文件,同时根据文件属组与属组对应运行服务判断入侵方式;
- 如果权限组为root,需要检测是否被种rootkit;
- 非web类后门,大部分人习惯把恶意文件放置在/tmp目录下;
- find -mtime -7 -type f -name "*.jsp"
- find . -newermt '2018-10-30 13:00:00' ! -newermt '2018-11-01' - 查找具体时间的文件
- find / -user root
- find / -perm -4000 -type f
- find / -perm 4777 -type f
四、总结
如果能通过攻击者的各种特征,在威胁情报平台或搜索引擎能查询到到相关利用方式的详细介绍,也可在排查时起到事半功倍之效。
在排查攻击入口时,如果实在没有找到明显的信息,也可通过主机运行进程的应用版本等信息,去猜测攻击入口,大胆假设,小心求证。
在实际的应急响应中,我们还需要注意以下几点:
- 保存证据:在排查时,要尽量保留原始的证据,如程序、日志、文件等,不要随意修改或删除它们,以免丢失重大信息。
- 避免影响业务:在排查时,要注意命令和工具对正常业务的影响,以防入侵虽及时止损,但应急行为却造成了业务故障。
- 及时止损和修复:在排查时,在主要流程排查清楚和证据已经保存后,要及时采取止损和修复措施,如隔离主机、修改密码、杀死恶意进程,封禁恶意IP等,以免造成更大的损失或影响。