一次恶意挖矿样本分析到捕获矿池地址

admin 2025年5月15日09:29:05评论4 views字数 3264阅读10分52秒阅读模式

样本指纹

SHA256:938c187c0c566d3ecd0ca594d027cff745688b409d6ab18e7d836d9ef1bd30de

MD5:8bb9f094a5c3e8358d931200092e3412

SHA1:fced1103ababf08ea6435f43f597240ac6c357e8

动静分析

首先使用IDA看看导入表 图中指出了一部分敏感的API

一次恶意挖矿样本分析到捕获矿池地址

如图还有进行一些网络连接操作

一次恶意挖矿样本分析到捕获矿池地址

然后看执行流程,Tab键简单看看伪代码

main函数开头的这段代码,通过CreateMutex创建一个互斥体,通过GetLastError判断互斥体是否已经存在,如果已存在则进行sleep,然后程序就返回了,这样避免进程重复执行该程序

一次恶意挖矿样本分析到捕获矿池地址

然后开始读取文件操作

一次恶意挖矿样本分析到捕获矿池地址

这里动态调试看一下读取的是哪一个文件,调试之前需要了解一点前置知识。文件名是作为fopen的第一个参数传递的,这是一个x64位程序,函数的第一个参数第二个参数分别放在RCX、RDX寄存器中,fopen有两个参数,第一个参数是文件路径,那么我们就动态调试看看RCX,如图说明读取的是样本自身,那么有可能真正的二阶段恶意文件就隐藏在样本自身当中(一开始我以为是CS木马就当CS马来分析了)

一次恶意挖矿样本分析到捕获矿池地址

然后使用两个fseek和malloc、ftell将整个文件内容读取到了内存中,第一个fseek是获取文件末尾指针,ftell是获取文件大小,malloc是申请内存并写入内容,因此推测是将文件内容读取到内存中

一次恶意挖矿样本分析到捕获矿池地址

fclose之后初始化了几个变量

一次恶意挖矿样本分析到捕获矿池地址

从汇编中可以看出,v11从内存中读取文件末尾倒数第8字节的DWORD值,v21读取文件末尾倒数第4字节的DWORD值,因为R13是ftell的返回值即文件大小,是R14是malloc的发挥着即内存起始地址、或者说就是文件内容的起始地址,毕竟已经把内容写入malloc

一次恶意挖矿样本分析到捕获矿池地址
一次恶意挖矿样本分析到捕获矿池地址

然后又开始fwrite,大小的参数值存放在R8寄存器中,根据汇编可以看出是R13-256-8

一次恶意挖矿样本分析到捕获矿池地址

看看右边的寄存器,推测正确

一次恶意挖矿样本分析到捕获矿池地址

后来也经过了一次fputs和fwrite来复制一个完整的exe,但是关键代码、功能是跟样本是一样的

这里将RCX中的内容通过fputs写入文件  RCX就是一个很长的随机文件名 不知道为啥要这样

一次恶意挖矿样本分析到捕获矿池地址
一次恶意挖矿样本分析到捕获矿池地址

似乎是把这个文件名字给覆盖 跟了之后发现又没有变化

一次恶意挖矿样本分析到捕获矿池地址

这里通过createprocess来执行exe

一次恶意挖矿样本分析到捕获矿池地址
一次恶意挖矿样本分析到捕获矿池地址

生成的exe跟一开始的样本代码是一样的但是他会循环不断生成进行自复制到C:\Windows\System\中

一次恶意挖矿样本分析到捕获矿池地址

这里程序一直while循环进行自我复制,复制了很多次,如果绕过这个重复的过程呢?

一次恶意挖矿样本分析到捕获矿池地址

直接在复制代码区域外面下断点然后直接运行到断点位置,这是一种不过这样的话他还是会复制很多次

一次恶意挖矿样本分析到捕获矿池地址

这里选择修改寄存器的方式 如图代码是通过js命令来判断次数的 判断的结果会返回给SF寄存器,如果是0则继续循环,这里直接鼠标双击设置为1就跳过循环只会进行自我复制一次了

一次恶意挖矿样本分析到捕获矿池地址

后面继续看伪代码发现了xmrig,xmrig是知名的开源矿工程序,常被恶意软件用于隐蔽挖矿

