A07.Linux平台的病毒分析与检测

Linux平台的病毒分析与检测

经过之前的学习,我们已经了解web安全,后门植入,权维持久化等安全测试方面的技术。在对安全事件进行应急响应时,除了被上传webshell,植入后门以外,还有一种常见的情况是,遇到挖矿病毒。感染挖矿病毒后,系统将长时间进行高性能计算,耗费大量的CPU和内存资源,严重影响业务软件的正常运行。这一节将会对Linux挖矿病毒进行分析。

常见的Linux病毒家族

Linux系统环境与Windows系统环境不同,Windows系统主要是以勒索病毒家族为主,而Linux系统感染量较大的病毒是以下几个家族。

一、老一辈家族:

BillGates,它在2014年被首次发现,由于其样本中多变量及函数包含字符串“gates”而得名,该病毒主要被黑客用于DDos,其特点是会替换系统正常程序(ss、netstat、ps、lsof)进行伪装。

二、新生代家族:

  • DDG,它是目前更新最频繁的恶意软件家族,感染量十分庞大,该病毒的主要目的为蠕虫式挖矿,特点是病毒文件名保持以ddg.和i.sh的规范命名。

  • Miner,挖矿病毒,变种繁多,如SystemdMiner、StartMiner、WatchDogMiner等。感染后表现为CPU异常卡顿,crontab任务异常、网络异常、系统文件被删除等情况,严重影响用户业务。

  • XorDDos,僵尸网络家族从2014年一直存活至今,因其解密方法大量使用Xor而被命名为XorDDoS,其主要用途是对公网主机进行分布式拒绝服务攻击。特点是样本运用了“多态”及自删除的方式,导致主机不断出现随机名进程,同时采用了Rootkit技术隐藏通信IP及端口。

三、IoT(Internet of Things,物联网)家族:

近几年5G物联网的迅速发展,物联网设备数量呈几何增长,物联网设备已经成为主要的攻击目标。目前的IOT僵尸网络以 DDoS 和挖矿的木马为主。

  • Mirai:是2016年发现的,物联网僵尸网络病毒,专门利用已知或未公开的安全漏洞感染无线摄影机、路由器与摄像头等物联网装置。Mirai的出现将一大波安全研究者引入了IoT安全领域。

  • Gafgyt:该家族与Mirai家族一样在IoT领域属于相对活跃的僵尸网络恶意程序。

本节实验环境与之前节节使用的环境相同,均使用CentOS-7-x86_64-Minimal-2009.iso镜像搭建。可以继续使用上一节最后的环境继续学习本节内容,也可以新建一台虚拟机进行学习。由于病毒的感染性与破坏性,注意在实验过程中打好快照,以便恢复。

病毒样本的获取

本次实验的病毒样本,我们通过abuse.ch公开的在线样本库:https://bazaar.abuse.ch/browse/获取。与其它提供病毒样本的网站相比,这个网站的好处是不需要注册,不需要积分就可以直接下载病毒样本,病毒样本种类齐全,从exe、elf到word、sh脚本,各种跨平台的样本都有,每天都有新的样本上传。

需要注意的是,下载病毒样本后,只能在自己的实验环境里运行,如果未经他人同意,在他人计算机上运行,造成不良后果的,要承担相应的法律责任。

此外,还要注意,有些病毒会利用漏洞自动传播,所以,也要根据病毒的特点,做一些相应的防止扩散的措施。本实验的病毒只能在Linux上运行,并且不会利用其它计算机的漏洞传播。

在网站的搜索框内,输入tag:miner进行搜索,搜索的内容为挖矿病毒类型,搜索出来的结果有很多,但是由于我们是Linux系统,所以还需要进行筛选,选择sh文件类型的病毒。通过筛选,我们选择SHA256 hash值为:5eba254e47a0d1668333b1718b9049874bd6149661822c86aa26d6e43bd52e5f的挖矿病毒样本,点击其hash值后会跳转到病毒样本简介页面。在这个页面可以看到该病毒样本的详细信息,下翻网页可以看到各个安全厂商对其的检测结果。我们此次就选用该病毒样本进行分析。

