研究人员最近发现一个影响Linux系统的加密货币挖矿恶意软件。该恶意软件融合了rootkit组件来隐藏恶意进程以对抗反病毒软件的检测。受感染的系统只表现出性能问题,恶意软件还可以更新和升级自己和配置文件。
Unix和类unix操作系统的权限模型使恶意软件很难以特权运行。研究人员发现的加密货币挖矿恶意软件的感染向量是一个恶意的、第三方或被黑的插件。安装后会授予恶意软件admin权限,这样恶意软件就可以以授予应用的权限运行。其他Linux加密货币挖矿恶意软件工具也使用类似的向量作为攻击入口。
图1: 加密货币挖矿恶意软件感染链
初始的文件会连接Pastebin,并下载一个文件。下载的文件是一个shell脚步,会保存为/bin/httpdns
。然后会创建一个定时任务每小时运行一次/bin/httpdns
。最后执行shell脚步。/bin/httpdns
含有一个可以连接和下载另一个base64编码的文本文件的脚本。解码的新文件也是一个由/bin/httpdns
执行的shell脚本。
图2: shell脚本下载和保存过程
脚步执行后,首先会检查恶意软件是否有更新。链接中含有字符串noupdate
,表明当前没有恶意软件更新。如果有更新,shell脚步就会调用echocron
函数,该函数负责下载和创建计划任务来执行恶意软件更新。
图3: shell脚本调用echocron的代码段
如果当前没有可用更新,shell脚本就会继续运行调用负责下载真实恶意加密货币挖矿机的downloadrun
函数,如图4所示。虽然URL的扩展是.jpg
文件,但真实的文件是一个ELF
的可执行文件,会保存为/tmp/kworkerds
。
在下载和执行加密货币挖矿恶意软件后,shell脚步就会调用init
函数,下载初始化文件。下载的文件会保存为/usr/sbin/netdns
,然后以服务的形式安装,最后调用echocron
函数。
图4: 恶意软件downloadrun(上)init(中)downloadrunxm(下)函数代码段
然后shell脚本会休眠10
秒,然后检查是否在56415
端口建立了连接。如果没有建立连接,就执行downloadrunxm
函数。该函数是在downloadrun
函数不能正常工作的情况下,下载另一个加密货币挖矿机(Coinminer.Linux.KORKERDS.AA)。
图5: 恶意软件top函数
恶意软件的更新版本有一个top
函数,负责下载和安装rootkit。首先检查受感染的机器上是否安装了rootkit。如果没有安装,就下载和安装rootkit,然后保存为/usr/local/lib/libdns.so
。
进程监视工具可以检测到加密货币挖矿机的存在。图6是htop
检测到受感染的机器上/tmp/kworkerds
的情况。图6中,rootkit组件隐藏了可能造成资源消耗比较多的进程。
图6: htop工具检测挖矿机进程 /tmp/kworkerds(上);rootkit安装后进程变得不可见(下)
加密货币挖矿机恶意软件的rootkit组件是公开代码的修改版。安装后,所有名为kworkerds的进程都会对进程监控工具不可见。因为进程监控工具是通过访问位于/proc/{PID}
目录的文件来工作的。拦截对进程/proc/{PID}
目录的访问后,就不能通过常用的方法进行检测了。
Rootkit会hook libc
库的readdir
和readdir64
应用程序接口。进程监控工具常用这些API来获取信息。
通过预加载内存中的文件,rootkit可以用rootkit的readdir
文件替换正常的readdir
文件来覆盖正常的库文件(图7)。一旦API被hook,进程监控工具就不能看到名为kworkerds
的进程了。
图7: rootkit隐藏加密货币挖矿机进程的代码段
如果rootkit没有成功隐藏高CPU利用率和加密货币挖矿机创建的连接,可以通过编辑一些代码和重塑现有代码或工具来改善其隐藏性。恶意软件有了更新的能力后,运营者就可以增加更多的函数来使恶意软件获取更多盈利。加密货币挖矿恶意软件会给Linux系统带来明显的性能问题,因为是对运营商业服务的服务器、工作站、应用开发框架、数据库和手机设备。IT和系统管理员可以应用以下安全实践来应对安全问题: