prernaprusty/RAT.Unknown.exe-malware-analysis
GitHub: prernaprusty/RAT.Unknown.exe-malware-analysis
该项目是一份针对Nim编译的RAT恶意软件样本的详细分析报告,涵盖静态逆向分析和动态沙箱行为捕获的完整流程。
Stars: 0 | Forks: 0
# RAT.Unknown.exe-恶意软件分析
## 静态分析
### 所需工具
* HxD 十六进制编辑器
* HashMyFiles
* Strings / FLOSS
* Virustotal
* PEview / PEStudio
* IDA pro 反汇编器
### 过程
* **文件识别与哈希计算:**
* **识别文件类型:** 首先,我们使用 flareVM 中的 HxD 等十六进制编辑器来识别文件类型。我们会检查文件开头被称为 magic bytes 的几个字节,以此来判断文件类型,而不是仅仅依赖文件扩展名。(.exe 文件为 4D 5A)。

* **哈希计算:** 使用 HashMyFiles 计算文件的加密哈希值,以唯一标识该恶意软件样本。

* 将恶意软件样本上传到 **Virustotal**,与已知的恶意软件签名进行匹配,以查明该可执行文件是否为恶意软件。

* **字符串提取:** 使用 'strings' 等命令或 bintext 从可执行文件中提取字符串,即可读的信息字符。
* **混淆字符串搜索:** 使用 **FLOSS** 检测恶意软件内的混淆字符串,并尽可能寻找反混淆后的字符串。

* **元数据和头部分析:** 使用 PEStudio 或 PEview 等工具分析头部并查找导入/导出函数。

* PEStudio 分析显示:
* `.text` 区段熵值较高(6.257),表明可能存在混淆或经过优化的编译代码
* 巨大的虚拟内存分配差异,与 Nim runtime 行为一致
* 存在虚拟化的区段特征
* **签名和规则扫描:** 通过反汇编恶意软件并进行逆向工程,扫描已知的恶意软件家族、威胁行为者技术和恶意特征。

### 发现
* 识别出基于 Nim 的恶意软件结构
* 观察到用于出站通信的 HTTP client 创建过程
* 识别出与开机自启持久化相关的函数
* 检测到 URI/路径构建行为
* 定位到可疑的命令/服务器相关函数
## 动态分析
### 所需工具
* FlareVM(包含动态分析所需的所有工具)
* FakeNet-NG
* Wireshark
* Procmon
* 命令提示符 (ipconfig / ping)
### 环境设置
要对已知的恶意软件样本进行动态分析,需要配置一个安全且隔离的环境,以便在不影响宿主系统的情况下高效研究恶意软件的行为。
### 过程
* 网络行为:FakeNet-NG
* 使用 FakeNet-NG 拦截并模拟网络响应,阻止恶意软件与真实基础设施通信,同时捕获所有尝试发送的流量。
* C2 Beaconing:执行后,RAT.Unknown.exe(PID 1956 和 4924)立即开始针对域名 `serv1.ec2-102-95-13-2-ubuntu.local` 发送 DNS 查询。 * 在 FakeNet 解析了该域名后,恶意软件与端口 80 建立了 TCP 连接并发出了 HTTP GET 请求。这种先进行 DNS 解析随后建立 TCP 连接的过程在紧凑的循环中不断重复,这是典型的 C2 beaconing 行为。
* 域名本身(`ec2-102-95-13-2-ubuntu.local`)以 AWS EC2 格式编码了一个 IP 地址,表明最初的 C2 服务器托管在 Amazon EC2 实例上。

* 观察到的 HTTP 请求:在两个 PID 中捕获到了两个不同的 HTTP GET 请求:
* `GET /msdcorelib.exe HTTP/1.1`- 携带 User-Agent `Nim httpclient/1.0.6` 发送:此请求试图获取一个名为 `msdcorelib.exe` 的文件。该文件名经过刻意伪装,使其看起来像是一个合法的 Microsoft 核心库,这是一种常见的伪装技术。`Connection: Keep-Alive` 头表明恶意软件希望保持持久连接,可能是为了完成整个文件的下载。这证实了一种**分阶段 payload 投递**模型——初始的 dropper 被设计为在运行时拉取并执行第二阶段的 payload。
* `GET / HTTP/1.1`- 携带 User-Agent `intrt explr` 发送:这使用了 user-agent 字符串 `intrt explr` 来冒充 Internet Explorer 流量,从而将恶意活动与正常浏览行为混在一起。
* `Nim httpclient/1.0.6` 的出现直接证实了该二进制文件是由 Nim 编译的,这与 PEStudio 和 FLOSS 的静态分析结果相印证。
* 后台操作系统噪音:FakeNet 还捕获到了 `svchost.exe`(PID 7132)向 `fs.microsoft.com` 发出的请求,以及 `explorer.exe`(PID 4736)向端口 443 发出的请求。此外还存在发往 `api.msn.com` 的 Windows News Feed GET 请求。这些都是后台 Windows 进程,不归属于该恶意软件。

