基於ICMP協議的隱蔽傳輸實驗原理及其實現

目錄

寫在前面

實驗報告

【實驗名稱】

【實驗目的】

【實驗方案】

【實驗過程】

【隱蔽效果測試】

【傳輸性能測試】

【實驗結論】

【進行方案比較的參考文獻】


寫在前面

本文基於《(2019秋季)信息論與編碼》課程實驗的實驗報告撰寫,目的在於分享交流。

實驗選題:

  基於Internet網的隱蔽傳輸方案設計與實現。

實驗任務:

  (1)針對Internet網絡,採用壓縮編碼、糾錯編碼方法,設計並實現一種隱蔽傳輸的方案;

  (2)方案需考慮網絡傳輸實際情況,如丟包等。

實驗要求:

  (1)信源類型:語音、文本、圖片、視頻等;

  (2)需進行方案的隱蔽效果及性能的評估;

  (3)與某一種現有隱蔽方案進行對比。

傳統的基於ICMP的隱蔽傳輸方案是直接利用data字段,隱蔽性較差,容易被探測。
本方案的優勢:
  ①能確保不被防火牆攔截,保證隱蔽傳輸的順利進行;
  ②不改變ICMP報文的默認結構,表現出較高的隱蔽性能;
  ③通過對ICMP報文的精心設計,較爲有效地克服了網絡傳輸實際情況產生的丟包和亂序的干擾,表現出了較高的可靠性。 

背景知識:

  關於ICMP隱蔽隧道基本介紹可參考《小白必看!ICMP隱蔽隧道從入門到精通》一文。

源碼及相關說明已上傳至CSDN,喜歡的話請給個好評。

實驗報告

【實驗名稱】

基於Internet網的隱蔽傳輸方案設計與實現。

【實驗目的】

通過實驗,瞭解隱蔽通信工作原理及方式,採用壓縮編碼、糾錯編碼方法,考慮網絡傳輸實際情況,設計並實現一種基於Internet網的隱蔽傳輸方案。

【實驗方案】

將隱蔽信息經過哈夫曼編碼後提取其二進制值,將這些二進制值進行BCH糾錯編碼。隨後在本地生成一系列攜帶有隱蔽信息的ICMP報文,實現基於公開Internet信道的隱蔽傳輸。

ICMP報文的格式如下:

考慮在Internet網絡中無時無刻都在傳遞着數以萬計的報文,將報文作爲隱蔽信息的載體隱藏在流量巨大的報文之中,這是個可取併合理的選擇。但是在這遍佈防火牆的公開信道上,並不是所有報文都能順利地在各個主機間傳遞。我們選擇ICMP報文作爲隱蔽傳輸的載體,就是出於對這方面的考慮。ICMP報文作爲判斷網絡連通有無的工具,幾乎所有的防火牆都不會對其進行攔截,而且ICMP報文作爲網絡層傳輸的報文,不會受到端口屏蔽的影響。但是並不是所有類型的ICMP報文都是可取

的。例如類型字段值爲8的ICMP回顯請求報文,Windows防火牆默認是對其進行禁止接收的。我們選擇類型字段值爲0的ICMP回顯應答報文作爲我們的信息載體,因爲這一類型的ICMP報文防火牆不會禁止,如果禁止了接受回顯應答報文,那麼系統的ping服務就失去了其應有的功能。通過查閱資料發現,絕大多數的文章都是直接將待傳輸的數據存儲在ICMP報文的數據部分,這其實並不安全,因爲無論是Windows還是Linux操作系統,其數據部分字段都是默認的,很容易通過數據部分的檢查來發現是否有隱蔽信道的存在,甚至直接看見所傳遞的信息。

因此我們必須自己設計一種新的信息嵌入方式。

ICMP報文中,源IP地址可以是任意的,因爲對於事先約定好的收發端而言,源IP地址其實無關緊要。因此我們可以將信息嵌入報文的源IP地址之中,將奇數的IP地址表示二進制信息“1”,將偶數的IP地址表示二進制信息“0”,從而一個ICMP報文便能表示1比特的信息。

考慮到網絡傳輸實際情況,由於網絡可能出現擁塞延遲,接收端收到報文的順序將和發送端不一致,甚至即使發生了丟包,接收端也不知道丟的是哪一位的數據,接收端甚至不知道要發送的信息究竟有多長。爲解決上述問題,我們將待傳數據的長度嵌入在ICMP的id字段,將順序嵌入在ICMP的序列號字段,考慮到在ICMP報文中這兩字段的任意性,因此嵌入的信息並不會被檢測到發現到。由於這兩字段分別佔兩個字節,因此最多隻能發送$2^16-1$即8k左右的數據。考慮到IP報文頭的id字段也是任意生成的,因此我們可以將IP報文頭的id的前4個字節利用起來,將其中的前2個字節給IMCP的id字段作擴展,將其中的後2個字節給ICMP的序列號字段作擴展,從而發送數據的上限便擴大到$2^32-1$即500M左右的大小,從而能滿足一般的數據傳輸的要求。此外,我們將IP報文頭id字段的後4個字節隨機賦值,保持了IP報文頭的id字段的隨機性。

