案例背景
由于用户安全配置参差不齐,很多用户的系统没有做好安全防护,很容易遭受木马的入侵,挖矿木马是比较常见的一种顽固木马,在遇到主机被挖矿木马入侵时,我们可以做些什么呢?
问题说明
用户早晨反馈服务器前一天晚上被攻击,无法登录,影响客户的使用。
原因分析
1. 首先查看主机安全控制台,已经开启了专业版防护功能,看到有木马入侵,并且已隔离,可以断定木马有其他脚本或者程序启动,隔离后仍然无效。
2. 查看机器的监控,出现CPU占用100%,时间大概在凌晨12点到1点之间。这种情况,首先怀疑是挖矿病毒。接下来就是申请用户授权登陆机器查看了。
3. 进入系统后,首先查安全日志 /var/log/secure,其中看到一条凌晨登陆成功的日志,时间是00:17:35,跟CPU升高的时间差不多吻合,可以猜测是通过暴力破解登陆的系统。
查看暴力破解情况
grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1n";}'|uniq -c|sort -nr
可以看到有很多登录失败,证实了自己的猜想。
3.查看定时任务,是否有定时脚本存在,导致清理病毒后,又会重新生成,看到有个命名为run的文件定时运行/root/.configrc/b/run
4. 查看挖矿木马文件内容
strings /root/.configrc/b/run 可以看到带eval的执行命令
到这里可以确定客户是由于系统安全防护不完善,导致暴力破解入侵后,通过定时任务启动病毒进行挖矿,导致CPU长时间100%。
解决方案
我们知道了病毒的来源,接下来就要清理了
第一步,删除定时任务中的/root/.configrc/b/run记录
第二步,查看有哪些非正常的端口在监听,并记录非正常的监听端口对应进程的PID
netstat -alnp|grep LISTEN|head 15
第三步,strace 病毒名称,查看病毒的的连接情况以及打开的文件
第四步,kill 掉对应的进程PID
第五步,删除病毒文件目录及生成的目录
rm -rf /root/.configrc/
rm -rf /tmp/.X25-unix/
继续观察是否有新的异常进程和端口启动。
拓展一下
很多病毒会在其他地方留下启动的种子,因此我们需要分析病毒整个启动过程,避免清理不干净,本例中的/root/.configrc/b/run文件,打开后发现是经过base64编码
经过base64解码后如下
后面的明文perl代码是经过pack混淆的,unpack解码的就行了,最简单的办法是把签名的eval改为print,代码就出来了
最终得到的代码(截取部分)
总结一下
一、安全防护很重要,做好登录策略、密码复杂度、安全组配置,会让我们的主机免于很多攻击。
二、病毒的入侵需要找到入侵的源头,一步步抽丝剥茧,才能完全清理干净。
三、perl代码混淆的原理说明:
1.perl语言的pack和unpack函数接受一个模式和一些数据,并根据该模式转换此数据。例如,pack "H*", "466F6F"将数据视为任意长度的十六进制字符串,并将其解码为它表示的字节。
2.当使用unpack函数执行相反的操作时,会将数据从二进制表示形式提取为某种格式。
3.通常perl类型的木马脚本会使用perlcc、perl2exe、PAR(Perl Archive Toolkit)等工具进行加密混淆,此列中只是使用pack转换成了指定格式的二进制字符串
以上内容根据@theon处理案例整理。