点击Download项的“download sample”高亮文字跳转到病毒样本下载页面,在该页面点击灰色按钮download即可开始下载,并从该页面可知下载的压缩包文件的解压密码为infected。

需要说明的是,挖矿类病毒需要连接到矿池才能正常运作,而矿池的服务器和IP过一段时间就会被封锁,导致病毒连接不到矿池地址,因此本节病毒的运作情况无法全部复现。此外,本节的病毒需要在线下载另一些后门程序,而存放后门程序的服务器和IP过一段时间也会被关闭或封锁。这导致了能复现的环节更少。教材的资源包里提供了病毒和病毒运行后下载的一些后门程序,可以进行静态分析。

运行病毒

准备好挖矿病毒程序后,登录Linux虚拟机,将该程序上传到系统中。注意此时请为虚拟机打好快照,感染病毒后需要反复测试,并且病毒难以彻底清除。

首先使用命令top打开系统资源消耗情况,然后再执行准备好的挖矿病毒程序,观察资源消耗情况。

通过top命令可以查看到当前是有pnscan进程占用cpu达到了12.3%,是比较高的。接下来再尝试一些常用命令,系统自带的许多程序如ll、ls、ip address均有报错,已经无法正常使用。

如果关闭top命令,再次执行后,则发现已经查看不到刚才的pnscan进程。因为挖矿病毒修改了系统的动态链接库配置文件/etc/ld.so.preload,加载了病毒自己的恶意动态链接库文件。恶意软件通常会利用Linux动态链接库预加载机制,来实现自身进程的隐藏。此时,系统的top,ls,ps等命令已被病毒通过ld.so.preload机制劫持,显示出来的结果不在准确。

接下来需要使用到一款第三方工具busybox进行分析。BusyBox集成了常用Linux命令和工具,但busybox是静态编译的,不依赖于系统的动态链接库,从而不受ld.so.preload的劫持。

打开busybox官网,https://busybox.net/,下载busybox。

下载后将该文件上传到Linux虚拟机中,使用以下命令,将busybox解压、编译并安装。

tar -xjvf busybox-1.35.0.tar.bz2
cd busybox-1.35.0/
make defconfig && make install

安装完成后,使用命令./busybox top再次查看系统资源情况,这时就可以看到被隐藏的进程。

此进程在虚拟机里运行一段时间后,自动停止占用CPU的行为,CPU使用率正常。进入了潜伏状态,由于没有及时对病毒进程进行监视,不清楚具体的原因,推测可能是由于没连接到矿池地址。

病毒脚本代码分析

由于该病毒样本是sh脚本文件,所以我们也可以直接读源代码进行分析。由于病毒涉及到的代码太多,只选取了部分代码进行分析。

病毒会卸载阿里云、腾讯云的安全检测组件。从代码中可以看出病毒会下载uninstall脚本,结束安全工具的服务,删除安全服务的文件。

通过查找矿池地址、端口号、进程名称,强制关闭其它挖矿类进程。

修改系统的动态链接库配置文件/etc/ld.so.preload,加载病毒下载的恶意so库文件,so(Shared Object)文件是Linux下的共享库文件,类似于windows下的dll(Dynamic Link Library,动态链接库)文件。

在764行处,还会下载一个apa.jpg的伪装图片文件,实际上此文件是ELF类型的Linux可执行文件,loadthisfile是病毒自己的函数,经过比较,apa.jpg与bioset文件完全一样。

此外,apa.jpg是一个ELF格式的可执行文件,并且没有加密,因此也可以使用IDA64打开后,按快捷键F5生成伪代码,进行详细分析,以下为apa.jpg生成的部分伪代码。

此外,病毒还具有修改系统文件权限、下载挖矿程序xmring,创建authorized_keys实现ssh免密登录等等繁多的恶意操作,与其它恶意软件相比,挖矿病毒恶意行为如此之多,显得特别贪婪。

云沙箱在线分析

此外,许多安全公司提供了对恶意软件的在线分析智能服务,将病毒样本上传到网站后,分析引擎会自动对病毒进行分析,获得直观的结果。微步云沙箱是一个非常全面的云沙箱,有多引擎检测、行为签名、执行流程、进程详情、威胁情报IOC等功能。

