【应急响应事件】记一次矿机木马事件

事情起因,是因为实验室有一台服务器的占用率从开机启动就是100%,很怀疑就是中了某种矿机木马,拿去挖矿了,然后经过师兄的不懈努力,终于找到了木马文件,给他命名为virus_sample
然后我就拿着样本去逆了

木马分析

搜索一下main函数看下代码结构,看到一个诡异函数sub_400F7E

在这里插入图片描述

我们跟进一下,然后在这个函数里面看到诡异的fwrite,应该是在写一个错误信息

在这里插入图片描述

直接google搜索一下这串字符串

在这里插入图片描述

进去代码发现代码结构与IDA看到的基本上一致,那就可以大致确定了这就是shc加密了

在这里插入图片描述

在这里插入图片描述

找到了相关的博客

Obfuscated, Encrypted, Converted to C source:https://gist.github.com/NullArray/f39b026b9e0d19f1e17390a244d679ec

于是确定了这是一个shc加密shell脚本生成的二进制文件

shc加密shell脚本:文章链接

从资料看出来shc加密以后会生成三个文件

  • .sh源文件
  • .sh.x 加密后的二进制文件
  • .sh.x.c 脚本对应的c源码

我们自己尝试写一个来加密一下看一下。

在这里插入图片描述

此时生成的二进制文件只能通过 ./xxxx命令来执行

在这里插入图片描述

demo.sh.x.c分析

chkenv()

然后我们跟进到chkenv函数中

在这里插入图片描述

我们发现它首先会获取我们的pid,然后会让pid经过RC4以及一系列加密,最后保存到buff中。

这也就能解释我们在服务器中看到的隐藏进程为什么是一串十六进制数字(d4c46f88.service)

然后会让string等于buff的环境变量的值,这里肯定是没有的(因为经过加密后的进程名是一串十六进制数字,系统里面肯定没有这个环境变量),所以也就到了下面的if语句

在这里插入图片描述

通过sprintf函数,将"=mask argc"字符串写入了buff[l],又因为l是buff的长度,所以这里相当于直接在数组后面续写了进程的pid与参数个数

int putenv(char *string); 用于设置环境变量的值

  • string:一个以 “变量名=值” 格式表示的字符串,用于设置环境变量的名称和值。

char *strdup(const char *str); 用于创建一个字符串的副本。

  • str:要复制的字符串。

然后用了putenv函数给新产生进程名的字符串副本创建了对应的环境变量,这也就是为什么要用sprintf函数给这个字符串赋值为=xxx

此时当脚本再次执行的时候,因为string我们前面已经设置过变量了,所以此时string也就有了值,此时sscanf就会从string里面按照格式读取数据,然后如果获取的个数为2,且获取到的m和我们刚才获取的pid一致,就会调用rmarg函数来从环境变量数组中删除第一个数组。

下图为/proc/2030/environ 环境变量数组的内容

在这里插入图片描述

gets_process_name()

接下来又看到了它是如何获取我们的进程脚本的,直接通过proc/pid/cmdline就可以找到进程对应的脚本

在这里插入图片描述

用fread函数一个字符一个字符读取,读取的大小为procfile数组的大小,然后判断如果字符串最后一个字符是换行符的话就把其替换为字符串终止符。相当于将字符串截断到了换行符这里

下图是pid为2030的一个进程的命令行参数字符串

在这里插入图片描述

/usr/bin/dbus-daemon:这是可执行文件的路径。

--config-file=/usr/share/defaults/at-spi2/accessibility.conf:这是一个命令行选项,指定了配置文件的路径。参数值为 /usr/share/defaults/at-spi2/accessibility.conf

--nofork:这是一个命令行选项,表示进程在后台运行而不创建子进程。

--print-address:这是一个命令行选项,表示进程在启动时打印出其地址信息。

/proc/pid/cmdline 文件中,命令行参数字符串是以 null 字符(‘\0’)分隔的,而不是以换行符分隔的。

然而,有一种特殊情况可能导致在命令行参数字符串的末尾找到换行符。这种情况是当命令行参数中的某个参数值本身包含了换行符时。

#!/bin/bash
echo "Hello world!"

所以如果命令行的参数为上面的代码话,就会触发截断。

untraceable()

这个函数是用来使子进程来难以被跟踪和调试的

在这里插入图片描述

难以追踪和调试体现在

  1. 当前如果是子进程的话,就要获取其父进程的pid,然后将该进程的内存的路径写入proc变量

  2. 然后打开了/proc/pid/mem 打开 /proc 文件并进行读写操作可以干扰调试器的正常功能

  3. 然后立即关闭标准输入(fd=0的时候),也就是close(0),关闭标准输入会导致调试器无法通过标准输入与子进程进行交互,从而减少了调试的可能性。

  4. mine为子进程此时是否为不能跟踪状态,mine为真即表示不可跟踪的状态,然后调用kill函数(SIGCONT信号)来恢复子进程,如果mine为假,即表示子进程无法进入不可跟踪的状态,它会发送 SIGKILL 信号给父进程,从而强制终止父进程的执行。这样,调试器将无法继续跟踪父进程的执行。

