一年前,我看着科迪奇C2是APT和Pentestes等使用的一种后开发工具。
当时,由于以下原因,我能够在互联网上对所有非前置Koadic C2服务器进行指纹识别404页面不匹配,无法使服务器看起来像一个良性的Apache web服务器。
Koadic在过去12个月里没有太多更新,但与此同时Salesforce发布了JARM公司,一种指纹TLS服务器的方法。据Salesforce介绍,它通过以各种方式查询服务器来收集有关以下内容的信息:
- 操作系统
- 操作系统版本
- 使用的库
- 所用库的版本
- 调用库的顺序
- 自定义配置
我想重新访问Koadic,看看JARM是否能够像我的404分析一样或更好地选择C2服务器。
步骤1。获取Koadic的JARM
Koadic C2是用Python编写的,所以我们运行它的操作系统已经对它的JARM签名产生了影响。但我决定运行它在Ubuntu服务器上,因为这可能是一个常见的部署位置。
首先,我启动了一个Koadic服务器,确保它在HTTPS上运行:
#首先为Web服务器创建TLS密钥对
#输入密码并输入其他所有内容的默认值
苏多适配基安装openssl git python3 python3-ipopenssl请求-x509像素 -newkey(新密钥)rsa:4096-天365-键控输出koadic密钥.pem-退出科迪奇陶瓷.pem#克隆Koadic并安装依赖项git克隆https://github.com/zerosum0x0/koadic.git光盘科迪奇管道3安装 -第页要求.txt#启动Koadic并在HTTPS模式下运行服务器:./koadic设置SRVHOST 127.0.0.1号设置SRVPORT 8000公司设置KEYPATH/koadic密钥.pem设置CERTPATH/科迪奇陶瓷.pem运行
然后,我从SalesForce抓起JARM工具,计算出服务器的指纹:
git克隆https://github.com/salesforce/jarm.git光盘震击器python3 jarm.py 127.0.0.1-第页8000
我的结果:
JARM:2ad2ad0002ad2ad00042d42d000000ad9bf51cc3f5a1e29eecb81d0c7b06eb
第2步。搜索JARM指纹
Shodan目前正在寻求实现JARM指纹,但目前尚未实现。
值得庆幸的是,Silascutler公司在推特上最近进行了一次互联网扫描,并从所有监听端口443的主机上生成了JARM指纹。
这里不会看到所有的服务器,但这是一个开始的地方,所以我抓起他们的档案,看了看JARM签名:
#首先获取数据样本以查找格式zcat 202011-443_指纹.json.gz|头 -n个10>示例.json#格式非常简单,每行只有一个事件,所以可以只使用zgrep
#保持数据压缩,以防出现大量点击zgrep公司'“指纹”:“2ad2ad0002ad00042d42d00000ad9bf51cc3f5a1e29eecb81d0c7b06eb”'202011-443_指纹.json.gz|gzip公司 >koadic过滤.json.gz#获取条目数zcat koadic过滤.json.gz|厕所 -我
当我运行最后一行时,它列出了16268次指纹点击😐
那么为什么这个不起作用?
16000次点击数对于所有Koadic服务器来说太高了,所以我调查了为什么会有这么多误报。我从列表的前10个条目中抓取了IP地址:
#获取纯文本中的前10个条目zcat koadic过滤.json.gz|头 -n个10>可能的_koadic.json#jq是一个很好的工具,可以从命令行漂亮地打印JSON
#但如果你没有它,你也可以使用cat/vin/记事本
#把你的眼球拉紧一点
猫possible_koadic.json-第页 “.ip”
然后在Shodan中查找这些IP地址。我们的数据可能有些陈旧,但希望它能给我们一些指示,告诉我们出了什么问题。
Shodan的数据开始描绘出发生了什么:一些IP地址返回的标题如下:
服务器:Python/3.8 aiohttp/3.6.2服务器:Python/3.8 aiohttp/3.7.1服务器:Python/3.8 aiohttp/3.6.1
我们知道Koadic C2是用Python编写的,所以它可能只是运行默认的PythonWeb服务器,这将意味着指纹不是Koadic的,而是Python的。
果不其然,我们可以使用内置的http.服务器
:
从 http.服务器 进口 HTTPS服务器, BaseHTTPRequestHandler
进口 ssl协议
httpd(httpd) = HTTPS服务器((“本地主机”, 8000), BaseHTTPRequestHandler)
httpd(httpd).插座 = ssl协议.包装套接字 (httpd(httpd).插座,
密钥文件=“koadic-key.pem”,
证书文件=“koadic-cert.pem”, 服务器端(_S)=真的)
打印(“统计服务器https://localhost:8000")
httpd(httpd).永远服务()
通过运行该代码,然后运行JARM,我们得到了完全相同的指纹:
JARM:2ad2ad0002ad2ad00042d42d000000ad9bf51cc3f5a1e29eecb81d0c7b06eb
结论
JARM与客户端一起,无疑是TLS指纹套件中一个有趣的补充指纹识别工具日本3。但它不会拾取所有恶意服务器。
除了这个已知的坏服务器使用语言默认值看起来不错的例子之外,更常见的问题是许多C2服务器都支持合法的web服务器反向代理,如Apache HTTPd或NGinx。
这意味着JARM指纹将只匹配合法的外层,而不是C2服务器的指纹位于合法服务器的后面。