駭客攻擊之前必定會利用掃描的方式來尋找目標的弱點,若能制敵先機,在對方開始掃描時即事先得知,就可以立即做好防範,讓對方無法得逞,這種防範未然機制,可透過即時偵測掃描動作的軟體來建構,例如本文所介紹的iplog,就能發揮極大的預警效果。
從圖1中可以得知,來源端欲與目的端完成連線,會經由下列步驟來完成連線:
1. 來源端主機送出SYN封包至目的端主機來要求連線。
2. 目的端主機收到SYN封包要求後,會回覆SYN+ACK封包給來源端主機。
3. 來源端主機收到目的端主機回覆的SYN+ACK封包後,即會回覆ACK封包至目的端主機,至此完成三向交握流程,雙方建立連線。接下來才進行真正的資料傳輸。
一旦掃描軟體與目標主機順利完成三向交握,並與目標主機完成連線,就代表該通訊埠處於開啟的狀態;反之,該通訊埠則處於關閉的狀態。此種掃描方式即稱為全連接掃描。
全連接掃描由於已完成正常的連線,所以此種掃描方式會被防火牆或入侵偵測系統(IDS)所記錄,而無法完成匿蹤的要求,也因此發展出半連接偵測技術。
半連接偵測技術即使沒有完成三向交握的步驟,也可判別出該通訊埠是否處於開啟的狀態。以下介紹半連接偵測技術的運作原理。
半連接偵測技術
由於使用全連接方式的掃描,而且已完成正常的三向交握連線,所以很容易被防火牆或入侵偵測系統所記錄,所以一般的通訊埠掃描技術大都不會與目標主機完成正常的連線以避免被記錄,此種的偵測技術稱為半連接偵測技術,以下介紹幾種常用的半連接偵測技術。
SYN封包掃描
在上述的三向交握機制中,當傳送端主機要傳送資訊至接收端主機時,會先發出SYN封包到接收端主機,一旦接收端主機接收到後,會回覆SYN/ACK封包給傳送端主機,而後傳送端主機將再回覆ACK封包至接收端主機,至此連線階段建立,方可開始傳送資訊。
SYN封包掃描即是在發出SYN封包至對方主機之後,如果對方主機有正常的回應SYN/ACK封包,即表示埠是開啟的情況,並立即發出RST封包,切斷該次連線;反之,則表示該通訊埠是處於關閉的情況。
由於並未完整地完成三向交握連線,所以防火牆或入侵偵測系統並不會記錄該次的連線。
SYN/ACK封包掃描技術
SYN/ACK掃描是利用繞過三向交握機制中第一步的SYN封包傳送,而直接利用傳送SYN/ACK封包至目的主機上的埠口。
由於TCP協定具有連接性的性質,當目的埠口接收到此封包後,若其處於開啟的狀態,即會知道此封包並不是合法的封包(因為沒有相對應SYN封包),而直接丟棄(Drop)。
但如果目的通訊埠是關閉的狀態,則會回傳RST封包(直接重置該連線),SYN/ACK掃描即可利用此種特性來確認該通訊埠是否為開啟的狀態。
FIN封包掃描技術
FIN掃描是利用繞過三向交握第一步的SYN封包傳送,而直接利用傳送FIN封包至目的主機上的通訊埠,當目的通訊埠接收到此封包後,如果它是開啟(Open)的狀態,就知道此封包並不是合法的封包(因為沒有相對應SYN封包),而直接丟棄。
但如果目的通訊埠是關閉的狀態,則會回傳RST封包(重置該連線),FIN掃描即可利用此種特性來確認通訊埠是否在開啟的狀態。
當駭客經由掃描目標主機得到作業系統和通訊埠的相關資訊後,即會再利用相關的攻擊程式進行攻擊,因此若能在駭客攻擊的掃描階段時,就偵測出不法的掃描意圖,即可在駭客攻擊之前提早因應,防患於未然,此部分即可由iplog程式來完成。
安裝iplog
先至iplog網站中取得最新版本(筆者所取得的版本為2.2.3)。解壓縮後,執行下列指令編譯:
筆者編譯程式時,在iplog_options.c程式中的443行曾經出現語法錯誤的問題。這是因為有些C編譯器不支援print_help(void)函式的寫法(筆者所使用的C編譯器版本為4.1.1)。
由於print_help(void)函式僅是用於顯示幫助(Help)資訊,無實際功能,所以讀者可將該函式內的相關程式碼刪除,僅留下exit()函式即可。
更改後的函式內容如下所示:
更改完成後,再重新進行編譯即可。iplog的組態檔位置資訊是直接寫在原始碼中,預設為「/etc/iplog.conf」。
讀者若想更改組態檔預設的位置,可以直接更改iplog.h檔案中的#define CONFFILE "/etc/iplog.conf",將預設組態檔的位置改為自訂的檔案位置,再重新進行編譯即可。