一例Phorpiex僵尸网络样本分析

news2024/9/25 3:17:01

本文主要分析Phorpiex僵尸网络的一个变种,该样本通常NSIS打包,能够检测虚拟机和沙箱。病毒本体伪装为一个文件夹,通过U盘来传播,会隐藏系统中各盘符根目录下的文件夹,创建同名的lnk文件,诱导用户点击。

病毒母体的基本信息

Verified: Unsigned
Link date: 18:01 2007/3/3
Description: VirtualDub
Product: VirtualDub
Prod version: 1.7.1.8
File version: 1.7.1.8
MachineType: 32-bit
MD5: F685FB7685858965E678BF9D2613139B
SHA1: B68D82B400C324EED667E9B8FEE73DB6590E89CB

感染后的症状

系统各盘根目录下的文件夹被隐藏(C盘也不例外),有同名的快捷方式,存在Documents.exe、Movies.exe、Pictures.exe、Porn.exe、Private.exe、Secret.exe,且大小和时间相同

分析过程

IDA打开,通过样本的字符串可以判定这个样本是通过NSIS打包的,NSIS(Nullsoft Scriptable Install System)是一个专门用于创建软件安装程序的框架。

使用7zip对样本进行解压,里面有5个文件,文件的时间为2015年,mp3、aac、jpeg格式都损坏的

│  05 - Exchange.mp3
│  g3OdSbf__bigger.jpeg
│  nbkajklzajajaweajgka.aac
│  wh_home_engage_hub.jpg
└─$PLUGINSDIR
        hoggeries.dll

$PLUGINSDIR目录下有一个dll,名为hoggeries.dll,这可能是作者自定义的插件
使用IDA打开后,查看它的导出函数,里面有一个名为Goliardery的函数比较可疑,Tootle函数为和DllMain函数无实质内容,DllEntryPoint入口并无可疑之处

这个Goliardery使用IDA完全看不懂,应该加了混沌,下面使用OD调一下这个dll

动态调试

使用OD打开病毒母体
要在加载hoggeries.dll时断下,要改调试设置
点击OD选项->调试设置->事件,勾选中断于新模块

一直F9,直到加载到hoggeries.dll

OD选项->调试设置->事件中,去掉勾选中断于新模块
右键动态库,点击跟随入口,在hoggeries.dll入口下方设置断点

F9断下在DllEntryPoint函数中,Ctrl+F9执行到ret,F8返回上一层,再Ctrl+F9,F8直到返回用户空间(用户空间的地址是0x0040开头的)

单步到 call Goliardery 处, F7进入

在CreateFileA、CreateFileW、ReadFile、WriteFile处下断点,F9,程序断在CreateFileW处,读取一个mp3文件 C:\Users\ADMINI~1\AppData\Local\Temp\05 - Exchange.mp3

又读取了nbkajklzajajaweajgka.aac

mp3内容的缓冲区地址为0x2FD8A8,大小0xD6C9

读取完成后,推测会执行解密操作,在0x2FD8A8处设置内存写入断点,这段区域有一处大的循环(是解密操作),在循环出口处设置断点,F9执行到这里,已经解密出一个完整的pe(成功了一大半)

使用pchunter将这个PE dump出来,深入分析这个PE

分析内存中解密的PE

这个PE的基本信息如下

Verified:    Unsigned
Link date:    7:09 2015/7/9
MachineType:    32-bit
MD5:    DB2E3F0E50DC37FE6824C4E2352E40D4
SHA1:    A8B23428CB0CC1BD0FF33E8BAFFFC2AA7BA81FBE
pdb path,C:\Users\x\Desktop\Home\Code\Trik v1.9\Release\Trik.pdb

使用IDA打开
首先判断当前的执行环境,如果是在虚拟机或沙箱中,退出

  • 如果系统中存在模块SbieDll.dll,证明沙盒在运行
  • DetectVM_401000这个函数主要是检测虚拟机,使用CreateFileA打开第一个磁盘的设备对象,通过DeviceIoControl来查询磁盘信息(控制码为0x2D1400u),若硬盘的厂家中含有关键字qemu、virtual、vmware的话,说明当前环境是大概率是虚拟机,退出
CreateFileA("\\\\.\\PhysicalDrive0", 0, 3u, 0, 3u, 0, 0)
DeviceIoControl(hDevice, 0x2D1400u, InBuffer, 0xCu, &OutBuffer, 0x80u, &BytesReturned, 0) 

