ManasR21/Malware-Analysis-SikoMode

GitHub: ManasR21/Malware-Analysis-SikoMode

针对 Nim 编译的信息窃取器 SikoMode 的完整恶意软件分析报告,详细记录了从静态分析、动态沙箱测试到逆向工程的完整分析流程与 IOC 指标。

Stars: 0 | Forks: 0

# 恶意软件实战分析与研判 恶意软件分析报告 SikoMode (unknown.exe) 恶意软件 2026年3月 | Manas R | v1.0 ## 📋 目录 - [执行摘要](#executive-summary) - [技术摘要](#high-level-technical-summary) - [威胁指标 (IOCs)](#indicators-of-compromise-iocs) ## 执行摘要 SHA256 哈希 3ACA2A08CF296F1845D6171958EF0FFD1C8BDFC3E48BDD34A605CB1F7468213E SikoMode(分析样本为 unknown.exe)是一个由 Nim 编译的信息窃取器和释放器恶意软件样本,编译于 2022 年 1 月 8 日。该样本针对 Windows x64 系统,执行凭据/数据窃取,将嵌入式 Payload 释放到磁盘,并使用基于网络的开关来控制执行。启动后,它会检查一个远程 URL 以确定是否继续进行恶意活动。如果开关处于非激活状态,它会将嵌入式资源解包到 `C:\Users\Public\passwrd.txt`,通过读取、编码和 RC4 加密窃取文件数据,然后通过 HTTP 将数据渗透到远程 C2 服务器。完成主要任务后,它执行一个涉及文件句柄操作的规避/清理例程。该二进制文件仅导入三个 DLL(KERNEL32、msvcrt、USER32),并使用混淆、碎片化的 URL 构建技术来规避静态检测。 YARA 签名规则附在附录 A 中。恶意软件样本和哈希值已提交给 VirusTotal 以供社区进一步分析。 ## 高层级技术摘要 SikoMode 是一个单阶段 Nim 编译的 Windows PE (x64) 可执行文件。执行后它会: (1) 通过从硬编码字符串片段构建 URL 并向 `update.ec12-4-109-278-3-ubuntu20-04.local` 发起 HTTP GET / 请求来执行开关检查; (2) 如果开关没有停止执行,则将嵌入式资源释放到 `C:\Users\Public\passwrd.txt`; (3) 读取、Base64 编码、RC4 加密被盗数据,并通过重复的 `GET /feed?post=` 请求将其 HTTP GET 到 C2 服务器 `cdn.altimiter.local`; (4) 执行清理例程,操纵文件系统句柄以实现持久化或规避。 该恶意软件利用 Nim 的运行时(垃圾回收、引用计数、异常处理)作为背景噪音,以此混淆核心恶意逻辑。 ## 恶意软件构成 SikoMode 由单个可执行组件组成: unknown.exe — 主要恶意二进制文件。一个使用 Nim 编译的 64 位 Windows PE(MinGW 链接器,编译时间 Sat Jan 8 21:29:18 2022 UTC)。 文件大小:559,499 字节。 SHA256: 3aca2a08cf296f1845d6171958ef0ffd1c8bdfc3e48bdd34a605cb1f7468213e。 MD5: b9497ffb7e9c6f49823b95851ec874e3。 该二进制文件包含所有恶意功能:开关检查、资源解包、数据窃取、RC4 加密、HTTP 渗透和文件句柄规避。它导入了跨三个库的 80 个函数:KERNEL32.dll (27)、msvcrt.dll (52)、USER32.dll (1)。 清单将该二进制文件标识为使用 winim Nim 包编译,确认其为 Nim 编译的 PE。 ## 基础静态分析 ### PEStudio ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/3637afd836154106.png) ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/fdc19084d7154113.png) ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/3a0f2c505f154121.png) ### 导入分析 隐式导入了三个 DLL:KERNEL32.dll(27 个函数)、msvcrt.dll(52 个函数)和 USER32.dll(1 个函数)。来自 KERNEL32 的关键可疑导入包括:GetCurrentProcess、GetCurrentProcessId、GetCurrentThreadId、RtlAddFunctionTable、VirtualAlloc、VirtualProtect、VirtualQuery、DeleteCriticalSection 和 EnterCriticalSection。这些表明存在内存操作和潜在的运行时代码注入准备。 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/7f34bc3573154130.png) ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/601ec47e6e154138.png) ### CAPA 行为能力 检测到的值得注意的能力包括:软件断点检测(反调试)、Luhn 算法校验和验证、Base64 编码、MurmurHash3 非加密哈希、读写文件(各 4 次匹配)、分配 RWX 内存、进程终止、运行时动态链接(3 次匹配)、PE 节枚举(4 次匹配)和 PE 头解析。 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/d8612c7d01154145.png) FLOSS 字符串分析 FLOSS 提取了 13,594 个静态 ASCII 字符串(239,768 个字符),其中包含 1 个栈字符串且没有解码字符串。大多数有趣的字符串以 !GUID_、!IID_、CLSID_ 和 PPM_ 开头——这与 Nim 用于 Windows COM/API 接口的 winim 绑定一致。嵌入式 XML 清单引用了 winim 和 Microsoft.Windows.Common-Controls 6.0.0.0,证实了 Nim 编译器的来源。不存在明文 URL,因为 C2 域是在运行时由碎片化的字符串部分构建的,以规避静态检测。 ## 基础动态分析 动态分析是在沙箱环境中使用 Process Monitor、TCPView、Wireshark 和 INetSim 进行的。 ### 进程行为 执行后,unknown.exe (PID 500) 立即开始进行注册表查询,主要针对 HKLM\System\CurrentControlSet\Control\Session Manager 及相关键值。它还执行对 `C:\Users\Manas\Desktop` 的 CreateFile 操作,并加载 kernel32.dll 和 KernelBase.dll。当 INetSim 停止时,该进程在顺序端口(49850–49888+)上生成数百个针对 10.0.0.5(REMnux VM)的 TCP 断开连接事件,随后读取 `C:\Windows\System32\en-US\KernelBase.dll.mui`。 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/4a8473e0f7154154.png) ### 网络行为 unknown.exe (PID 500) 在端口 80 上建立大量到 10.0.0.5(INetSim 主机)的出站 TCP 连接,全部在顺序本地端口(49719–49742+)上进入 Close Wait 状态。这与重复的、节流的 HTTP POST 请求一致——与静态分析期间在 stealStuff 函数中观察到的 sleep() 循环相匹配。 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/e0f6856370154203.png) ### 网络流量 执行后,恶意软件以对 `update.ec12-4-109-278-3-ubuntu20-04.local` 的 DNS 查询开始网络活动,INetSim 将其解析为 10.0.0.5。然后恶意软件向 10.0.0.5:80 发起 TCP 连接,并发出初始 `GET / HTTP/1.1` 请求(第 7 帧),Host 头设置为 `update.ec12-4-109-278-3-ubuntu20-04.local`,User-Agent 为 Mozilla/5.0。INetSim 在第 11 帧中以 HTTP/1.1 200 OK (text/html) 响应。这个对第一个域的初始 GET 请求代表了开关检查——成功的响应信号指示恶意软件继续执行其主要 Payload。 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/1efb3c0885154210.png) 开关检查成功后,恶意软件对 `cdn.altimiter.local` 执行 DNS 查询(事务 ID 0x4d1f,标准查询,类型 A,类 IN),在第 20 帧中可见,INetSim 将其解析为 10.0.0.5。随后是对 `cdn.altimiter.local` 的第二次 DNS 查询(事务 ID 0x2e1d,第 31 帧)。 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/7515b1b871154218.png) 然后恶意软件建立到 10.0.0.5:80 的 TCP 连接,并开始发出 `GET /feed?post= HTTP` 请求(第 25 帧及随后的第 36 帧起)。请求 URI 包含一个长编码字符串(例如,A8E437E8F0367592569A2870BBDD382A1DFBB01A15FC23999D7788C33502AD9256E481B402BDC6BC25167B...),代表正在渗透到 C2 的 RC4 加密、Base64 编码的被盗文件数据。这些渗透请求中的 User-Agent 是 `Nim httpclient/1.6.2`,证实了用于 C2 通信的是 Nim 编译的 HTTP 客户端。每个请求都收到来自 INetSim 的 HTTP/1.1 200 OK (text/html) 响应。 这个渗透循环不断重复,在请求周期之间观察到 TCP RST 包,并为每个后续请求建立新的 SYN/ACK 连接。该模式与高级静态分析期间在 `stealStuff_sikomode_130()` 中识别出的 `sleep(1000ms)` 循环一致,证实了对 C2 服务器的节流、周期性数据传输。 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/9553377eb0154225.png) ## 高级静态分析 高级静态分析是使用带有 jsdec 反编译插件的 Cutter 进行的。 ### 执行流程 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/bbbb4fcff1154232.png) ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/656c824bad154239.png) ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/2b61268b65154248.png) 二进制文件的入口点调用 WinMain,它立即跳转到 NimMain。NimMain 调用 PreMain 进行 Nim 运行时设置,然后通过 `lea rax, NimMainInner` 加载 NimMainInner 的地址,将其存储在局部变量中,调用 nimGC_setStackBottom 进行垃圾回收器初始化,并通过 `call rax` 间接调用 NimMainInner。 NimMainInner 是一个单一的无条件 `jmp NimMainModule`,使得 NimMainModule 成为程序主要逻辑的真正起点。 NimMainModule NimMainModule 是核心调度器。它执行四次 nimRegisterGlobalMarker() 调用用于 Nim GC 初始化,检索用户主目录,检索当前工作目录,然后调用 checkKillSwitchURL_sikomode_25()。如果开关返回 false (0),它立即调用 houdini_sikomode_51() 并退出。如果开关处于激活状态(非零),它设置一个 setjmp 异常处理程序并调用 unpackResources_sikomode_17(),随后是 stealStuff_sikomode_130(),最后在 finally 块中调用 houdini_sikomode_51()。 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/5c7a58891a154255.png) #### checkKillSwitchURL_sikomode_25() 此函数通过构建一个 Nim 序列 来构建 URL,该序列填充了从二进制数据常量 (data_0041eXXX) 复制的许多硬编码字符串片段。它使用 eqStrings() 遍历序列以将每个片段与目标字符串进行比较,跳过一个特定元素并使用 appendString() 连接其余元素。结果组装的字符串通过 winstrConverterStringToLPWSTR() 转换为宽字符串,并用于 Windows 网络 API 调用(与 WinHttpOpen/WinHttpConnect 或等效项一致的间接函数指针调用)。这种 URL 碎片化技术避免了静态扫描器对明文 URL 的检测。如果远程服务器成功响应(开关激活 = 继续),函数返回 true,否则返回 false(开关未激活 = 中止)。 #### unpackResources_sikomode_17() 此函数将嵌入式 Payload 释放到磁盘。它从二进制文件中嵌入的资源数据创建一个内存流,复制输出文件名字符串(`C:\Users\Public\passwrd.txt`,在地址 0x0041e2e0 处确认),以写入模式打开指向该路径的文件流,将内存流内容写入文件,然后关闭流。异常处理包装了写入操作。这是一个经典的嵌入式 Payload 释放器模式。 #### stealStuff_sikomode_130() 此函数实现数据渗透管道。它读取主目录路径(早期从 nosgetHomeDir() 存储),通过追加目标文件名构建文件路径,使用 readFile_systemZio_557() 读取文件内容,使用 encode_pureZbase5452_42() 对数据进行 Base64 编码,并通过 RC4 加密函数 (toRC4_OOZ...nimble...826752_51()) 处理编码数据。然后使用 getDefaultSSL_pureZhttpclient_244()、newHttpHeaders_pureZhttpcore_114() 和 newHttpClient_pureZhttpclient_742() 创建 HTTP 客户端。加密数据通过 getContent_sikomode_194() (HTTP POST) 传输到 C2 URL,随后是 1000ms 的 sleep (nossleep())。此循环对所有收集的数据项继续执行。 #### houdini_sikomode_51() 此函数执行文件系统句柄操作以进行规避或持久化。它分配一个对象和一个宽字符串路径缓冲区,将缓冲区清零,然后通过间接函数调用(可能是 GetModuleFileNameW 或类似的 Windows API)检索系统路径。它打开指向该路径的句柄 (ds_open_handle_sikomode_53,重命名句柄 (ds_rename_handle_sikomode_56()),关闭它,重新打开它,存入新句柄 (ds_deposite_handle_sikomode_88()),并执行最终验证检查。如果任何步骤失败,它调用 exit(1)。此行为与文件替换、持久化副本准备或以不同名称伪装二进制文件一致。 ## 威胁指标 完整的 IOC 列表可在附录中找到。 ### 网络指标 恶意软件在两个执行阶段与两个不同的域进行通信。第一次联系是通过端口 80 上的 HTTP 向 `update.ec12-4-109-278-3-ubuntu20-04.local` 发起 `GET /` 请求,User-Agent 为 Mozilla/5.0——这充当开关检查。来自该域的成功 HTTP 200 响应允许执行继续进行主要 Payload。 开关检查成功后,恶意软件通过端口 80 上的 HTTP 转向其 C2 域 `cdn.altimiter.local`,发出重复的 `GET /feed?post=` 请求,其中包含 RC4 加密、Base64 编码的被盗文件数据。这些渗透请求的 User-Agent 是 `Nim httpclient/1.6.2`。 | 指标 | 类型 | 描述 | |-----------|------|-------------| | update.ec12-4-109-278-3-ubuntu20-04.local | 域名 | 开关检查域名 | | cdn.altimiter.local | 域名 | C2 渗透域名 | | GET / | HTTP 请求 | 开关信标 | | GET /feed?post= | HTTP 请求 | 数据渗透请求 | | Nim httpclient/1.6.2 | User-Agent | C2 通信 User-Agent | | Mozilla/5.0 | User-Agent | 开关检查 User-Agent | | 端口 80 | 网络 | 所有 C2 通信均通过 HTTP | ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/723d2b2910154302.png) ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/aa5d7ec874154312.png) ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/31349b7eef154320.png) ### 主机指标 恶意软件将一个文件释放到 `C:\Users\Public\passwrd.txt`,其中包含从二进制文件数据段提取的嵌入式 Payload。执行进程以 GUI 子系统 PE 形式作为 unknown.exe 运行。启动期间对 Session Manager 和 Terminal Server 键进行注册表查询(可能是环境侦察)。该进程在顺序临时端口上生成大量短暂的出站 TCP 连接。 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/8585d3e4d9154327.png) ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/9c85744c22154333.png) ## 规则与签名 附录 A 中包含全套 YARA 规则。 关键可检测字符串和签名包括:嵌入在 PE 中的 winim 清单名称;Nim 运行时函数名称(nimRegisterGlobalMarker、nimGC_setStackBottom、NimMainModule);硬编码输出路径 `C:\Users\Public\passwrd.txt`;User-Agent Nim httpclient;以及 64 位 MinGW 编译的 GUI 可执行文件的 PE 特征。 ### 哈希值 | 算法 | 值 | |-----------|-------| | MD5 | b9497ffb7e9c6f49823b95851ec874e3 | | SHA1 | 6c8f50040545d8cd9af4b51564de654266e592e3 | | SHA256 | 3aca2a08cf296f1845d6171958ef0ffd1c8bdfc3e48bdd34a605cb1f7468213e | ### 附录 A. Yara 规则 ``` rule SikoMode_Nim_InfoStealer { meta: date = "13-03-2026" author = "Manas Richhawal" description = "Detects SikoMode Nim-compiled infostealer" strings: $nim_manifest = "winim" ascii $nim_gc = "nimGC_setStackBottom" ascii $nim_module = "NimMainModule" ascii $c2_ua = "Nim httpclient" ascii $drop_path = "passwrd.txt" ascii wide $steal_fn = "stealStuff" ascii $houdini_fn = "houdini" ascii $PE_magic = "MZ" condition: // Fill out the conditions that must be met to identify the binary $PE_magic at 0 and uint16(0) == 0x5A4D and filesize < 700KB and 4 of ($nim_manifest, $nim_gc, $nim_module, $c2_ua, $drop_path, $steal_fn, $houdini_fn) } ``` ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/9775ee3c2b154341.png) B. 回调 URL | URL | 用途 | |-----|---------| | hxxp://update.ec12-4-109-278-3-ubuntu20-04.local/ | 开关检查 — 初始信标,GET / 请求 | | hxxp://cdn.altimiter.local/feed?post= | C2 渗透 — 重复的 GET /feed?post= 请求,包含 RC4 加密、Base64 编码的被盗数据 |
标签:ATT&CK框架, Base64编码, C2通信, DAST, DNS信息、DNS暴力破解, DNS 反向解析, DNS 解析, dropper, Gophish, HTTP工具, IOCs, IP 地址批量处理, Kill Switch, Nim语言, RC4加密, Windows恶意软件, YARA规则, 云安全监控, 云资产清单, 代码混淆, 信息窃取器, 勒索软件分析, 合规性检查, 威胁情报, 子域名变形, 安全报告, 开发者工具, 恶意软件分析, 数据渗出, 文件处理, 网络信息收集, 网络安全, 网络安全审计, 网络通信, 逆向工程, 隐私保护, 静态分析