基于JARM指纹的C2识别

JARM的工作原理是主动向目标TLS服务器发送10个特殊构造的TLS Client Hello包,以在TLS服务器中提取独特的响应,并捕获TLS Server Hello响应的特定属性,然后以特定的方式对聚合的TLS服务器响应进行散列,产生JARM指纹。

因为Client Hello中的参数不同,最终返回的Server Hello都是不相同的,通过发送特殊构造的Client Hello握手包,以获取与之对应的特殊Server Hello响应,以此作为依据,最终产生TLS Server指纹。

JARM以不同的顺序发送不同的TLS版本、密码和扩展,以收集唯一的响应。

  • 服务器是否支持TLS 1.3协议?
  • 它会用1.2个密码来协商TLS 1.3吗?
  • 如果我们将密码从弱到强排序,它会选择哪个密码?

这些是JARM本质上要求服务器提取最独特响应的异常问题类型。然后对这10个响应进行哈希处理以产生JARM指纹。

TLS Client Hello请求流量

基于JARM指纹Wireshark Filter:

ssl.handshake.type == 1

TLS Server Hello响应

多数情况下JARM指纹都是用以佐证TLS服务并进行标记,从而关联服务。当然,最理想的状态下,我们能够通过JARM指纹唯一的指向目标C2设施,但是实际来讲JARM指纹对于不同服务器部署的C2设施并不是唯一的,有很多因素都会对其扫描的结果造成影响。所以我们并不能作为行为测绘的指纹直接关联到某个C2的服务,仅能作为佐证的效果。

在开发RedGuard的过程中我发现,因为本身来讲RG的作用就是进行前置流量的控制,从而实现后端C2服务的隐匿性,在蓝队对流量交互进行分析的时候,针对RG的JARM指纹扫描结果在多数差异的环境下都是相同的,也就是说,在分析的过程中,这个指纹是可以起到佐证攻击设施的作用,从而破坏我们想要预期达到的隐匿性。

基础设施的更改(例如,IP 地址、托管平台)不会影响JARM签名,这使得常规的方式难以对其进行规避。

影响服务端JARM指纹的因素:

  • 操作系统及版本
  • 使用的库及版本
  • 调用库的顺序
  • 自定义配置
  • ........

也就是说,如果我们想要影响最终针对服务端的JARM指纹扫描结果,我们就要从上面的几个因素入手去做,目前的解决方案共有两种:

一、重播TLS Server Hello响应

二、更改TLS Server配置CipherSuites加密套件

第一种方式也就是在监听特定客户端 Hello 的 TCP 服务器,然后在C2服务器上捕获这些特定的Client Hello(每个请求都有重复的字节,使用这些字节来识别每个特定的Client Hello握手包),稳定的对这10个特殊构造的Client Hello的响应进行重播,从而实现改变真实JARM指纹的效果。

if bytes.Contains(request, [] byte { 0x00, 0x8c, 0x1a, 0x1a, 0x00, 0x16, 0x00, 0x33, 0x00, 0x67, 0xc0, 0x9e, 0xc0, 0xa2, 0x00, 0x9e, 0x00, 0x39 , 0x , 0xc0, 0x9f, 0xc0, 0xa3, 0x00, 0x9f, 0x00, 0x45, 0x00, 0xbe, 0x00, 0x88, 0x00, 0xc4, 0x00, 0x9a, ... ...
}) { fmt.Println("replaying: tls12Forward ") conn.Write([] byte { 0x16, 0x03, 0x03, 0x00, 0x5a, 0x02, 0x00, 0x00, 0x56, 0x03, 0x03, 0x17, 0xa6, 0xa3, 0x84, 0x80, 0x0b, 3,d, 0xbb, 0x 0xe9, 0x3e, 0x92, 0x65, 0x9a, 0x68, 0x7d, 0x70, 0xda, 0x00, 0xe9, 0x7c, ... ... })
}

