【技術分享】云沙箱流量識別技術剖析
前言
大家好,我是風起,本次帶來的是基于流量的沙箱識別技術。相信大家都知道,沙箱識別是老生常談的話題了,目前大部分的識別方案都是基于樣本側去完成的,例如常規方式:硬件檢查(CPU核心數、輸入輸出設備、內存)、鼠標移動檢查、進程名、系統服務、開機時長等,都不能直觀準確的識別出目標進行流量交互的服務器是否是沙箱環境。舉個例子,之前看到有師傅使用鼠標移動檢查的方式去識別目標是否是沙箱虛擬機環境,那么問題來了,這種方式在釣魚的場景下我們知道目標是PC客戶端有人使用這臺電腦,但是對于目標是服務器場景的情況下這種方法就不適用了,運維人員并不會時刻都在每臺服務器跟前操作,所以我們需要一種更加優雅的識別方式。
當然沙箱是快照還原,時間一般都存在問題的并且會進行sleep加速,也就是說這時候在樣本惻進行延遲執行操作會被沙箱反調,一但樣本被反調了,那么其樣本就是所處異常環境下,這時候進行延遲幾秒后獲取本地時間就能夠識別出異常,這當然也是一種很好的反調試手段。但是,上述這些操作都是在樣本側完成的,拋開需要定制化腳本實現功能,出現問題后進行排查等等都會比較麻煩。
本文將深入淺出的講解基于流量側對沙箱請求流量進行識別的方法,這種方法也能更易部署且有效識別,從而針對性的反制沙箱分析流量。
TLS JA3指紋
正式講解流量側識別云沙箱技術之前,我們先簡述一下TLS JA3(S)指紋的基本概念。
JA3為客戶端與服務器之間的加密通信提供了識別度更高的指紋,通過 TLS 指紋來識別惡意客戶端和服務器之間的 TLS 協商,從而實現關聯惡意客戶端的效果。該指紋使用MD5加密易于在任何平臺上生成,目前廣泛應用于威脅情報,例如在某些沙箱的樣本分析報告可以看到以此佐證不同樣本之間的關聯性。
如果可以掌握 C2 服務器與惡意客戶端的JA3(S),即使加密流量且不知道 C2 服務器的 IP 地址或域名,我們仍然可以通過 TLS 指紋來識別惡意客戶端和服務器之間的 TLS 協商。相信看到這里大家就能想到,這也正是對付域前置、反向代理、云函數等流量轉發隱匿手段的一種措施,通過沙箱執行樣本識別與C2之間通信的 TLS 協商并生成JA3(S)指紋,以此應用于威脅情報從而實現輔助溯源的技術手段。

JA3 通過對客戶端發送的ClientHello 數據包中的以下字段收集字節的十進制值:
- SSL 版本
- 接受的密碼
- 擴展列表
- 橢圓曲線
- 橢圓曲線格式
然后它將這些值按順序連接在一起,使用“,”分隔每個字段,使用“-”分隔每個字段中的每個值。
示例:
771,39578-4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,23-65281-10-11-35-16-5-13-18-51-45-43-27-17513-21,56026-29-23-24,0 MD5編碼:9ef1ac1938995d826ebe3b9e13d9f83a
如上示例,最終得到并應用的JA3指紋即 9ef1ac1938995d826ebe3b9e13d9f83a