xsh()

在这里插入图片描述

它首先会让me变量获取到自身的文件名,如果没有获得到就用getenv函数来获取环境变量。总之代码会首先获得到脚本的路径名。

而在Unix系统中,环境变量 _ 存储了当前程序的可执行文件的路径。通过调用 getenv("_"),可以获取该路径的字符串。

在这里插入图片描述

直接跳到隐藏这里,前面都是一些加密的代码

malloc会给scrpt分配一块4096+40字节大小的空间

代码会将scrpt指向的内存块的前4096个字节(hide_z的值)都设置为空格的ASCII值

memcpy将text中40字节的内容,复制到scrpt的第4097个字节,相当于此时scrpt的前4096个字节都是空格,只有后面的40个字节才是真正的数据

在这里插入图片描述

如果此时ret为假,则会将xecc格式化字符串以及me变量(自己脚本的路径)传入scrpt中

在这里插入图片描述

然后经过一系列的对varg参数赋值,最后调用了execvp函数执行了shll,并且varg作为参数。

远程debugger

现在在自己的机器上执行一下这个文件,用远程debugger一下。

就光执行了一下,就已经看到了删除了我很多的日志了。

在这里插入图片描述

先找到main函数,找到标志性字符串,分别给没有识别出来的函数重新命名一下

在这里插入图片描述

在这里插入图片描述

sub_401412函数是main函数

在这里插入图片描述

在这里插入图片描述

在ret处打断点,修改值

在这里插入图片描述

在这里插入图片描述

然后在这里打断点来获取shellcode

在这里插入图片描述

可以看到已经获取到了shellcode

在这里插入图片描述

用个脚本来获取一下

base = 0x000000000602B83
end = 0x00000000006074F0

ans=[]

for i in range(base,end):
    tmp = idc.get_wide_byte(i)
    ans.append(tmp)
    if(tmp == 0):
        print(bytes(ans))
        ans=[]

在这里插入图片描述

存到文件里面,文件名 shell.sh.tmp

shlll = b'xxx'

with open("shell.sh.tmp", "w") as f:
    print(shlll.decode(),file=f)

大致看了一下包含了删除日志、下载矿机、设置iptables等功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/536836.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端React笔记(尚硅谷)

