应急响应——Linux入侵排查
Posted Thgilil
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了应急响应——Linux入侵排查相关的知识,希望对你有一定的参考价值。
事件响应可以定义为每当发生计算机或网络安全事件时所采取的行动过程。作为事件响应者,您应该始终了解系统中应该出现和不应该出现的内容。
排查思路
(1)首先监测用户账号安全,比如新增的账号、可疑账号,重点查看可以远程登录的账号以及高权限账号。
(2)利用linux的history指令查看历史linux指令,uptime指令查看登录多久、多少用户。
(3)检查异常端口和进程,netstat检查异常端口,ps检查异常进程,可以观看资源占用的进程id来判断是否有挖矿木马等嫌疑。
(4)检查linux的启动项和系统的定时任务crontab,crontab -l查看是否有异常的任务编写进来。
(5)检查linux的日志信息/var/log/一些系统日志信息、安全日志等。
(6)自动化查杀软件,在线查杀工具,查杀脚本来查杀。
linux应急响应可按4个环节进行:
- 识别现象——清除病毒——闭环兜底——系统加固 首先从服务器异常现象出发,根据服务器CPU、内存占用,网络流量,识别出病毒的可疑迹象
- 然后通过进程、端口开放、历史命令、进出站流量、日志审计等定位到具体的病毒进程及病毒文件,进行清除
- 因为病毒一般会通过一些自启动项及守护进程进行重复感染,所以我们要对攻击者账户、定时任务、恶意自启动服务、系统文件劫持、守护进程等进行排查,防止重复感染
- 将主机上的病毒项清除干净后,最后对系统进行加固,分析日志,发现漏洞出现的具体位置,是未打补丁,未升级或弱密码,对漏洞进行针对性的处置,防止病毒从web再次入侵
识别现象
通过系统运行状态、安全设备警告、监控系统发现主机上具有异常行为:异常流量、异常端口、CPU/内存占用率异常等等
针对不同的现象评估可能出现的问题:
- SSH暴力破解:22端口上具有不明地址的连接,/var/log/secure中存在大量登录失败记录
- 短链接:监控设备发现服务器不断向某地址发起请求,多次刷新端口、进程时发现短链接
- 挖矿病毒:服务器持续向外部ip发送连接,下载病毒源;不规则的异常进程、异常下载
- 盖茨病毒:CPU资源异常,异常进程占用大量网络带宽,异常IP连接、异常进程、异常启动项
- DDOS病毒:服务器网络资源异常、带宽占用率高,影响网络业务使用
进程
连接到系统服务器后开始对现象进行调查,查看CPU、内存、进程、系统挂载等
#top命令降序查看cpu占用率
top
CPU占用率达到70%以上,且名字比较可疑的进程,可能就是病毒
枚举进程
ps -aux
病毒多携带可疑的命令行,当发现命令行中带有url或奇怪字符时,就要注意是否它是否是个病毒下载程序
定位某一进程
lsof -p <PID>
查看安全网关或监控系统
查看网关或监控系统中与目标ip通信的进程,并通过命令行列举出此进程
##列举网络Socket连接的进程
while true;do netstat -antp | grep <ip>; done
有时后检测到的是个域名,其对应的ip在不断变化,用上述方法过滤ip并不适用,可疑在hosts文件中将域名绑定为一个随机的ip,对其进行监控
这样使用如上的命令进行过滤就可以得到恶意进程了
得到恶意进程和其PID后,使用如下命令寻找恶意进程储存的位置
ls -al /proc/<pid>/exe
端口
检查是否存在任何异常端口被开启
netstat -nap //查询开启端口及进程
##查询开启端口,包含UDP和TCP
##参数-t表示TCP,-u表示UDP
netstat -nutpl
历史命令
##查看root的历史指令
history
##查看各用户的历史指令
cat /home/user/.bash_history
恶意文件查找
通过恶意进程、端口、网络等找到恶意文件路径最好,但有时候我们也需要仔细排查其他目录是否有残余的病毒
首先查看/usr/bin/ls , /usr/bin/lsof ,/usr/bin/stat 几个文件没有被修改
stat /usr/bin/ls
stat /usr/bin/lsof
stat /usr/bin/stat
排查可读写执行目录
ls -al /tmp/; ls -al /var/tmp; ls -al /dev/shm
排查$PATH环境变量下的目录文件
echo $PATH
ls -al /usr/local/sbin
ls -al /usr/local/bin
...
等等
递归查看所有文件
ls -aR
使用stat查看任何文件的更改、创建等时间
通过lsof命令查看文件和进程调用
- lsof 列出所有进程调用
- lsof abc.txt 显示开启文件abc.txt的进程
- lsof -c abc 显示abc进程现在打开的文件
- lsof -p 1234 列出进程号为1234的进程所打开的文件
- lsof -g gid 显示归属gid的进程情况
- lsof +d /usr/local/ 显示目录下被进程开启的文件
- lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长
- lsof -d 4 显示使用fd为4的进程
- lsof -i :port 检查哪个进程使用这个端口
- lsof -i 用以显示符合条件的进程情况
通过find查找文件大小、近期新增、修改的文件
通过diff命令对比入侵环境和纯净环境
首先要把纯净环境拷贝到PC-x中
diff -r <dir1> <dir2>
分析恶意程序
##查看恶意程序对应路径
ls -al /proc/<pid>/exe
##查看运行进程的名命令及参数
cat /proc/<pid>/cmdline
##查看恶意文件类型
file /home/light/abc.txt
##查看 ELF文件里带的字符串
strings /tmp/.elf
若恶意程序被删除,可以通过内存转储方式从内存中导出恶意程序
从内存拷贝恢复被删除文件
cp /proc/[pid]/exe /tmp/malware.dump
导出进程内存
cat /proc/[pid]/maps 7ff48bb5d000-7ff48bb5e000
gdb --pid [pid]
dump memory /tmp/malware.dump 0x7ff48bb5d000 0x7ff48bb5e000
自动化查杀
chkrootkit
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
tar zxvf chkrootkit.tar.gz
cd chkrootkit-0.53
make sense
./chkrootkit
rkhunter
wget https://nchc.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.4/rkhunter-1.4.4.tar.gz
或者下面这个
wget https://fossies.org/linux/privat/rkhunter-1.4.6.tar.gz
tar -zxvf rkhunter-1.4.6.tar.gz
cd rkhunter-1.4.6
./installer.sh --install
rkhunter -c
清除病毒
通过上述调查,查找到了恶意进程
ls -al /proc/<pid>/exe
并定位到了恶意文件存在位置,可以把恶意文件上传到查毒网站进行检查——virustotal。
结束恶意进程
##查找到恶意进程
ps -elf | grep <pid>
##-9强制终止进程
kill -9 <pid>
闭环兜底
攻击维持
检查Linux账户
排查系统账号的安全,看是否存在新增可疑、临时、高权限账号。
##查看所有账号
cat /etc/passwd
##查看特权用户(uid为0)
grep :0: /etc/passwd
##查看账号密码相关信息
cat /etc/shadow
##查看用户登录时间
uptime
##查询utmp文件并报告当前登录的每一个用户
who
##查询utmp文件并显示当前系统中每个用户和它队形的进程
w
##列出所有用户最近的登录报告
lastlog
##查看远程SSH和telnet登录
tail /var/log/auth.log
tail /var/log/secure
##查看sudo用户列表
cat /etc/sudoers
##多可以账号进行禁用或删除
usermod -L user //禁用user账号
userdel user //删除user账号
userdel -r user //删除user账号,并将/home目录下的user目录一并删除
检查可疑定时任务
##列出当前用户cron服务详细内容
crontab -l //文件保存在/var/spool/cron/user
##查看以下目录中是否存在恶意脚本
cat /etc/crontab
* /etc/crontab
* /etc/cron.d/*
* /etc/cron.daily/*
* /etc/cron.hourly/*
* /etc/cron.monthly/*
* /etc/cron.weekly/
* /etc/anacrontab
* /var/spool/cron/*
* /var/spool/anacron/*
检查可疑服务
查看开机自启动
遍历/etc/目录下 init 开头、rc 开头的目录及文件
/etc/init.d
查询开机自启动的服务
service --status-all
服务自启动修改
##第一种修改方法
chkconfig [--level 运行级别] [独立服务名] [on|off]
chkconfig –level 2345 httpd on 开启自启动
chkconfig httpd on (默认level是2345)
##第二种修改方法
修改/etc/re.d/rc.local 文件
加入 /etc/init.d/httpd start
##第三种修改方法
使用 ntsysv 命令管理自启动
检查系统日志
日志存放位置:/var/log/
查看日志配置情况:more /etc/rsyslog.conf
排查ssh
查看/root/.ssh/known_hosts文件中的ssh公钥,查看本机通过ssh连接那一部分主机
cat /root/.ssh/known_hosts
Web服务补丁
Tomcat弱口令攻击
Weblogic WLS组件漏洞
Jboss反序列化漏洞
structs2系列RCE漏洞
thinkphp5.XRCE漏洞
Redis未授权访问漏洞
ConfluenceRCE漏洞(CVE_2019_3396)
DrupalRCE漏洞(CVE-2018-7600)
ThinkPHPRCE漏洞(CVE-2019-9082)
入侵原因
弱密码/默认密码
通过netstat查看对外开放的服务,确认服务(mysql、redis,zookeeper,tomcat等是否具有配置认证,是否使用的默认密码或弱密码
查看这些服务日志信息,是否存在入侵记录
查看日志
系统日志和应用程序日志
* /var/log/cron 记录了系统定时任务相关的日志
* /var/log/cups 记录打印信息的日志
* /var/log/dmesg 记录了系统在开机时内核自检的信息
* /var/log/mailog 记录邮件信息
* /var/log/message 记录系统重要信息的日志
* /var/log/btmp 记录错误登录日志。 要使用lastb命令查看
* /var/log/lastlog 记录系统中所有用户最后一次登录时间的日志。 要使用lastlog命令查看
* /var/log/wtmp 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。 要使用last命令查看
* /var/log/utmp 记录当前已经登录的用户信息。要使用w,who,users命令查看
* /var/log/secure 记录验证和授权方面的信息,比如SSH登录,su切换用户,sudo授权
其他web中间件日志,如
apache、mysql、ngnix
查看ssh登录记录
cat /var/log/secure | grep 'Accepted'
恶意进程关联文件
大多数情况恶意进程的父进程都是1,而有些情况下恶意进程的父进程可能不是1,比如父进程是httpd,这种情况下,就可以大胆猜测攻击者是通过利用父进程的漏洞达成攻击。
通过命令ps -ef 查看进程的父进程pid也就是ppid
通过 ps auxef 查看恶意进程启动的用户,如果发现比如是mysql用户启动,那么就可以推断是通过mysql服务入侵。
安全加固
(1)禁用或者删除无用的账号,检查特殊账户(可远程登录、用户权限高的账号),必要时禁止远程登录用户登录,只能本地登录,设置多次登录失败锁定账户。
(2)检查重要的目录和文件的权限,chmod增加权限,防止篡改等。(3)关闭不必要的服务,跟企业无关的服务可以暂时关闭。
(4)关闭不必要的协议,如ftp、ssh、telnet等,可能存在协议漏洞。
(5)关闭不必要的端口,有一些端口可能存在端口漏洞。 (6)时不时检查安全日志,观察日志信息。
(7)可以使用安全厂商的设备来实时检查,或者使用系统杀毒软件查杀。
(8)修改弱密码或默认密码为强密码
(9)及时升级组件或中间件,添加系统补丁
以上是关于应急响应——Linux入侵排查的主要内容,如果未能解决你的问题,请参考以下文章