【技術向】SSH加密隧道流量攻擊與檢測技術

星河Salaxy發表於2021-04-01

一.   總體概述


1.1網路隱蔽通道技術

隱蔽通道是指系統的一個使用者用違反系統安全策略的方式傳送資訊給另外一個使用者的機制。


隱蔽通道分為如下兩種型別:

1.儲存隱蔽通道:一個程式對某客體進行寫操作,而另一個程式可以觀察到寫的結果。

2.時間隱蔽通道:一個程式對系統效能產生的影響可以被另外一個程式觀察到並且可以利用一個時間基準進行測量。

以上這兩種型別的隱蔽通道的產生,都必須符合一個條件:即傳送程式和接收程式之間無法以符合系統安全機制的方式進行通訊,否則他們之間就可以利用正常的通道通訊了。


網路隱蔽通道的構建主要利用網路協議漏洞或者報文的時間特性來建立,其常見方式如下:

1.利用未用或保留欄位建立隱蔽通道:

由於網路檢測系統一般不會對保留欄位和未用欄位進行檢查,因此網路攻擊者可將要傳遞的資訊隱蔽在報文中的未用欄位或者保留欄位中,例如:IP報頭的TOS欄位和DF欄位均可用於隱蔽資訊的傳輸。


2.利用擴充套件和填充欄位建立隱蔽通道:

由於大部分網路協議都支援對報文的擴充套件,以滿足網路通訊中的特殊需求,而擴充套件方式卻很少有明確的定義。因此,網路攻擊者可以對某協議報文進行自行擴充套件,將資訊作為填充內容隱蔽到填充欄位中,從而建立網路隱蔽通道。


3.在協議規範允許下,對報文相關欄位或者負載大小進行調製來隱蔽資訊的傳輸,以此來建立網路隱蔽通道。


4.利用報文的收發時間特性,透過調整正常資料包的傳送接收時間來隱蔽資訊,從而建立網路隱蔽通道。


5.其它方式建立隱蔽通道:

例如,利用網路衝突檢測機制或無線區域網的Traceback機制將資訊隱蔽其中,這也是建立網路隱蔽通道的方式。


 1.2  SSH協議簡介

由於部分重要網路協議在通訊過程中使用明文傳輸,往往會造成一定程度的資訊洩露與被攻擊劫持的風險,在此背景下,由IETF 的網路工作小組(Network Working Group)設計了一種雙向加密的保證非安全網路環境中上進行安全遠端通訊等通訊服務的協議,即SSH(Secure  Shell) 。SSH協議屬於應用層協議,應用於TCP傳輸層的基礎上。SSH通訊過程包含5個階段的通訊協商,以保證其兩端認證機制的不可欺騙性。此外SSH經過相關設計,在加密的過程中,還對傳輸的資料進行壓縮,以提高傳輸的速度。 


 1.3  SSH隧道簡介

SSH 的功能多樣,不僅對遠端登陸、檔案傳輸進行安全加密,此外SSH還能夠將其他TCP埠的網路資料透過SSH連線來轉發,並且自動提供了相應的加密及解密服務,即加密隧道。SSH隧道的實現主要使用SSH的引數配置進行埠轉發,即將所需傳輸的資料內容透過加密的SSH隧道進行轉發。


SSH 埠轉發能夠提供以下兩大功能

1.加密SSH Client端至SSHServer端之間的通訊資料。

2.突破防火牆的限制完成一些之前無法建立的 TCP 連線。由於SSH的安全性,在資料跨越公網時其他人無法得知資料內容。SSH埠轉發有本地轉發、遠端轉發和動態埠轉發三種。"遠端轉發"也稱為"SSH反向隧道"。

圖片



二.   攻擊設計方案




2.1  攻擊方案背景

假設有主機A與主機B,主機A上安裝有mysql客戶端,主機B上安裝有mysql服務端,主機A中的mysql客戶端需要與主機B中的mysql服務端進行通訊,則需要從mysql的客戶端連線到mysql服務端。


