最近最夯的資安新聞,應該就是SSL Heartbleed漏洞事件了。這個漏洞起因於OpenSSL函式庫程式設計上的一個小缺失,導致惡意使用者只要利用特製的SSL封包攻擊有此漏洞的網站伺服器,就可能取得每次最多64K的記憶體內容資訊。
查詢所用的OpenSSL版本
首先,確認系統上的OpenSSL版本是否為此次受到影響的版本。可在Linux系統主機上以「openssl version -a」指令來取得OpenSSL版本的相關資訊,如圖1所示,OpenSSL版本為1.0.1c,是有Heartbleed漏洞的版本。
|
▲圖1 顯示目前版本為1.0.1c,有Heartbleed漏洞。 |
再來,確認網站伺服器是否有Heartbleed漏洞。
確認是否有Heartbleed漏洞
想要檢查自身網站伺服器是否內含Heartbleed漏洞,可以採用以下兩種方式:
第一種方式是,如果網站伺服器是公開網站(即網路上可存取到的網站),以網路上的測試網站來直接測試網站伺服器,如下為常用的測試網站:
https://filippo.io/Heartbleed/
http://possible.lv/tools/hb
只要輸入自身網站伺服器的IP資訊,即可利用該測試網站來測試目前的網站伺服器是否隱含Heartbleed漏洞。
第二種方式則是以telnet指令的方式來檢查網站伺服器的SSL版本。可利用「telnet <網站伺服器IP> 80」指令來連接網站伺服器。在連接成功後,手動輸入「get / http://1.1」的HTTP指令,即可從回傳資訊取得相關版本資訊,如圖2所示。
|
▲圖2 從回傳資訊取得相關版本資訊。 |
利用程式測試漏洞
在確認內含Heartbleed漏洞後,再到「https://github.com/noxxi/p5-scripts/blob/master/check-ssl-heartbleed.pl」網站取得測試程式。
然後,執行指令「./ check-ssl-heartbleed.pl -s <受測網站伺服器>」,以該程式測試有此漏洞的網站伺服器,即可能發現如圖3所示的輸出,如果有此漏洞,將會回傳最多64K的系統記憶體內容。
|
▲圖3 以程式測試有此漏洞的網站伺服器。 |
說明過如何檢測網站伺服器是否具有Heartbleed漏洞後,接下來講解如何利用netfilter機制來阻擋此漏洞的攻擊。
簡介netfilter/iptables
Linux作業系統從Kernel 2.4開始支援netfilter/iptables,發展至今,netfilter/iptables已成為Linux系統上最有名的L4防火牆(Firewall)軟體,除了優異的L4防火牆過濾功能外,netfilter也發展相當多的外掛模組(稱為patch-o-matic),更將防火牆功能延伸至L7層級。
在本文中,只需使用L4的防火牆功能,即可阻擋Heartbleed的攻擊,因此將簡單說明L4功能的相關運用。
netfilter/iptables採用規則表格(Table)與規則鏈(Chain)的方式來制定過濾規則,其架構圖如圖4所示。
|
▲圖4 iptables架構圖。 |
netfilter/iptables分成三個表格,而後使用者可在個別的表格上設定規則鏈(Chain)與表格(Table),相關的功能說明如下:
1. Filter table(過濾規則表格,主要的過濾規則大多設定在此表格中)
- 此表格包含input、output、forward等規則鏈。
- 通常可利用封包的通訊協定(例如僅限定TCP封包)、來源與目的IP及通訊埠等相關封包資訊來進行過濾。
- 可利用封包的MAC資訊進行過濾。
- 可用來限制封包流量(如每分鐘所能通過的最大封包量),以避免拒絕服務(Denial Of Service)攻擊。
2. Mangle table(修改規則表格,主要用來修改來往封包的內容)
- 此表格包含prerouting及output等規則鏈。
- 可用來修改封包的TTL MARK TOS等資訊。
- 通常用來辦別網路服務的種類。
3. Nat table(NAT規則表格,主要用來實作SNAT、DNAT等功能)
- 包含prerouting、output、postrouting等規則鏈。
- 支援SNAT、DNAT等功能。
簡單說明過netfilter/iptables的表格用途後,接著以一個封包實際進入主機後會經過netfilter/iptables架構的流程為例,說明netfilter/iptables架構中相關的規則鏈用途,以下說明netfilter過濾封包流程,如圖5所示。
|
▲圖5 netfilter過濾封包流程。 |
封包進入主機時,會先進行PREROUTING規則鏈,此規則鏈主要是負責封包的前置處理,例如判別封包目的位址為本機(如為本機,即將封包傳遞至INPUT規則鏈處理)或需要轉發(即將封包傳遞至FORWARD規則鏈處理)。