一. 簡介
利用構造的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個,如下為國內的區域分佈比例圖。
五. 參考連結
https://engineering.salesforce.com/easily-identify-malicious-servers-on-the-internet-with-jarm-e095edac525a