创建名为t6的互斥量,防双开

在这三个系统目录之一(%windir、%%userprofile%、%temp%)中,创建目录5050452834348584929485695758050,将自身拷贝到这个目录下,命名为winmgr.exe

%windir%\M-5050452834348584929485695758050\winmgr.exe
%userprofile%\M-5050452834348584929485695758050\winmgr.exe
%temp%\M-5050452834348584929485695758050\winmgr.exe


一、若当前程序名不是winmgr.exe,执行下面的逻辑

  1. 删除文件[selfFileName]:Zone.Identifier

  2. 将目录M-5050452834348584929485695758050和文件winmgr.exe的属性修改为SYSTEM|HIDE|READONLY

  3. 设置防火墙策略,添加表项

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplications\List 
valuename:C:\Windows\M-5050452834348584929485695758050\winmgr.exe
value:C:\Windows\M-5050452834348584929485695758050\winmgr.exe:*:Enabled:Microsoft Windows Manager

  1. 设置开机启动项,添加下面的表项,启动项名为Microsoft Windows Manager
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\
valuename:Microsoft Windows Manager
value:"C:\Windows\M-5050452834348584929485695758050\winmgr.exe"

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\
valuename:Microsoft Windows Manager
value:"C:\Windows\M-5050452834348584929485695758050\winmgr.exe"

  1. 使用CreateProcess启动病毒本体,退出

二、若当前程序为winmgr.exe,创建两个线程

  1. 线程 Thead_403890

遍历系统中所有盘符
把自身拷贝为X:\505050.exe并隐藏,遍历根目录,隐藏所有目录,创建同名为lnk文件,打开lnk文件执行病毒副本
在各盘根目录创建下面这些文件,exe全为病毒副本,autorun.inf的作用是启动windrv.exe,windrv.exe被隐藏了

Private.exe
Movies.exe
Pictures.exe
Secret.exe
Porn.exe
Documents.exe
Music.exe
autorun.inf 隐藏 autorrun启动windrv.exe
windrv.exe 隐藏

  1. 线程 Thead_402D30

会尝试连接下面这些域名,向CC发送主机信息,接收后台的命令并执行

trkhaus.ru:5050
srv1000.ru:5050
srv1100.ru:5050
srv1200.ru:5050
srv1300.ru:5050
srv1400.ru:5050

主要行为有

会检测%appdata%\winmgr.txt是否存在
会自毁 清启动项
会下载文件保存为%temp%\[10个随机字符].exe执行
使用服务api.wipmania.com确定受感染计算机的位置

其它行为没分析清楚

IOC

网络
trkhaus.ru:5050
srv1000.ru:5050
srv1100.ru:5050
srv1200.ru:5050
srv1300.ru:5050
srv1400.ru:5050
api.wipmania.com


文件
打包的文件
hoggeries.dll 加载器
05 - Exchange.mp3
g3OdSbf__bigger.jpeg
nbkajklzajajaweajgka.aac
wh_home_engage_hub.jpg
病毒母体
%windir%\M-5050452834348584929485695758050\winmgr.exe
%userprofile%\M-5050452834348584929485695758050\winmgr.exe
%temp%\M-5050452834348584929485695758050\winmgr.exe
X:\505050.exe
X:\Private.exe
X:\Movies.exe
X:\Pictures.exe
X:\Secret.exe
X:\Porn.exe
X:\Documents.exe
X:\Music.exe
X:\autorun.inf autorrun启动windrv.exe
X:\windrv.exe
%appdata%\winmgr.txt
%temp%\[10个随机字符].exe

HASH
f685fb7685858965e678bf9d2613139b 母体
hoggeries.dll 27cc35d2bcc5788f73cb450d218b0c51
05 - Exchange.mp3 36bb8c984c8030e3713191f2f97df3d2
g3OdSbf__bigger.jpeg 538beab4da03162ce3159a9333e94b13
nbkajklzajajaweajgka.aac af955d372d2486da62bb86ede55894e0
wh_home_engage_hub.jpg 935039f3a7dff570091d3263c3ac8e18
内存解密加载的PE DB2E3F0E50DC37FE6824C4E2352E40D4

互斥量
t6

pdb 
C:\Users\x\Desktop\Home\Code\Trik v1.9\Release\Trik.pdb

