加密一直都是保護用戶通訊隱私的重要特性,可如果惡意程序在傳播過程中也加密的話,對這樣的流量做攔截感覺就麻煩了很多。談到加密,TLS(Transport Layer Security Protocol,傳輸層安全協議)就是當前使用非常廣泛的協議:國外部分研究機構的數據顯示,已有至多60%的網絡流量采用TLS,當然也包括一些惡意程序(雖然大約只有10%)。
來自思科的一組研究人員最近研究出一種方法,不需要對這類流量進行解密,就能偵測到采用TLS連接的惡意程序,是不是感覺有點小神奇?
TLS協議
這是怎么做到的?
思科已經公開了這份研究報告,題為《辨認使用TLS的惡意程序(無需解密)》(英文其實表達得更為準確,名為”Deciphering Malware’s use of TLS”)。我們比較籠統地歸結原理,其實是TLS協議本身引入了一系列復雜的數據參數特性——這些特性是可以進行觀測檢查的,這樣自然就能針對通訊雙方做出一些合理的推斷。
這份報告中有提到:“通過這些特性,我們可以檢測和理解惡意程序通訊方式,與此同時TLS本身的加密屬性也能提供良性的隱私保護。”聽起來似乎還是比較理想的新技術——在不需要對流量進行解密的情況下就達成流量安全與否的判斷,的確具備很大意義。
為此,思科大約分析了18個惡意程序家族的數千個樣本,并在企業網絡中數百萬加密數據流中,分析數萬次惡意連接。整個過程中,網絡設備的確不對用戶數據做處理,僅是采用DPI(深度包檢測技術)來識別clientHello和serverHello握手信息,還有識別連接的TLS版本。
“在這篇報告中,我們主要針對433端口的TLS加密數據流,盡可能公正地對比企業一般的TLS流量和惡意TLS流量。為了要確認數據流是否為TLS,我們需要用到DPI,以及基于TLS版本的定制signature,還有clientHello和serverHello的信息類型。”
“最終,我們在203個端口之上發現了229364個TLS流,其中443端口是目前惡意TLS流量使用最普遍的端口。盡管惡意程序端口使用情況多種多樣,但這樣的情況并不多見。”
不僅如此,據說他們還能就這些惡意流量,基于流量特性將之分類到不同的惡意程序家族中。“我們最后還要展示,在僅有這些網絡數據的情況下,進行惡意程序家族歸類。每個惡意程序家族都有其獨特的標簽,那么這個問題也就轉化為不同類別的分類問題。”
“即便使用相同TLS參數,我們依然就夠辨認和比較準確地進行分類,因為其流量模式相較其他流量的特性,還是存在區別的。我們甚至還能識別惡意程序更為細致的家族分類,當然僅通過網絡數據就看不出來了。”
實際上,研究人員自己寫了一款軟件工具,從實時流量或者是抓取到的數據包文件中,將所有的數據輸出為比較方便的JSON格式,提取出前面所說的數據特性。包括流量元數據(進出的字節,進出的包,網絡端口號,持續時間)、包長度與到達間隔時間順序(Sequence of Packet Lengths and Times)、字節分布(byte distribution)、TLS頭信息。
其實我們談了這么多,還是很抽象,整個過程還是有些小復雜的。有興趣的同學可以下載思科提供的完整報告。
分析結果準確性還不錯
思科自己認為,分析結果還是比較理想的,而且整個過程中還融合了其機器學習機制(他們自己稱為機器學習classifiers,應該就是指對企業正常TLS流量與惡意流量進行分類的機制,甚至對惡意程序家族做分類),正好做這一機制的測試。據說,針對惡意程序家族歸類,其準確性達到了90.3%。
“在針對單獨、加密流量的識別中,我們在惡意程序家族歸類的問題上,能夠達到90.3%的準確率。在5分鐘窗口全部加密流量分析中,我們的準確率為93.2%(make use of all encrypted flows within a 5-minute window)。”