在对所有十个不同的请求实施回复后,可以伪造完整的签名。

****这是一种比较懒惰的办法了,最终的效果确实能够对JARM扫描的结果进行混淆,但是我认为太过单调,需要注意的是ServerHello的原始响应他不能进行任意修改,因为在工具开发中流量的正常交互才是最重要的,任意修改上述一些影响 JARM扫描的因素可能导致无法正常通信的问题出现。也就是说他所重播的这些ServerHello数据包是需要监听某个正常的服务的JARM扫描响应来实现的,并不适合我们应用到工具去实现混淆的效果,我们需要一种简单而又稳定的方法。

当然,这种方式还有一种延伸,就是首先随机获取正常站点的列表进行JARM指纹扫描,从而获取其ServerHello响应然后,直接作为识别到JARM扫描握手包的响应包进行重播,这样是最合理的一种方式。

**第二种也就是阿姆斯特丹2021 HITB议题《COMMSEC: JARM Randomizer: Evading JARM Fingerprinting》中提到的一种方式,作者在github上对衍生工具 JARM Randomizer进行了部分开源,通过阅读它的代码不难看出,其实与我最初想到的方式非常相像,最终影响JARM的因素使用的是CipherSuites加密套件(加密算法套件 CipherSuite 由各类基础加密算法组成)

实现代码:

如上图,针对反向代理的TLS Config CipherSuites的设置,我提供了15种不同的加密套件方式,1/2/3....个不同组合的加密套件最终得到的JARM指纹结果都不是相同的**(加密套件过多会导致无法正常通信的玄学问题)**,这里我对这15种加密套件进行随机组合的方式,1-2个随机取值进行组合这些CipherSuites,大概会有几十种不同的随机JARM指纹产生。

最终效果如下:

可以看到,最终应用在工具的效果就是在每次启动RG的时候,它的JARM指纹都不是相同的,会自动根据上述的混淆方式产生一个全新的JARM指纹,可以防止空间测绘的扫描,以此关联公网上RG基础设施的部署情况。目前市面上多数测绘平台都会进行集成并默认进行JARM指纹的扫描,可能也是因为其扫描效率快,扫描资源成本低、同时又对C2设施有着一定的佐证指向性的原因吧。

RedGuard是一款C2基础设施前置流量控制设施,可以规避Blue Teams、AVs、EDRs检查。

