最新手把手病毒分析:挖矿病毒处置总结,从零基础到精通
最新手把手病毒分析:挖矿病毒处置总结,从零基础到精通
挖矿病毒是一种通过恶意代码植入受害者计算机,利用其计算资源进行加密货币挖掘的网络威胁。这种病毒不仅会消耗大量系统资源,影响正常运行,还可能带来严重的安全风险。本文将详细介绍挖矿病毒的定义、传播方式、危害以及具体的处置方法,帮助读者更好地理解和应对这一威胁。
什么是挖矿病毒?
挖矿病毒是一种集成化恶意代码,能够通过各种手段将挖矿程序植入受害者的计算机中,在用户不知情的情况下,利用受害者计算机的运算力进行挖矿,从而获取非法收益。这类非法入侵用户计算机的挖矿程序被称作挖矿木马。
挖矿方式
挖矿方式有两种:一种是solo式(即个人单独挖矿,直接连入中心网络工作),产出收益均归自己所有;另一种是连入矿池,收益与矿池分成。挖矿类型还可以分为两种:一种是被动型挖矿,在用户不知情的情况下被植入挖矿程序,获取的虚拟货币归植入挖矿程序的入侵者所有;另一种是主动型挖矿,人员主动利用计算资产运行挖矿程序,获取的虚拟货币归计算资产所有者或使用者所有。
感染挖矿木马的迹象
用户可以通过以下迹象初步判断设备是否感染挖矿木马恶意软件:
- CPU使用率大幅高于正常数值,甚至100%
- 电脑过热
- 系统运行速度变慢
- 设备比正常情况下更频繁地使用冷却风扇等
挖矿类型
恶意挖矿通常分为基于浏览器的驱动式网页挖矿和二进制文件的恶意挖矿。驱动式网页挖矿与恶意广告攻击类似,攻击者将一段JavaScript代码嵌入到目标网页中。而二进制文件的恶意挖矿与网页挖矿不同,一旦计算机感染恶意挖矿程序,受害设备将开始全天候的虚拟货币挖矿,同时将恶意进程隐藏在后台,并启用多种持久手段在目标设备上驻留,直到威胁被清除为止。
挖矿木马传播方式
挖矿木马的传播方式多种多样,包括:
- 钓鱼邮件传播
- 通过非法网页进行传播
- 软件捆绑下载传播
- 通过僵尸网络进行分发
- 通过漏洞传播
- 利用软件供应链感染传播
- 通过浏览器插件传播
- 容器镜像污染
- 利用移动存储介质传播
挖矿病毒的危害
受感染的设备通常会产生以下较为明显的负面影响:
- 能源消耗大,与节能减排相悖而行
- 降低能效,影响生产
- 失陷主机沦为肉鸡,构建僵尸网络
- 失陷主机给企业带来经济及名誉双重损失
挖矿病毒的处置
当发现挖矿告警时,首先需要查看挖矿告警确定挖矿连接的域名或IP,同时观察访问挖矿IOC的频率是多少(基本信息收集),接着通过威胁情报确定挖矿的家族,可以为后续的溯源分析做准备。
异常情况确认
当有挖矿告警时,首先需要查看挖矿告警确定挖矿连接的域名或IP,同时观察访问挖矿IOC的频率是多少(基本信息收集),接着通过威胁情报确定挖矿的家族,可以为后续的溯源分析做准备。如下图中可以看到访问的域名为donate[.]ssl.xmrig[.]com ,访问的频率为1分钟左右访问1次。
通过威胁情报查询域名确认为矿池域名,确认中了挖矿。
上机排查
上机排查分为显性排查和隐性排查两种方式。
显性排查
显性排查,就是挖矿病毒的现象在上机查看很明显,排查处置的过程跟普通的病毒排查过程没有区别,通过外联的挖矿域名或者IP定位通信进程,从而定位到挖矿的文件位置,最后对挖矿进程和挖矿文件清理后,排查系统基础项:
- 系统用户:
Linux系统
Cat /etc/passwd | grep /bin/bash
Windows系统
①使用net users命令,可查看系统用户情况;
②打开计算机管理–>本地用户和组中可查找可疑用户及隐藏用户(用户名以$结尾的为隐藏用户);可以使用快捷键,win+R,输入lusrmgr.msc,打开本地用户和组。
③有时攻击者也会克隆正常的用户名来隐蔽自己,可以通过注册表方法查找克隆用户,也可以通过工具查找克隆用户,比如D盾就可以查找隐藏用户。
- 免密用户排查(只有linux排查)
chattr -ia /root/.ssh/authorized_keys
rm -f /root/.ssh/authorized_keys
ls -lhta /root/.ssh/
- 开机启动项:
Linux系统
vi /etc/inittab
id=3 initdefault:系统开机后直接进入哪个运行级别
more /etc/rc.local
/etc/rc.d/rc[0~6].d
Is -lart /etc/rc.d/init.d/
- 定时任务:
Linux系统
/var/spool/cron/目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名
/etc/crontab 这个文件负责调度各种管理和维护任务。
Windows系统
1、在桌面打开运行(可使用快捷键 win+R),输入 control 打开控制面板,在 系统与安全 中查看计划任务属性,便可以发现病毒文件的路径。
2、也可以使用 SCHTASKS 命令查询计划任务。例如,若要显示名为 “MyTask” 的当前计划任务的详细信息,请执行以下命令:schtasks /query /tn “MyTask”
- 系统服务:
Linux系统
文件路径:/usr/lib/systemd/system/ /etc/systemd/system/
systemctl stop 服务名称 停止服务
systemctl disable 服务名称 阻止服务在运行时自动启动
Windows系统
win+R,输入services.msc,查看服务
隐性排查
隐性排查与显性特征相反,上机排查使用系统的内置命令或工具看不到挖矿的特征如(CPU使用率正常、网络连接过滤、系统命令替换、进程被隐藏、挖矿文件被删除等等)。
库文件劫持
LD_PRELOAD 是 Linux 操作系统的一个环境变量,用于动态库的加载,且动态库加载的优先级最高,一般情况下,其加载顺序为LD PRELOAD>LD LIBRARY PATH>/etc/ld.so.cache>/lib>/usr/ib。它允许定义在程序运行前优先加载的动态链接库,可以覆盖一些系统调用,设置完成后立即生效。劫持预加载动态链接库的进程隐藏方式往往是过滤ps等命令从 /proc/ 获取的结果。
检测方法1:使用sysdig(有开源版,可以监控ps等的调用过程,观察是否有恶意动态库被加载)
安装方法
1、导入draios源
rpm --import https://s3.amazonaws.com/download.draios.com/DRAIOS-GPG-KEY.public
curl -s -o /etc/yum.repos.d/draios.repo http://download.draios.com/stable/rpm/draios.repo
2、装包
yum -y install kernel-devel* dkms sysdig
检测方法2:使用strace追踪命令加载库文件是否有异常
ldd /bin/cat确认加载的库文件是否正常,如被劫持被劫持的库文件/etc/ld.so.preload。
使用busybox工具删除恶意库文件。如果无法删除,可以chattr去掉隐藏属性再rm删除。
检测方法3:prochunter工具
下载链接:https://github.com/n0way0ut/prochunter
如果对文件设置 i 属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;
如果对目录设置 i 属性,那么只能修改目录下文件中的数据,但不允许建立和删除文件;
BusyBox 是一个集成了三百多个最常用 Linux 命令和工具的软件。BusyBox 包含了一些简单的工具,例如 ls、cat 和 echo 等等,还包含了一些更大、更复杂的工具,例 grep、find、mount 以及 telnet。
./busybox lsattr -ia /etc/ld.so.preload 查看文件属性
./busybox chattr -ia /etc/ld.so.preload 去掉隐藏属性
守护进程
为了防止挖矿进程被杀掉,部分挖矿木马会创建守护进程用以监控挖矿进程的状态,在挖矿进程被kill时能够及时重新拉起,以RainbowMiner为例,下图中kthreadds为挖矿进程,pdflushs为守护进程:
命令替换
替换ps、top、ls等命令的文件,破解方法很简单,查看文件修改时间和HASH值,如果与默认时间,或正常命令文件的HASH值不符,则被替换。破解方法,传回来一个正常的文件重新使用命令操作即可。
查看文件状态stat filename
计算文件hash值 md5sum filename
也可使用rkhunter检查 Linux 系统命令是否被替换
工具链接:
rkhunter可以在系统启动时创建一个以PID命名的目录在/proc下,其中包含该进程的信息,通过检查文件修改时间或大小是否改变来检测命令是否被替换。
系统完整性性可以通过rpm(不适用于Ubuntu系统)自带的-Va来校验检查所有的rpm软件包,有哪些被篡改了,防止rpm也被替换,上传一个安全干净稳定版本rpm二进制到服务器上进行检查。
rpm -Va > rpm.log
如果一切均校验正常将不会产生任何输出。如果有不一致的地方,就会显示出来。输出格式是8位长字符串, c 用以指配置文件, 接着是文件名。 8位字符的每一个用以表示文件与RPM数据库中一种属性的比较结果。 . (点) 表示测试通过。
如果命令被替换了,还原回来的步骤如下:
文件提取还原案例:
rpm -qf /bin/ls 查询 ls 命令属于哪个软件包
mv /bin/ls /tmp 先把 ls 转移到 tmp 目录下,造成 ls 命令丢失的假象
rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls 提取 rpm 包中 ls 命令到当前目录的 /bin/ls 下
cp /root/bin/ls /bin/ 把 ls 命令复制到 /bin/ 目录 修复文件丢失
挂载隐藏
在Linux系统中,/proc目录是一个虚拟文件系统,提供了对系统内核和进程信息的访问。每个运行的进程都有一个以其PID (进程ID)命名的子目录,例如/proc/1234。
原理
当挂载一个特定进程的/proc/PID 目录时,实际上是在创建一个新的挂载点,与系统的/proc 目录不同。这样做会导致无法正常获取到进程信息,因为系统命令ps、top等依赖于默认的/proc 目录结构,通过readdir()函数获取/proc目录下内容来获取进程信息。
挂载特定PID文件,挂载后可隐藏PID,使用netstat、top等命令无法看到该进程ID;使用ps可以看到进程但无法看到进程命令。
mount -t proc proc /proc/PID
使用mount可以查看挂载的进程
要想取消挂载恢复隐藏PID,使用umount /proc/PID即可
内核劫持(模块)
Linux内核级rootkit技术是一种极为高级的黑客攻击技术,它能够打破Linux系统的安全防御,实现对系统和用户的完全控制。相较于用户态rootkit,内核级的rootkit在操作系统内核层进行操控,更难被发现。一旦成功安装,rootkit就可以在操作系统内核中运行,更加持久和难以清除,并且由于存在于内核级别,它能够篡改内存数据和内核模块,控制权更高,危害更大。
Linux常⻅的rootkit为动态链接器劫持型,以及LKM型。可加载内核模块(Loadable Kernel Modules,LKM)是可以根据需要加载和卸载到内核中的代码⽚段。可加载内核模块是可以根据需要加载和卸载到内核中的代码⽚段。 它们⽆需重启系统即可扩展内核的功能,例如设备驱动程序。默认情况下,modprobe 尝试从/lib/modules//kernel/ ⽬录加载模块。某些模块具有依赖性,即在加载相关模块之前必须加载的其他内核模块。模块依赖项列表由 depmod 程序⽣成和维护,该程序会在安装内核或驱动程序包时⾃动运⾏。
内核态的隐藏进程方法除了新增内核模块(LKM),还有可以修改内核模块,但是修改内核模块一般需要重启。
可以使用uname -a查看内核编译时间
使用lsmod查看内核模块
删除文件恢复挖矿文件
在Linux系统中删除文件是很难找回的,即便是找回也可能是残缺不全。由于Linux中文件删除时不影响进程的,所以只要文件在进程中时被打开的,那就可以通过进程找回删除的文件。
举例:可以通过lsof看看哪些文件是deleted的状态
可以看到很多删除的日志是1168这个进程,看一下是rsyslogd服务。
进入/proc/1168/fd目录,可以看到这个进程中删除的文件
恢复文件重定向对应的序号导出即可 cat 3 >/var/log/messages
工具恢复:extundelete【官方链接】
依赖安装:
centos安装操作
yum install e2fsprogs-devel e2fsprogsgcc
ubuntu安装操作
apt-get install build-essential e2fslibs-dev e2fslibs-dev
编译安装:
wget http://downloads.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz
tar xfextundelete-0.2.4.tar.bz2
cd extundelete-0.2.4
./configure
make
make install
挖矿木马防范
预防恶意挖矿软件的最好方法,是在成为受害者之前采取安全措施。最常见的方法是在常用的浏览器中阻止 JavaScript 脚本运行。虽然该功能可以有效阻止路过式网页挖矿攻击,但同样也会阻止用户使用浏览器插件功能,另外一种方法是安装专门用于防范浏览器挖矿的拓展程序,例如“No Coin”和 “MinerBlock”,两者都有适用于 Chrome、Firefox 和 Opera 的扩展程序。
另一种防范本地系统感染恶意挖矿的方法与常规恶意软件基本相同:
- 提高个人安全意识,从正常的应用市场和渠道下载安装应用程序,不轻易安装来历不明的第三方软件,或随意点击和访问一些具有诱导性质的 不良网页;
- 安装终端安全防护并定时进行全盘查杀;
- 及时修复系统漏洞,更新系统版本、软件版本和应用版本。