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)。 ![HxD Analysis](https://raw.githubusercontent.com/prernaprusty/RAT.Unknown.exe-malware-analysis/main/Screenshots/HxD.png) * **哈希计算:** 使用 HashMyFiles 计算文件的加密哈希值,以唯一标识该恶意软件样本。 ![Hash Values](https://raw.githubusercontent.com/prernaprusty/RAT.Unknown.exe-malware-analysis/main/Screenshots/HashMyFiles.png) * 将恶意软件样本上传到 **Virustotal**,与已知的恶意软件签名进行匹配,以查明该可执行文件是否为恶意软件。 ![Virustotal](https://raw.githubusercontent.com/prernaprusty/RAT.Unknown.exe-malware-analysis/main/Screenshots/Virustotal.png) * **字符串提取:** 使用 'strings' 等命令或 bintext 从可执行文件中提取字符串,即可读的信息字符。 * **混淆字符串搜索:** 使用 **FLOSS** 检测恶意软件内的混淆字符串,并尽可能寻找反混淆后的字符串。 ![Virustotal](https://raw.githubusercontent.com/prernaprusty/RAT.Unknown.exe-malware-analysis/main/Screenshots/Floss%20filtering%20HTTP%20strings.png) * **元数据和头部分析:** 使用 PEStudio 或 PEview 等工具分析头部并查找导入/导出函数。 ![pestudio analysis](https://raw.githubusercontent.com/prernaprusty/RAT.Unknown.exe-malware-analysis/main/Screenshots/pestudio_analysis.png) * PEStudio 分析显示: * `.text` 区段熵值较高(6.257),表明可能存在混淆或经过优化的编译代码 * 巨大的虚拟内存分配差异,与 Nim runtime 行为一致 * 存在虚拟化的区段特征 * **签名和规则扫描:** 通过反汇编恶意软件并进行逆向工程,扫描已知的恶意软件家族、威胁行为者技术和恶意特征。 ![Disassembly](https://raw.githubusercontent.com/prernaprusty/RAT.Unknown.exe-malware-analysis/main/Screenshots/IDA%20url%20.png) ### 发现 * 识别出基于 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 实例上。 ![FakeNet C2 Beaconing](https://raw.githubusercontent.com/prernaprusty/RAT.Unknown.exe-malware-analysis/main/Screenshots/fakenet.png) * 观察到的 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 进程,不归属于该恶意软件。 ![FakeNet Additional Traffic](https://raw.githubusercontent.com/prernaprusty/RAT.Unknown.exe-malware-analysis/main/Screenshots/fakenet_2.png) * 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 中运行,并在完成后进行了清理。 ![procmon analysis](https://static.pigsec.cn/wp-content/uploads/repos/cas/da/dace01e18725495f72dd200c0422a29a12d669c1237bc6156ad943b2ef943688.png) * 注册表项访问:恶意软件以 `All Access` 权限打开了后台活动调节器 注册表项:`HKLM\System\CurrentControlSet\Services\bam\State\UserSettings\S-1-5-21-4069915776-821494963-233` * BAM 记录了每个用户对应二进制文件的最后执行时间。请求 `All Access`(而不是只读)表明,恶意软件可能试图篡改或删除自身的执行记录作为一种反取证措施,而不仅仅是读取它。 ![registry analysis](https://raw.githubusercontent.com/prernaprusty/RAT.Unknown.exe-malware-analysis/main/Screenshots/RegKey.png) * 使用 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 通信之前的互联网连通性探测或沙箱检测行为一致。 ![Wireshark ICMP](https://raw.githubusercontent.com/prernaprusty/RAT.Unknown.exe-malware-analysis/main/Screenshots/wireshark_capture.png) * 加载的感兴趣模块:观察到进程加载了两个重要的 DLL: * winhttp.dll:此模块提供了用于与 C2 服务器通信并发出在 FakeNet 中观察到的 `GET /msdcorelib.exe` 请求的 HTTP client 功能。 ![winhttp.dll](https://raw.githubusercontent.com/prernaprusty/RAT.Unknown.exe-malware-analysis/main/Screenshots/winhttp.dll.png) * urlmon.dll:该模块负责处理 URL 解析和文件下载操作,直接支持获取分阶段 payload 的行为。 ![urlmon.dll](https://raw.githubusercontent.com/prernaprusty/RAT.Unknown.exe-malware-analysis/main/Screenshots/urlmon.dll.png) * 这两个模块带有异常的编译时间戳:分别是 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 编译器特征一致,用于逃避检测
标签:合规性检查