基于TLS的主动检测识别恶意服务器 – 作者:星河工业安全

一.   简介

利用构造的HTTPS 的client hello包主动对服务器进行发包,对接收到的server hello包进行提取、哈希运算、生成该服务器指纹,利用已知恶意C2家族的jarms指纹与Alex top 1m的JARM指纹对其进行匹配,检测识别恶意服务器。

二.   检测背景

2.1  TLS安全加密协议原理

在HTTPS协议中,客户端与服务端完成TCP握手后,客户端将会发送client hello包,其中包含客户端支持的TLS版本与加密算法,当服务端成功接收到client hello包,也会发送 server hello包作为响应。随后,服务器和客户端继续通过数字证书验证彼此的真实性,然后双方计算用于用于派生会话密钥的主密钥和主密钥、任何包装消息以及剩余的流量隧道结构。

2.2  JARM指纹识别

由于应用程序或服务器的构建方式的不同,对给定的client Hello 返回的 Server Hello 包会有所不同,不同点包括:

• Operating system 操作系统

• Operating system version 操作系统版本

• Libraries used 使用的库

• Versions of those libraries used 使用的那些库的版本

• The order in which the libraries were called 调用库的顺序

• Custom configuration 自定义配置

通过特殊构造的10个client hello包,可以提取TLS服务器中的唯一响应,通过对数据包指定字段提取并哈希散列运算生成的唯一指纹 即JARM指纹。

同时在恶意服务器的构造上,对于攻击者来说常使用同样的配置在网络上进行搭建恶意服务器,因此通常会产生同样的JARM指纹,因此可以根据JARM指纹检测识别恶意服务器以及归属家族。

2.3  识别过程

  1. 对指定服务器进行TCP通信连接,构建10个特定的client hello进行发送,并接收10个server hello的返回

  2. 对每个server hello包中的返回内容进行提取,包括 verision_type,cipher suite,extension相关位值等对提取内容进行哈希运算,生成62个字符的指纹。

  3. 前30个字符由服务器为10个客户端 hello 发送的每个客户端选择的密码和 TLS 版本组成。“000”表示服务器拒绝与客户端 hello 协商。其余32个字符是服务器发送的累积扩展的截断的 SHA256散列。

  4. 比对已知恶意家族JARM指纹,若完全匹配则认定其为该家族恶意服务器

  5. 若前30个字符完全匹配,但后32个字符不同,则这该服务器可能与该家族具有非常相似的配置,接受相同的版本和密码,但由于部分扩展名不同导致指纹不完全相同

  6. 若无法与已知恶意家族JARM相似度计算匹配成功,则与alex 1m列表JARM进行相似度计算,若均不相似,则认定其为新型恶意服务器

三.   Cobalt Strike C2识别

Cobalt Strike已经成为全球使用最流行的恶意软件之一,APT组织也广泛使用 如:APT41、APT32等,最近受到广泛关注的SolarWinds供应链攻击也与Cobalt Strike相关,利用JARM对已知Cobalt Strike服务器进行主动发包探测,获取Cobalt Strike JARM指纹

07d14d16d21d21d07c42d41d00041d24a458a375eef0c576d23a7bab9a9fb1

利用该指纹可识别一系列Cobalt Strike恶意C2 IP地址。

1624344041_60d185e97a1d219eae2ef.png!small

四.   Cobalt Strike C2分布趋势

星河学院通过研究发现国内308 个Cobalt Strike生成的C2,全球有5928个,如下为国内的区域分布比例图。

1624344085_60d18615de0baca144287.png!small

五.   参考链接

Easily Identify Malicious Servers on the Internet with JARM

来源:freebuf.com 2021-06-22 14:42:18 by: 星河工业安全

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论