此外,爲了接收端能在Internet信道中傳輸的若干報文中有效地篩選到攜帶着信息的ICMP報文,我們需要將ICMP報文設計成特定格式方便接收端篩選。我們發現Linux下的ICMP報文數據部分前3個字節是任意的,於是我們將第一個字節存儲的數據隨機生成爲3的倍數,將第二個字節的數據隨機生成爲7的倍數,那麼接收端只要對接收的ICMP報文的數據部分進行檢查便能針對性地得到所要接收的信息,而這對於不知道這一約定的第三方而言,只是一串無意義的看似正常的隨機信息。

通過以上對ICMP報文的精心構造,使得ICMP報文在能夠成爲傳遞消息載體的同時,保持了ICMP報文的默認構造,大大加強了信息傳遞的隱蔽性。

我們設計的方案:

發送端傳輸文件的過程爲:①Huffman壓縮編碼,②提取二進制值,③BCH糾錯編碼,④生成一系列攜帶隱藏信息的ICMP報文,⑤發送;

接收端接收文件的過程爲:①接收有預定特徵的ICMP報文,②提取二進制信息,③BCH糾錯譯碼,④生成二進制文件,⑤Huffman壓縮譯碼得到源文件。

【實驗過程】

(1)實現BCH編碼腳本

(2)實現icmp、Huffman腳本

(3)實現send、receive主程序

關鍵部分參考源碼註釋,代碼說明文檔參見read.txt,具體細節比較多,此處不方便詳細說明,具體參見源碼和說明文檔

 

【隱蔽效果測試】

本部分將對設計並實現的Internet網的隱蔽傳輸方案進行功能性測試。

信源類型:英文文本文件(Hello.txt)

在丟包率爲5%的網絡條件下對Hello.txt文本文件進行傳輸

開始進行編碼傳輸:

接收端接收解碼文件:

接收到的文件:

文件傳輸成功。

從抓到的包可以看出,攜帶隱藏信息的ICMP報文與一般的ICMP報文無異,在公開的Internet網絡這個大背景下,能夠充分體現隱蔽性。

【傳輸性能測試】

本部分將對不同信源類型在不同丟包率的情況下進行隱蔽傳輸性能測試。

一、信源類型:英文文本文件(Hello.txt)

① 丟包率:5%

② 丟包率:9%

二、信源類型:中文文本文件(novel.txt)

① 丟包率:4%

② 丟包率:5%

三、信源類型:圖像文件(lena.bmp)

① 丟包率:4%

② 丟包率:4.5%

從對不同的信源類型和不同的丟包率下的測試結果可以看出,該方案總體傳輸性能較好,能夠有效地克服實際網絡傳輸中可能會遇到的諸如丟包等問題的影響,在丟包率不大於4%的情況下能完全恢復信源傳遞的信息,由於使用的是(15,5)BCH碼且在Python下采用Petersen譯碼方法導致糾錯範圍較小且傳輸時間較長,在實際應用中可以利用硬件電路實現編譯碼的功能加快編譯碼的效率,從而能採用糾錯範圍更廣的BCH碼提高對丟包率的克服。

但是從實驗結果可以看到,我們設計的方案整體表現出了較高的隱蔽性和較強的傳輸性能,體現出了該方案在Internet網下較好的隱蔽傳輸效果。

【實驗結論】

由於該方法是直接將文件的二進制信息進行編碼傳輸,所以理論上,能傳輸任意類型的信源信息。

從實驗結果可以看到,無論是對文本文件抑或是圖像文件,該隱蔽傳輸方案在克服Internet的丟包、延遲等影響表現出了較高的可靠性,同時,通過和其他文獻的隱蔽傳輸方案相比,從抓包的結果可以看到,我們設計的隱蔽傳輸方案較傳統的基於ICMP的隱蔽傳輸方案的隱蔽性更強。以下分別是參考文獻1~4所設計提到的基於ICMP的隱蔽傳輸方案,可以看到這些方案可以直接泄露隱蔽信道的存在和所傳的具體信息。

而我們設計的隱蔽傳輸方案的優勢在於:

①能確保不被防火牆攔截,保證隱蔽傳輸的順利進行;

②不改變ICMP報文的默認結構,表現出較高的隱蔽性能;

③通過對ICMP報文的精心設計,較爲有效地克服了網絡傳輸實際情況產生的丟包和亂序的干擾,表現出了較高的可靠性。

【進行方案比較的參考文獻】

[1] 陳春生. 基於網絡流隱蔽通信技術研究[D]. 江蘇: 江蘇科技大學, 2011.

[2] 吳剛, 朱峯. ICMP協議隱蔽信息傳輸實現[J]. 中國科技博覽, 2011(37):85-85.

[3] linuxsec. ICMP隱蔽隧道從入門到精通[EB/OL]. https://www.cnblogs.com/linuxsec/articles/9350572.html, 2018.

[4] goodbyeer. apt攻擊之ICMP隱蔽隧道[EB/OL]. https://www.jianshu.com/p/2f9ce666a1f1, 2018.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章