基于JARM指纹的C2识别相关推荐

  1. 【指纹识别】基于matlab指纹图像细节特征提取 【含Matlab源码 227期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[指纹识别]基于matlab指纹图像细节特征提取 [含Matlab源码 227期] (https://download.csdn.net/d ...

  2. 基于单片机指纹识别管理门禁密码锁系统设计(毕设课设资料)

    摘要: 基于51单片机指纹管理门禁系统设计 本系统由STC89C52单片机电路+指纹模块传感器电路+LCD1602液晶显示电路+继电器电路+按键电路+电源电路组成. 1.通过指纹传感器检测采集指纹. ...

  3. 指纹系统服务器,利用JARM指纹进行TLS服务端标记

    原标题:利用JARM指纹进行TLS服务端标记 0x01 背景 对网络空间测绘数据的分析和发掘,是Quake团队一直以来的核心目标. 十几年来Web应用的飞速发展使其毋庸置疑的成为了互联网的主流.为了弥 ...

  4. 基于javaGUI的文档识别工具制作

    基于javaGUI的文档识别工具制作 对于某些文本,其中富含了一些标志,需要去排除,以及去获得段落字数,以下是我个人写的一个比较简单的文档识别工具,含导入文件.导出文件以及一个简单的识别功能. 1.功 ...

  5. 基于椭圆拟合的环岛识别方法

    00摘要 环岛元素是智能车比赛中较难处理的元素之一.比赛要求智能车能检测到环岛并从入口驶入,在绕行约 270°后驶出环岛,其中,能否高响应.高鲁棒性地检测环岛是后续进出环岛等步骤的基础.本文根据计算机 ...

  6. 基于 OpenCV + Python 的人脸识别上课签到系统

    目录 前言 安装第三方库 第一步:采集人脸图像 (1)修改姓名学号 (2)运行capture_face.py (3)采集人脸图像 (4)查看采集到的人脸图像 第二步:训练模型 第三步:识别签到 (1) ...

  7. 基于STM32指纹密码锁设计

    基于STM32指纹密码锁设计 程序.仿真.原文 本设计主要由stm32f103rct6单片机.AS608指纹模块.LCD1602显示屏.AT24C02存储模块.继电器和指示灯组成,该指纹密码锁是以st ...

  8. 基于深度学习的人脸识别考勤系统设计

    写在前面:本文是本科阶段参加的第三次科创比赛项目,当时只有一个人做,能力精力有限,很多预期的功能都没有实现.最后的可展示程度不高,没有走得很远.本文是申报书部分,可以为除此参加科创的同学提供思路,可以 ...

  9. 基于Android系统的人脸识别签到软件

    项目名称:   基于Android系统的人脸识别签到软件 目  录 1 项目介绍..... 1 1.1 项目背景.... 1 1.2 产品特点.... 2 1.3 可行性分析.... 2 1.3.1 ...

  10. matlab识别中国象棋棋盘,一种基于图像处理的中国象棋识别系统及方法与流程

    本发明涉及计算机图像识别技术,具体涉及一种基于图像处理的中国象棋识别系统及方法. 背景技术: 数字图像处理技术在机器感知领域应用十分广泛,主要目标是通过一些图像处理技术从图像中提取信息,该信息类似于人 ...

最新文章

  1. golang error信息 转 字符串 x := fmt.Sprintf(“%s“, err)
  2. 【PAT乙级】1070 结绳 (25 分)
  3. 2009年浙江大学计算机及软件工程研究生机试真题
  4. iOS并行程序开发- GCD NSOperationQueue(1)
  5. 一个牛逼的项目开发过程是怎样的?
  6. 百度NLP模块使用手册——深度直击最新进展
  7. window 显示本机信息的脚本 bat
  8. 你必须了解的基础的 Linux 网络命令
  9. RDKit化学式 分子式搜索
  10. django配置邮件服务器,python – 使用Bluehost电子邮件服务器的Django电子邮件配置...
  11. 最新:2021年度泰晤士世界大学学科排名公布
  12. PMC 任命Edward Sharp为首席战略及技术官
  13. wifi控制基于STM32与NFC的万能红外遥控器—毕业设计(2)
  14. GPS 入门 7 —— GPS定位、LSB基站定位、wifi定位区别
  15. ZooKeeper官方Java例子解读
  16. fabric java sdk解析channel.queryTransactionByID(txId)方法的返回值
  17. 易语言打开摄像头_api摄像头拍照源代码 调用API函数创建视频设备
  18. 深耕物料处理赛道,宏工科技助力涂料绿色自动化生产
  19. 白光模块?彩光模块?
  20. 服务号模板消息群发二代服务器,服务号模板消息群发

热门文章

  1. 怎么用计算机磁盘管理分区,在win 7中如何用磁盘管理为硬盘分区呢?
  2. docker中的localhost
  3. 苹果MFi认证协处理器(MFI337S3959)公钥证书分析
  4. flutter图片识别_想在 flutter 中提取图片颜色?试试 color_thief_flutter
  5. 开关电源设计实例之Boost 篇
  6. 今日头条 推荐机制实现
  7. BZOJ.4340.[BJOI2015]隐身术(后缀数组 搜索)
  8. Web前端期末大作业-农产品一体化平台网页设计(HTML+CSS+JS)
  9. 上海大学社会学考研能用计算机吗,上海大学
  10. 如何下载网页中的360全景图片(720全景图片)到本地?