溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

基于統(tǒng)計(jì)分析的ICMP隧道檢測方法與實(shí)現(xiàn)是怎樣的

發(fā)布時間:2021-12-18 13:55:29 來源:億速云 閱讀:128 作者:柒染 欄目:網(wǎng)絡(luò)安全

本篇文章給大家分享的是有關(guān)基于統(tǒng)計(jì)分析的ICMP隧道檢測方法與實(shí)現(xiàn)是怎樣的,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

一、概述

在企業(yè)內(nèi)網(wǎng)環(huán)境中,ICMP協(xié)議是必不可少的網(wǎng)絡(luò)通信協(xié)議之一,被用于檢測網(wǎng)絡(luò)連通狀態(tài),通常情況下,防火墻會默認(rèn)放此協(xié)議。由于防火墻對ICMP協(xié)議開放,惡意攻擊者常會利用ICMP協(xié)議進(jìn)行非法通信。例如,在黑客攻擊中經(jīng)常出現(xiàn)一種情況是,黑客通過某一種方式取得了一臺主機(jī)的權(quán)限,得到了一些文件,比如域hash,密碼文件之類的東西,需要回傳至本地進(jìn)行破解,但是防火墻阻斷了由內(nèi)網(wǎng)發(fā)起的請求,只有icmp協(xié)議沒有被阻斷,而黑客又需要回傳文件,這個時候如果黑客可以ping通遠(yuǎn)程計(jì)算機(jī),就可以嘗試建立ICMP隧道,ICMP隧道是將流量封裝進(jìn)    ping 數(shù)據(jù)包中,旨在利用 ping數(shù)據(jù)穿透防火墻的檢測?,F(xiàn)在市面上已經(jīng)有了很多類似的工具了,比如 icmptunnel、ptunnel、icmpsh等。

下面將為大家介紹一種簡單而有效的icmp隧道檢測技術(shù)。我們將利用Spark Streaming,來幫助我們檢測ICMP隧道。

二、ICMP隧道

2.1 工作機(jī)理

ICMP(Internet ControlMessages Protocol,網(wǎng)間控制報(bào)文協(xié)議)是TCP/IP協(xié)議族的子協(xié)議,是一種面向無連接的協(xié)議。ICMP協(xié)議的結(jié)構(gòu),如圖1所示:

基于統(tǒng)計(jì)分析的ICMP隧道檢測方法與實(shí)現(xiàn)是怎樣的

圖1

經(jīng)常使用的ping命令就是基于ICMP協(xié)議,windows系統(tǒng)下ping默認(rèn)傳輸?shù)氖牵?nbsp;abcdefghijklmnopqrstuvwabcdefghi,共32bytes,如圖2所示:

基于統(tǒng)計(jì)分析的ICMP隧道檢測方法與實(shí)現(xiàn)是怎樣的

圖2

linux系統(tǒng)下,ping默認(rèn)傳輸?shù)氖?8bytes,前8bytes隨時間變化,后面的固定不變,內(nèi)容為!”#$%&’()+,-./01234567,如圖3所示:

基于統(tǒng)計(jì)分析的ICMP隧道檢測方法與實(shí)現(xiàn)是怎樣的

圖3

此外,ping的包大小,也就是data大小是可以修改的,以windows為例,使用ping baidu.com -l 223,修改為223bytes,從包體內(nèi)容來看,規(guī)律還是一樣,就是重復(fù)罷了,如圖4所示:

基于統(tǒng)計(jì)分析的ICMP隧道檢測方法與實(shí)現(xiàn)是怎樣的

圖4

那能否改變這些data填充我們自己的數(shù)據(jù)呢? 答案是當(dāng)然可以!    
這就是ICMP隱蔽隧道的原理,改變操作系統(tǒng)默認(rèn)填充的Data,替換成我們自己的數(shù)據(jù)。    
比如使用icmp隧道可以構(gòu)造一個包含有www.facebook.com字符串的自定義data的包,如圖5所示:

基于統(tǒng)計(jì)分析的ICMP隧道檢測方法與實(shí)現(xiàn)是怎樣的

圖5

2.2 ICMP隧道數(shù)據(jù)包檢測

windows系統(tǒng)下ping默認(rèn)傳輸?shù)氖牵篴bcdefghijklmnopqrstuvwabcdefghi,16進(jìn)制內(nèi)容為:

6162636465666768696a6b6c6d6e6f7071727374757677616263646566676869

linux系統(tǒng)下ping默認(rèn)傳輸?shù)膬?nèi)容,去掉開頭可變的8bytes后是:!”#$%&’()+,-./01234567,16進(jìn)制內(nèi)容為:

