由識別CobaltStrike引入JA3

關於識別CobaltStrike特徵

CobaltStrike的客戶端與服務端創建聯繫時,服務端傳給客戶端的SSL默認證書有很明顯的特徵:git

C=EarthST=CyberspaceL=SomewhereO=CobaltStrikeOU=AdvancedPenTestingCN=Major CobaltStrikegithub

而且默認鏈接端口爲50050端口。web


因此能夠以此檢測CobaltStrike算法

  • 鏈接端口50050.安全

  • SSL證書信息:C=EarthST=CyberspaceL=SomewhereO=CobaltStrikeOU=AdvancedPenTestingCN=Major CobaltStrike服務器


可是鏈接端口能夠更改,並且證書也能夠經過JAVA自帶工具keytools修改。微信


JA3

JA3是一種在線識別TLS客戶端指紋的方法。編輯器

在平常中,不只正常的應用程序會使用TLS或者SSL對流量進行加密。並且惡意程序也經常使用TLSSSL進行加密。工具

爲了啓動TLS會話,客戶端將在TCP3次握手後發送TLS客戶端的Hello數據包,這個數據包及其生成方式取決於構建客戶端應用程序所使用的軟件包和方法,若是接受TLS鏈接,服務器將使用基於服務器端庫和配置以及Client Hello消息中的詳細信息建立的TLS Server Hello數據包進行相應。因爲TLS協商是以明文的方式傳輸的,因此,可使用TLS Client Hello數據包中的詳細信息對客戶端應用程序進行指紋識別。 學習


JA3方法用於收集Client Hello數據包中如下字段的十進制字節值:版本、可接受的密碼、擴展列表、橢圓曲線密碼和橢圓曲線密碼格式。而後將這些值串聯到一塊兒,在使用「,」分割開各個字段,同時用「-」來分隔各個字段中的各個值。

 

這些字段的順序以下:TLS版本信息、可接受的密碼、擴展列表、橢圓曲線密碼和橢圓曲線密碼格式。

CobaltStrike4.1的鏈接流量舉例。

 

771,49188-49192-61-49190-49194-107-106-49162-49172-53-49157-49167-57-56-49187-49191-60-49189-49193-103-64-49161-49171-47-49156-49166-51-50-49196-49195-49200-157-49198-49202-159-163-49199-156-49197-49201-158-162,67,,11-2-256(若是無上述字段,則這些字段的值爲空)

而後會計算這些字符串的MD5哈希值,以生成易於使用和共享的長度爲32字符的指紋,他們就是JA3 TLS客戶端的指紋。好比上述CobaltStrike4.1客戶端指紋:fa704723a210632b2ff9ad03be418651


JA3S

建立JA3後,就可使用一樣的方式對TLS的服務端進行指紋識別,即對TLS Server Hello信息進行指紋識別。JA3S會收集Server Hello數據包中如下各個字段的十進制字節值:版本、可接受的加密算法和擴展列表,而後將這些值串聯起來,使用「,」來分隔各個字段,使用「-」分隔每一個字段中的各個值。

這些字段的順序以下:TLS版本信息、可接受的密碼、擴展列表

 

CobaltStrike4.1的服務端:771,49192,9-------->5513ab2983a0db88fadd353de0341e7c

爲啥使用MD5

由於MD5能夠更容易集成到現有的技術中。


JA3S工做原理

同一臺服務器會根據Client Hello信息機器內容以不一樣的方式建立Server Hello消息,所以,這裏不能跟JA3那樣,僅僅根據服務器的Hello消息來對其進行指紋識別。儘管服務器對不一樣客戶端的響應不一樣,可是他們對同一客戶端的響應老是一致的。

好比:客戶端正在發送TLS Client Hello數據包,其中數據都是A。所以,服務器會的響應的內容也是由A構成,並將始終用A來提供一樣的響應。與此同時,另外一個客戶端也在發送數據包,而且內容都是B。相似的,服務器如今會用B進行響應,而且老是用B組成的B串進行響應。能夠看到,對於不一樣的客戶端,服務器會給予不一樣的響應,可是對於每一個客戶端來講,老是以相同的方式進行相應。

 

在這個日誌輸出中,JA3位於左側,JA3S位於右側使用同一客戶端與同一服務器交互了4次。而後,再次使用不一樣的客戶端進行了4次以上的交互。不難發現,服務器的響應方式對於同一客戶端老是相同的,但對於不一樣的客戶端倒是不一樣的。


安全用途

若是攻擊方構建了定製的惡意軟件可執行文件,那麼JA3指紋極可能對該可執行文件來講是惟一的,

例如:MetaSploit Meterpreter CobaltStrike(並不是4.1版本)  Beacon 都使用 Windows 套接字來啓動 TLS 通訊。在 Windows 10 上,JA3=72a589da586844d7f0818ce684948eea(指定 IP 地址),JA3=a0e9f5d64349fb13191bc781f81f42e1(指定域名)。因爲 Windows 上的其餘普普統統的應用程序也使用相同的套接字,所以,咱們很難識別其中的惡意通訊。可是,Kali Linux 上的 C2 服務器對該客戶端應用程序的響應方式與 Internet 上的普通服務器對該套接字的響應方式相比來講是獨一無二的。儘管服務器對不一樣客戶端的響應不一樣,但它們對同一客戶端的響應老是一致的。所以,若是結合 ja3+ja3s,就可以識別這種惡意通訊,而不用考慮目的地 IP、域名或證書等細節信息

    Trickbot惡意軟件:
JA3 = 6734f37431670b3ab4292b8f60f29984 trickbot

JA3S = 623de93db17d313345d7ea481e7443cfC2服務器的響應)

   Emotet惡意軟件:
JA3 = 4d7a28d6f2263ed61de88ca66eb011e3 ( Emotet )
JA3S = 80b3a14bccc8598a1f3bbe83e71f735f (C2服務器的響應 )

在這些惡意軟件樣本中,C2服務器始終以徹底相同的方式來響應惡意軟件客戶端,應該說是分絕不差,所以,即便流量被加密,而且不知道C2服務器的IP地址和域名,由於他們會不斷變化,咱們任能經過指紋來識別客戶端和服務器之間的TLS寫上,以提升惡意通訊識別結果的可信度。

JA3和JA3S地址:https//github.com/salesforce/ja3






本文分享自微信公衆號 - 小啦的學習筆記(woshiguolala)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索