由於mysql在傳輸資料時使用明文傳輸,暴露在公網的mysql通訊是不安全的,因此為了提高訪問mysql服務時的安全性,可以利用SSH搭建"通道",然後將mysql的客戶端與服務端透過這條"SSH通道"連線起來,如下圖所示:

圖片

mysql的客戶端與服務端的連線方式從原來直連的方式變成了如上圖所示的連線方式,它們之間並不直接進行通訊,而是藉助SSH隧道將通訊資料轉發,雖然仍然跨越了公網,但是由於SSH本身的安全特性,所以別人無法看到明文傳輸的資料,資料依靠SSH隧道實現了加密的效果,達到了保護資料安全的作用,提升了mysql的客戶端與服務端通訊的安全性。


 2.2  攻擊方案設計


本方案主要使用openSSH工具利用SSH協議的三種埠轉發方式,搭建隧道。

實驗環境如下:

角色

系統版本

ip

服務

Server A

kali

192.168.43.38

Mysql 客戶端

Server B

ubuntu

192.168.43.25

Mysql 服務端


2.3  本地轉發

在ServerA中執行如下命令,即可在ServerA與ServerB之間建立一條SSH隧道:

ssh -L 9906:192.168.43.25:3306 jiang@192.168.43.25

上述命令表示從本機(ServerA)建立一個到ServerB(192.168.43.25)的SSH隧道,使用本地埠轉發模式,監聽ServerA本地的9906埠,訪問本機的9906埠時,通訊資料將會被轉發到ServerB(192.168.43.25)的3306埠。


圖片


在Server A上透過SSH本地轉發連線Server B上的資料庫:


圖片


2.4 遠端轉發

假設Server B在內網,Server B可以訪問外網,Server A在外網,ServerA有自己的公網IP。這種情況下,在Server A上是不能透過SSH本地轉發連線Server B的,但是Server B可以SSH連線ServerA。因此,我們可以在Server B中主動連線到Server A,即在Server B中執行建立隧道的命令,連線到Server A。隧道建立後,轉發埠需要監聽在Server A中,以便利用Serve rA訪問到內網的Server B。

使用SSH的"-R選項",可以建立一個"遠端轉發"模式的SSH隧道,我們在ServerB中,執行如下命令即可:

ssh  -R9906:192.168.43.25:3306 jiang@192.168.43.38


圖片


上述命令在Server B中執行,執行後,即可在ServerA與Server B之間建立SSH隧道,此時,Server B是SSH客戶端,ServerA是SSH服務端,隧道建立後,Server A中的9906埠會被監聽。

在Server A中訪問本地迴環地址的9906埠,即可訪問到內網ServerB中的mysql服務,如下圖所示:


圖片


2.5  動態轉發

本地轉發和遠端轉發都要求有一個固定的應用服務端的埠號,例如前面例子中的mysql服務端的3306埠,但是某些應用沒有這個埠號,例如用瀏覽器進行Web瀏覽。當我們在一個不安全的網路環境下上網,用SSH動態轉發來保護我們的網頁瀏覽是十分必要的。

SSH動態轉發的命令格式:

ssh -D <local port> <SSH Server>

我們在Server B上開啟SSH動態轉發:


圖片

我們可以直接使用localhost:8000作為正常的SOCKS代理來使用,直接在瀏覽器上設定代理即可:


圖片


需要注意的是,此時 SSH 所包護的範圍只包括從瀏覽器端(SSH Client端)到SSH Server端的連線,並不包含從SSH Server端到目標網站的連線。如果後半截連線的安全不能得到充分的保證的話,該方案仍不合適。


2.6  autossh