react 尚硅谷react教程 jsx语法规则 1.定义虚拟dom时不加引号(不是字符串) 2.标签中混入js表达式时要用{} js表达式与js语句不同。 js语句是if(),for(),switch(&#x…

Python生成图片和音频验证码

captcha是pyhton的一个模块,用来生成图片和音频验证码。 安装 pip install captcha使用 from captcha.audio import AudioCaptcha from captcha.image import ImageCaptcha# 加载声音和字体 audio AudioCaptcha(voicedir/path/to/voices) image ImageCaptcha(…

Linux的环境搭建

目录 第一步:购买腾讯云轻量级云服务器 Step1:打开腾讯云 ​编辑 Step2:登录腾讯云并完成认证 Step3:选择服务器类型 Step4:选择服务器配置 第二部:下载XShell Step1:打开XShell Step2…

亚马逊云科技云从业者考证自习室招生啦!

今天小李哥安利的是亚马逊云科技国内社区User Group(UG)的最新线上活动,云从业者考证自习室(图1)。该活动将由亚马逊云科技社区技术大牛、考证大牛们,帮助大家在一个月内陪伴式学习、保姆级教学、提供免费备考课程,帮助大家在短短一个月内稳稳…

tensorflow.js 如何从 public 路径加载人脸特征点检测模型

系列文章目录 如何在前端项目中使用opencv.js | opencv.js入门如何使用tensorflow.js实现面部特征点检测tensorflow.js 如何从 public 路径加载人脸特征点检测模型tensorflow.js 如何使用opencv.js通过面部特征点估算脸部姿态并绘制示意图tensorflow.js 使用 opencv.js 将人脸…

ArcGIS Pro中的3D建模

在本文中,我讲述了我最近一直在探索的在 ArcGIS Pro 中设计 3D 模型的过程。 我的目标是尽可能避免与其他软件交互(即使是专门用于 3D 建模的软件),并利用 Pro 可以提供的可能性。 这个短暂的旅程分为三个不同的阶段:准备、组装和照明。 我们必须使用一些布局可能性以及一…

想走?可以!先买票--迭代器模式

1.1 乘车买票,不管你是谁! 售票员检查谁没有买票,把车厢里的人都遍历一遍。 1.2 迭代器模式 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示…

计算机导论——C语言001

前言 学习一门语言不是要记住所有这些函数,而是要懂得在哪里找到解决问题的答案 学习英语不是要记住所有单词,而是要懂得查字典(因为这样就可以理解单词,并会用单词造句子了) 以下侧重于了解输出(side eff…

Day16_学点儿JavaEE_实践_基于IDEA2023的简易JavaWeb项目、Tomcat输出乱码解决

0 JavaWeb项目目录 └──JavaWeb├──resources│ └──db.properties├──src│ └──com.sdust.web│ ├──servlet│ │ └──StudentServlet│ ├──pojo│ │ └──Student│ └──util│ └──JDBCUtil├──web│ ├──st…

STM32存储左右互搏 SDIO总线读写SD/MicroSD/TF卡

STM32存储左右互搏 SDIO总线读写SD/MicroSD/TF卡 SD/MicroSD/TF卡是基于FLASH的一种常见非易失存储单元,由接口协议电路和FLASH构成。市面上由不同尺寸和不同容量的卡,手机领域用的TF卡实际就是MicroSD卡,尺寸比SD卡小,而电路和协…

Acrobat Pro DC 2023 for mac直装激活版 pdf编辑处理工具

Acrobat Pro DC 2023 for Mac是一款功能强大的PDF编辑器,为用户提供了全面且高效的PDF处理体验。 软件下载:Acrobat Pro DC 2023 for mac直装激活版下载 首先,它支持用户从现有文档创建PDF,或者将其他文件格式如图片、网页等轻松转…

win11wifi总掉线怎么办,win11连接wifi频繁掉线

很多网友纷纷用上了win11系统,但是由于对win11系统的不熟悉,因此常常在使用的过程中遇到很多问题。几天前,有网友反馈,系统自从升级win11以后,电脑连接wifi上网时,总是会掉线。一般出现此问题,可能是网络没有播报或开启了无线网卡节能模式导致的。那么,win11wifi总掉线…

【Linux】开始了解重定向

送给大家一句话: 人真正的名字是:欲望。所以你得知道,消灭恐惧最有效的办法,就是消灭欲望。 – 史铁生 《我与地坛》 开始了解重定向 1 前言2 重定向与缓冲区2.1 文件描述符分配规则2.2 重定向的现象2.3 重定向的理解2.4 缓冲区…

Chatgpt掘金之旅—有爱AI商业实战篇|在线课程业务|(十五)

演示站点: https://ai.uaai.cn 对话模块 官方论坛: www.jingyuai.com 京娱AI 一、AI技术创业在线课程业务有哪些机会? 人工智能(AI)技术作为当今科技创新的前沿领域,为创业者提供了广阔的机会和挑战。随着…

前端vue2中的excel导出功能-file-saver,xlsx,xlsx-style的使用

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 今天遇到了一个技术点.前端的excel的纯导出功能,不和后端交互,只用前端导出数据 整体架构流程 vue2 element-ui 技术名词解释 在网上看了很多帖子,最后我选择了xlsx , file-saver , xlsx-style 这个三个插件完成…

开课通知 | 5月六西格玛绿带培训火热招生

尊敬的各位学员: 天行健管理咨询将于近期开展六西格玛绿带公开课,旨在为广大企业和个人提供专业的六西格玛绿带培训,帮助大家掌握六西格玛绿带的核心知识和技能,提升工作效率和质量。现将相关事宜通知如下: 一、培训时…

第十三届蓝桥杯省赛大学B组编程题(c++)

D.刷题统计 二分(AC): 注意:二分时右边界 right 的确定 #include<iostream> using namespace std; long long a,b,n; bool check(long long x){long long tx/7;x%7;long long temp0;if(x<5) tempx*a;else temp5*a(x-5)*b;long long cntt*(5*a2*b)temp;return cnt&g…

第十一届蓝桥杯大赛第二场省赛试题 CC++ 研究生组-七段码

#include<iostream> using namespace std; const int N 10, M 7; int e[N][N] {0}, f[N], open[N];//e[i][j]表示i和j之间是否连通&#xff1b;f[i]表示结点i的父节点&#xff1b;open[i] 1表示结点i打开&#xff0c;0表示关闭 long long ans 0;int find(int x){if(…

网络原理(应用层、传输层)

文章目录 一、应用层1.1 自定义协议1.2 通用协议XMLJSONprotobuf 1.3 DNS 域名解析系统 二、传输层2.1 UDP协议2.2 TCP协议协议端格式及解析可靠性机制确认应答超时重传连接管理&#xff08;三次握手&#xff0c;四次挥手&#xff09;流量控制拥塞控制 效率机制滑动窗口延迟应答…

Anzo Capital 荣膺2024年最值得信赖经纪商大奖

Anzo Capital 表示&#xff1a;“自Anzo Capital品牌诞生起&#xff0c;始终坚持以客户为中心&#xff0c;不断提升产品力和品牌力&#xff0c;致力于成为世界上最值得信赖和推荐的经纪商。而从2015年成立至今&#xff0c;已经服务全球40多个国家&#xff0c;超过34.8万个客户…