注册表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplications\List 
valuename:C:\Windows\M-5050452834348584929485695758050\winmgr.exe
value:C:\Windows\M-5050452834348584929485695758050\winmgr.exe:*:Enabled:Microsoft Windows Manager
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\
valuename:Microsoft Windows Manager
value:"C:\Windows\M-5050452834348584929485695758050\winmgr.exe"
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\
valuename:Microsoft Windows Manager
value:"C:\Windows\M-5050452834348584929485695758050\winmgr.exe"

专杀工具

根据病毒的分析结果,写了一个bat版的专杀工具

@ECHO off
taskkill /f /t /fi "imagename eq winmgr.exe"
attrib -h -s /D /S  %windir%\M-5050452834348584929485695758050
del  /F /Q %windir%\M-5050452834348584929485695758050
rmdir /S /Q %windir%\M-5050452834348584929485695758050
attrib -h -s /D /S  %userprofile%\M-5050452834348584929485695758050
del  /F /Q %userprofile%\M-5050452834348584929485695758050
rmdir /S /Q %userprofile%\M-5050452834348584929485695758050
attrib -h -s /D /S  %temp%\M-5050452834348584929485695758050
del  /F /Q %temp%\M-5050452834348584929485695758050
rmdir /S /Q %temp%\M-5050452834348584929485695758050
reg delete HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run /v "Microsoft Windows Manager" /f
reg delete HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run /v "Microsoft Windows Manager" /f
reg delete HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplications\List /v "C:\Windows\M-5050452834348584929485695758050\winmgr.exe" /f
reg delete HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplications\List /v "C:\Windows\M-5050452834348584929485695758050\winmgr.exe" /f

FOR %%c in (Z,Y,X,W,V,U,T,S,R,Q,P,O,N,M,L,K,J,I,H,G,F,E,D,C) do (
    IF exist %%c: (
	attrib %%c:\* -h -s
        attrib %%c:\* -h -s /s /d
	del /Q /F %%c:\*.lnk
        del /Q /F %%c:\windrv.exe 
        del /Q /F %%c:\505040.exe
        del /Q /F %%c:\autorun.inf
        del /Q /F %%c:\Documents.exe
        del /Q /F %%c:\Movies.exe
        del /Q /F %%c:\Music.exe
        del /Q /F %%c:\Pictures.exe
        del /Q /F %%c:\Porn.exe
        del /Q /F %%c:\Private.exe
        del /Q /F %%c:\Secret.exe
	rd /s /q %%c:\$Recycle.Bin
    )
)

IDA如何分析COM接口

windows上使用COM接口可以调用系统或第三方的模块要实现特定的功能,如操作office文档或创建快捷方式等
本例中,该样本使用COM接口来创建恶意的lnk文件

COM接口的使用一般需要下面的API

CLSIDFromProgID //从程序名获取CLSID
CoInitialize(NULL)// 初始化COM接口
HRESULT _stdcall  CoCreateInstance(REFCLSID rclsid, //待创建组件的CLSID 一个GUID 
        LPUNKNOWN pUnkOuter,//用于聚合组件
        DWORD dwClsContext,//限定所创建的组件的执行上下文
        REFIID riid,//iid为组件上待使用的接口的iid,一个GUID
        LPVOID * ppv); //接口指针,是一个类,有好多方法
CoUninitialize 清理

IDA要分析CoCreateInstance的参数,要行根据rclsid和riid确定ppv的类型,然后要给ppv指定正确的类型,才能显示出其方法名,进而分析其功能
rclsid和riid是GUID格式,首先要把二进制转成字符串格式
可借助IDC脚本

#include <idc.idc>
static MakeGuid(ea)
{
    auto string = sprintf("{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}\n", Dword(ea), Word(ea+4), Word(ea+6), Byte(ea+8), Byte(ea+9),Byte(ea+10), Byte(ea+11), Byte(ea+12), Byte(ea+13), Byte(ea+14), Byte(ea+15));
    
	msg(string);
    return 0;
}

将上面的IDC保存为文件, 在File->Script File中执行
在IDA下面的命令窗口切换到IDC,调用MakeGuid函数打印出rclsid和riid的GUID格式

根据riid在注册表中搜索相关的模块

[HKEY_CLASSES_ROOT\Wow6432Node\Interface\{000214EE-0000-0000-C000-000000000046}]
@="IShellLinkA"

