急!CPU 被挖矿了,却找不到哪个进程

本文转载自 小白学黑客,作者 小白

【前言】

通过排查挖矿病毒的一次“有趣”经历,本文不仅展示了各种 Shell 命令的用法和作用,也能加深读者对Linux 进程文件系统 的理解。

同时在本文中,还出现了各种不同的工具类网站,相信对于一些专业人士会很有帮助。

希望能对大家有所帮助。

CPU起飞了

最近有朋友在群里反馈,自己服务器的CPU一直处于高占用状态,但用topps等命令却一直找不到是哪个进程在占用,怀疑中了挖矿病毒,急的团团转。

图片

图片

根据经验,我赶紧让他看一下当前服务器的网络连接,看看有没有可疑连接,果然发现了有点东西:

图片

Shodan查一下这IP地址:

图片

反向查找,发现有诸多域名曾经解析到这个IP地址:

图片

这是一个位于德国的IP地址,开放了4444,5555,7777等数个特殊的服务端口:

图片

其中这位朋友服务器上发现的连接到的是7777端口,钟馗之眼显示,这是一个HTTP服务的端口,直接访问返回的信息如下:

图片

mining pool!,服务器正在挖矿实锤了!

图片

但神奇的是,这个进程像是隐身了一般,找不到存在的任何痕迹。

进程如何隐藏

现在说回到本文的正题:Linux操作系统上,进程要隐藏起来,有哪些招数?

要回答这个问题,先来知道ps、top等命令枚举系统的进程列表的原理。

Linux的设计哲学是:一切皆文件!

进程也不例外, Linux系统中有一个特殊的目录:/proc/,这个目录下的内容,不是硬盘上的文件系统,而是操作系统内核暴露出的内核中进程、线程相关的数据接口,也就是procfs,里面记录了系统上正在运行的进程和线程信息,来查看一下:

图片

这些以数字命名的目录,就是一个进程的PID,里面记录了该进程的详细信息。

而ps、top等命令的工作原理,实质上就是遍历这个目录。

知道了原理,想实现隐藏就有以下几个思路:

命令替换

直接替换系统中的ps、top命令工具。可以从GitHub上下载它们的源码,加入对应的过滤逻辑,在遍历进程的时候,剔除挖矿进程,实现隐藏的目的。

模块注入

编写一个动态链接库so文件,在so中,HOOK遍历相关的函数(readdir/readdir64),遍历的时候,过滤挖矿进程。

通过修改LD_PRELOAD环境变量或/etc/ld.so.preload文件,配置动态链接库,实现将其注入到目标进程中。

内核级隐藏

模块注入的方式是在应用层执行函数HOOK,隐藏挖矿进程,更进一步,可以通过加载驱动程序的方式在内核空间HOOK相应的系统调用来实现隐藏。不过这对攻击者的技术要求也更高,遇到这样的病毒清理起来挑战也更大了。

揪出挖矿进程

通过上面的进程隐藏原理看得住来,都是想尽办法隐藏/proc目录下的内容,类似于“障眼法”,所以包含pstopls等等在内的命令,都没办法看到挖矿进程的存在。

但蒙上眼不代表不存在,有一个叫unhide的工具,就能用来查看隐藏进程。

我让这位朋友安装这个工具来查找隐藏的进程,但奇怪的是,一执行yum install安装,远程连接的SSH会话就立刻断开。

于是退而求其次,选择通过源码安装,又是一直各种报错···

因为我没办法亲自操作这台服务器,沟通起来比较麻烦,于是我决定研究下这个unhide工具的源码,然后编一个python脚本发给他执行。

源码地址:https://github.com/YJesus/Unhide-NG/blob/master/unhide-linux.c

在查找隐藏进程模块,其大致使用了如下的方法:

挨个访问 /proc/pid/ 目录,其中,pid从1到到max_pid累加

  • 如果目录不存在,跳过

  • 如果是unhide自己的进程,跳过

  • 如果在ps命令中能看到,跳过

  • 剩下的,既不是自己,也不在ps命令输出中,则判定为隐藏进程

按照这个思路,我编写了一个Python脚本发给这位朋友,执行后果然发现了隐藏的进程:

图片

别着急,不是真的有这么多进程,这里是把所有的线程ID列举出来了。随便挑选了一个看一下:

图片

还记得前面通过netstat命令看到挖矿进程建立了一个网络连接吗?Linux一切皆文件,在 /proc/pid/fd 目录下有进程打开的文件信息:

图片

这里发现这个进程打开了一个socket,后面的10212是inode id,再通过下面的命令看一下这个socket到底是什么:

cat /proc/net/tcp | grep 10212

输出了四元组信息:

图片

左边是源IP地址:源端口,右边是目的IP地址:目的端口

目的端口1E61就是7777!!!

图片

找到了,就是这货!

再次查看 cat /proc/pid/environ,定位到进程的可执行文件:

图片

总算把这家伙找到了:

图片

网上一搜这家伙,看来是惯犯了:

图片

挖矿病毒分析

把这个挖矿木马下载下来,反汇编引擎中查看,发现加壳了。

脱壳后,在IDA中现出了原形,不禁倒吸了一口凉气,居然悄悄修改/root/.ssh/authorized_keys文件,添加了RSA密钥登录方式,留下这么一个后门,随时都能远程登录进来。

图片

图片

除此之外,还发现了病毒尝试连接的大量域名:

图片

看到这里简直可怕!自己的服务器被病毒按在地上摩擦啊!

清除建议

  • 开启SELinux

  • 杀掉挖矿进程

  • 删除病毒程序(注意rm命令是否被替换)

  • 删除病毒驱动程序(注意rm命令是否被替换)

  • 删除病毒添加的登录凭据

  • 防火墙封禁IP、端口

已标记关键词 清除标记
相关推荐
响应-powershell挖矿 近日,金山毒霸安全实验室拦截到一个通过PowerShell脚本作为载体进行传播的挖矿病毒,其通过下拉多个脚本完成一次攻击行为,使用“永恒之蓝”漏洞、WMIExec渗透工具进行自动化传播,同时所有载荷均写入WMI进行无文件驻留。 加密货币劫持(cryptojacking),也称作挖矿劫持,是指未经授权使用别人的计算机挖掘加密货币。 通常,黑客通过让受害者点击电子邮件中的恶意链接,将加密货币挖矿代码加载到计算机上;或者使用JavaScript代码感染网站或在线广告,而JavaScript代码将在受害者浏览器内加载后自动执行。 无论通过哪种方式,挖矿代码将在后台运行,而毫不知情的受害者可以正常使用计算机。他们可能注意到的唯一迹象是计算机性能下降或执行滞后。 为何挖矿劫持事件层出不穷? 没有人知道黑客通过挖矿劫持开采了多少加密货币,但毫无疑问这种做法日渐猖獗。 基于浏览器的挖矿劫持正在快速增长。去年11月,据Adguard报告,浏览器内的挖矿劫持增长率为31%。Adguard研究发现,共有33000个网站运行挖矿劫持脚本,而这些网站每月的访问数量预计达到10亿。今年2月,Bad Packets Report发现了34474个运行Coinhive的站点。Coinhive是最受欢迎的JavaScript挖矿程序,也被用于合法的加密货币挖矿活动。 网络安全解决方案提供商WatchGuard Technologies的威胁情报分析师Marc Laliberte表示,“加密货币挖矿正处于初级阶段,还有很多发展和演变的空间。”他指出,Coinhive程序易于部署,并且在第一个月就创造了30万美元的价值。 “从那以后,Coinhive发展得很快。这样赚钱真的很容易。” 1月份,研究人员发现了Smominru加密货币挖矿僵尸网络,该蠕虫感染了超过50万台机器,主要集中在俄罗斯、印度和台湾地区。僵尸网络的目标是让Windows服务器挖掘门罗币(Monero)。网络安全公司Proofpoint估计,截至1月底,它已经创造了360万美元的价值。 挖矿劫持甚至不需要拥有重要的技术能力。根据Digital Shadows的报告《新淘金热:加密货币成为欺诈的新领域》,挖矿劫持工具包在暗网只卖30美元。 挖矿劫持越来越受黑客欢迎的一个原因是风险更低却能获得更多金钱。SecBI的CTO兼联合创始人Alex Vaystikh表示:“对于黑客来说,挖矿劫持是比勒索软件更廉价、更有利可图的替代品。”如果使用勒索软件,黑客每次感染100台计算机,或许只能让3个人付费。而使用挖矿劫持,被感染的100台计算机都可以用来挖掘加密货币。他解释说,虽然通过挖矿劫持和使用勒索软件获得的金钱可能一样多,但是挖矿可以不断地产生价值。 另外,挖矿劫持被发现和识别的风险也远低于勒索软件。挖矿代码将静默运行,并且可能很长时间不被发现;就算被发现,也很难追溯到源头。因为没有任何东西被盗或被加密,受害者没有什么动机去追溯。黑客倾向于选择Monero和Zcash等匿名加密货币,而不是比特币,因为很难追踪这些货币背后的非法行为。 挖矿劫持是如何发生的? 黑客主要通过两种方式让受害者的计算机悄悄地挖掘加密货币。 一种方法是诱导受害者将挖矿代码加载到计算机上。通过类似网络钓鱼的方法完成劫持:受害者收到一封看似合法的电子邮件,诱导他们点击链接。这个链接会运行代码,将挖矿脚本加载到计算机上。受害者使用计算机时,挖矿脚本代码可以在后台运行。 另一种方法是在可以大量传播的网站或广告里植入脚本。一旦受害者访问被感染的网站或者点击浏览器弹出的广告,脚本将自动执行。没有代码存储在受害者的计算机上。 无论使用哪种方法,挖矿代码都会利用受害者的计算机挖矿,并将结果发送到黑客控制的服务器。 黑客通常会使用这两种方法来获取最大化的回报。Vaystikh表示:“攻击者会使用恶意软件技术作为备用,向受害者的计算机发送更可靠和持久的恶意软件。”例如,在100台为黑客挖掘加密货币的设备中,其中10%可能通过受害者设备上的代码产生收入,90%则通过他们的网络浏览器实现。 与大多数其他类型的恶意软件不同,挖矿劫持脚本不会损害计算机或者受害者的数据。它们窃取的是CPU处理资源。对于个人用户来说,计算机性能变慢可能只是一个烦恼。而对于企业来说,如果很多系统被劫持挖矿,可能会增加成本。为了解决问题,服务台和IT部门需要花费时间追踪性能问题并更换组件或系统。 挖矿劫持实际案例 挖矿劫持者很聪明,设计了很多方案来利用他人的电脑挖掘加密货币。大部分的方案并不新奇,其传播方式通常借鉴其他恶意软件(如勒索软件或广告软件)的方法。以下是一些真实发生的案例: 流氓员工劫持公司系统 在今年的EmTech数字会议上,Darktrace讲述了一家欧洲银行的故事。这家银行的服务器出现了异常流量,在夜间运行缓慢,但是银行的诊断工具没有发现任何异常。Darktrac发现,在那段时间里有新服务器上线,而银行表示并没有这些服务器。最后,Darktrac对数据中心进行实地检查时发现,一名流氓员工在地板下建了一个加密货币挖矿系统。 利用GitHub传播挖矿软件 3月份,Avast软件公司报告称,挖矿劫持者正在将GitHub作为恶意挖矿软件的宿主。他们到合法的项目,从中创建一个分叉项目;然后将恶意软件隐藏在该分叉项目的目录结构中。挖矿劫持者通过使用网络钓鱼方案引诱用户下载该恶意软件,例如提醒更新Flash播放器或者伪装成一个成人游戏网站。 利用rTorrent漏洞 挖矿劫持者发现了一个rTorrent错误配置漏洞,无需进行XML-RPC通信验证即可访问一些rTorrent客户端。他们扫描互联网寻未打补丁的客户端,然后在客户端上部署Monero挖矿软件。F5 Networks在2月份报告了这个漏洞,并建议rTorrent用户确保其客户端不接受外部连接。 Chrome恶意插件Facexworm 这种恶意软件最早是由卡巴斯基实验室于2017年发现的,它是一款谷歌浏览器插件,使用Facebook Messenger来感染用户的计算机。最初,Facexworm用于传播广告软件。今年早些时候,趋势科技发现了多种面向加密货币兑换的Facexworm,并且能够传播加密货币挖矿代码。它仍然使用被感染的Facebook帐户来传播恶意链接,但也可以窃取网络帐户和凭证,从而允许它将挖矿劫持代码植入到这些网页。 暴力挖矿病毒WinstarNssmMiner 5月份,360安全卫士发现了可以迅速传播的挖矿劫持程序WinstarNssmMiner。这个恶意程序的特别之处在于,卸载它会让受害者的计算机崩溃。WinstarNssmMiner首先启动svchost.exe进程并向其植入代码,然后将该进程的属性设置为CriticalProcess。由于计算机将其视为关键进程,因此一旦强制结束该进程,计算机就会蓝屏。 如何预防挖矿劫持? 如果遵循这些步骤,可以最大限度地降低公司被劫持挖矿的风险: 公司安全意识培训应该增加关于挖矿劫持威胁的内容,着重介绍通过网络钓鱼将挖矿脚本加载到用户计算机上的劫持方式。 Laliberte认为培训会有帮助,网络钓鱼将继续成为攻击者发送各种恶意软件的主要方式。而针对通过访问合法网站自动执行挖矿劫持的方式, Vaystikh表示,培训效果不佳,因为你没办法告诉用户不能访问哪些网站。 在Web浏览器上安装广告拦截或反挖矿插件。 由于挖矿劫持脚本通常通过网络广告进行传播,因此安装广告拦截器可能是阻止它们的有效手段。Ad Blocker Plus等广告拦截器具备检测挖矿脚本的功能。Laliberte推荐No Coin和MinerBlock等可以检测和拦截挖矿脚本的浏览器插件。 使用能够检测已知挖矿程序的端点保护技术。 许多端点保护/防病毒软件供应商已经添加了检测挖矿程序的功能。Anomali安全策略总监Travis Farral说:“防病毒是终端预防挖矿劫持的方法之一。如果这个程序是已知的,那就很可能被检测出来。”他补充道,需要注意的是挖矿程序的编写者正在不断改变技术,避免被端点检测到。 更新网页过滤工具。 如果已经确定一个网站正在运行挖矿脚本,请确保所有用户不会再访问该网站。 维护浏览器插件。 一些攻击者正在使用浏览器恶意插件或者被感染的合法插件来执行加密货币挖矿脚本。 使用移动设备管理(MDM)解决方案更好地控制用户设备上的内容。 自带设备(BYOD)策略可以有效预防非法的加密货币挖矿行为。Laliberte认为,MDM可以长期保持自带设备的安全。MDM解决方案可以帮助企业管理用户设备上的应用和插件。MDM解决方案倾向于面向大型企业,小型企业通常负担不起。不过,Laliberte指出,移动设备不像台式电脑和服务器那么危险。因为移动设备的处理能力往往较低,所以对黑客来说并不是很赚钱。 如何检测挖矿劫持? 与勒索软件一样,尽管企业竭尽全力去阻止挖矿劫持,还是可能受到影响。企业可能很难检测挖矿劫持,特别是在只有少数系统受到损害的情况下。以下是有效的方法: 训练服务台,发现挖矿劫持的迹象。 SecBI的Vaystikh表示,有时候,挖矿劫持的第一个迹象就是服务台收到用户关于计算机性能下降的抱怨。企业应该对此予以重视,并进一步进行调查。 服务台应该寻的其他信号是可能导致CPU或散热风扇故障的系统过热。Laliberte指出,因为CPU使用率过高,系统过热会造成损坏,并可能缩短设备的使用周期。对于平板电脑和智能手机等移动设备更是如此。 部署网络监控解决方案。 Vaystikh认为,企业网络中的挖矿劫持比家庭网络更容易检测,因为大多数消费者端点解决方案都无法检测到它。挖矿劫持很容易通过网络监控解决方案进行检测,而大多数企业都有网络监控工具。 不过,即便拥有网络监控工具和数据,很少有企业可以有工具和能力来分析这些信息,从而进行准确的检测。例如,SecBI开发了一个AI解决方案来分析网络数据,并检测挖矿劫持和其他特定威胁。 Laliberte认为,网络监测是检测挖矿劫持的最佳选择。审查所有网络流量的网络周边监控方案,更有可能检测出挖矿行为。许多监控解决方案将深入检测每一个用户,以便确定哪些设备受到影响。 Farral表示,如果企业服务器配备了靠谱的过滤器来监控出口端点的网络连接请求,那么可以很好地检测出恶意挖矿软件。不过,他警告说,挖矿软件的编程者有能力改写恶意软件,来规避这个检测方法。 监控自己的网站是否被植入挖矿劫持代码。 Farral警告说,挖矿劫持者正设法在Web服务器上植入一些Javascript代码。服务器本身并不是其攻击目标,但是任何访问该网站的人都有感染的风险。他建议企业定期监视Web服务器上的文件更改情况或者自行更改页面。 随时了解挖矿劫持的发展趋势。 挖矿劫持的传播方式和挖矿代码本身在不断发展。Farral表示,了解挖矿劫持软件和劫持行为可以帮助企业检测挖矿劫持。一个精明的企业会跟进事情的最新进展。如果掌握了挖矿劫持的传播机制,就知道某个特定的开发工具包正在发送挖矿代码。保护开发工具包,也将成为预防挖矿劫持的措施。 如何应对挖矿劫持攻击? 关闭并拦截网站发送的恶意脚本。 对于浏览器内的JavaScript劫持攻击,一旦检测到挖矿劫持,就应该关闭运行恶意脚本的浏览器标签页。IT部门应该注意发送脚本的网站URL,并更新企业的网页过滤器进行拦截。企业可以考虑部署反挖矿工具,帮助防止未来的攻击。 更新并清理浏览器插件。 Laliberte表示,如果一个插件感染了浏览器,关闭标签页将无济于事。这时应该更新所有插件,并删除不需要或已经感染的插件。 学习并适应。 借助这些经验更好地了解攻击者是如何危害系统的。更新企业的用户、服务台和IT培训内容,以便他们更好地识别挖矿劫持并采取相应的行动。
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页