101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637

對自定義長度的ping,在linux下使用ping -s 500 baidu.com產(chǎn)生了492位大小的data,去掉開頭可變的8bytes,16進(jìn)制內(nèi)容為:

101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3

windows下自定義長度的ping類似,16進(jìn)制內(nèi)容為:

6162636465666768696a6b6c6d6e6f70717273747576776162636465666768696a6b6c6d6e6f70717273747576776162636465666768696a6b6c6d6e6f707172737475

因此,正常操作系統(tǒng)下通過ping產(chǎn)生的data,轉(zhuǎn)換為16進(jìn)制后為從00開始不斷遞增然后一直到ff的重復(fù)序列中的一段或幾段。

000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff

對于icmp隧道產(chǎn)生的自定義data數(shù)據(jù)包,轉(zhuǎn)換為16進(jìn)制后內(nèi)容是亂序沒有規(guī)律的,比如構(gòu)造一個內(nèi)容為R5*êíwwwfacebookcom字符串的自定義data的包,其16進(jìn)制內(nèi)容為:

4500003e377d400040119c2f0a0001020a0052019d800035002a1a14eacd01000001000000000000037777770866616365626f6f6b03636f6d0000010001

因此,可以根據(jù)ping產(chǎn)生的data數(shù)據(jù)包,轉(zhuǎn)換為16進(jìn)制后的內(nèi)容是否有規(guī)律來做區(qū)分。

在這里使用AC自動機(jī) 字符串匹配方法進(jìn)行特征匹配,具體做法為:

(1) 將正常操作系統(tǒng)產(chǎn)生的不斷重復(fù)序列,如下:

000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff

每4位切分成特征數(shù)組,生成的特征數(shù)組如下:

"0001", "0203","0405", ...... "feff"

對ping產(chǎn)生的data數(shù)據(jù),如以下linux產(chǎn)生的data:

e7cd0a0000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3

每4位切分成特征數(shù)組,生成的特征數(shù)組如下:

"e7cd", "0a00", ......, "1011","1213","1415",......, "feff"

(2) 使用ac自動機(jī)算法,將生成的特征數(shù)組和正常操作系統(tǒng)生成的特征數(shù)組進(jìn)行匹配,將匹配到的特征的個數(shù)*4/payload長度作為匹配度,進(jìn)行計(jì)算得到匹配度0.987。

匹配度算法:

匹配度 = 匹配到的特征的個數(shù)*4 / payload的長度

對于正常的ping數(shù)據(jù)產(chǎn)生的data,計(jì)算得到的匹配度結(jié)果都在0.9以上,Icmp隧道產(chǎn)生的自定義data的數(shù)據(jù)包通常匹配度很低,可以根據(jù)匹配度來區(qū)分是否是正常操作系統(tǒng)產(chǎn)生的數(shù)據(jù)包。

三、基于統(tǒng)計(jì)分析的ICMP隧道檢測

對于正常的ping命令產(chǎn)生的數(shù)據(jù),有以下特點(diǎn):

每秒發(fā)送的數(shù)據(jù)包個數(shù)比較少,通常每秒最多只會發(fā)送兩個數(shù)據(jù)包;

請求數(shù)據(jù)包與對應(yīng)的響應(yīng)數(shù)據(jù)包內(nèi)容一樣;

數(shù)據(jù)包中payload的大小固定,windows下為32bytes,linux下為48bytes;

數(shù)據(jù)包中payload的內(nèi)容固定,windows下為abcdefghijklmnopqrstuvwabcdefghi,linux下為!”#$%&’()+,-./01234567,如果指定ping發(fā)送的長度,則為不斷重復(fù)的固定字符串;

type類型只有2種,0和8。0為請求數(shù)據(jù),8為響應(yīng)數(shù)據(jù)。

對于ICMP隧道產(chǎn)生的數(shù)據(jù),有以下特點(diǎn):

每秒發(fā)送的數(shù)據(jù)包個數(shù)比較多,在同一時間會產(chǎn)生成百上千個 ICMP 數(shù)據(jù)包;

請求數(shù)據(jù)包與對應(yīng)的響應(yīng)數(shù)據(jù)包內(nèi)容不一樣;

數(shù)據(jù)包中 payload的大小可以是任意大??;

存在一些type為13/15/17的帶payload的畸形數(shù)據(jù)包;

個別ICMP隧道工具產(chǎn)生的數(shù)據(jù)包內(nèi)容前面會增加 ‘TUNL’ 標(biāo)記以用于識別隧道。

