0x00 网络测绘角度下的C&C威胁分析
在日渐激烈的网络对抗中,伴随***手段的更新换代,远控为了满足需求随之发展,种类繁多,常见的远控有:Cobalt Strike、Metasploit Framework、Empire、PoshC2、Pupy等。
在常见的远控中,Cobalt Strike是熟知的***测试利器,功能十分强大,可扩展性强,从前期载荷生成、诱饵捆绑、钓鱼***到载荷植入目标成功后的持续控制、后***阶段都可以很好支持,几乎覆盖***链的各个阶段。并且支持多种上线方式,以及多种丰富的配置可以达到非常好的隐蔽效果。CS teamserver团队服务器又可以使众多CS客户端连上它,以进行团队协作。Metasploit Framework能够提供众多漏洞利用,这两款远控功能强大且容易上手,因此也是广大redteamer的必备武器。
C&C作为全球范围红队的基础设施,长期部署在世界各个角落,如何通过探测C&C服务器成为了一个问题。传统的流量规则只能对小范围的C2设施进行识别,有一定的局限性。对于全网的资产识别,通过网络测绘来进行扫描识别C2会不会更全面呢?
0x01 网络空间测绘
互联网在高速发展的今天,传统的网络安全大多面向局部安全未曾考虑整体全网环境下的网络安全,这样也造成了近年来***者频繁面向全网展开***。数亿的物联网设备安全问题被大范围的暴露出来。同时***者在面向全网***既包括传统***方式WEB***,缓冲区溢出***,数据库***。同时也涵盖新型的针对物联网设备和工控设备层面的***也越发频繁。Sumap网络空间测绘拥有快速资产探测能力,以及资产监测能力,资产漏洞管理能力形成了一套基于全球网络空间资产安全整体安全解决方案。
0x02 具体分析
Metasploit
1.Metasploit 框架简介
在日常***测试中,Metasploit是常用的一款工具安全漏洞利用工具,它拥有最新的公开漏洞利用、后***利用模块等,它集成了各个平台常见的漏洞,拥有各种操作系统的shellcode,同时可以作为C&C维持目标权限。Meterpreter作为meatasploit框架的一个扩展模块,meterpreter是metasploit框架中的一个扩展模块,作为溢出成功以后的***载荷使用,***载荷在溢出***成功以后给我们返回一个控制通道,使用它作为***载荷能够获得目标系统的一个meterpretershell的链接。meterpretershell作为***模块有很多有用的功能,比如添加一个用户、隐藏一些东西、打开shell、得到用户密码、上传下载远程主机的文件、运行cmd.exe、捕捉屏幕、得到远程控制权、捕获按键信息、清除应用程序、显示远程主机的系统信息、显示远程机器的网络接口和IP地址等信息。
2.msf特征分析
开始对msf的reverse_http进行分析,在msf的metasploit-framework/lib/msf/core/handler/reverse_http.rb#83中
OptString.new('HttpUnknownRequestResponse',
'The returned HTML response body when the handler receives a request that is not from a payload',
default: '<html><body><h1>It works!</h1></body></html>'
)
通过分析特征,发现模仿的是apache的初始页面
但实际测试,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年中的关键要素。
来源:oschina
链接:https://my.oschina.net/u/4310671/blog/4816105