给ppv变量设置类型为IShellLinkA*,其方法被识别出来了

IShellLinkA是一个类,其属性和方法可以在MSDN上查到

参考资料

  • 分析NSIS打包的恶意软件思路和实例

  • Phorpiex僵尸网络技术分析(一) - FreeBuf网络安全行业门户

  • Phorpiex僵尸网络技术分析(二) - FreeBuf网络安全行业门户

  • STORAGE_DEVICE_DESCRIPTOR 方式获取硬盘序列号

  • Threat Roundup for August 2 to August 9 (talosintelligence.com)

  • NSIS 从入门到编写完整打包脚本——持续更新 - 掘金 (juejin.cn)

  • How to find CLSID from CoCreateInstance in IDA?

  • COM开发指南(1)—COM技术概述

  • 使用IShellLink 创建快捷方式

  • 逆向分析使用COM组件对象模型的代码

  • Ollydbg调试多线程程序

  • 镇守最后一道防线:三种逃逸沙盒技术分析

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TF卡/U盘系统备份

Jetson nano使用TF卡/U盘来装载系统&#xff0c;如果TF卡/U盘丢失或者损坏&#xff0c;那么Jetson nano上的数据都会丢失&#xff0c;所以一定要备份好TF卡/U盘。这篇文章可以帮你备份你的Jetson nano系统。主要内容为备份TF卡/U盘&#xff0c;制作Jetson nano系统镜像以及在需…

Java——《面试题——ElasticSearch篇》

目录 1、谈谈分词与倒排索引的原理 2、说说分段存储的思想 3、谈谈你对段合并的策略思想的认识 4、了解文本相似度 TF-IDF吗 5、能说说ElasticSearch 写索引的逻辑吗&#xff1f; 6、熟悉ElasticSearch 集群中搜索数据的过程吗&#xff1f; 7、了解ElasticSearch 深翻页的…

vsCode 创建新java项目(创建一个新java项目测试方法)

VSCODE环境配置-java之项目建立&#xff0c;非常适合刚准备使用VSCODE开发JAVA的人_vscode创建java项目_rainmenzhao的博客-CSDN博客 1 按 ctrl shift p 2 输入 create Java project 3 选 no build tools 4 选择 一个文件夹 存放 之后要 新建的文件 5 选完之后 自动返回主页…

获得Jolt 大奖的《持续交付》作者David Farley又一新作《现代软件工程》

戴维 法利 (David Farley) 是持续交付的先驱、思想领袖&#xff0c; 也是持续交付、 DevOps、 测试驱动开发和软件开发领域的专家。 从现代计算的早期开始&#xff0c;戴维曾担任过程序员、软件工程师、系统架构师和成功团 队的领导者&#xff0c;他掌握了计算机和软件开发的基…

ES基本操作(postman篇)

关系型数据库 -> Databases(库) -> Tables(表) -> Rows(行) -> Columns(列)。Elasticsearch -> Indeces(索引) -> Types(类型) -> Documents(文档) -> Fields(属性)。 需要注意的是&#xff1a;type的概念在es7.0之后已经删除了。 以下仅做刚入门学习…

矩阵对角线元素的和:揭秘数学之美,解密矩阵的隐秘密码

本篇博客会讲解力扣“1572. 矩阵对角线元素的和”的解题思路&#xff0c;这是题目链接。 本题的思路是&#xff1a;主对角线的下标满足i j&#xff0c;副对角线的下标满足i j size - 1&#xff0c;故只需要使用i遍历每一行&#xff0c;把(i, i)和(i, size - i - 1)的元素求和…

探索 Spring Boot 项目全过程

文章目录 &#x1f387;前言1.Spring Boot 所需环境2.Spring Boot 项目创建2.1 安装插件2.2 创建新项目2.3 项目属性配置2.4添加依赖2.4 修改项目名称2.5 添加框架支持2.6 目录介绍 3.判断Spring Boot 创建项目是否成功&#x1f386;总结 &#x1f387;前言 在 Java 这个圈子&…

1. Except

文章目录 Except前言Except 语法Except 使用举例结合其他关键字使用EXCEPT with BETWEEN operatorExcept with IN operatorEXCEPT with LIKE operator 文章参考 Except 前言 SQL中&#xff0c;EXCEPT 操作用于检索存在于第一个表中的唯一记录&#xff0c;而不是两个表中共有的…