一次恶意挖矿样本分析到捕获矿池地址

这里才发现,这实际上不是CS木马其实就是挖矿程序,只有微软报是CS木马就一直当CS木马来看了

一次恶意挖矿样本分析到捕获矿池地址
一次恶意挖矿样本分析到捕获矿池地址

这里defender又识别是挖矿木马

一次恶意挖矿样本分析到捕获矿池地址

捕获矿池地址

确定是挖矿木马了,那就尝试找一下矿池地址吧 最简单的方式是运行然后看看wireshark,当然这存在一定风险

也可以直接ida看看字符串有没有相关的信息,如图,复制下来看看 很明显是挖矿程序的一些配置信息。其中"algo": "cn/r":使用CryptoNight算法变种(如CryptoNightR),常用于门罗币

一次恶意挖矿样本分析到捕获矿池地址
.rdata:000000014009DA3000000493Cn{n    "api": {n        "id": null,n        "worker-id": nulln    },n    "http": {n        "enabled": false,n        "host": "127.0.0.1",n        "port": 0,n        "access-token": null,n        "restricted": truen    },n    "autosave": false,n    "version": 1,n    "background": false,n    "colors": true,n    "randomx": {n        "init": -1,n        "numa": truen    },n    "cpu": {n        "enabled": true,n        "huge-pages": true,n        "hw-aes": null,n        "priority": null,n        "asm": true,n        "argon2-impl": null,n        "cn/0": false,n        "cn-lite/0": falsen    },n    "donate-level": 0,n    "donate-over-proxy": 1,n    "log-file": null,n    "pools": [n        {n            "algo": "cn/r",n            "url": "3.120.209.58:8080",n            "user": "x",n            "pass": "x",n            "rig-id": null,n            "nicehash": false,n            "keepalive": false..............

有个url:3.120.209.58:8080,pools一般就是矿池相关的参数了 微步是显示安全的 放在VT看看 有一个显示Miner也就是矿池的意思

一次恶意挖矿样本分析到捕获矿池地址

除了看字符串以外呢,我们还可以通过xdbg动态调试的方式获取矿池地址,那么我们就需要在一些进行网络连接相关的API上进行断点,然后去分析他的参数传入顺序、以及参数值,从而捕获矿池的地址,主要是找ws2_32.dll里的API,这里面的API大多都是跟网络连接相关的,可以尝试对这些API进行断点

一次恶意挖矿样本分析到捕获矿池地址
<ws2_32.dll.GetAddrInfoW><ws2_32.dll.sendto><ws2_32.dll.connect><ws2_32.dll.WSASocketW>ws2_32.dll<ws2_32.dll.WSAStartup><ws2_32.dll.send><ws2_32.dll.WSASend><ws2_32.dll.recv><ws2_32.dll.WSARecv><ws2_32.dll.recvfrom><ws2_32.dll.bind><ws2_32.dll.WSAConnect><ws2_32.dll.WSAStringToAddressA><ws2_32.dll.WSARecvFrom><ws2_32.dll.WSAStringToAddressW><ws2_32.dll.WSASocketA><ws2_32.dll.GetHostNameW><ws2_32.dll.WSAConnectByList><ws2_32.dll.WSAConnectByNameA><ws2_32.dll.WSAConnectByNameW>

这里开始进行动态调试,这里就进入了GetAddrInfow这个API

一次恶意挖矿样本分析到捕获矿池地址

就来学习一下这个API  如图官方解释

一次恶意挖矿样本分析到捕获矿池地址
INT WSAAPI GetAddrInfoW(  [in, optional] PCWSTR          pNodeName,  [in, optional] PCWSTR          pServiceName,  [in, optional] const ADDRINFOW *pHints,  [out]          PADDRINFOW      *ppResult);

那么第一个参数也就是矿池的IP或者域名了,根据X64的调用约定可知,第一个参数是放在RCX里的,那么我们就可以确定了,3.120.209.58:8080就是矿池地址

一次恶意挖矿样本分析到捕获矿池地址

原文始发于微信公众号(Ting的安全笔记):一次恶意挖矿样本分析到捕获矿池地址

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月15日09:29:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   一次恶意挖矿样本分析到捕获矿池地址https://cn-sec.com/archives/4065303.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息