在實際的使用過程中,如果使用遠端轉發穿透到內網,SSH隧道將會非常不穩定,特別是在沒有固定IP的網路內,autossh工具是一個很好的解決方法。autossh是一個用來監控SSH連線,並自動進行重連的工具。autossh的引數與SSH的引數是一致的,但是不同的是,在隧道斷開的時候,autossh會自動重新連線而SSH不會。

安裝方法:

apt  installautossh

在內網主機Server B上,利用autossh 建立一條SSH反向隧道:

autossh -M 4010 -R 9906:192.168.43.25:3306 jiang@192.168.43.38

“-M”引數的意思是使用內網主機Server B的4010埠監視SSH連線狀態,連線出問題了會自動重連。







三. 檢測方案設計






本檢測方案主要是基於會話行為的模式識別檢測。


3.1  基於會話的行為的識別檢測


由於其加密性,對於加密流量的識別往往無法使用基於載荷的識別檢測方式對其載荷內容進行識別。但是隧道與SSH其他功能在握手、互動方式設計的不同,資料包到達時間、分組大小等統計特徵也會因此不同。


傳統方案是使用機器學習技術、利用DPI技術提取資料會話流,並按時間序列提取包數與每包的載荷,捕捉流內資料包的包間隔時間,總包長度等統計資料(最大值,最小值,平均值,標準差等),按上下行方向形成按會話劃分提取特徵值,構建特徵工程,利用機器學習有監督分類模型,挖掘特定協議的獨特模式,進行分類。


此外,隨著電腦科學的發展與技術進步,深度學習模型的不斷髮展與應用,目前也有較多的深度學習模型被應用於流量識別上,相比於傳統的機器學習方法,深度學習模型的學習能力更高,可以學習更復雜的模式。


深度學習對流量識別上主要有基於CNN網路基於RNN網路兩類。


基於RNN網路的主要是將每種不同的流量資料流視作不同的語言模型,將數值序列看作對映到數值空間的語句,然後生成學習不同裝置語言語義和句法語法的模型。


基於CNN的主要是透過流量每個位元組與圖片的灰度資料進行轉化,將流量識別分類問題轉化為影像分類問題,利用成熟的CNN網路進行分類識別。


本文針對SSH隱蔽隧道的深度學習模型,使用2維卷積神經網路搭建深度學習模型,構建SSH隧道與非隧道流量二分類識別模型,未來還會針對SSH隧道內所使用應用流量進行多分類模型搭建。


3.2  檢測流程

圖片



3.3 模型設計

使用深度學習演算法搭建多層2維卷積神經網路,並在卷積層後新增dropout層,減少神經元之間的共適應關係,消除部分過擬合對模型結果的影響,具體模型設計如下圖:

圖片

3.4 實驗結果

在本地網路中,搭建SSH客戶端與服務端,透過第二部分方案進行SSH隧道構建,同時使用其他裝置進行正常SSH服務通訊,並利用wireshark抓包,使用自研深度包解析工具按會話進行提取。最終經資料預處理、特徵工程生成模型輸入資料,其模型準確率與損失曲線如下圖:

圖片

圖片

 








五.   參考連結







[1]Alshammari R , Zincirheywood A N . A flow based approach for SSH traffic detection[J]. 2007.

[2]Dusi M , Crotti M , Gringoli F , et al. Tunnel Hunter: Detecting application-layer tunnels with statistical fingerprinting[J]. Computer Networks, 2009, 53(1):81-97.

[3]譚小兵. SSH隧道流量檢測與識別技術研究[D]. 中國科學院研究生院(西安光學精密機械研究所), 2012.

[4] http://www.zsythink.net/archives/2450

[5] https://www.freebuf.com/articles/network/207850.html

[6] https://blog.csdn.net/sunansheng/article/details/50927687

[7]Lopez-Martin M , Carro B , Sanchez-Esguevillas A , et al. Network Traffic Classifier With Convolutional and Recurrent Neural Networks for Internet of Things[J]. IEEE Access, 2017, PP(99):1-1.



相關文章