一. 简介
利用构造的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 识别过程
-
对指定服务器进行TCP通信连接,构建10个特定的client hello进行发送,并接收10个server hello的返回
-
对每个server hello包中的返回内容进行提取,包括 verision_type,cipher suite,extension相关位值等对提取内容进行哈希运算,生成62个字符的指纹。
-
前30个字符由服务器为10个客户端 hello 发送的每个客户端选择的密码和 TLS 版本组成。“000”表示服务器拒绝与客户端 hello 协商。其余32个字符是服务器发送的累积扩展的截断的 SHA256散列。
-
比对已知恶意家族JARM指纹,若完全匹配则认定其为该家族恶意服务器
-
若前30个字符完全匹配,但后32个字符不同,则这该服务器可能与该家族具有非常相似的配置,接受相同的版本和密码,但由于部分扩展名不同导致指纹不完全相同
-
若无法与已知恶意家族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地址。
四. Cobalt Strike C2分布趋势
星河学院通过研究发现国内308 个Cobalt Strike生成的C2,全球有5928个,如下为国内的区域分布比例图。
五. 参考链接
来源:freebuf.com 2021-06-22 14:42:18 by: 星河工业安全
请登录后发表评论
注册