安全运维 | 记一次有趣的挖矿病毒

admin 2023年3月7日14:46:24评论37 views字数 2075阅读6分55秒阅读模式

0 前言

本病毒使用了去符号表、敏感信息混淆、int 0x80执行系调函数、sh -c 执行bash脚本获取相关信息等技术来做免杀处理,但是不足的点也很明显:

  1)top命令可以直接查看病毒进程占用cpu比率。

  2)crontab -l可以发现病毒的定时任务。

  3)没有去掉特征字符,核心代码修改自github某著名挖矿源码。


注:由于网络安全法的规定,本文未将病毒链接放出。


1 背景

某一天,一个朋友突然微信过来一个病毒(绝对不是无中生友~)。截图是朋友给的检查结果以及时间。看图的样子,这个病毒静态检测起来比较复杂??


安全运维 | 记一次有趣的挖矿病毒

安全运维 | 记一次有趣的挖矿病毒


2 病毒分析

拿到病毒第一件事,查壳。还好,这个病毒只是一个标准的压缩壳,没有做什么大的变化。

(x86版本x64版本代码一样,习惯用x86分析)


安全运维 | 记一次有趣的挖矿病毒


脱壳:upx –d filename 一切顺利。如果病毒作者自己修改upx的壳的话,标准的upx –d是脱不掉的,需要单步跟随一步步dump吧。病毒分析是一个耐心的活,考验的是细心。还有一点,此病毒全程没有符号表,这给逆向的人员带来很多麻烦,很多函数都需要一点点跟进才行。对于linux病毒,如果单纯使用gdb调试的话,很容易陷入局部,不能整体把控。此时,IDA的动态调试功能就凸显出来了。使用IDA的动态调试既简单又有效,可以节省大量时间。

方法:


1)将ida dbgsrv目录下的linux_server放在linux虚拟机中,以root形式运行linux_server,如下图。


安全运维 | 记一次有趣的挖矿病毒


2)在实体机中使用IDA载入病毒后,点击F9或start process按钮(绿色三角)。IDA会弹出Debugger warning提示框,点击“ok”。这里注意一点的是,Hostname要输入linux虚拟机的ip地址,并且确保linux_server是运行状态。至于Application、Input File、Directory这三个忽略不计也可以。之后一路“ok”就可以调试了。


安全运维 | 记一次有趣的挖矿病毒


安全运维 | 记一次有趣的挖矿病毒



病毒内含有大量的看似无用代码,其实包含了大量需要解码的内容。流程较为简单直接,一直F8即可。大致如下图所示:


安全运维 | 记一次有趣的挖矿病毒


首先经过解密,其配置如下:用户名FUCKERS,密码Rxl,矿池xmr.winscp.top:80。至此,此病毒的关键信息已被提取。而且有意思的一点—donate-level默认级别是5,病毒作者改成了20,捐赠的心还是很大方的~经查看,此病毒核心部分为github上一知名挖矿病毒~


安全运维 | 记一次有趣的挖矿病毒

安全运维 | 记一次有趣的挖矿病毒


部分解密采用了xor解密,红框中为解密后的,乱码为未解密的内容。如下图所示:


安全运维 | 记一次有趣的挖矿病毒


解密后的脚本如下:


安全运维 | 记一次有趣的挖矿病毒


当可执行bash脚本被解密后,系统通过sys_execve(bin/sh)的方式呼唤起shell,然后通过sh -c执行bash的脚本。


安全运维 | 记一次有趣的挖矿病毒


这里有一点需要注意的是病毒执行sys_execve的方式并不是直接调用函数sys_execve,而是采用了int 0x80的方式。Linux系统提供了200多个系统调用,通过汇编指令 int 0x80 实现,用系统调用号来区分入口函数。为了对避免毒软件对敏感函数的纠察,病毒正好利用了此特性,通过两个步骤来实现所要执行的函数过程。比如需要执行sys_execve。

  1)首先查看资料得知sys_execve的序号是11。接着病毒将此序号传入代码中等待。

  2)通过汇编语句调用 int 80,启动软中断,以软中断方式进入调用sys_execve的执行。

如下图所示:


安全运维 | 记一次有趣的挖矿病毒

安全运维 | 记一次有趣的挖矿病毒


又是一段bash解密


安全运维 | 记一次有趣的挖矿病毒


将bash执行后,退出程序,接着依靠crontab内的计划再次启动,进入挖矿模式。


安全运维 | 记一次有趣的挖矿病毒


3 清除病毒

  1)通过top命令查看cpu占用,此病毒占用还是很高的。


安全运维 | 记一次有趣的挖矿病毒


  2)通过crontab -l 发现其启动规律


安全运维 | 记一次有趣的挖矿病毒


删除crontab中病毒启动命令后,kill -9 virusPID即可。接着删除病毒所在文件目录。


4 附录

解密完毕后,内存中会释放出许多挖矿脚本,这里使用idapython将其dump出来。脚本如下:


from idaapi import *from idc import *addr_start=0xxxxxxxxaddr_end=0xaaaaaalen=addr_start-addr_endbuf=dbg_read_memory(addr,len);fp = open("d:\dmp.txt", "wb");fp.write(buf);fp.close();


公众号推送

安全运维 | 记一次有趣的挖矿病毒

陈冠男的游戏人生
个人公众号,主要更新方向为二进制、PWN、 vulnhub 靶机


安全运维 | 记一次有趣的挖矿病毒

Python编程和深度学习
公众号主要研究图像处理、机器学习和深度学习领域相关知识,并及时对最新的深度学习领域的文章进行解读和分享

安全运维 | 记一次有趣的挖矿病毒

老油条IT记
关注于运维开发技术,主要分享不限于Linux,python,mysql,shell等技术


免费星球:要求每个人两周输出一篇文章,文章为星球成员自己整理的内容,超过两周未输出成果的朋友,将踢出星球,且要求1个月内,禁止加入。

收费星球:进入收费星球的成员可以在星球里学习一年,学习资源包括贝塔安全实验室整理好的学习资料,免费星球免踢一年。

安全运维 | 记一次有趣的挖矿病毒

安全运维 | 记一次有趣的挖矿病毒



安全运维 | 记一次有趣的挖矿病毒


原文始发于微信公众号(betasec):安全运维 | 记一次有趣的挖矿病毒

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年3月7日14:46:24
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   安全运维 | 记一次有趣的挖矿病毒https://cn-sec.com/archives/1591224.html

发表评论

匿名网友 填写信息