摘 要: 信息隱藏是網(wǎng)絡(luò)時代信息安全領(lǐng)域新興起的一個研究熱點?;?a class="innerlink" href="http://ihrv.cn/tags/Netfilter/iptables" title="Netfilter/iptables" target="_blank">Netfilter/iptables模塊和MITM(Man-in-the-Middle)技術(shù),在Linux環(huán)境下通過L7-filter和Ettercap技術(shù)實現(xiàn)了NAT服務(wù)器對流入內(nèi)部網(wǎng)絡(luò)的不良文本信息的隱藏和替換。通過網(wǎng)絡(luò)實驗證明,達(dá)到了預(yù)期的設(shè)計目的。
關(guān)鍵詞: Netfilter/iptables; MITM; L7-filter; Ettercap; 信息隱藏與替換
隨著Internet的迅速發(fā)展,信息隱藏成為網(wǎng)絡(luò)時代信息安全領(lǐng)域興起的一個研究熱點,在版權(quán)保護(hù)、隱蔽通信等許多方面有著非常廣闊的應(yīng)用前景[1]。信息隱藏被用來保護(hù)信息安全的同時,也可能被用來傳送一些不良信息給網(wǎng)絡(luò)用戶,如何過濾或者截獲并替換掉這些不良信息,就成為該領(lǐng)域研究的熱點。
針對NAT服務(wù)器對流入內(nèi)網(wǎng)的不良文本信息的隱藏和替換問題(圖1為網(wǎng)絡(luò)拓?fù)鋱D),本文基于Netfilter/iptables模塊和MITM技術(shù),在Linux環(huán)境下通過L7-filter和Ettercap技術(shù)實現(xiàn)了網(wǎng)絡(luò)文本信息的隱藏和替換。
1 Netfilter/iptables模塊
在Linux系統(tǒng)中,Netfilter是其內(nèi)核的一個完整且功能強(qiáng)大的防火墻系統(tǒng);iptables模塊則是Netfilter提供的一種用戶工具,是與Linux內(nèi)核集成的IP信息包過濾系統(tǒng)[2]。通過這種工具可以實現(xiàn)NAT,進(jìn)而隱藏IP地址信息。
iptables的基本語法規(guī)則如下:
iptables [-t table] command [match] [target];
iptables中共有三類表:Mangle、Nat和Filter。Mangle表對于滿足常規(guī)的防火墻應(yīng)用作用不大。Nat表的作用在于對數(shù)據(jù)包的源或目的IP地址進(jìn)行轉(zhuǎn)換[3]。Nat表又可主要分為三條鏈:(1)DNAT:改變包的目的地址,以使包能從路由到某臺主機(jī)上;(2)SNAT:改變包的源地址,可以隱藏用戶的本地網(wǎng)絡(luò);(3)MASQUERADE:與SNAT作用基本一樣,對每個匹配的包,MASQUERADE都要查找可用的IP地址。Filter表用來過濾數(shù)據(jù)包,可以在任何時候匹配并過濾包,對包做DROP或ACCEPT。
iptables模塊處理流程[2]: 首先,當(dāng)一個包進(jìn)來時,內(nèi)核根據(jù)路由表決定包的目標(biāo)。如果目標(biāo)主機(jī)就是本機(jī),則直接進(jìn)入INPUT鏈,再由本地正在等待該包的進(jìn)程接收;否則,如果進(jìn)來的包的目標(biāo)不是本機(jī),則看是否內(nèi)核允許轉(zhuǎn)發(fā)包[4-5]。最后,Linux防火墻主機(jī)本身能夠產(chǎn)生包,這種包只經(jīng)過OUTPUT鏈被送出防火墻。圖2給出了數(shù)據(jù)包經(jīng)過iptables模塊的處理流程。
2 基于L7-filter的匹配與替換
L7-filter是一個Netfilter/iptables的增強(qiáng)型補(bǔ)丁插件,它的核心是通過一個工作在內(nèi)核級的可對數(shù)據(jù)包進(jìn)行分類的補(bǔ)丁程序與iptables進(jìn)行聯(lián)動,與其他基于端口包分類工具的不同處在于,它是基于數(shù)據(jù)內(nèi)容匹配和分析的[2]。利用正則表達(dá)式匹配Layer7應(yīng)用協(xié)議(HTTP、FTP)的傳輸數(shù)據(jù),能更準(zhǔn)確地分析數(shù)據(jù)包。
L7-filter在默認(rèn)情況下,將同一個連接中的10個數(shù)據(jù)包或者2 KB的數(shù)據(jù)包內(nèi)容放在緩存中。并將緩存中的內(nèi)容作為一段普通的文本,用模板文件中的正則去搜索,如果發(fā)現(xiàn)有正則匹配的內(nèi)容,就會在Netfilter中將這幾個數(shù)據(jù)包DROP丟掉或者給數(shù)據(jù)包打上標(biāo)記。
下面就是該命令對于數(shù)據(jù)包中的內(nèi)容進(jìn)行匹配及替換的命令:
#iptables -A FORWARD -m mark --mark 1 -m filterstring --string "xxx.xxx.xxx.xxx" --replace-string "xxx.xxx.xxx.xxx"?-j LOG --log-prefix "ip filter:"
3 基于MITM和Ettercap的匹配與替換
中間人攻擊MITM(Man-in-the-Middle Attack)是一種“間接”的入侵攻擊,這種攻擊模式是通過各種技術(shù)手段將受入侵者控制的一臺計算機(jī)虛擬放置在網(wǎng)絡(luò)連接中的兩臺通信計算機(jī)之間,這臺計算機(jī)就稱為“中間人”。然后入侵者把這臺計算機(jī)模擬為一臺或兩臺原始計算機(jī),使“中間人”能夠與原始計算機(jī)建立活動連接并允許其讀取或修改傳遞的信息,然而兩個原始計算機(jī)用戶卻認(rèn)為他們是在互相通信。通常,這種“攔截數(shù)據(jù)——修改數(shù)據(jù)——發(fā)送數(shù)據(jù)”的過程就被稱為“會話劫持”。
Ettercap是基于MITM技術(shù)的一款有效的、靈活的中介工具。利用其特性可以實現(xiàn)數(shù)據(jù)包過濾和丟棄以及替換功能:可以建立一個查找特定字符串的過濾鏈,根據(jù)這個過濾鏈對TCP/UDP數(shù)據(jù)包進(jìn)行過濾并用自己的數(shù)據(jù)替換這些數(shù)據(jù)包,或丟棄整個數(shù)據(jù)包。它可以支持并收集以下協(xié)議的口令信息:TELNET、FTP、POP、RLOGIN、SSH1、ICQ、SMB、MySQL、HTTP等。通過shell腳本的編寫可以實現(xiàn)基于Ettercap的文本內(nèi)容匹配與替換。
ettercap.sh源代碼:
#!/bin/bash
EF=/usr/bin/etterfilter
EC=/usr/sbin/ettercap
FILTER=.stringreplace.ef
echo "Remember, Press q to qiut!"
echo "Which data in the packet do you want to change?"
read DATA1 //輸入想替換的文本
echo "what do you want to change $DATA1 to ?"
read DATA2 //替換成的文本
#(echo $DATA1|wc -m)-(echo $DATA2|wc -m)
#if [((echo $DATA1|wc-m)-(echo $DATA2|wc -m))!=0]
# then
# echo "The numbers of characters of $DATA1 must be
the same with $DATA2"
# exit
rm -rf ./change_data
mkdir ./change_data
DIR=change_data
cd $DIR
touch .stringreplace.filter
FILE=.stringreplace.filter
echo "if(ip.proto==TCP && tcp.src == 80){" > $FILE
echo "">>$FILE
echo "if (search(DATA.data, \"$DATA1\")){" >> $FILE
echo " replace(\"$DATA1\",\"$DATA2\");">> $FILE
echo "}">>$FILE
echo "}" >>$FILE
$EF $FILE -o $FILTER
$EF -t $FILTER
$EC -i eth0 -Tq -F $FILTER -M arp
echo "You have successfully quited changing $DATA1 to
$DATA2"
4 實驗結(jié)果及分析
通過在終端下運行shell[3]腳本即可實現(xiàn)基于文本的隱藏與替換。為了方便用戶操作, 基于JAVA Swing組件[4]編寫了如圖3所示的軟件。
用戶可以按要求填寫內(nèi)容,然后單擊替換按鈕后程序即可運行。當(dāng)內(nèi)網(wǎng)用戶發(fā)出請求后,若響應(yīng)內(nèi)容中包含用戶要替換的內(nèi)容,NAT服務(wù)器會將該文本替換成用戶設(shè)定的,然后結(jié)果信息返回給用戶,從而實現(xiàn)網(wǎng)絡(luò)文本的替換。
在Linux操作系統(tǒng)下,實驗結(jié)果如下:圖4所示為替換之前的文本內(nèi)容,圖5所示為替換之后的文本內(nèi)容,從而實現(xiàn)了網(wǎng)絡(luò)文本的隱藏與替換功能。
在html網(wǎng)頁中,<body>標(biāo)簽中的文本內(nèi)容基本上都可以匹配并替換成預(yù)先設(shè)定的,然而有的內(nèi)容是通過腳本語言實現(xiàn)的,還有很多腳本文件是通過壓縮文件發(fā)送到客戶端的,這種的就匹配不到。
針對這種情況,可以利用iptables的過濾無效數(shù)據(jù)包的功能,當(dāng)發(fā)現(xiàn)某網(wǎng)頁中包含想要替換的文本但卻替換不了時,可以將該數(shù)據(jù)包過濾掉。應(yīng)用程序界面如圖6所示。
本文針對NAT服務(wù)器對流入內(nèi)網(wǎng)的不良文本信息的隱藏和替換問題,基于Netfilter/iptables模塊和MITM技術(shù),在Linux環(huán)境下通過L7-filter和Ettercap技術(shù)實現(xiàn)了網(wǎng)絡(luò)文本信息的隱藏和替換。同時,通過網(wǎng)絡(luò)實驗驗證了其有效性。
參考文獻(xiàn)
[1] CACHE J, WRIGHT J.黑客大曝光:無線網(wǎng)絡(luò)安全[M].李瑞民,譯.北京:機(jī)械工業(yè)出版社,2012.
[2] RASH M. Linux防火墻[M]. 陳健,譯. 北京:人民郵電出版社,2009.
[3] 豐士昌. Linux指令與Shell編程[M].北京:科學(xué)出版社,2012.
[4] 王鵬,何昀峰. Java Swing圖形界面開發(fā)與案例詳解[M].北京:清華大學(xué)出版社,2008.
[5] 白滔,劉大滏. Linux下怎樣利用Iptables實現(xiàn)網(wǎng)絡(luò)防火墻的監(jiān)控功能[J]. 貴州氣象, 2006,30(4):33-35.
[6] 郝慧珍,傅汝林.基于IP偽裝的網(wǎng)絡(luò)安全技術(shù)研究[J].成都理工學(xué)院學(xué)報,2002,29(3):315-319.
[7] Zhang Lixia. A retrospective view of network address translation[J]. IEEE Network, 2008,22(5):8-12.
[8] HEAGARTY T.Using iptables and the netfilter framework[OL].(2007-03-xx)[2012-12-13]inDEPTH, www.ipmagazine.org/en: LINUX+DVD 3/2007.
[9] ANDREASSON O.Iptable tutorial[OL].http://www.frozentux.net/documents/iptables-tutorial/.