因此,根據(jù)正常ping和ICMP隧道產(chǎn)生的數(shù)據(jù)包的特點(diǎn),可以通過以下幾點(diǎn)特征檢測ICMP隧道:

檢測同一來源數(shù)據(jù)包的數(shù)量。正常ping每秒只會發(fā)送2個數(shù)據(jù)包,而ICMP隧道可以每秒發(fā)送很多個;

檢測數(shù)據(jù)包中 payload 的大小。正常ping產(chǎn)生的數(shù)據(jù)包payload的大小為固定,而ICMP隧道數(shù)據(jù)包大小可以任意;

檢測響應(yīng)數(shù)據(jù)包中 payload 跟請求數(shù)據(jù)包是否不一致。正常ping產(chǎn)生的數(shù)據(jù)包請求響應(yīng)內(nèi)容一致,而ICMP隧道請求響應(yīng)數(shù)據(jù)包可以一致,也可以不一致;

檢測數(shù)據(jù)包中 payload 的內(nèi)容。正常ping產(chǎn)生的payload為固定字符串,ICMP隧道的payload可以為任意;

檢測 ICMP 數(shù)據(jù)包的type是否為0和8。正常ping產(chǎn)生的帶payload的數(shù)據(jù)包,type只有0和8,ICMP隧道的type可以為13/15/17。

四、具體實(shí)施

4.1 技術(shù)選型

將基于統(tǒng)計(jì)的ICMP隧道檢測部署到生產(chǎn)環(huán)境中,需要考慮大數(shù)據(jù)規(guī)模對模型的時效性、吞吐量等性能指標(biāo)的影響。經(jīng)多方考量,最終選用Spark Streaming進(jìn)行在線檢測。

Spark Streaming 是Spark核心API的一個擴(kuò)展,可以實(shí)現(xiàn)高吞吐量、具備容錯機(jī)制的實(shí)時流數(shù)據(jù)處理。支持從多種數(shù)據(jù)源獲取數(shù)據(jù),包括Kafka、Flume、Twitter、ZeroMQ、Kinesis 以及TCP sockets,從數(shù)據(jù)源獲取數(shù)據(jù)之后,可以使用諸如map、reduce、join和window等高級函數(shù)進(jìn)行復(fù)雜算法的處理。最后還可以將處理結(jié)果存儲到文件系統(tǒng),數(shù)據(jù)庫和現(xiàn)場儀表盤。在“One Stack rule them all”的基礎(chǔ)上,還可以使用Spark的其他子框架,如集群學(xué)習(xí)、圖計(jì)算等,對流數(shù)據(jù)進(jìn)行處理。

4.2 檢測流程

整個過程主要分3個階段:

數(shù)據(jù)收集 => 匯總統(tǒng)計(jì) => 檢出過濾,具體檢測邏輯,見圖6所示:

基于統(tǒng)計(jì)分析的ICMP隧道檢測方法與實(shí)現(xiàn)是怎樣的

圖6

4.2.1 數(shù)據(jù)收集

Spark Streaming中讀入實(shí)時流量數(shù)據(jù),設(shè)置15秒處理一次數(shù)據(jù),根據(jù)數(shù)據(jù)包的源ip、目的ip大小排序拼接后進(jìn)行分組,將同一個ip向目的ip發(fā)送的請求/響應(yīng)數(shù)據(jù)包分到一個組中,分組字段time_sort_sip_dip 加上時間戳timestamp,為了過濾掉上一次15秒內(nèi)該源ip、目的ip之間的數(shù)據(jù)包,保證每個15秒內(nèi)只處理當(dāng)前15秒內(nèi)的同一ip、目的ip的數(shù)據(jù)。

4.2.2 匯總統(tǒng)計(jì)

根據(jù)分組后的數(shù)據(jù),分別統(tǒng)計(jì)以下特征指標(biāo),作為最終是否檢出的依據(jù):

1. 在一個時間窗內(nèi),ICMP請求響應(yīng)的數(shù)據(jù)包數(shù)量;

2. 捕獲到的ICMP請求響應(yīng)中,其payload部分是否是操作系統(tǒng)的正常長度;

3. 序號相同的ICMP數(shù)據(jù)包應(yīng)當(dāng)屬于一對ICMP請求響應(yīng)消息,他們的payload是否一致;

4. ICMP請求響應(yīng)的payload內(nèi)容是否正常(多模匹配);

5. ICMP請求是否是畸形Ping報(bào)文(Type是否異常);

對1/2/5直接使用統(tǒng)計(jì)組內(nèi)的payload個數(shù)、payload_len長度值、是否有type不為0/8的數(shù)據(jù)包,直接得出。