python3GUI--网速内存小工具By:PyQt5(附源码)

文章目录 一&#xff0e;前言二&#xff0e;预览1.主界面2.动图演示3.内存详细信息查看4.自定义界面 三&#xff0e;源代码1.tool_god_GUI.py2.tool_god_ui.py3.engine.py4.CWidgets.py 四&#xff0e;总结五&#xff0e;参考 一&#xff0e;前言 本次使用PyQt5进行开发一款网…

(并查集) 685. 冗余连接 II ——【Leetcode每日一题】

并查集基础 并查集&#xff08;Union-find Sets&#xff09;是一种非常精巧而实用的数据结构&#xff0c;它主要用于处理一些不相交集合的合并问题。一些常见的用途有求连通子图、求最小生成树的Kruskal算法和求最近公共祖先&#xff08;LCA&#xff09;等。 并查集的基本操作主…

MySQL 分库分表实战之ShardingSpare

文章目录 概要一、安装二、配置2.1、 通用配置2.2、 分片配置2.3、读写分离 三、演练3.1、读写分离3.2、分库分表3.3、分库分表读写分离 4、总结 概要 市面上MySQL分库分表中间件还是很多的&#xff0c;主要分为两大类&#xff1a;应用层依赖类中间件&#xff08;比如sharding…

【学习周报】

最近看过的几篇论文里&#xff0c;VALOR和InstructBLIP模型使用了cross-attention机制&#xff0c;以这两篇论文为基础着重学习cross-attention相关的代码和思路。 学习内容&#xff1a; cross-attention机制学习lstm与transformer 学习时间&#xff1a; 6.26 ~ 7.1 学习笔记…

Linux--重定向:> >> <

输出重定向&#xff1a;> a.如果目标文件不存在&#xff0c;则创建文件。反之 b.本来应该显示到显示器的内容&#xff0c;被写入到了文件中 示例&#xff1a; 追加重定向: >> 示例&#xff1a; 输入重定向&#xff1a;< 本来应该从键盘中读取的内容&#xff0c;变…

分布式锁的实现方案(免费gpt4分享)

1.1基于数据库 有两个方案&#xff1a;依赖数据库排他锁以及表主键的唯一。 依赖数据库排他锁&#xff1a; 在查询语句后面增加for update&#xff0c;数据库会在查询过程中给数据库表增加排他锁 (注意&#xff1a; InnoDB 引擎在加锁的时候&#xff0c;只有通过索引进行检索…

SpringBoot扩展机制

启动生命周期 一.Spring boot初始化器扩展 package com.lx.conmon.extend.intializer;import org.springframework.context.ApplicationContextInitializer; import org.springframework.context.ConfigurableApplicationContext;/*** Spring boot初始化器扩展* author liu we…

AIPRM for ChatGPT 提示词模板扩展工具实践

&#xff08;1&#xff09;基本介绍 AIPRM for ChatGPT是一个Chrome浏览器扩展程序&#xff0c;基于Chromium内核开发的浏览器都可以使用该扩展&#xff0c;比如微软的Edge浏览器等。 在AIPRM的帮助下&#xff0c;我们可以在ChatGPT中一键使用各种专门为网站SEO、SaaS、营销、…

超详细,Python自动化测试 Allure报告参数化动态生成标题(实战)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 默认 allure 报告…

ubuntu安装openssh

Ubuntu安装openssh之后&#xff0c;然后在客户端安装winscp,然后就可以很方便的传输文件了 sudo apt install openssh-server sudo service ssh status sudo service ssh start sudo service ssh restart

自然语言处理从入门到应用——预训练模型总览:预训练模型存在的问题

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 相关文章&#xff1a; 预训练模型总览&#xff1a;从宏观视角了解预训练模型 预训练模型总览&#xff1a;词嵌入的两大范式 预训练模型总览&#xff1a;两大任务类型 预训练模型总览&#xff1a;预训练模型的拓展 …

DOM模型

文章目录 DOM模型获取DOM对象常用方法通过元素ID获取DOM对象通过元素标签名获取DOM对象通过元素的class属性获取DOM对象通过元素的name属性获取DOM对象通过CSS选择器获取所有DOM对象通过CSS选择器获取第一个DOM对象 获取DOM对象时机操作DOM属性直接通过属性名修改属性使用getAt…