Linux是一种广泛使用的开源操作系统,具有高效、稳定、安全等优点。但是,Linux也不是绝对安全的,它也可能遭受各种攻击和入侵。因此,Linux应急响应是一项非常重要和必要的安全工作,它涉及到对被攻击主机的排查、分析、止损和修复等操作。
本文旨在介绍日常工作中Linux应急响应的思路和常规排查方向,帮助读者快速定位攻击者的来源和行为,并采取有效的应对措施。
应急响应,主要是回答两个问题:
攻击者从哪里来
攻击者做了什么
弄清楚了这两个问题,就可以精准的进行止损和修复。
本文仅介绍日常工作中应急响应的思路和常规排查方向,对于同安全产品之间的攻防对抗,以后有机会专门讲述,本文暂不涉及。
进程的排查是应急响应中最重要的方向,没有之一。因为无论攻击者从哪里来,做了什么,他都要通过机器上的进程来完成他的目的。
对于进程来说,重要的信息有以下几个方面:
启动时间:通过启动时间可快速从机器上筛选出可疑的进程,而且恶意进程的启动时间是一个非常重要的信息,通过它可以关联追溯出整个攻击行为的时间线。
进程树:恶意进程的进程树清晰直观的反映了该恶意进程的来源,通过进程树可快速判断出部分入侵的入口。
进程启动目录:进程启动目录也可泄露出部分入侵者的攻击入口。比如攻击者通过Web应用获取到了主机权限,那么他后续的恶意进程就可能在Web目录下。
启动用户:部分特殊的进程启动用户也可反映出攻击入口,如git用户、www用户等。
通过2、3、4可判断出攻击者具体的攻击入口,然后再去排查入口应用的详细日志,就可回答我们的第一个问题:攻击者从哪里来。
当发现恶意进程后,即使在排查完相关信息后,也不要着急把它杀掉。如果攻击者进行了一定程度的对抗行为,比如删除了执行的脚本或配置文件等,如果进程还在,相关文件是可能能够恢复的。只要进程没关闭,该文件对应的inode和数据块依然保存着文件内容,不会立即释放,所以我们可以通过 /proc/pid/fd目录里的符号链接,找到被打开文件的inode,并读出数据块中的内容。
安全产品日志 安全产品日志毫无疑问是我们手中最有力的武器之一。安全建设足够完善的理想情况下,仅通过安全产品就可还原出攻击者的整个攻击链路。比如WAF、Rasp日志查看攻击者的攻击入口和Payload,HIDS日志查看攻击者的行为,NIDS日志根据攻击者特征排查是否有其他失陷主机。
应用日志 这个是最重要的日志之一,只有通过它我们才能实锤攻击者具体的攻击入口和使用的漏洞。但是这个非常依赖公司的基础设施建设,如果公司基建非常好的情况下,能通过公司统一的日志服务来查询具体应用的日志。如果公司基建待完善,就只能祈祷业务自己开启了日志记录,否则攻击入口就只能通过各种线索来间接推断。我们可以通过查看应用服务器(如Apache、Nginx、Tomcat等)自带的access_log 和 error_log文件来查看Web请求和错误信息,并根据时间、IP、URL等条件进行筛选和分析。
命令执行日志 命令执行日志记录了攻击者在主机上的所有行为,毫无疑问是最直接的线索。我们可以通过查看系统自带的history、last、lastb、lastlog等命令来查看用户的历史命令和登录情况,并根据时间、用户、IP等条件进行筛选和分析。
通过对命令日志,安全产品日志以及系统文件、系统配置等方面的全面排查,就可回答我们的第二个问题:攻击者做了什么。
下面是一个排查项的具体列表,可供应急响应时参考。
w
查看登录用户数量,平均负载,登录来源IP
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
查看运行级别,一般为3即完全命令行模式
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
查看root权限用户
awk '/$1|$6/{print $1}' /etc/shadow
查看有密码的账户(无密码只允许本机登陆)
grep -v "$" /etc/sudoers
查看sudo权限账号
history
查看各个用户历史命令
/var/log/message
记录系统重要信息的日志
/var/log/sudo.log
相应的时间段是否出现可疑的用户进行过SU操作
/var/log/secure
包含验证和授权方面信息,如ssh登录成功失败
/var/log/cron
定时任务日志
last | lastb | lastlog
查看登录情况
Web服务器,access_log 和 error_log日志
/tmp, /var/tmp, /dev/shm
敏感目录
ls -alt 按时间顺序查看
ls -alt 可疑目录/文件
先用stat记录下时间点,不要直接用vim查看编辑文件内容,这样会更改文件的mtime,对于应急响应来说,时间点很重要。对比时间点更容易在Log找到其他的攻击痕迹。stat可看到mtime,atime,ctime。根据mtime查找其他后门文件,同时根据文件属组与属组对应运行服务判断入侵方式;
如果权限组为root,需要检测是否被种rootkit;
非web类后门,大部分人习惯把恶意文件放置在/tmp
目录下;
find -mtime -7 -type f -name "*.jsp"
查找7天内被修改过的jsp文件
find . -newermt '2018-10-30 13:00:00' ! -newermt '2018-11-01' - 查找具体时间的文件
find / -user root
查找/目录下属于root用户的文件
find / -perm -4000 -type f
定位含有S位权限的文件
find / -perm 4777 -type f
定位777权限文件
如果能通过攻击者的各种特征,在威胁情报平台或搜索引擎能查询到到相关利用方式的详细介绍,也可在排查时起到事半功倍之效。
在排查攻击入口时,如果实在没有找到明显的信息,也可通过主机运行进程的应用版本等信息,去猜测攻击入口,大胆假设,小心求证。
在实际的应急响应中,我们还需要注意以下几点:
保存证据:在排查时,要尽量保留原始的证据,如程序、日志、文件等,不要随意修改或删除它们,以免丢失重要信息。
避免影响业务:在排查时,要注意命令和工具对正常业务的影响,以防入侵虽及时止损,但应急行为却造成了业务故障。
及时止损和修复:在排查时,在主要流程排查清楚和证据已经保存后,要及时采取止损和修复措施,如隔离主机、修改密码、杀死恶意进程,封禁恶意IP等,以免造成更大的损失或影响。
最后再推荐一个安全技术交流群,群里有各个大厂的安全大牛讨论企业安全建设相关的技术和最佳实践,还可帮忙内推招聘,感兴趣的话欢迎长按下方二维码加入或加我微信(286537741)备注加群。