對與3的判斷,需要根據(jù)正常ping和異常數(shù)據(jù)的不同點(diǎn),依據(jù)組內(nèi)統(tǒng)計(jì)得到的id_seq集合和payload集合去重后,做大小比較得出:

對于正常ping,源ip向目的ip發(fā)送的一系列數(shù)據(jù)包中id_seq全部不一樣,其中identify為當(dāng)次請求隨機(jī)生成的序號不重復(fù),同一批次identify一樣,seq是根據(jù)數(shù)據(jù)包個數(shù),從1開始一次遞增1的數(shù)字,同一個請求和響應(yīng)數(shù)據(jù)包的id_seq一樣,payload內(nèi)容也一樣。例:ping baidu.com產(chǎn)生了10個數(shù)據(jù)包,包括5次請求、5次響應(yīng),則id_seq去重后為5,payload去重后win下為1,linux下為5。

對于Icmp隧道,源ip向目的ip發(fā)送的一系列數(shù)據(jù)包中id_seq,可以一樣,也可以不一樣。同一個請求和響應(yīng)數(shù)據(jù)包的id_seq可以一樣,也可以不一樣,payload內(nèi)容不一樣。例:隧道產(chǎn)生了10個數(shù)據(jù)包,則id_seq去重后為5(seq依次遞增)或1(seq固定不遞增),payload去重后為10,極端情況下只有發(fā)送包,沒有響應(yīng)包,則id_seq去重后為10。

可見不考慮一些極端情況,可以簡單通過 payloads_num > id_seq_num 即可認(rèn)為請求響應(yīng)內(nèi)容不同,對與極端情況,可以根據(jù)別的條件進(jìn)行檢出。

對于4的判斷,使用2.2中介紹的方法進(jìn)行判斷payload是否異常。

4.2.3 檢出過濾

為了減少誤報(bào),過濾掉一些正常的路由器發(fā)送的數(shù)據(jù)包,使用3種條件結(jié)合進(jìn)行是否檢出判斷:

存在有非法type的payload且去重后的payload的個數(shù)大于閾值(經(jīng)內(nèi)網(wǎng)測試,個別路由器會發(fā)送有畸形type的payload內(nèi)容一樣的包,通過增加去重后的payload的個數(shù)大于閾值來過濾);

請求響應(yīng)數(shù)據(jù)包不一致;

15秒內(nèi)的數(shù)據(jù)包個數(shù)、非正常長度數(shù)據(jù)包個數(shù)、異常內(nèi)容數(shù)據(jù)包個數(shù)、去重后的payload的個數(shù) 大于自定義的閾值檢出(經(jīng)內(nèi)網(wǎng)測試,個別路由器隔幾個小時會發(fā)送有異常內(nèi)容的但是內(nèi)容只有幾個字符不一樣的payload心跳包,通過增加去重(使用漢明距離去重,差別不超過3個字符的認(rèn)為一樣)后的payload的個數(shù)大于閾值來過濾)。

鑒于Icmp隧道特點(diǎn)的多樣性,只要滿足3者之一,就會檢出,對于一些極端異常的ICMP隧道產(chǎn)生的包,比如隧道只有請求包沒有響應(yīng)包即一直往外發(fā)數(shù)據(jù),則id_seq去重后為10(10次全是請求包,且seq遞增),payload去重后為10,無法單獨(dú)通過2檢出,但是可以滿足3,一樣會檢出,不會漏報(bào)。

五、模型效果

5.1 負(fù)樣本檢測效果

目前測試過程中使用的已知負(fù)樣本有以下幾種:

icmpTunnel樣本,使用icmpTunnel隧道工具造的樣本;

icmptransmitter樣本,使用icmptransmitter隧道工具造的樣本;

icmpsh樣本,使用icmpsh隧道工具造的樣本;

badping樣本,使用python腳本手動造的icmp的異常數(shù)據(jù)包。

5.2 正樣本檢測效果

目前測試過程中使用的已知正樣本有以下幾種:

正常Ping數(shù)據(jù)包,Ping命令產(chǎn)生的數(shù)據(jù)包,平臺包括linux/win/mac/solaris/android/ios,payload內(nèi)容如下:abcdefg12345等。

網(wǎng)絡(luò)設(shè)備心跳包,路由器等網(wǎng)絡(luò)設(shè)備會定時發(fā)送的一些心跳包,payload內(nèi)容如下:DataBuffer 0000001、DataBuffer 0000002等。

以上就是基于統(tǒng)計(jì)分析的ICMP隧道檢測方法與實(shí)現(xiàn)是怎樣的,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI