一年前,我看着科迪奇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服务器的指纹位于合法服务器的后面。