将病毒的sh文件上传到微步云沙箱https://s.threatbook.cn/后,分析出了详细的结果,以下为部分摘录:

以下是经微步分析出来的病毒程序的执行流程:

具体的报告可以在微步云沙箱的网页中,输入病毒样本的sha256值:5eba254e47a0d1668333b1718b9049874bd6149661822c86aa26d6e43bd52e5f,即可查看到详细的分析报告。其它在线分析网站,同样支持这种通过恶意软件样本的MD5、sha256值进行搜索的方法。

之后,将病毒运行过程中下载的apa.jpg文件,上传到微步云沙箱分析后,也以可以看到这个文件是做了一个持久化的操作,通过修改rc.loacl文件实现自启动。

使用ClamAV进行本地检测

ClamAV(Clam AntiVirus)是Linux平台上的开源病毒扫描程序,采用多线程后台操作,可以自动升级病毒库。ClamAV不将杀毒作为主要功能,默认只能查出您计算机内的病毒,但是无法清除。

在安装ClamAV防病毒软件之前,我们需要先安装epel软件源:

[root@localhost ~]# yum install -y epel-release //安装软件源
[root@localhost ~]# yum clean all && yum makecache //更新缓存

安装ClamAV程序:

yum -y install clamav-server clamav-data clamav-update clamav-filesystem clamav clamav-scanner-systemd clamav-devel clamav-lib clamav-server-systemd

配置ClamAV程序:

首先,编辑配置文件vi /etc/clamd.d/scan.conf,找到第96行左右的以下内容:

#LocalSocket /var/run/clamd.scan/clamd.sock

去掉“#”号并保存文件。

接下来,就可以执行命令更新病毒库:

[root@localhost ~]# freshclam

病毒库保存的位置是:

/var/lib/clamav/daily.cvd

/var/lib/clamav/main.cvd

最后就可以启动ClamdAV服务和设置开机自启:

[root@localhost ~]# systemctl start clamd@scan
[root@localhost ~]# systemctl enable clamd@scan

使用命令clamscan就可以扫描文件、目录或者是整个系统:

clamscan targetfile //扫描文件
clamscan -r -i /home -l /var/log/clamav.log //递归扫描home目录,并且记录日志
clamscan -r -i /home --remove -l /var/log/clamav.log //递归扫描home目录,将病毒文件删除,并且记录日志
clamscan -r -i /home --move=/tmp/clamav -l /var/log/clamav.log //扫描指定目录,然后将感染文件移动到指定目录,并记录日志。

注意:-r -i为递归扫描目录、-l为指定记录日志文件、--remove为删除病毒文件、--move为移动病毒到指定目录。

例如,我现在需要对/etc目录进行扫描,我使用以下命令:

clamscan -r -i /etc --max-dir-recursion=5 -l /var/log/clamav-etc.log

就可以递归扫描/etc目录下最深5级目录的文件,并且记录日志文件到/var/log/clamav-etc.log文件中。

再返回的扫描报告中,Infected files就是被感染的文件数量。通过查看病毒文件:

cat /var/log/clamav-etc.log | grep "FOUND"

就可以看到具体被感染的文件了,从而进一步处理该文件。

安装好ClamAV后,对本实验感染了挖矿病毒后的系统进行扫描,然后查看报告。

QQ截图20220515192217

扫描结果的第一条就是下载的挖矿病毒样本,ClamAV给出了文件路径和病毒类型Rocke家族。第二条就是感染挖矿病毒之后,病毒的主程序了,进入其文件夹就可以查看到病毒下载的文件了。

本次实验,我们是先安装了病毒,然后才安装的ClamAV杀毒软件。经过检测,ClamAV可以检测到一部分病毒文件,但不全面,还是要结合在线分析、人工分析的方法才行。现在,病毒变种很多,完全清除干净有一定困难,条件允许的情况下,最好还是备份数据后,重新安装系统,重新部署应用。

posted @ 2026-05-04 18:00  putiji  阅读(81)  评论(0)    收藏  举报