基於TLS的主動檢測識別惡意伺服器

星河Salaxy發表於2021-06-22

一.   簡介


利用構造的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地址。

圖片


四.   Cobalt Strike C2分佈趨勢

星河學院透過研究發現國內308 個Cobalt Strike生成的C2,全球有5928個,如下為國內的區域分佈比例圖。


圖片



五.   參考連結


https://engineering.salesforce.com/easily-identify-malicious-servers-on-the-internet-with-jarm-e095edac525a


相關文章