当前位置:网站首页 > 网络安全培训 > 正文

Sumap网络测绘探测C&C远控在野情况分析

freebuffreebuf 2020-12-18 336 0

本文来源:纯良地瓜

0x00 网络测绘角度下的Chtml>body>h1>It works!/h1>/body>/html>'
)

通过分析特征,发现模仿的是apache的初始页面

https://raw.githubusercontent.com/apache/httpd/5f32ea94af5f1e7ea68d6fca58f0ac2478cc18c5/docs/docroot/index.html

但实际测试,apache的初始页面请求为:

HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 45

而msf的apche页面为:

HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 44

两者相比较Content-Length并不相同,相比apache原始页面多了\n。

在sumap平台中可以直接搜索

tags:"MSF http"

全球分布:

截止发稿前探测到msf reverse_http(s)全网有682台,同时sumap支持reverse_tcp连接查询。

直接搜索:

tags:"Metasploit Rex httpd"

探测到全网有8,048台

Cobalt Strike 

1.Cobalt Strike Payload Staging

在Cobalt Strike的攻击框架中,payload是执行攻击的内容,payload拆分为:payload stage和payload stager。stager是一个小程序,通常是手工优化的汇编指令,用于下载stage、把它注入内存中运行。stage则就是包含了很多功能的代码块,用于接受和执行我们控制端的任务并返回结果。stager通过各种方式(如http、dns、tcp等)下载stage并注入内存运行这个过程称为Payload Staging。Cobalt strike也提供了传统的方式,打包成一个完整的exe、dll,上传运行与teamserver回连通讯,这种是Payload Stageless,生成Stageless的客户端可以在Attack->Package->Windows Executeable(s)下生成。

​ 通过官网的文档,因为如果开启了 staging(分阶段),任何人都能连到你的服务器上,请求一个payload、并分析它的内容,从而可以从你的 payload 配置中获取信息。

所以可以通过构造,传入满足要求的uri就能够下载cs的beacon,在

`/src/main/java/cloudstrike/WebServer.java`

中可以看到uri的check规则。

所以只需要构造根据4位的数字和大小字母组合满足求和取模等于92(93)即可

import random

def generate_checksum(input):
trial = ""
total = 0
while total != input:
total = 0
trial = ''.join(random.sample("abcdefghhijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890",4))
for i in range(4):
total = (total + ord(trial[i:i+1]))% 256
return trial

if __name__ == '__main__':
uri_x86 = generate_checksum(92)
uri_x64 = generate_checksum(93)
print(uri_x64)
print(uri_x86)

这里的逻辑做了一个判断,直接访问返回一个404 Not Found但是带有满足条件的校验码访问会直接下载beacon的stage文件。

拿到stage文件后,需要异或解密,这里我参考https://sysopfb.github.io/malware,/cobaltstrike/2020/03/24/beacon-in-azure.html改写了一下python3的脚本

import sys
import struct

filename = sys.argv[1]
data = open(filename, 'rb').read()
t = bytearray(data[0x45:])
(a,b) = struct.unpack_from('II', t)
key = a
t2 = t[8:]
out = ""
with open(filename+'_decoded', 'wb') as f:
for i in range(len(t2)//4):
temp = struct.unpack_from('I', t2[i*4:])[0]
temp ^= key
out = struct.pack('I', temp)
print(out)
key ^= temp
f.write(out)

得到解密后的文件然后再使用网上公开的脚本对配置文件进行解析https://github.com/Sentinel-One/CobaltStrikeParser

在这个脚本里cs3.x异或的0x69,cs4.x异或的0x2e,查看我手中的4.1版本

cs3.x版本和cs4.x版本的异或字节不一致,但是都可以解密出来,说明解密算法并没有改变,那么势必可以通过改变密钥来bypass获取配置信息,其实这种情况只需要爆破256位就能解决了(for x in range(1, 0xff)),对于扫stager我更建议是在不需要stager的时候在Manage Web Server里kill掉stager和stager64,需要的时候直接在listeners里edit。

Sumap根据此特征已经集成到搜索语法中,可以通过搜索tags:"CS Beacon"直接搜索到相关数据。

中国地区相关数据不参与统计

2.Cobalt Strike server

​ 空格bug存在与Cobalt Strike发布3.13之前的版本,Cobalt Strike的 "Team Server" Web服务器是基于NanoHTTPD,这是一个用Java编写的开源Web服务器。但是,此Web服务器无意中在其所有HTTP响应中返回了多余的空白符,可以通过这个空格进行识别

snort规则:/^HTTP/1.1 200 OK \r\nContent-Type: [^\r\n]{0,100}\r\nDate: [^\r\n]{0,100} GMT\r\n(Content-Length: \d+\r\n)\r\n,老版本的Cobalt Strike网络服务器的所有HTTP响应中都有空格,通过snort规则可以抛砖引玉,既然所有HTTP响应都有空格,那么可以通过访问Cobalt Strike的web端口,检测返回头就能识别Cobalt Strike了。

Cobalt Strike在3.13版本的时候修复了“异常空格bug”的同时也修改了默认返回的http头,将date头提前了,稍作修改为3.13及以后版本的特征。

Sumap根据此特征已经集成到搜索语法中,可以通过搜索tags:"CS teamserver"直接搜索到相关数据。

全球数据分布

3. IOC威胁情报验证

取出在Sumap平台搜索的ip数据,在安恒威胁情报中心平台验证

msf

Cobalt Strike

通过Sumap网络空间测绘平台C&C数据验证,在威胁情报平台也有相应的情报和标记。

0x03 趋势分析

对全网的C&C数据进行分析,境外C&C数据占大多数。根据数据时间戳分析,近几年Cobalt Strike使用率越来越高,主要分布在美国和俄罗斯地区。


0x04 总结

近年来网络安全事件频发,APT攻击持续高发,通过追踪攻击组织,结合Sumap网络空间测绘探测C&C的数据,推测未来的C&C设施将会更加多变、隐匿性更强。 ​ 随着5G的推广,更多的设备被接入互联网,在万物互联的时代,APT攻击不再局限于传统网络,未来物联网等新兴设备可能陆续成为APT组织攻击的目标。

同时在ipv6的覆盖下针对ipv6的形式的攻击也在以不同的方式和维度上展开,结合机器学习和深度学习模型方式的攻击也不断出现。面对新形势的攻击

我们只有更加深入的布局整体全球网络空间,才能有更好的联动防御机制。同时对网络安全人才的培养体系化建设都将会成为2021年中的关键要素。

转载请注明来自网盾网络安全培训,本文标题:《Sumap网络测绘探测C&C远控在野情况分析》

标签:网络空间测绘

关于我

欢迎关注微信公众号

关于我们

网络安全培训,黑客培训,渗透培训,ctf,攻防

标签列表