緊急應對Heartbleed危機 藉防火牆機制擋SSL漏洞

最近最夯的資安新聞,應該就是SSL Heartbleed漏洞事件了。這個漏洞起因於OpenSSL函式庫程式設計上的一個小缺失,導致惡意使用者只要利用特製的SSL封包攻擊有此漏洞的網站伺服器,就可能取得每次最多64K的記憶體內容資訊。

一般如果需要實作DNAT功能(亦即虛擬伺服器功能,就會在此規則鏈中設定規則更改目的IP的資訊),如PREROUTING規則鏈發現所接收之封包的目的IP並非本機時,即會將封包傳遞至FORWARD規則鏈進行後續的處理,否則會把封包傳遞至INPUT規則鏈進行處理。

在本文中即是要利用此規則鏈來設定阻擋封包內含有Heartbleed封包的攻擊。在本機將封包處理完畢後,就會將封包傳遞給OUTPUT規則鏈進行處理,最後再將封包傳遞至POSTROUTING規則鏈進行後續的處理,亦即一般所熟知的SNAT功能(一個公共IP可供多個內部主機使用,所謂的IP分享器功能即是在此規則鏈中完成)。

如上所述為netfilter的架構,接著繼續說明netfilter的管理程式(iptables)的用法。

認識iptables語法結構

使用者可以利用這個程式來設定防火牆規則,以下將簡略說明iptables的語法結構,其語法結構如下所示:


其中,[- t table]是用來指定要設定那個規則表格的規則,如未指定,即預設為filter規則表格。而command,指的是命令,通常後會接規則鏈名稱,其常用命令如下:

-A:在指定的規則鏈中新增一個規則。
-D:在指定的規則鏈之後刪除一個規則。
-F:清除規則鏈中的規則,例如執行「iptables -F」指令將會清除所有規則鏈的資訊。
-L:顯示規則鏈內的所有規則。
-I:在規則鏈插入規則。

至於[match],代表比對條件,設定要比對的條件式,常用的比對條件如下:

-d:指定套用規則的目的主機或IP位址。
-i:指定套用規則的網路介面名稱,如eth0。
-p:提供比對通訊協定功能,主要比對TCP、UDP及ICMP三種通訊協定的封包。
-m:指定欲比對條件時所使用的模組,例如要比對MAC資訊,即可用mac模組。在本文中由於要比對封包內容來尋找是否含有惡意的Heardbleed封包,所以採用u32模組來比對。

最後的[-j],則是指定一旦封包符合條件時所要執行的動作,常用動作選項如下:

ACCEPT:表示符合條件的封包允許通過。
DROP:表示將符合條件的封包丟棄。
RETURN:表示直接離開目前規則,直接跳到下個規 則比對。
QUEUE:表示將封包重導到本機的佇列(QUEUE) 中,通常用來供其他應用程式處理。
MASQUERADE:將封包來源的IP位址改為防火牆傳 送封包之網路介面的IP位址,此選項在撥接連線上特別有用,因為在撥接連線後,每次所得到的IP均不同,因此無法使用靜態的方式指定來源IP,此時即可利用此選項來動態指定來源IP。
LOG:設定在核心紀錄檔中,記錄封包連線相關紀 錄,可利用dmesg指令查看。
ULOG:將相關的封包連線資訊透過ulogd程式儲存至 資料庫上。

設定實例說明

以下,試舉幾個常用的設定範例來做說明:


當所接收到的封包為TCP的通訊協定,並且該封包的目的通訊埠為22至110的範圍時即接受(ACCEPT)該封包,其中M:N指的是連續的埠。


當所接收到的封包為icmp的通訊協定,即將該封包過濾掉,一般都是利用此類設定來阻擋讀者以ICMP封包來探測主機的存活狀態


使用mac模組(-m)來設定,一旦接收的封包的MAC資訊符合XX:XX:XX,即接受(ACCEPT)該封包,一般都會用此類的設定來控管可連接的主機(這比僅使用IP資訊控管來得安全)。


使用limit模組來限定,並封包流量每秒僅能允許10個封包通過,這通常是用來避免遭受洪水封包(Flooding)的攻擊,其中的時間單位可利用/minute(每分鐘)/hour(每小時)/day(每天)來表示。


使用multiport模組來限定,僅接受(ACCEPT)目的通訊埠為220或110的封包,這與上述m:n的格式不同,m:n意謂從m至n的連續埠,而multiport可個別表示不連續埠。

以u32模組阻擋Heartbleed攻擊

在說明完相關的netfilter/iptables用法後,接下來利用iptables提供的u32模組來實作阻擋Heartbleed攻擊的封包,u32是netfilter/iptables所提供比對封包的模組,可設定相關條件式來比對來往的封包。

再以該網站測試,將會發現如下的資訊,表示已經記錄到該網站所發出的Heartbleed封包。


可以使用「dmesg | tail -10」指令查詢,該指令會將核心記錄訊息中的最後10筆記錄顯示出來,其中SRC=即是該網站的IP,如圖6所示。


▲圖6 執行「dmesg | tail -10」指令進行查詢。

如果確實有記錄到該筆紀錄,代表所設定的封包樣式確定無誤,此時即可以利用該封包的樣式來設定阻擋規則,相關指令如下:


以上指令的功用是,設定進入到本機且目的埠為443(即SSL服務埠)的封包是否符合上述的封包樣式,如果符合,就將該封包丟棄。

此時,再以該測試網站測試,如果此規則有發生作用,即會將含有Heartbleed攻擊的封包丟棄,進而在個人網站未更新OpenSSL版本之前先提供Heartbleed攻擊的保護。

<本文作者:吳惠麟,多年資安經驗,喜好利用開源碼建構相關解決方案,著有「資訊安全原理與實驗」等書。>


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!