* Procmon 分析:进程监视器 被过滤为 `RAT.Unknown.exe`(PID 1800),以隔离基于主机的活动。
* Payload 下载与文件落地:在与 C2 服务器(FakeNet 地址 `192.0.2.123`)建立 TCP 通信后,恶意软件以 380、4000 和 2108 字节的交替块大小接收数据——这与通过 `GET /msdcorelib.exe` 请求下载分阶段 payload 的行为一致。
* 在 TCP 接收事件发生后,恶意软件立即执行了 `CreateFile` → 连续 `WriteFile` → `CloseFile` 的序列,将接收到的数据写入:`C:\Users\\AppData\Roaming\Microsoft\...`
* 写入是以 4KB 块进行的(偏移量 0, 4096, 8192, 12288 ... 28672),证实了恶意软件在下载 payload 的同时将其流式传输到磁盘上。`AppData\Roaming` 路径不需要管理员权限,使其成为落地 payload 常用的暂存位置。
* 多个线程(ID 为 5396, 5304, 7492, 6368, 4072)在文件写入完成后立即退出,表明下载和落地逻辑在专门的 worker threads 中运行,并在完成后进行了清理。

* 注册表项访问:恶意软件以 `All Access` 权限打开了后台活动调节器 注册表项:`HKLM\System\CurrentControlSet\Services\bam\State\UserSettings\S-1-5-21-4069915776-821494963-233`
* BAM 记录了每个用户对应二进制文件的最后执行时间。请求 `All Access`(而不是只读)表明,恶意软件可能试图篡改或删除自身的执行记录作为一种反取证措施,而不仅仅是读取它。

* 使用 Wireshark 进行 ICMP 连通性探测:恶意软件以轮询方式向四个不同的 IP 发送 ICMP echo 请求,这些 IP 均为公共 DNS 解析器,并且对所有的请求都显示“未找到响应”,也就是说没有对应的回复数据包,因为我们是在一个隔离的 host-only VM 中进行分析。以下列出了接收请求数据包的 IP(Google 和 Cloudflare DNS):
* `1.0.0.1` (Cloudflare DNS)
* `8.8.8.8` (Google DNS)
* `8.8.4.4` (Google DNS)
* `1.1.1.1` (Cloudflare DNS)
* 在隔离的分析环境中,所有请求均未得到回应,这与 C2 通信之前的互联网连通性探测或沙箱检测行为一致。

* 加载的感兴趣模块:观察到进程加载了两个重要的 DLL:
* winhttp.dll:此模块提供了用于与 C2 服务器通信并发出在 FakeNet 中观察到的 `GET /msdcorelib.exe` 请求的 HTTP client 功能。

* urlmon.dll:该模块负责处理 URL 解析和文件下载操作,直接支持获取分阶段 payload 的行为。

* 这两个模块带有异常的编译时间戳:分别是 1983 年和 1955 年,这对于构建于 Windows 10 上的软件来说在物理上是不可能的。这是 Nim 编译的二进制文件的已知特征,可用于逃避依赖基于时间戳的启发式检测工具。
### 发现
* 确认了基于 Nim 的 RAT,其通过端口 80 上的 HTTP 进行活跃的 C2 beaconing
* C2 域名 `serv1.ec2-102-95-13-2-ubuntu.local` 指向最初托管在 AWS EC2 上的基础设施
* 分阶段 payload 投递:恶意软件试图从 C2 获取并执行 `msdcorelib.exe`
* User-Agent 伪造:同时使用 `Nim httpclient/1.0.6` 和 `intrt explr` 来伪装流量
* 在 C2 通信前自动向公共 DNS 解析器发起 ICMP 连通性探测
* 关键加载模块 `winhttp.dll` 和 `urlmon.dll` 支持 HTTP 通信和文件下载
* 异常的 DLL 时间戳(1983,1955)与 Nim 编译器特征一致,用于逃避检测
标签:合规性检查