一般常用 Gmail 來作網路郵件的使用者,可能
都還是習慣使用 http 連線來閱讀你的電子郵件
,然而你所不知道的是 http 連線閱讀電子郵件
會讓你所有隱私 email 被網路上的竊聽器看光
光,所有你不想被知道的隱私與祕密都將被一
覽無遺。
因此為了在閱讀 Gmail 電子郵件時有安全的連
線,有了 https 的連線:
https://mail.google.com/mail/
要通過 https 的連線,才不會讓你在閱讀電子
郵件時無意間跟大家"分享"了 XD
然而這樣就足夠安全了嗎?很不幸的,就算你
是使用 https 連線,還是可能遭到連線劫持的
攻擊。因為 Gmail 採用的 cookie 連線資訊存
檔時並沒有使用 https 的方式進行連線。
如果你以為這只是理論的話就錯了 XD 因為在
最新的 Defcon 16 中,Mike Perry 發現了這個
安全漏洞並在一年前就通知 Google 進行改善
,這一年來 Mike Perry 也沒閒著,他寫個一
個小工具程式證明這個漏洞,並計劃在兩個星
期內公開這個程式。
為了要保護 Cookie 檔案的安全儲存,Google
提供了一個新的選項幫我們做到這項安全設定
,那就是 永遠使用 https 這個選項。設定方法
如下兩個步驟就完成:
一、點選 Gmail 主視窗的右上設定選項
二、進入設定頁面後,點選永遠使用 https 這
個選項。
如此就可以保護你的 Gmail 連線不受到惡意攻
擊。
相關文章:
Google 推網站安全掃描軟體 ratproxy
相關連結:
New tool to automate cookie stealing from
gmail and others...
New tool to automate cookie stealing from
gmail, facebook, amazon ...etc
Official Gmail Blog: Making security easier
Enabling the HTTPS setting
2008年8月12日 星期二
Gmail https 與 http 連線安全漏洞 - 永遠使用 https
Labels:
永遠使用 https,
照片,
網路安全,
cookie,
Gmail,
google,
http,
https,
network security
2008年6月15日 星期日
父親節快樂!?
這不是愚人節的新花招,也不是惡搞,只是每
個國家的父親節日期都不太一樣(那母親節呢
?其實每個國家日期也是不太一樣的)。
剛讀到 isc sans 的Marcus Sachs 文章時,才稍
微拓展了國際觀,而且要跟各位長官報告的是
這種國際觀不用去申辦多重國籍喔 ... ;)
文章節譯如下:
給所有身為父親的讀者們(現在我也是了;),
獻上我們最衷心的祝福父親節快樂。孩子們
,如果你不住家裡的話記得打電話跟家裡的
老爸問好;如果你仍住在家裡的地下室的話
,記得上樓感謝老爸為你支付高速網路服務
的帳單。
當你在電話中跟老爸問候時,記得請他將家
裡的電腦開啟動自動更新服務,將防毒軟體
更新到最新的資料庫,並且確保防火牆的設
定正確無誤。這三個重點可以讓你遠離大部
份的木馬病毒程式。雖然如此,有些事情仍
然是要靠自己小心的,比如你不能阻止老爸
上網下載方便好用的各種工具程式,或者是
使用檔案交換工具。但至少我們可以教他注
意最新的網路威脅及相對應的反制方法。
個國家的父親節日期都不太一樣(那母親節呢
?其實每個國家日期也是不太一樣的)。
剛讀到 isc sans 的Marcus Sachs 文章時,才稍
微拓展了國際觀,而且要跟各位長官報告的是
這種國際觀不用去申辦多重國籍喔 ... ;)
文章節譯如下:
給所有身為父親的讀者們(現在我也是了;),
獻上我們最衷心的祝福父親節快樂。孩子們
,如果你不住家裡的話記得打電話跟家裡的
老爸問好;如果你仍住在家裡的地下室的話
,記得上樓感謝老爸為你支付高速網路服務
的帳單。
當你在電話中跟老爸問候時,記得請他將家
裡的電腦開啟動自動更新服務,將防毒軟體
更新到最新的資料庫,並且確保防火牆的設
定正確無誤。這三個重點可以讓你遠離大部
份的木馬病毒程式。雖然如此,有些事情仍
然是要靠自己小心的,比如你不能阻止老爸
上網下載方便好用的各種工具程式,或者是
使用檔案交換工具。但至少我們可以教他注
意最新的網路威脅及相對應的反制方法。
2008年5月24日 星期六
BotNet 針對 SSH 嘗試暴力攻擊
根據 SANS Internet Storm Center 的報告,
最近 dshield 的觀察發現,最近針對 ssh port
22 的嘗試暴力攻擊事件增加。
卡爾森大學的 Jim Owens 以及 Jeana
Matthews 對此發表了一篇相關研究報告,這
篇研究報告中也提到針對這種攻擊的常見防護
機制的評比,值得網管一讀。
這些攻擊型態使用間隔相當長的時間,來嘗試
暴力攻擊 SSH(Secure Shell) 的帳號、密碼,以
此躲避入侵偵測系統(IDS)以及預防入侵系統
(IPS) 的偵測及鎖定。某些攻擊者使用了 botnet
來達到規避偵測系統設定的臨界值。
研究報告中提出的相關解決方案有:
1. 使用如 DenyHosts, fail2ban, BlockHosts 等
主機防護型軟體、配合 TCP Wrappers 進行防
護控管連到伺服器的連線。
2. 不允許 root 帳號直接登入。
3. 不使用易猜測的帳號名稱,比如你的姓、名
,學術單位經常列出使用者代號,成了被攻擊
的首要目標。
4. 強制使用不易猜測的密碼管理,或強制使用
公開金鑰的登入方式來取代單純使用密碼的認
證。
5. 使用 iptables 或類似的主機存取防護管制,
在防火牆之外多設幾道防護的縱深。
相關文章:
入侵偵測系統 IDS(Intrusion Detection System)
CIA 確認網路攻擊造成停電
最近 dshield 的觀察發現,最近針對 ssh port
22 的嘗試暴力攻擊事件增加。
卡爾森大學的 Jim Owens 以及 Jeana
Matthews 對此發表了一篇相關研究報告,這
篇研究報告中也提到針對這種攻擊的常見防護
機制的評比,值得網管一讀。
這些攻擊型態使用間隔相當長的時間,來嘗試
暴力攻擊 SSH(Secure Shell) 的帳號、密碼,以
此躲避入侵偵測系統(IDS)以及預防入侵系統
(IPS) 的偵測及鎖定。某些攻擊者使用了 botnet
來達到規避偵測系統設定的臨界值。
研究報告中提出的相關解決方案有:
1. 使用如 DenyHosts, fail2ban, BlockHosts 等
主機防護型軟體、配合 TCP Wrappers 進行防
護控管連到伺服器的連線。
2. 不允許 root 帳號直接登入。
3. 不使用易猜測的帳號名稱,比如你的姓、名
,學術單位經常列出使用者代號,成了被攻擊
的首要目標。
4. 強制使用不易猜測的密碼管理,或強制使用
公開金鑰的登入方式來取代單純使用密碼的認
證。
5. 使用 iptables 或類似的主機存取防護管制,
在防火牆之外多設幾道防護的縱深。
相關文章:
入侵偵測系統 IDS(Intrusion Detection System)
CIA 確認網路攻擊造成停電
2008年4月2日 星期三
Sony PSN 網路安全漏洞
Sony 警告可疑的 PlayStation Network (PSN) 攻擊行動,PSN 網路可能已經因為安全
漏洞遭到駭客攻擊,PSN 的使用者資料也可能遭到損害。
Sony 仍堅稱這個未經授權的網路存取的可能性是極低的。PSN 網路使用者的信用卡
資料"應該"是不可能被竊取。
Sony 指出他們已經修正該漏洞,使用者已經不再需要擔心帳號的安全問題,但仍然
要求使用者盡速登入 PSN 網路帳號。如果可以用原本的帳號密碼登入 PSN 網路的話
,表示帳號並未遭到盜用。
如果在登入 PSN 網路時遇到問題,表示你的帳號可能已經遭到盜用,請立即聯絡
Sony 的客服部門。
2011/06/01 update:
歷史重複,Sony 2011 年四月中 PSN 再度遭到入侵,並且在第一次回復後沒多久
再度被入侵,到五月底開始第二次的系統修複,仍斷斷續續無法全力修復。
漏洞遭到駭客攻擊,PSN 的使用者資料也可能遭到損害。
Sony 仍堅稱這個未經授權的網路存取的可能性是極低的。PSN 網路使用者的信用卡
資料"應該"是不可能被竊取。
Sony 指出他們已經修正該漏洞,使用者已經不再需要擔心帳號的安全問題,但仍然
要求使用者盡速登入 PSN 網路帳號。如果可以用原本的帳號密碼登入 PSN 網路的話
,表示帳號並未遭到盜用。
如果在登入 PSN 網路時遇到問題,表示你的帳號可能已經遭到盜用,請立即聯絡
Sony 的客服部門。
2011/06/01 update:
歷史重複,Sony 2011 年四月中 PSN 再度遭到入侵,並且在第一次回復後沒多久
再度被入侵,到五月底開始第二次的系統修複,仍斷斷續續無法全力修復。
2008年2月23日 星期六
Protect your program from Security Holes
原文作者為 scott at santafe dot edu
常見的系統、程式安全漏洞,大致上可包含幾種情況:
http://www.undergroundnews.com/kbase/underground/hacking/
findhole.htm
1. 有瑕疵的 SUID/SGID 程式(特別是包含 gets(),sprintf(),
strcpy(),system(), popen(),execlp(),execvp() 等函式的
程式),例如 sendmail, httpd ,imapd ,samba 等 suid to
0 的瑕疵程式都可能被用來獲取系統 root 權限,或是
sgid to mail 的瑕疵程式可能被用來讀取他人信件(filter
in elm package),或是允許 shell escape 的程式。
2. 程式接收非(設計師/使用者)預期的輸入值。
( eg. Buffer overflow, delimiter problem, shell
escape, format string, directory traversal, path
disclosure, css, csrf, sql injection )
( ref: shellcode, ';', ':', "\!", "..", '%', '<', '>',
"<", ">", "\r" CR, "\n", LF, 或以其他編碼方式表現以上字元)
3. (Kernel)Race condition.
比如會用到暫存檔的程式,在開啟暫存檔之前,我們可以先預測暫
存檔的檔名,在程式存取之前 "先" 生出這個檔給他去存取,而這
個我們先的概念就是 "race" 的由來,當我們能比正常程序搶先一
步產生檔案,那這個檔案就可以用來覆蓋或是塞資料進去想要改變
的檔案
(ex: symbolic link, tmp file, 利用紅燈間隙闖越馬路或迴轉)
4. (Kernel)Device driver bug.
5. DoS. (Denial of Service)
系統資源的佔用,如記憶體(memory leak),硬碟空間,
process(fork bomb)
( ref: malloc bomb, memory leak, Intel Pentium f00f bug,
land:same ip ports, teardrop by route,ip fragmentation,
nestea, jolt, ping of death,bonk, jolt2 )
6. Secrecy revealed. (eg. cookie, screenshot、
%xwd > filename &)
7. Naming prediction problem.
Symbolic links in /tmp to be appended/overwritten (會被用
來修改、覆蓋可預期檔名的檔案)
( ref: race condition, tmpnam() )
hotmail email url predictable and email content exposing.
8. 病毒、木馬程式 (Trojans)、被修改過的常用工具程式
( ref: Elk cloner, Staog, Bliss, rootkit, logic bomb,
time bomb )
How to avoid , defeat security breaches ?
Secure UNIX Programming FAQ
How to write secure code.
1. SUID/SGID 等瑕疵程式問題:
==> 寫程式時,即避免使用會有問題的函式,或者在使用較易出問
題的函式時預先處理好傳入的參數、資料。
(ref: 程式碼稽核軟體 rats, flawfinder, its4)
2. 程式接收非預期的輸入值:
==> 在接收任何輸入值前,做好資料的偵錯步驟,其中包括資料長
度的確認,資料是否是合法字元的確認。
(ref: 程式碼稽核軟體 rats, flawfinder, its4)
3. Race condition:
==> 在執行 critical section 的時候,須以各種 locking 方法
確保沒有其他程式能同時存取重要的資料。盡量不在
public /tmp 存取暫存檔案,考慮 /usr/tmp, home 目錄等其他
使用者無使用權限的目錄。使用更嚴謹的亂數暫存檔函式,不要
只用 getpid() 等容易遭到窮舉法攻擊的簡易參數。
(ref: atomic operation, mutual exclusive, bounded waiting,
spinlock, semaphore, disable interrupt, Bakery algorithm)
4. Device driver bug:
==> 盡量以外掛模組方式載入 driver,如此在出問題時較有機會
以移除模組的方式避免安全問題或主機死當。
5. DoS. (Denial of Service):
==> 對於任何電腦資源的使用必須設定上限,例如 process 數目
,硬碟 quota 限制,同時接受(同一來源、使用者)連線的數目
(application layer, tcp udp layer, ip layer...etc),使用
memory garbage collection library, 利用程式語言的
assertion 驗證 program memory resource(stack, heap),對於
使用者來說程式的漏洞、暇疵造成的阻斷服務問題,只有勤加修
補更新程式版本。
6. Secrecy revealed:
==> 程式設計師在使用資源內定的權限時,必須限定預設的權限
大小,以免使用者在使用時不自覺的洩漏資料。
7. Naming prediction problem:
Symbolic links in /tmp problem
hotmail email url predictable and email content exposing.
==> 使用暫存檔案時,必須使用不可預測的檔名,以免資料
外洩、損毀。存取暫存檔時,加上確認檔案為執行程式擁有者的
檢查碼。(ref:race condition, mktemp(), mkstemp())
==> 使用網頁參數當作信件、文件儲存時,必須使用無法預測的、
不重複使用的參數序號產生方法,以避免遭到猜測或窮舉法攻破,
對於存取文件的 URL 參數序號使用也要設定有效時間,當過久未
使用或動作,即自動取消該 URL 參數的有效性。
(ref: md5, /dev/random, /dev/urandom, timeout,
force reload, cookie)
8. Trojans:
==> 使用木馬偵測軟體、網路掃描軟體、掃毒軟體或可確認程式
檔案完整性的軟體,做自身主機的安全檢查。
(ref: md5 signatures, Trusted systems)
(ref: multi-security-level, no read up/no write down)
Protect yourself from Network Spoofing
Network Spoofing from buttom up.
由乙太網路封包,到應用程式層的網路協定假造
*USB port sniffing and replay attack
在生物辨識技術上,有一個步驟是 scanner 的資料到後端資料庫之間傳輸的驗證工作,假如我們可以從中竊取 usb port 上有關某個指紋、眼球虹彩、臉型影像的資料,那麼將有機會利用 replay attack 做資料的重複傳輸,以得到正確驗證結果,通過生物辨識器的檢驗。
*ARP packet and MAC adress spoofing
在一般的 HUB 區網中,甚至連 ARP 攻擊都不必,可以直接進行 IP 層以上的攻擊,但是現行的區網中,幾乎都是使用 switch 的連結,在一般的連結下,在同一個 port 的連線才看得到彼此的封包,要了解到 switch 只有在開機時會有短暫時間的 broadcast 模式,在每個 port 第一次看到的封包,都會記錄為該 port 的區網主機 MAC 位址,在一些較舊的 switch 上,我們可以傳送一個乙太網封包,讓 switch 更新該 port 的 port/MAC address 對映表。
ARP 協定的存在,就是為了乙太區域網路內的傳輸,因為乙太網路所使用的位址並非一般使用者所知的 IP 位址,而是利用 MAC 位址做為傳輸的來源與目的辨識。而知道 MAC 位址後乙太網是可以傳輸沒錯,但是怎麼跟上層 IP 位址銜接起來,就是 ARP 這個協定來負責。
ARP 這個協定的原理就是利用 IP 位址去查詢該 IP 位址對映的 MAC 位址,我們以一個實際的查詢例子來舉例說明:
當 A 主機要在乙太網上傳送給 B 主機時,他會送出一個 ARP query,這個 ARP 的封包包含 B 的 IP,但是沒有 B 的 MAC,直到 B 主機看到這個 ARP query,他就會回應一個 ARP reply,此 B 送出的 ARP reply 就包含了 B 的 IP 以及 B 的 MAC
Host A has IP address IPa and MAC address MACa
Host B has IP address IPb and MAC address MACb
(ARP query)
A 送出封包查詢:
A - what is IPb's MAC address (ARP query) -> broadcast
這個 ARP query 包含了 A 的 IPa、MACa 以及要查詢的 IPb,以及MAC0(00:00:00:00:00:00)
(ARP reply)
B 收到這個 query 後會發出以下封包:
B - IPb is my IP, and my MAC addrees is MACb -> A
這個 ARP reply 包含了 B 的 IPb、MACb 以及目的地 IPa、MACa
=> A 現在知道 B 的 MAC 位址,可以藉此傳乙太網封包(ethernet frames)給 B 了。
在看過 IP 層的攻擊後,相信讀者們已經知道如何進行 ARP 協定的攻擊動作了,沒錯,就是假造 ARP reply 的封包。假設 A, B 要在乙太網上傳輸,我們的主機是 X,我們假造 ARP reply 使得 A 以為 B 的 MAC 位址是 MACx,使得 B 以為 A 的 MAC 位址是 MACx,如此就可以進行 man in the middle attack 了。
(ref: hijacking)
我們再看看之前說針對 A、B 主機的攻擊,A 和 B 並不限定在一般主機上,還可以是 Router,Gateway 主機。如此就可以輕易的控制整個 intranet 的網域傳輸。在實作的方法中,我們可以送出假造的 ARP reply 到所要攻擊的主機上,使該主機自動更新 ARP table,或者是以極高頻率的 ARP reply 封包,使得 switch port 在開機時儲存的 port/MAC 對映更新為我們所要的 port/MAC 對應。
(ref: arp race, DoS)
針對 router/gateway 的攻擊,我們可以假造 ARP reply 讓其他主機以為 router/gateway 的 MAC 為 FF:FF:FF:FF:FF:FF,也就造成 broadcast 的傳輸模式,此時就和在 HUB 中一樣,可以監控所有的區網封包。
如果我們假造的 ARP reply 是不存在的 MAC 位址,就會造成阻絕攻擊。這種情況在 man in the middle attack 之後也會發生,除非攻擊者將原本正確的 MAC 位址再用 ARP reply 更正,否則會使得被假造的雙方無法進行傳輸,直到該假造的 ARP 資料過期或更新為正確 MAC 位址。
(ref: arp entry expire)
某些主機在阻絕式攻擊之後,若是完全死當,則假造方甚至可以加上 IP 的假造,完全取代受攻擊主機。
(ref: cloning, replace entity)
假如你所在的網路環境中, 有可能將 switch 以 MAC spoof 攻擊,使他當機, 那麼可以使用和所要假造的主機相同的 MAC address,讓 switch 以為不同的 port 中有相同的 device 連接, 如此在 switch 丟封包時,就會將原本要送的封包, 同時丟一份到我們所使用的假 MAC 網段的 port, 但須注意這只能做單向的竊聽。
*TCP/IP Spoofing
An Overview of TCP and IP Spoofing
原文作者: Kapil Sharma
原文作者的網址: http://www.linux4biz.net
一個 spoofing 攻擊型態就是假造來源的 IP 位址。也就是冒充別人的一種方法。在大部份的 Unix(包括 Linux)的作業系統上,有許多應用/工具程式在確認使用者時, 都倚靠來源 IP 位址作為輔助, 甚至一些人在為自己網域做安全管理的工作時, 也是以主機 IP 位址來做權限控制。這裡要提出的是, 以使用者來源 IP 來做辨認並不是一個可靠的方法。使用者的來源 IP 可能是假造的。
為了瞭解假造來源位址的過程, 我們將先解釋 TCP 和 IP 做確認的程序, 接著再說明攻擊者如何假造矇騙過關。
當一個 TCP 的連線建立時( virtual circuit ), 每一個 TCP封包都會貼上一個序號號碼, 以做為標示使用。
連線雙方的主機都利用這個序號來做封包傳遞的錯誤檢查和報告。
Rik Farrow 在他一篇名為 "Sequence Number Attacks" 文章中提到有關序號系統的說明如下:
序號是用來告知已經收到資料的確認回應。在 TCP 連線的一開始, client 會送出一個貼有 TCP 起始序號的封包, 但是沒有確認( 當然, 此時也不可能有確認封包, 除非是假造的 )。如果這時對方有一個 server 程式在對方主機上跑, 則 server 端會送回貼有他自己起始序號的 TCP 封包,和一個確認值( client 端送來的起始序號加一 )。
當 client 端收到這個封包時, 他必須送回他自己的確認值( server 端的起始序號加一 )
/*註:
TCP three way handshake:
ISN = Initial Sequence Number = 起始序號;SN = Sequence Number
1. client --- client SYN {ISN} ----> server
2. server --- server SYN {ISN} + ACK SN ({client SYN ISN}
+ 1) ---> client
3. client --- ACK SN ({server SYN SN} + 1) ---> server
real data communication ....
*/
因此, 入侵者必須解決三個問題:
1. 他必須假造一個來源位址
2. 他必須跟攻擊目標的序號確認無誤
*3. 他必須防止假造的 IP 送出連線錯誤的訊息,造成連線中斷
第二點是較困難的步驟, 因為攻擊目標設定起始序號後, 入侵者必須正確的回應才可保有這個連線狀態。當入侵者能猜到這個序號, 他就可以和攻擊目標的序號系統同步, 建立一個有效的連線了。通常我們所用的方法是,用正常的連線來收集對方主機的序號順序,再加以比對並猜出對方主機產生序號的演算法。
第三點通常是用阻絕攻擊法達成,最完美的狀態下是該主機不存在,或當時未上線,但是現實總是比較複雜的,所以攻擊者通常會用阻絕式攻擊,讓所要假冒的主機到目標主機的封包傳送,比攻擊方到目標主機慢就可以了。
(因此當你以為主機遭受阻絕式攻擊只無法上線服務的損失時,其實更可能的是,他要以你的主機 IP 為跳板進行攻擊)
(ref: race, synflood indicate spoofed target! risks of being DoSed)
當然,攻擊者在假造了 IP 之後,是不是就可以攻擊了呢? 這是不一定的,只要再仔細想一次連線的過程,讀者應該就想得到了,沒錯,就算我們把自己的位址 A 假造成了 B ,向 C 要求連線,此時 C 會回應的是 B 的位址,我們又怎麼跟 C 繼續這個連線呢 ?
其實在一些像 SMTP 這種協定下,我們還是可以繼續的,因為這種網路協定的進行,是照一定的程序 (hello、mail from、rcpt to、data、.、quit),我們可以在幾秒鐘的間隔之間,依序送出假造的 B 到 C 主機上,完成假造來源的電子郵件,這點就是 spammer 幾乎無法被查出來的原因之一。
同樣的,還有許多其他的連線也可依樣畫葫蘆使用假造來源的攻擊,這也是目前網路上最常被使用的假造攻擊。
這種假造方法我們稱為盲目式的假造 ( blind spoof ),因為在這整個過程中,完全沒有去管Server C 到底送出什麼資料。
( ref: race, DNS spoof, rpc spoof including r* protocols )
另一種假造攻擊,則是叫做主動式假造攻擊(active spoof),在這個過程中,我們還是跟盲目式假造有著類似的過程,但是我們可以利用竊聽同一區網內的假造位址,或者是利用修改網路路由器的設定,讓 C 到 B 之間的封包變成會流經 A 的路徑,我們可以用 irpas、nemesis、nmap等工具結合來假造 multicast(OSPF、EIGRP)或者是 broadcast(RIP、IGRP)的封包,將資料封包導引到我們可以竊聽的網段。這種屬於需要較多技術與能力才能完成,但是可以做的事也更多(所有 tcp/ip 上層的網路協定!)。
( ref: sniff, man in the middle attack, hijack, route inject )
當然,現在最常被用來假造來源的攻擊跳板,還包括了利用 proxy, socks, wingate server 等服務,這也是常見的方法之一。
*SSH spoofing 應用程式協定的假造問題 (ssharp)
SSH 連線的假造除了利用 TCP/IP 的 hijack 攻擊以外,最近也被發現有 SSH 應用程式層的協定假造問題,第一個是 Protocol 版本訊息的假造,第二個是 host key 的假造,原本在 TCP/IP 的 hijack 攻擊中,會讓使用者看到 Man in The Middle attack 的警告語,在這些變化後的攻擊中更難發覺。
如果在伺服器版本的訊息上,我們假造成 SSH-2.00-ManInTheMiddleHost-SSH ,也就是只支援 protocol 2 的伺服器,而非一般看到的 SSH-1.99 同時支援 protocol 1,2 的版本訊息,假設使用者之前都只使用 SSH protocol 1 做連線,我們假造的伺服器 Host key,就會讓連線變成是新建立的 SSH 連線,即使原本已經有該伺服器 protocol 1 Host Key,但因為協定版本由 1 變成 2 的關係,使用者較難注意到此差異。
同理,我們也可以由 protocol 2 變為 1 ,單看該使用者習慣使用的協定版本來做改變。
在 SSH protocol 1 中是用 hostkey 為 session key 加密使用,但是在 SSH protocol 2 中
hostkey 是用來做為訊息完整性的確認(Message Authentication Code),而在 MAC 的演算法選擇裡,是在版本訊息之後,透過類似版本訊息的作法來通知 client,在 ssharp 實作的假造攻擊中,會對 client 送出 RSA key ,這個 RSA key 在真的 server 上是沒有支援的,此時使用者就會看到新建立的 SSH 連線,而不會看到 Man in The Middle attack 的警告訊息。和真實 server 的溝通可能是 DSA 或 RSA 兩種演算法,但我們假造的 SSH server 只會送出 RSA 演算法的 key。
依照 RFC 的規定,SSH2 server 在收到 client 所列舉的多種演算法時,應該是使用第一個演算法,但是 ssharp 的假造 server 會選擇第二種演算法,也就會造成 client 出現 yes/no 的提示,而非 Man in The Middle attack 警告訊息。
/*註:
1. hostkey 是每一台 SSH server 都必須有的 public key,如果支援不同的 public key algorithm 則必須針對每一種 algorithm 各提供一把 hostkey。
2. hostkey 的功用是供 SSH client 確認該 SSH server 是他所宣稱的主機時使用。也就是 SSH client 必須先確定該連結的 SSH server 的 hostkey fingerprint 。
3. 保存 hostname 跟 hostkey 對映的方法一般有兩種: 一種是每個 client 端都保有每個所要連結的 hostname 和他所擁有的 hostkey 對映;另一種是透過 CA 作認證,client 端只保有 CA 的 hostname 與 hostkey 對映。
4. 一個 public key 的 fingerprint 就是指用 SHA-1 之類的 hash 做出十六進位的數字。方便供確認使用。
( ref: ssh-keygen -l ,再輸入你的 hostkey 檔案位址,/etc/ssh/ssh_host_dsa_key.pub under freebsd )
*/
ssharp 是修改原本的 SSH server 而來的假冒 server,他會接受任何 username/password 的登入,並開啟 shell 讓使用者使用起來像是連到真的 server,但是實際上只是在 ssharp 的 server 上使用 ssharp 的 pty 而已,這個作用就像 screen 的用法,並且也會被用來劫持/控制你的連線。
(ref: USE_MSS feature)
針對 SSH 應用程式協定層的攻擊,有以下幾種反制對策:
1. 限制 ssh client 使用時的協定版本
*USB port sniffing and replay attack
在生物辨識技術上,有一個步驟是 scanner 的資料到後端資料庫之間傳輸的驗證工作,假如我們可以從中竊取 usb port 上有關某個指紋、眼球虹彩、臉型影像的資料,那麼將有機會利用 replay attack 做資料的重複傳輸,以得到正確驗證結果,通過生物辨識器的檢驗。
*ARP packet and MAC adress spoofing
在一般的 HUB 區網中,甚至連 ARP 攻擊都不必,可以直接進行 IP 層以上的攻擊,但是現行的區網中,幾乎都是使用 switch 的連結,在一般的連結下,在同一個 port 的連線才看得到彼此的封包,要了解到 switch 只有在開機時會有短暫時間的 broadcast 模式,在每個 port 第一次看到的封包,都會記錄為該 port 的區網主機 MAC 位址,在一些較舊的 switch 上,我們可以傳送一個乙太網封包,讓 switch 更新該 port 的 port/MAC address 對映表。
ARP 協定的存在,就是為了乙太區域網路內的傳輸,因為乙太網路所使用的位址並非一般使用者所知的 IP 位址,而是利用 MAC 位址做為傳輸的來源與目的辨識。而知道 MAC 位址後乙太網是可以傳輸沒錯,但是怎麼跟上層 IP 位址銜接起來,就是 ARP 這個協定來負責。
ARP 這個協定的原理就是利用 IP 位址去查詢該 IP 位址對映的 MAC 位址,我們以一個實際的查詢例子來舉例說明:
當 A 主機要在乙太網上傳送給 B 主機時,他會送出一個 ARP query,這個 ARP 的封包包含 B 的 IP,但是沒有 B 的 MAC,直到 B 主機看到這個 ARP query,他就會回應一個 ARP reply,此 B 送出的 ARP reply 就包含了 B 的 IP 以及 B 的 MAC
Host A has IP address IPa and MAC address MACa
Host B has IP address IPb and MAC address MACb
(ARP query)
A 送出封包查詢:
A - what is IPb's MAC address (ARP query) -> broadcast
這個 ARP query 包含了 A 的 IPa、MACa 以及要查詢的 IPb,以及MAC0(00:00:00:00:00:00)
(ARP reply)
B 收到這個 query 後會發出以下封包:
B - IPb is my IP, and my MAC addrees is MACb -> A
這個 ARP reply 包含了 B 的 IPb、MACb 以及目的地 IPa、MACa
=> A 現在知道 B 的 MAC 位址,可以藉此傳乙太網封包(ethernet frames)給 B 了。
在看過 IP 層的攻擊後,相信讀者們已經知道如何進行 ARP 協定的攻擊動作了,沒錯,就是假造 ARP reply 的封包。假設 A, B 要在乙太網上傳輸,我們的主機是 X,我們假造 ARP reply 使得 A 以為 B 的 MAC 位址是 MACx,使得 B 以為 A 的 MAC 位址是 MACx,如此就可以進行 man in the middle attack 了。
(ref: hijacking)
我們再看看之前說針對 A、B 主機的攻擊,A 和 B 並不限定在一般主機上,還可以是 Router,Gateway 主機。如此就可以輕易的控制整個 intranet 的網域傳輸。在實作的方法中,我們可以送出假造的 ARP reply 到所要攻擊的主機上,使該主機自動更新 ARP table,或者是以極高頻率的 ARP reply 封包,使得 switch port 在開機時儲存的 port/MAC 對映更新為我們所要的 port/MAC 對應。
(ref: arp race, DoS)
針對 router/gateway 的攻擊,我們可以假造 ARP reply 讓其他主機以為 router/gateway 的 MAC 為 FF:FF:FF:FF:FF:FF,也就造成 broadcast 的傳輸模式,此時就和在 HUB 中一樣,可以監控所有的區網封包。
如果我們假造的 ARP reply 是不存在的 MAC 位址,就會造成阻絕攻擊。這種情況在 man in the middle attack 之後也會發生,除非攻擊者將原本正確的 MAC 位址再用 ARP reply 更正,否則會使得被假造的雙方無法進行傳輸,直到該假造的 ARP 資料過期或更新為正確 MAC 位址。
(ref: arp entry expire)
某些主機在阻絕式攻擊之後,若是完全死當,則假造方甚至可以加上 IP 的假造,完全取代受攻擊主機。
(ref: cloning, replace entity)
假如你所在的網路環境中, 有可能將 switch 以 MAC spoof 攻擊,使他當機, 那麼可以使用和所要假造的主機相同的 MAC address,讓 switch 以為不同的 port 中有相同的 device 連接, 如此在 switch 丟封包時,就會將原本要送的封包, 同時丟一份到我們所使用的假 MAC 網段的 port, 但須注意這只能做單向的竊聽。
*TCP/IP Spoofing
An Overview of TCP and IP Spoofing
原文作者: Kapil Sharma
原文作者的網址: http://www.linux4biz.net
一個 spoofing 攻擊型態就是假造來源的 IP 位址。也就是冒充別人的一種方法。在大部份的 Unix(包括 Linux)的作業系統上,有許多應用/工具程式在確認使用者時, 都倚靠來源 IP 位址作為輔助, 甚至一些人在為自己網域做安全管理的工作時, 也是以主機 IP 位址來做權限控制。這裡要提出的是, 以使用者來源 IP 來做辨認並不是一個可靠的方法。使用者的來源 IP 可能是假造的。
為了瞭解假造來源位址的過程, 我們將先解釋 TCP 和 IP 做確認的程序, 接著再說明攻擊者如何假造矇騙過關。
當一個 TCP 的連線建立時( virtual circuit ), 每一個 TCP封包都會貼上一個序號號碼, 以做為標示使用。
連線雙方的主機都利用這個序號來做封包傳遞的錯誤檢查和報告。
Rik Farrow 在他一篇名為 "Sequence Number Attacks" 文章中提到有關序號系統的說明如下:
序號是用來告知已經收到資料的確認回應。在 TCP 連線的一開始, client 會送出一個貼有 TCP 起始序號的封包, 但是沒有確認( 當然, 此時也不可能有確認封包, 除非是假造的 )。如果這時對方有一個 server 程式在對方主機上跑, 則 server 端會送回貼有他自己起始序號的 TCP 封包,和一個確認值( client 端送來的起始序號加一 )。
當 client 端收到這個封包時, 他必須送回他自己的確認值( server 端的起始序號加一 )
/*註:
TCP three way handshake:
ISN = Initial Sequence Number = 起始序號;SN = Sequence Number
1. client --- client SYN {ISN} ----> server
2. server --- server SYN {ISN} + ACK SN ({client SYN ISN}
+ 1) ---> client
3. client --- ACK SN ({server SYN SN} + 1) ---> server
real data communication ....
*/
因此, 入侵者必須解決三個問題:
1. 他必須假造一個來源位址
2. 他必須跟攻擊目標的序號確認無誤
*3. 他必須防止假造的 IP 送出連線錯誤的訊息,造成連線中斷
第二點是較困難的步驟, 因為攻擊目標設定起始序號後, 入侵者必須正確的回應才可保有這個連線狀態。當入侵者能猜到這個序號, 他就可以和攻擊目標的序號系統同步, 建立一個有效的連線了。通常我們所用的方法是,用正常的連線來收集對方主機的序號順序,再加以比對並猜出對方主機產生序號的演算法。
第三點通常是用阻絕攻擊法達成,最完美的狀態下是該主機不存在,或當時未上線,但是現實總是比較複雜的,所以攻擊者通常會用阻絕式攻擊,讓所要假冒的主機到目標主機的封包傳送,比攻擊方到目標主機慢就可以了。
(因此當你以為主機遭受阻絕式攻擊只無法上線服務的損失時,其實更可能的是,他要以你的主機 IP 為跳板進行攻擊)
(ref: race, synflood indicate spoofed target! risks of being DoSed)
當然,攻擊者在假造了 IP 之後,是不是就可以攻擊了呢? 這是不一定的,只要再仔細想一次連線的過程,讀者應該就想得到了,沒錯,就算我們把自己的位址 A 假造成了 B ,向 C 要求連線,此時 C 會回應的是 B 的位址,我們又怎麼跟 C 繼續這個連線呢 ?
其實在一些像 SMTP 這種協定下,我們還是可以繼續的,因為這種網路協定的進行,是照一定的程序 (hello、mail from、rcpt to、data、.、quit),我們可以在幾秒鐘的間隔之間,依序送出假造的 B 到 C 主機上,完成假造來源的電子郵件,這點就是 spammer 幾乎無法被查出來的原因之一。
同樣的,還有許多其他的連線也可依樣畫葫蘆使用假造來源的攻擊,這也是目前網路上最常被使用的假造攻擊。
這種假造方法我們稱為盲目式的假造 ( blind spoof ),因為在這整個過程中,完全沒有去管Server C 到底送出什麼資料。
( ref: race, DNS spoof, rpc spoof including r* protocols )
另一種假造攻擊,則是叫做主動式假造攻擊(active spoof),在這個過程中,我們還是跟盲目式假造有著類似的過程,但是我們可以利用竊聽同一區網內的假造位址,或者是利用修改網路路由器的設定,讓 C 到 B 之間的封包變成會流經 A 的路徑,我們可以用 irpas、nemesis、nmap等工具結合來假造 multicast(OSPF、EIGRP)或者是 broadcast(RIP、IGRP)的封包,將資料封包導引到我們可以竊聽的網段。這種屬於需要較多技術與能力才能完成,但是可以做的事也更多(所有 tcp/ip 上層的網路協定!)。
( ref: sniff, man in the middle attack, hijack, route inject )
當然,現在最常被用來假造來源的攻擊跳板,還包括了利用 proxy, socks, wingate server 等服務,這也是常見的方法之一。
*SSH spoofing 應用程式協定的假造問題 (ssharp)
SSH 連線的假造除了利用 TCP/IP 的 hijack 攻擊以外,最近也被發現有 SSH 應用程式層的協定假造問題,第一個是 Protocol 版本訊息的假造,第二個是 host key 的假造,原本在 TCP/IP 的 hijack 攻擊中,會讓使用者看到 Man in The Middle attack 的警告語,在這些變化後的攻擊中更難發覺。
如果在伺服器版本的訊息上,我們假造成 SSH-2.00-ManInTheMiddleHost-SSH ,也就是只支援 protocol 2 的伺服器,而非一般看到的 SSH-1.99 同時支援 protocol 1,2 的版本訊息,假設使用者之前都只使用 SSH protocol 1 做連線,我們假造的伺服器 Host key,就會讓連線變成是新建立的 SSH 連線,即使原本已經有該伺服器 protocol 1 Host Key,但因為協定版本由 1 變成 2 的關係,使用者較難注意到此差異。
同理,我們也可以由 protocol 2 變為 1 ,單看該使用者習慣使用的協定版本來做改變。
在 SSH protocol 1 中是用 hostkey 為 session key 加密使用,但是在 SSH protocol 2 中
hostkey 是用來做為訊息完整性的確認(Message Authentication Code),而在 MAC 的演算法選擇裡,是在版本訊息之後,透過類似版本訊息的作法來通知 client,在 ssharp 實作的假造攻擊中,會對 client 送出 RSA key ,這個 RSA key 在真的 server 上是沒有支援的,此時使用者就會看到新建立的 SSH 連線,而不會看到 Man in The Middle attack 的警告訊息。和真實 server 的溝通可能是 DSA 或 RSA 兩種演算法,但我們假造的 SSH server 只會送出 RSA 演算法的 key。
依照 RFC 的規定,SSH2 server 在收到 client 所列舉的多種演算法時,應該是使用第一個演算法,但是 ssharp 的假造 server 會選擇第二種演算法,也就會造成 client 出現 yes/no 的提示,而非 Man in The Middle attack 警告訊息。
/*註:
1. hostkey 是每一台 SSH server 都必須有的 public key,如果支援不同的 public key algorithm 則必須針對每一種 algorithm 各提供一把 hostkey。
2. hostkey 的功用是供 SSH client 確認該 SSH server 是他所宣稱的主機時使用。也就是 SSH client 必須先確定該連結的 SSH server 的 hostkey fingerprint 。
3. 保存 hostname 跟 hostkey 對映的方法一般有兩種: 一種是每個 client 端都保有每個所要連結的 hostname 和他所擁有的 hostkey 對映;另一種是透過 CA 作認證,client 端只保有 CA 的 hostname 與 hostkey 對映。
4. 一個 public key 的 fingerprint 就是指用 SHA-1 之類的 hash 做出十六進位的數字。方便供確認使用。
( ref: ssh-keygen -l ,再輸入你的 hostkey 檔案位址,/etc/ssh/ssh_host_dsa_key.pub under freebsd )
*/
ssharp 是修改原本的 SSH server 而來的假冒 server,他會接受任何 username/password 的登入,並開啟 shell 讓使用者使用起來像是連到真的 server,但是實際上只是在 ssharp 的 server 上使用 ssharp 的 pty 而已,這個作用就像 screen 的用法,並且也會被用來劫持/控制你的連線。
(ref: USE_MSS feature)
針對 SSH 應用程式協定層的攻擊,有以下幾種反制對策:
1. 限制 ssh client 使用時的協定版本
(ref: ssh -2 host)
2. 使用 SSH protocol 2 的 public key 認證,因為假造者無法利用真正的 server public key 對 client 做認證,因為兩者的版本是不同的,會出現明顯的 public key failed 錯誤訊息。
( ref: ssharp 的特性,對 server 和 client 必是以不同版本的 SSH 協定進行溝通 )
3. Double check your hostkey fingerprint :)
*可能會遭受假造攻擊的程式有下列幾項:
1. RPC ( 在 udp 協定上的 Remote Procedure Call 程式 )
2. X Window system ( all application using only ip based authentication )
3. R 系列的程式 ( wildcard trust hosts, rsh, rlogin, rexec,... )
4. OpenSSH 3.4 之前的版本
*TCP/IP 和 ARP 協定相關的工具:
1. Mendax (Linux 平台): Mendax 是個容易上手的 TCP 序號預測及 rshd 位址假造的工具。
2. spoofit.h : spoofit.h 是一個文件完備的 library, 可以讓你把 IP 假造的功能加到其他程式中。
3. ipspoof : ipspoof 是個包含了 TCP 及 IP 造假的工具。
4. hunt : hunt 是一個提供許多造假功能的網路竊聽軟體(IP, ARP)。
5. sniffit : 這是在 unix 平台上相當普及的網路竊聽軟體,他最有名的一個功能叫 touch of death,可以任意切斷竊聽中的任何連線!
http://reptile.rug.ac.be/~coder/sniffit/sniffit.html
*6. dsniff : 這是入侵者的最愛,因為他包含了 arp, dns, mac address 等假造功能,tcpkill
可以切段竊聽中的任何 tcp 協定的連線,AOL Instant Messenger, ICQ 2000, IRC, Yahoo!
Messenger chat 等協定的竊聽,也可以看到目前使用者在瀏覽的網頁,重點是還可以藉由dnsspoof 來對 ssh (protocol 1) 以及 web https 的連線監聽或甚至取代連線(hi-jacking)。
http://www.monkey.org/~dugsong/dsniff/
7. ARPoison : 使用者可以直街指定來源與目的地位址,來假造ARP reply 封包。
http://web.syr.edu/~sabuer/arpoison/
8. ARP-SK : 利用假造的 ARP request/reply 達到 spoof/hijack/DoS 主機連線。
http://sid.rstack.org/arp-sk/ 有極為詳盡的乙太網封包與 ARP 封包解說!
*9. Ettercap : 使用者可以竊聽 IP/MAC/ARP Public ARP 傳輸。並且可以在連線中植入任意字元、竊聽加密的 SSH 連線、搜集密碼、作業系統的判別、切斷連線等功能。
http://ettercap.sourceforge.net/
10. Parasite : 這是一個 daemon 程式,可以在收到 ARP request 之後自動發送假造的 ARP reply,在使用夠久的時間之後可以對整個網段做 man in the middle attack,監控整個區域網路。
值得注意的是 Parasite 並不會在攻擊後發送正確的 ARP reply 封包還原網路原狀,因此會導致阻絕式攻擊,直到他所假造的紀錄過期或特意的還原 ARP 紀錄。
http://freeworld.thc.org/releases.php?q=parasite
( ref: dsniff, arp0c, link layer attack under swith )
11. irpas 目前支援 cdp、igrp、irdp 等路由資訊的假造,並可以假造 frame 的乙太網路封包、配合 nmap 等 port scanner 工具的路由假造工具。
*針對 ARP 協定的 MAC 位址假造反制、偵測方法:
1. 使用 static IP 和 MAC 位址的對映,避免被 arp spoof 更動為假造的 MAC 位址。
(ref: static arp entry, arp -s/S under FreeBSD)
2. 使用 Reverse ARP,找出對映到同一個 MAC 位址的 IP 來源。
(ref: RARP maps MAC to IP, ARP maps IP to MAC)
3. 使用 arpwatch 觀察區網內的 MAC 位址變動情形。這是最有效的偵測方法之一。
4. 使用有 Port/MAC Binding 功能的 switch,避免別的主機更動 port/MAC 的對映。但需記住 switch 並無法防止 arp spoofing 對其他主機的影響。
5. 避免使用 DHCP 網路架構軟體,因為 arp spoof 的攻擊在 DHCP 環境中較難偵測到。
(需區別一般要求與惡意的要求)
*幾種防堵 IP 造假攻擊、察覺劫持攻擊的方法:
1.避免使用來源位址來做身份確認的動作。最好是整個作業系統堤供以密碼學為基礎的確認方法。
(encrypted file system)
2.在 Router 或防火牆上( 建議盡量在 router 這層就擋 )擋掉來自 internet 卻說他是以 intranet IP 位址為來源,或者是來自內部網路,來源卻是外部網路位址的網路封包。
(ip spoof)
3.如果必須允許 intranet 外界的可信任主機連線, 最好在 router 或 gateway 這層就啟動加密連線的功能。
(ref: ipsec, vpn)
4. SSH 連線不要使用 protocol 1,只使用 protocol 2 的連線,最好先確定 server side 的 public key finger print :)
( ref: ssh-keygen -l ,再輸入你的 hostkey 檔案位址,/etc/ssh/ssh_host_dsa_key.pub under freebsd )
5. HTTPS 連線如果常常會在同一 server 的連線時出現新的 certificate 需要更新承認,那麼若不是這台 server 真的太勤勞就是有人正在看、劫持你"以為"是安全的連線。
6.儘快將 DNSSEC 以及 IPSEC 使用到你的網路架構中,尤其是使用 VPN 的使用者,如果只是相信 application gateway(不管有沒有加密、認證)仍有可能會遭受到劫持法攻擊。
*結論:
假造來源的攻擊是危險而且難以偵測的。當這項攻擊方法越來越普及時, 要防止這類攻擊的最佳方法,就是在網路協定的最底層開始,採用密碼學認證的身份確認方法,來保護你的內部網路。
*參考:
1. 原文架構採自於 Kapil Sahrma 的 TCP and IP spoof 文章
原始文件可以在以下網址得之:
http://www.linux.com/security/newsitem.phtml?sid=11&aid=8999
Kapil Sharma 是一個 Linuix/Internet 的電腦網路安全顧問。他已經在各種 Linux 系統上有四年以上工作經驗, 你可在他的網址 http://www.linux4biz.net 上得到更多有關他的資訊。
2. 有關 ARP/MAC spoof 的部份是譯自 Sean Whalen 的文章
An introduction to ARP spoofing by Sean Whalen
3. 更詳盡的 TCP/IP 安全性說明可以參考底下的連結
http://www.linuxsecurity.com/resource_files/documentation/
tcpip-security.html
4. 應用程式的網路協定假造是譯自 Sebastian Krahmer 的文章
SSH for fun and profit
Sebastian Krahmer ( krahmer at cs.uni-potsdam.de )
the paper http://segfault.net/~stealth/ssharp.pdf
the Proof of Concept http://stealth.7350.org./7350ssharp.tgz
5. 另一個應用程式的網路協定假造,譯自 Mike Benham 的文章微軟網路瀏覽器 Internet Explorer 的 SSL 弱點
IE Certificate Chain Exploit by (Mike Benham / moxie at thoughtcrime.org)
the paper
http://www.thoughtcrime.org/ie.html
http://www.thoughtcrime.org/ie-ssl-chain.txt
6. TCP/IP 序號的解析與說明
lcamtuf at bos.bindview.com
http://lcamtuf.coredump.cx/newtcp/
7. 有關 USB port sniffing and replay attack
http://sourceforge.net/projects/usbsnoop/
2. 使用 SSH protocol 2 的 public key 認證,因為假造者無法利用真正的 server public key 對 client 做認證,因為兩者的版本是不同的,會出現明顯的 public key failed 錯誤訊息。
( ref: ssharp 的特性,對 server 和 client 必是以不同版本的 SSH 協定進行溝通 )
3. Double check your hostkey fingerprint :)
*可能會遭受假造攻擊的程式有下列幾項:
1. RPC ( 在 udp 協定上的 Remote Procedure Call 程式 )
2. X Window system ( all application using only ip based authentication )
3. R 系列的程式 ( wildcard trust hosts, rsh, rlogin, rexec,... )
4. OpenSSH 3.4 之前的版本
*TCP/IP 和 ARP 協定相關的工具:
1. Mendax (Linux 平台): Mendax 是個容易上手的 TCP 序號預測及 rshd 位址假造的工具。
2. spoofit.h : spoofit.h 是一個文件完備的 library, 可以讓你把 IP 假造的功能加到其他程式中。
3. ipspoof : ipspoof 是個包含了 TCP 及 IP 造假的工具。
4. hunt : hunt 是一個提供許多造假功能的網路竊聽軟體(IP, ARP)。
5. sniffit : 這是在 unix 平台上相當普及的網路竊聽軟體,他最有名的一個功能叫 touch of death,可以任意切斷竊聽中的任何連線!
http://reptile.rug.ac.be/~coder/sniffit/sniffit.html
*6. dsniff : 這是入侵者的最愛,因為他包含了 arp, dns, mac address 等假造功能,tcpkill
可以切段竊聽中的任何 tcp 協定的連線,AOL Instant Messenger, ICQ 2000, IRC, Yahoo!
Messenger chat 等協定的竊聽,也可以看到目前使用者在瀏覽的網頁,重點是還可以藉由dnsspoof 來對 ssh (protocol 1) 以及 web https 的連線監聽或甚至取代連線(hi-jacking)。
http://www.monkey.org/~dugsong/dsniff/
7. ARPoison : 使用者可以直街指定來源與目的地位址,來假造ARP reply 封包。
http://web.syr.edu/~sabuer/arpoison/
8. ARP-SK : 利用假造的 ARP request/reply 達到 spoof/hijack/DoS 主機連線。
http://sid.rstack.org/arp-sk/ 有極為詳盡的乙太網封包與 ARP 封包解說!
*9. Ettercap : 使用者可以竊聽 IP/MAC/ARP Public ARP 傳輸。並且可以在連線中植入任意字元、竊聽加密的 SSH 連線、搜集密碼、作業系統的判別、切斷連線等功能。
http://ettercap.sourceforge.net/
10. Parasite : 這是一個 daemon 程式,可以在收到 ARP request 之後自動發送假造的 ARP reply,在使用夠久的時間之後可以對整個網段做 man in the middle attack,監控整個區域網路。
值得注意的是 Parasite 並不會在攻擊後發送正確的 ARP reply 封包還原網路原狀,因此會導致阻絕式攻擊,直到他所假造的紀錄過期或特意的還原 ARP 紀錄。
http://freeworld.thc.org/releases.php?q=parasite
( ref: dsniff, arp0c, link layer attack under swith )
11. irpas 目前支援 cdp、igrp、irdp 等路由資訊的假造,並可以假造 frame 的乙太網路封包、配合 nmap 等 port scanner 工具的路由假造工具。
*針對 ARP 協定的 MAC 位址假造反制、偵測方法:
1. 使用 static IP 和 MAC 位址的對映,避免被 arp spoof 更動為假造的 MAC 位址。
(ref: static arp entry, arp -s/S under FreeBSD)
2. 使用 Reverse ARP,找出對映到同一個 MAC 位址的 IP 來源。
(ref: RARP maps MAC to IP, ARP maps IP to MAC)
3. 使用 arpwatch 觀察區網內的 MAC 位址變動情形。這是最有效的偵測方法之一。
4. 使用有 Port/MAC Binding 功能的 switch,避免別的主機更動 port/MAC 的對映。但需記住 switch 並無法防止 arp spoofing 對其他主機的影響。
5. 避免使用 DHCP 網路架構軟體,因為 arp spoof 的攻擊在 DHCP 環境中較難偵測到。
(需區別一般要求與惡意的要求)
*幾種防堵 IP 造假攻擊、察覺劫持攻擊的方法:
1.避免使用來源位址來做身份確認的動作。最好是整個作業系統堤供以密碼學為基礎的確認方法。
(encrypted file system)
2.在 Router 或防火牆上( 建議盡量在 router 這層就擋 )擋掉來自 internet 卻說他是以 intranet IP 位址為來源,或者是來自內部網路,來源卻是外部網路位址的網路封包。
(ip spoof)
3.如果必須允許 intranet 外界的可信任主機連線, 最好在 router 或 gateway 這層就啟動加密連線的功能。
(ref: ipsec, vpn)
4. SSH 連線不要使用 protocol 1,只使用 protocol 2 的連線,最好先確定 server side 的 public key finger print :)
( ref: ssh-keygen -l ,再輸入你的 hostkey 檔案位址,/etc/ssh/ssh_host_dsa_key.pub under freebsd )
5. HTTPS 連線如果常常會在同一 server 的連線時出現新的 certificate 需要更新承認,那麼若不是這台 server 真的太勤勞就是有人正在看、劫持你"以為"是安全的連線。
6.儘快將 DNSSEC 以及 IPSEC 使用到你的網路架構中,尤其是使用 VPN 的使用者,如果只是相信 application gateway(不管有沒有加密、認證)仍有可能會遭受到劫持法攻擊。
*結論:
假造來源的攻擊是危險而且難以偵測的。當這項攻擊方法越來越普及時, 要防止這類攻擊的最佳方法,就是在網路協定的最底層開始,採用密碼學認證的身份確認方法,來保護你的內部網路。
*參考:
1. 原文架構採自於 Kapil Sahrma 的 TCP and IP spoof 文章
原始文件可以在以下網址得之:
http://www.linux.com/security/newsitem.phtml?sid=11&aid=8999
Kapil Sharma 是一個 Linuix/Internet 的電腦網路安全顧問。他已經在各種 Linux 系統上有四年以上工作經驗, 你可在他的網址 http://www.linux4biz.net 上得到更多有關他的資訊。
2. 有關 ARP/MAC spoof 的部份是譯自 Sean Whalen 的文章
An introduction to ARP spoofing by Sean Whalen
3. 更詳盡的 TCP/IP 安全性說明可以參考底下的連結
http://www.linuxsecurity.com/resource_files/documentation/
tcpip-security.html
4. 應用程式的網路協定假造是譯自 Sebastian Krahmer 的文章
SSH for fun and profit
Sebastian Krahmer ( krahmer at cs.uni-potsdam.de )
the paper http://segfault.net/~stealth/ssharp.pdf
the Proof of Concept http://stealth.7350.org./7350ssharp.tgz
5. 另一個應用程式的網路協定假造,譯自 Mike Benham 的文章微軟網路瀏覽器 Internet Explorer 的 SSL 弱點
IE Certificate Chain Exploit by (Mike Benham / moxie at thoughtcrime.org)
the paper
http://www.thoughtcrime.org/ie.html
http://www.thoughtcrime.org/ie-ssl-chain.txt
6. TCP/IP 序號的解析與說明
lcamtuf at bos.bindview.com
http://lcamtuf.coredump.cx/newtcp/
7. 有關 USB port sniffing and replay attack
http://sourceforge.net/projects/usbsnoop/
Labels:
假造,
網路安全,
認證,
辨識,
arp spoof,
attack,
man in the middle,
Network Spoof
nmap 網路掃描
原作者為 Rich JanKowski (rich at linuxsecurity.com)
2/20/2000/17:33
1. 尋找目標 - 縮小範圍
當你要檢測一個網域中有哪些機器會回應 ping 的 ICMP echo 時, 可使用以下 nmap 指令:
ICMP_REQUEST <=> ICMP_ECHO
nmap -sP 192.168.0.1/24
因為有些作業系統現在可以設定不回應 ping 的 ICMP 封包(如linux), 你可以用 TCP 的協定來輔助上面所得的主機列表,而 TCP 的協定中, 有一項是指定 port 的參數,所以我們可以專門掃 80 port (一般是跑 htttp/web 服務):
TCP_SYN <=> TCP_ACK or TCP_RST
nmap -sP -PT80 192.168.0.1/24
而掃描網域的動作除了以上所述外,nmap 還提供了 UDP 和利用更高段的 TCP 協定來掃描,這些留待讀者自行去閱讀 nmap 的指令說明.
2. 尋找目標 - 針對單機的掃描
針對單機時,我們直覺的想到用 TCP port scanning 的指令去掃描看那台主機開了哪些 port 對外, 指令如下:
nmap -sT 192.168.0.1
但是這個 -sT 的參數,在 nmap 的 implement 裡是用 connect() system call 來完成的,因此你在得到對方資訊的同時,也在對方主機的 daemon 上留下了可觀的紀錄資訊,如你的位址,主機名稱,如果你有裝 ident 軟體的話還可能留下使用者帳號的資訊.
也因此,如果我們要取得對方主機的名稱,但是又不想留下自己主機太多的資訊的話,就可以用剛剛所提到更高段的 TCP 協定特點性達到同樣目標, stealth scanning.
這個方法就是騙對方說我要進去,但又沒真的進去要掃描的 port, 一般 TCP 協定是由TCP_SYN, TCP_ACK, TCP_ACK2, TCP_ACK3...
..直到 TCP_RST 出現才算完成的,但是這裡我們並不按協定走, 當我們送完 TCP_SYN 給對方,對方又回傳 TCP_ACK 時,我們就可以知道這個 port 有開啟,否則的話對方回傳的會是 TCP_RST, 表示這個 port 沒有開啟,要做到 stealth scanning 的指令如下:
nmap -sS 192.168.0.1
要注意的是,這個方法因為太常被使用,幾乎每個 IDS 系統都會紀錄這種封包,因此,當你要掃描的是有在注意網路安全的主機時,建議你試試更高段的 stealth FIN,X'mas tree 或 NULL scans.
這三種方法就是送出加料 封包到對方 port, 當這個 port 沒開啟時,主機會送出 RST 封包來,而有開啟的 port 則不會理會 FIN 封包,不過要注意的是, 因為 Microsoft 的 TCP 協定不同於公定的協定, 用這幾招對 Microsoft 的主機就沒效用了.
stealth FIN 在封包上加了 FIN flag,他的指令如下
nmap -sF 192.168.0.1
Xmas tree 在封包上加了 FIN, URG, PUSH flag , 他的指令如下
nmap -sX 192.168.0.1
NULL packet 在封包上就完全沒設 flag, 他的指令如下:
nmap -sN 192.168.0.1
3. 單機掃描 - 變化型 UDP
除了一般 TCP daemon 的程式常出漏洞外, 還有像 syslogd 用到 UDP 封包, NFS daemon, NIS daemon 等用到 RPC 協定的 ports 也蠻常見的喔,在這邊的做法是送出 0 byte data 的 UDP 封包給對方, 如果對方回傳 port unreachable 的訊息, 就表示這個 port 沒打開,而且程式還會視對方回傳 error 的速度適時的減慢送出的速度,也因此 UDP 掃描會慢一些,使用 UDP 掃描的指令如下:
nmap -sU 192.168.0.1
4. 鎖定目標 - 確定對方 OS 型號及版本
當要進攻對方主機時,除了知道有哪些 daemon 在跑以外, 如果能知道他是跑什麼 OS ,那不就可以直接套用某個 OS 的 exploit 去試各種 architecture 的 shell code 就好了嗎?
現在支援最多 architeture 的OS也才支援到 6 種, 最多試六次就可以進攻, 這樣不是更接近敵方了嗎?
但是 OS 要怎麼辨認? 我們可以想想人類怎麼互相辨認? 臉孔, 但是, 可以戴面具, 面具在市面上幾乎隨手買得到( 修改 login prompt, 修改 daemon message ...), 那指紋呢? 一般人不可能無聊到隨便改指紋吧,對, OS 因為在 implement 時也會有針對一些網路協定上面沒定義的部份而有"特色",更有一些 OS 連 implement 的協定都跟別人差一大截 ( Microsoft ),所以我們只要搜集足夠的 OS finger print 就可以他回傳的封包判定對方的身份了.
採取 OS finger print 的技術部份,可以用 FIN 封包送給對方, 看看他會回傳什麼,或是在 SYN 封包上加上協定未定義的 flag 看對方的反應,或是直接採樣他的 TCP 起始序號等等測試,如此測試,再加上採樣的動作以判定特定 OS 的 finger print,也因為 TCP 起始序號方法的使用,判定OS的同時也要運用到 port scanning (-sS)的動作,而非ping scan,使用 OS finger print
的指令是 -O 選項:
nmap -sS -O 192.168.0.1
當你使用 -O 選項時,你會注意到另一個訊息 "TCP Sequence Prediction", 這也告訴我們這個 OS 所 implement 的 TCP 是否可靠,如果 TCP 序號編排太簡單以至於我們可以預測他的 TCP 序號甚至複製出他的序號順序,那麼我們就可採用劫持法,直接取代原本和對方連線的連線,有興趣的人可以找 "session hijacking" 的 keyword 參考看看.
有關 -O 選項所會進行的測試列表如下:
Tseq: 有關 tcp 封包序號順序的方式。
T1 是送出 SYN 及其他 flag 的封包到已開啟的 port
T2 是送出 NULL 及其他 flag 的封包到已開啟的 port
T3 是送出有 SYN, FIN, URG, PSH 等 flag 的封包到已開啟的 port
T4 是送出有 ACK flag 的封包到已開啟的 port
T5 是送出 SYN 封包到未開啟的 port
T6 是送出 ACK flag 的封包到未開啟的 port
T7 是送出 FIN, PSH, URG flag 的封包到未開啟的 port
PU 是送出 UDP 封包到未開啟的 port
5. 鎖定主機 - 預估權限 ident
除了確定能夠進入對方主機以外,還能知道些什麼? 權限的大小, 以 UNIX 的權限機制來看,是以使用者來分別使用權限,那可能從網路上就知道對方跑的 daemon 權限大小嗎? 或者說,我們能知道對方是以哪一個使用者權限在跑的嗎? 可以, 感謝 ident 這個平時沒什麼用,現在派上用場的協定,只要我們問他(對方又剛好有開這個 daemon ),他就會回答了.
也因為 ident protocol 是以 tcp 協定的在跑的,我們要知道對方使用者時必須以 TCP 的掃描方式達到目標,指令選項是 -I:
nmap -sT -p 80 -I -O 192.168.0.1
如此就可得知對方的 web server, OS, 及權限,當然如果是 root, 那只能怪這個管理者太粗心大意了.對於那些想要用 ident 軟體, 又怕洩露太多資訊的管理者,請用 firewall 軟體(如 ipchains) 限制連線的網域吧.
6. 更多花樣- 任君挑選
"-PT" 選項, 這是搭配 ping scan 加上 TCP scan 主機或網域的時候使用.
有些主機擋住 ICMP 和 TCP 掃描時,會造成 nmap 無法使用的情況發生,這時候就可以用 "-P0" 取消 nmap 一開始的 TCP 掃描和 ICMP_ECHO 測試動作.
"-v" 打開詳細程序描述可以讓你知道 nmap 做了些什麼動作,而不用只是呆等結果出現.
"-p" 可以指定多個 ports, 讓你同時掃描特定 ports,集中火力
如以下指令可同時掃描 port 21/23/53/80 並判定 OS 型態:
nmap -sS -p 21,23,53,80 -O -v 192.168.0.1
7. 結論 - 快點開始用 nmap 檢查自己的網域安全性吧!
參考:https://nmap.org/
2/20/2000/17:33
1. 尋找目標 - 縮小範圍
當你要檢測一個網域中有哪些機器會回應 ping 的 ICMP echo 時, 可使用以下 nmap 指令:
ICMP_REQUEST <=> ICMP_ECHO
nmap -sP 192.168.0.1/24
因為有些作業系統現在可以設定不回應 ping 的 ICMP 封包(如linux), 你可以用 TCP 的協定來輔助上面所得的主機列表,而 TCP 的協定中, 有一項是指定 port 的參數,所以我們可以專門掃 80 port (一般是跑 htttp/web 服務):
TCP_SYN <=> TCP_ACK or TCP_RST
nmap -sP -PT80 192.168.0.1/24
而掃描網域的動作除了以上所述外,nmap 還提供了 UDP 和利用更高段的 TCP 協定來掃描,這些留待讀者自行去閱讀 nmap 的指令說明.
2. 尋找目標 - 針對單機的掃描
針對單機時,我們直覺的想到用 TCP port scanning 的指令去掃描看那台主機開了哪些 port 對外, 指令如下:
nmap -sT 192.168.0.1
但是這個 -sT 的參數,在 nmap 的 implement 裡是用 connect() system call 來完成的,因此你在得到對方資訊的同時,也在對方主機的 daemon 上留下了可觀的紀錄資訊,如你的位址,主機名稱,如果你有裝 ident 軟體的話還可能留下使用者帳號的資訊.
也因此,如果我們要取得對方主機的名稱,但是又不想留下自己主機太多的資訊的話,就可以用剛剛所提到更高段的 TCP 協定特點性達到同樣目標, stealth scanning.
這個方法就是騙對方說我要進去,但又沒真的進去要掃描的 port, 一般 TCP 協定是由TCP_SYN, TCP_ACK, TCP_ACK2, TCP_ACK3...
..直到 TCP_RST 出現才算完成的,但是這裡我們並不按協定走, 當我們送完 TCP_SYN 給對方,對方又回傳 TCP_ACK 時,我們就可以知道這個 port 有開啟,否則的話對方回傳的會是 TCP_RST, 表示這個 port 沒有開啟,要做到 stealth scanning 的指令如下:
nmap -sS 192.168.0.1
要注意的是,這個方法因為太常被使用,幾乎每個 IDS 系統都會紀錄這種封包,因此,當你要掃描的是有在注意網路安全的主機時,建議你試試更高段的 stealth FIN,X'mas tree 或 NULL scans.
這三種方法就是送出加料 封包到對方 port, 當這個 port 沒開啟時,主機會送出 RST 封包來,而有開啟的 port 則不會理會 FIN 封包,不過要注意的是, 因為 Microsoft 的 TCP 協定不同於公定的協定, 用這幾招對 Microsoft 的主機就沒效用了.
stealth FIN 在封包上加了 FIN flag,他的指令如下
nmap -sF 192.168.0.1
Xmas tree 在封包上加了 FIN, URG, PUSH flag , 他的指令如下
nmap -sX 192.168.0.1
NULL packet 在封包上就完全沒設 flag, 他的指令如下:
nmap -sN 192.168.0.1
3. 單機掃描 - 變化型 UDP
除了一般 TCP daemon 的程式常出漏洞外, 還有像 syslogd 用到 UDP 封包, NFS daemon, NIS daemon 等用到 RPC 協定的 ports 也蠻常見的喔,在這邊的做法是送出 0 byte data 的 UDP 封包給對方, 如果對方回傳 port unreachable 的訊息, 就表示這個 port 沒打開,而且程式還會視對方回傳 error 的速度適時的減慢送出的速度,也因此 UDP 掃描會慢一些,使用 UDP 掃描的指令如下:
nmap -sU 192.168.0.1
4. 鎖定目標 - 確定對方 OS 型號及版本
當要進攻對方主機時,除了知道有哪些 daemon 在跑以外, 如果能知道他是跑什麼 OS ,那不就可以直接套用某個 OS 的 exploit 去試各種 architecture 的 shell code 就好了嗎?
現在支援最多 architeture 的OS也才支援到 6 種, 最多試六次就可以進攻, 這樣不是更接近敵方了嗎?
但是 OS 要怎麼辨認? 我們可以想想人類怎麼互相辨認? 臉孔, 但是, 可以戴面具, 面具在市面上幾乎隨手買得到( 修改 login prompt, 修改 daemon message ...), 那指紋呢? 一般人不可能無聊到隨便改指紋吧,對, OS 因為在 implement 時也會有針對一些網路協定上面沒定義的部份而有"特色",更有一些 OS 連 implement 的協定都跟別人差一大截 ( Microsoft ),所以我們只要搜集足夠的 OS finger print 就可以他回傳的封包判定對方的身份了.
採取 OS finger print 的技術部份,可以用 FIN 封包送給對方, 看看他會回傳什麼,或是在 SYN 封包上加上協定未定義的 flag 看對方的反應,或是直接採樣他的 TCP 起始序號等等測試,如此測試,再加上採樣的動作以判定特定 OS 的 finger print,也因為 TCP 起始序號方法的使用,判定OS的同時也要運用到 port scanning (-sS)的動作,而非ping scan,使用 OS finger print
的指令是 -O 選項:
nmap -sS -O 192.168.0.1
當你使用 -O 選項時,你會注意到另一個訊息 "TCP Sequence Prediction", 這也告訴我們這個 OS 所 implement 的 TCP 是否可靠,如果 TCP 序號編排太簡單以至於我們可以預測他的 TCP 序號甚至複製出他的序號順序,那麼我們就可採用劫持法,直接取代原本和對方連線的連線,有興趣的人可以找 "session hijacking" 的 keyword 參考看看.
有關 -O 選項所會進行的測試列表如下:
Tseq: 有關 tcp 封包序號順序的方式。
T1 是送出 SYN 及其他 flag 的封包到已開啟的 port
T2 是送出 NULL 及其他 flag 的封包到已開啟的 port
T3 是送出有 SYN, FIN, URG, PSH 等 flag 的封包到已開啟的 port
T4 是送出有 ACK flag 的封包到已開啟的 port
T5 是送出 SYN 封包到未開啟的 port
T6 是送出 ACK flag 的封包到未開啟的 port
T7 是送出 FIN, PSH, URG flag 的封包到未開啟的 port
PU 是送出 UDP 封包到未開啟的 port
5. 鎖定主機 - 預估權限 ident
除了確定能夠進入對方主機以外,還能知道些什麼? 權限的大小, 以 UNIX 的權限機制來看,是以使用者來分別使用權限,那可能從網路上就知道對方跑的 daemon 權限大小嗎? 或者說,我們能知道對方是以哪一個使用者權限在跑的嗎? 可以, 感謝 ident 這個平時沒什麼用,現在派上用場的協定,只要我們問他(對方又剛好有開這個 daemon ),他就會回答了.
也因為 ident protocol 是以 tcp 協定的在跑的,我們要知道對方使用者時必須以 TCP 的掃描方式達到目標,指令選項是 -I:
nmap -sT -p 80 -I -O 192.168.0.1
如此就可得知對方的 web server, OS, 及權限,當然如果是 root, 那只能怪這個管理者太粗心大意了.對於那些想要用 ident 軟體, 又怕洩露太多資訊的管理者,請用 firewall 軟體(如 ipchains) 限制連線的網域吧.
6. 更多花樣- 任君挑選
"-PT" 選項, 這是搭配 ping scan 加上 TCP scan 主機或網域的時候使用.
有些主機擋住 ICMP 和 TCP 掃描時,會造成 nmap 無法使用的情況發生,這時候就可以用 "-P0" 取消 nmap 一開始的 TCP 掃描和 ICMP_ECHO 測試動作.
"-v" 打開詳細程序描述可以讓你知道 nmap 做了些什麼動作,而不用只是呆等結果出現.
"-p" 可以指定多個 ports, 讓你同時掃描特定 ports,集中火力
如以下指令可同時掃描 port 21/23/53/80 並判定 OS 型態:
nmap -sS -p 21,23,53,80 -O -v 192.168.0.1
7. 結論 - 快點開始用 nmap 檢查自己的網域安全性吧!
參考:https://nmap.org/
Labels:
軟體工具,
網路安全,
網路掃描,
network scanner,
nmap
無線網路的安全問題
無線網路的安全問題
1. 無線網路簡介
IEEE 對於無線網路制定了 802.11 標準協定
1. 無線網路簡介
IEEE 對於無線網路制定了 802.11 標準協定
有關不同無線 Access Point 之間 Hand Over 的 802.11f (roaming),以及不同傳輸頻率、速度的 802.11[a,b,g]
協定名稱 佔用頻率 標準頻寬 實際傳輸效能
802.11a 5GHz 54Mbps
802.11b 2.4GHz 11Mbps 4 - 6Mbps
802.11g 2.4GHz
802.11b 有兩種運作模式, 一種是無線網卡和 AP 之間建立的網路, 另一種是稱為 ad hoc 的client 對 client 傳輸模式, 在 ad hoc 模式中, 每組使用無線網卡的用戶端均需要(兩兩)在對方的訊號範圍內.
1.1 偵測無線網路的方法.
(a). 主動式偵測
在用戶端送出連線要求, 並檢查是否有回應封包.
使用軟體: netstumbler
軟體平台: MS Windows,
軟體網址: www.netstumbler.com
(b). 被動式偵測
用戶端不傳送封包, 只解析所收到的 802.11 封包.
幾乎無法防備.
使用軟體: Kismet, Wellenreiter, Airsnort
軟體平台: Linux/BSD, Linux, Linux
軟體網址: www.kismetwireless.net
www.remote-exploit.org
airsnort.shmoo.com
RFmon 模式的無線網路卡:
Cisco cards: 在硬體層就有內定的 channel hopping 的頻道掃描功能. 也因為使用較快的頻道掃描, 在某一個頻道飽和時,CISCO 的網卡也較容易遺失封包(missed packet), 但在整體效能比較上還是較高的.
一般常用來做網路掃描的卡是用 CISCO AIRLMC350, 這張卡還包括兩支外接天線, 傳輸達到 100mW, 敏感度 -95dBM (一般 prism2 卡是 20-30mw, -80dbM) Prism2 cards: 需要由軟體部份做 channel hopping, 因此在多做頻道掃描的額外負擔下, 竊聽主機的負載較大. 通常我們用的無線網路竊聽軟體, 都會有包括掃描所有 802.11b 頻道的 channel hopping 程式模組. (Kismet 使用 prism2 hopper 每秒切換三個頻道)
Orinoco cards: 支援外接天線, 掃描頻道的功能在 Linux 平台上,有相關的 card driver patch 可使用(需相對應韌體支援)。
外接天線:
在進行 War-driving 時, 因為車體本身就是一個金屬屏蔽, 外接天線可以為你增加約 0.5db 的訊號強度.
2. 無線網路的媒介及實體網路(Medium Access Control and Physical layer)
一般家用無線攝影機,無線電話和微波爐的波段通常和 802.11b 同樣佔 2.4GHz 頻率,在使用上也容易成為干擾源之一,在訊號強弱的考慮上, 不是訊號越強就越好,需考慮訊號越強,有效距離越遠,也越容易被探測攻擊.
在訊號安全上,可以考慮金屬屏蔽阻擋外來干擾(同樣對外也受影響)或是考慮點對點的紅外線傳輸,因為 802.11b 是無方向性而 IR 是有方向性的傳輸方式.
802.11b 封包的 Header 資訊,包含 source/destination MAC 位址,相關的 Access Point 資訊,通訊的流向,使用的頻道,SSID, WEP ,所支援的傳輸速率. (CISCO AP 還包括額外的 status 欄位來說明此 AP 提供的功能以及此 AP 的所在位置)
802.11b 封包的種類:
2.1 Beacon 封包
一般的無線 AP, 都會不斷的傳輸 Beacon 封包, Beacon 封包內會包含 SSID 訊息, 支援的傳輸速率, 此無線 AP 的 MAC 位址. 一般的 Beacon 封包速率是在 6~10 Beacon packets/sec.
為了安全性, 現在無線 AP 也提供了不包含 SSID 值的 Beacon 功能, 這種 SSID cloaking 的立意在於: 用戶端除非事先知道所使用 SSID, 否則無法使用這個無線 AP. 但是聰明的讀者一定想到了, 等到有用戶要連接時, 就算有 WEP, 還是可以聽到所使用的 SSID :)
(ref: dedicated sniffing)
*另外也可以利用強波干擾 802.11b 的 2.4GHz 頻率(請參考 FCC 規範),當干擾強到無線 AP 或無線網卡需要重新 re-join, 此時就可以主動聽到 SSID;這種方法造成的斷線情形,對用戶而言也可當作是可能被探測的警訊 :)
2.2 Probe response 封包
當用戶端想要連上網路時,他會依據收到的 Beacon 封包,送出 probe response 封包,其中會包含: 所要加入網域的 SSID、所使用的傳輸速率。
2.3 Data 封包
通常是封裝在 802.11b frames 中的 TCP/IP 封包
2.4 Ad hoc 封包
和 Data 封包相同, 但屬於網卡對網卡傳輸不需繞經無線 AP.
BSSID: mac address of the BSS
SSID: 辨示該 BSS 的 32 bytes 字串
DATA RATE: 包括 1Mbps 2Mbps 5.5Mbps 11Mbps
HR/DSSS: High Rate Direct Sequence Spread Spectrum
(high rate 5.5Mbps/11Mbps)
3. WEP(Wired Equivalent Privacy) link layer encryption
通訊加密協定
WEP 所加密的, 是指 data packet 的部份, 並未包括 join, beacon, probes 等控制訊號封包加密 :)
因為共用 private key 的特性, 使得原本 key length 已經不足的 WEP 更加讓人憂慮其安全性.
使用 RC4 演算法的弱點在於時間強度太弱, 竊聽軟體在幾小時內收集足夠封包就可以完全破解所使用的 WEP 加密傳輸(傳輸流量越大, 相對所需時間越少)
為了補強 WEP 相關弱點,已經有許多協定已經完成改版修正。
由 WiFi 聯盟所提出的 WEP 暫時替代方案 WPA(WiFi Protected Access),是屬於 IEEE 制定中的 802.11i 安全標準的子集合,其中包括了 802.1x 的認證系統 (EAP)與 TKIP(Temporal Key Integrity Protocol),WPA 並非 IEEE 的標準協定,而是 WiFi 聯盟各公司在 802.11i 未完成前的暫時解決方案。
與一般用戶相關的地方是有 pre-shared key 機制,需要在 AP 與用戶端分別輸入預設密碼,之後的使用,便可藉此 pre-shared key 計算出要對封包加密的加密金鑰,並且在用戶使用當中,定時重新產生加密所需金鑰,以避免重複使用加密金鑰的弱點。
完整的 TKIP 除了 pre-shared key 以外,還包括 per-packet key mix、訊息完整性 Michael (MIC) message integrity check、有 sequence 規則的 extended initialization vector(IV)、重新產生加密金鑰 re-keying 等功能,彌補已知的 WEP 協定弱點。
認證方面 WPA 也是採用 mutual authentication 的 EAP 方案。
4. EAP 認證協定
MAC 位址認證極容易被竊聽並假造使用, 因此 MAC filtering 位址認證幾乎等同無用。
現行 802.1x 考慮使用 EAP 協定做為雙方認證使用可以加入其他 plug-in 的解決方案。例如: CISCO LEAP 提供額外的登入認證功能,Certificate,甚至是 PKI 環境
目前各廠商正為了網路假造衍生的各種攻擊,提出一套認證協定,原本運用在撥接等點對點連線的廣泛認證協定 (Extensible Authentication Protocol EAP),已經在 RFC 2284 中有所規範。
認證使用的演算法,則由各網路裝置自行決定。這份 802.1x 協定,包括了 Port Authentication Entity PAE ,這個協定的使用者分別是: 無線網路卡端,wireless AP 端,及後端認證伺服器 RADIUS。
認證的演算法,可以使用一般的帳號密碼機制,配合 challenge response 機制,也可以使用 Certificate 機制,只要使用者端和 AP 端以及後端認證伺服器都有支援即可。
802.1x 探討的安全問題,事實上不只是無線網路安全問題,就連有線乙太網路也充滿著 tcp/ip arp spoofing 等問題,基本上,你能夠作到假造,你就可以扮演雙面人(Man in the middle)完全控制別人的連線,這是現行網路協定的弱點,也是 ipsec 極需實作的原因之一。
IP 層以上的 VPN 實作都還是會受到假造攻擊。
簡而言之,現行 link layer 以上的網路協定,都沒做到 client server 雙邊認證,即使上層有認證,還是可以用底層的假造動作去讓你以為連到真實伺服器,而不自覺。
而 802.1x 的 EAP 是要在 client, AP(server) 之後還掛一個 authentication server,完整的 EAP 包含:
client --> AP(server) authentication --> authentication server
讓 AP(server) 端(其實是 authentication server)告訴 AP 可以確認 client 無誤,才允許他從這個 AP(server) 連上網路。
馬里蘭的研究報告[3]指出,你一開始的單方 (asymmetric , 不包括 client 確認是真實 server 的步驟 ) 認證,可以放一個 Middle Host 把你破掉阿。
即使是認證之後,因為 EAP 協定的不完備,假造端可以趁機再送一個 faked-AP address 給 client 讓他跟真的 AP 認證完後,卻還是連到 faked-AP 端,而 faked-AP 再連到真的 AP 端完成假造的連線動作。
即使使用 EAP-TLS ,但沒有做到相互認證還是會有同樣的弱點。
到最後他說這些假造的動作,如果遇到有做 message authentication 的 EAP-MD5 跟 EAP-TLS 就無效(因訊息有加認證),但即使你有 mutual authentication 還是可以用同樣方法達到 Denial of Service...
又 EAP 已經有許多可以做雙邊認證的加強版協定 (EAP-TLS, EAP-TTLS, EAP-PEAP, WPA) ,就是在 authentication server 確認完 client 之後,client 再對 server 做確認的動作,而雙方都會有一個共享 (symmetric, shared secret) master key,所以在協定實作完整的狀況下,應該就可以免於 spoof/hijack 等攻擊。 DoS除外 :)
5. 802.11i
802.11i 與 WiFi Protected Access 的差別在於(WPA 所缺乏的功能): secure IBSS, secure fast handoff, secure de-authentication and de-association, enhanced encryption protocol(如: AES-CCMP)
6. 軟體層防護措施
WPKI
IPsec
SSH, ssltunnel telnet/ftp/http ...etc
沒有支援認證功能的無線 AP, 也可以考慮 NoCat 安全認證防護 (www.nocat.net)
訊號干擾式防護: 發送假造無線 AP 的軟體防止 War Driving/Flying 式的攻擊,該軟體將會產生 53,000 個假造的無線 AP beacon 封包,讓入侵者難以辨別真實的 AP,藉此達到一定的安全性。
但此法在訊號強波干擾攻擊法下仍可藉由聽取 client 端,而非 AP 端封包遭破解。
測試環境: Linux/Perl5.6+/Prism2,2.5,3 802.11b 無線網卡
http://www.blackalchemy.to/project/fakeap/
7. 實際試驗步驟與結果
硬體設備:
Cisco 無線網卡,Magmount 天線, Garmin GPS
掃描軟體:
Kismet 軟體
實際掃描結果是 448 個無線網路, 其中只有 26% 有啟動WEP 加密, 有 75 個無線 AP 是使用出廠內定設定值. 所竊聽明文資訊如下:
email 信件, 線上購物的信用卡資訊, 網路芳鄰傳輸, uPNP 傳輸, 用戶包括一般公寓家庭用戶, 法律顧問公司, 網路書店, 新聞報社.
發現弱點除了包括明文資料外洩, 也包括不完整的網路認證, 造成接收訊號者可以隨意登入(公司)防火牆的內部網路.
參考文章:
1. yentingkuo.bbs at bbs.mgt.ncu.edu.tw 於
tw.bbs.comp.security
所寫 "Re: 無線區網是否安全?" 系列文章。
2. Cisco Aironet Response to University of Maryland's
Paper, "An Initial Security Analysis of the IEEE
802.1x Standard"
3. "An Initial Security Analysis of the IEEE 802.1x
Standard" Arunesh Mishra and William A. Arbaugh
{arunesh,waa} at cs.umd.edu
http://www.cs.umd.edu/~waa/1x.pdf
4. Comments on“An Initial Security Analysis of the
IEEE 802.1X Standard”
5. The comprehensive guide to 802.11b wireless Neworks
by Dragon
協定名稱 佔用頻率 標準頻寬 實際傳輸效能
802.11a 5GHz 54Mbps
802.11b 2.4GHz 11Mbps 4 - 6Mbps
802.11g 2.4GHz
802.11b 有兩種運作模式, 一種是無線網卡和 AP 之間建立的網路, 另一種是稱為 ad hoc 的client 對 client 傳輸模式, 在 ad hoc 模式中, 每組使用無線網卡的用戶端均需要(兩兩)在對方的訊號範圍內.
1.1 偵測無線網路的方法.
(a). 主動式偵測
在用戶端送出連線要求, 並檢查是否有回應封包.
使用軟體: netstumbler
軟體平台: MS Windows,
軟體網址: www.netstumbler.com
(b). 被動式偵測
用戶端不傳送封包, 只解析所收到的 802.11 封包.
幾乎無法防備.
使用軟體: Kismet, Wellenreiter, Airsnort
軟體平台: Linux/BSD, Linux, Linux
軟體網址: www.kismetwireless.net
www.remote-exploit.org
airsnort.shmoo.com
RFmon 模式的無線網路卡:
Cisco cards: 在硬體層就有內定的 channel hopping 的頻道掃描功能. 也因為使用較快的頻道掃描, 在某一個頻道飽和時,CISCO 的網卡也較容易遺失封包(missed packet), 但在整體效能比較上還是較高的.
一般常用來做網路掃描的卡是用 CISCO AIRLMC350, 這張卡還包括兩支外接天線, 傳輸達到 100mW, 敏感度 -95dBM (一般 prism2 卡是 20-30mw, -80dbM) Prism2 cards: 需要由軟體部份做 channel hopping, 因此在多做頻道掃描的額外負擔下, 竊聽主機的負載較大. 通常我們用的無線網路竊聽軟體, 都會有包括掃描所有 802.11b 頻道的 channel hopping 程式模組. (Kismet 使用 prism2 hopper 每秒切換三個頻道)
Orinoco cards: 支援外接天線, 掃描頻道的功能在 Linux 平台上,有相關的 card driver patch 可使用(需相對應韌體支援)。
外接天線:
在進行 War-driving 時, 因為車體本身就是一個金屬屏蔽, 外接天線可以為你增加約 0.5db 的訊號強度.
2. 無線網路的媒介及實體網路(Medium Access Control and Physical layer)
一般家用無線攝影機,無線電話和微波爐的波段通常和 802.11b 同樣佔 2.4GHz 頻率,在使用上也容易成為干擾源之一,在訊號強弱的考慮上, 不是訊號越強就越好,需考慮訊號越強,有效距離越遠,也越容易被探測攻擊.
在訊號安全上,可以考慮金屬屏蔽阻擋外來干擾(同樣對外也受影響)或是考慮點對點的紅外線傳輸,因為 802.11b 是無方向性而 IR 是有方向性的傳輸方式.
802.11b 封包的 Header 資訊,包含 source/destination MAC 位址,相關的 Access Point 資訊,通訊的流向,使用的頻道,SSID, WEP ,所支援的傳輸速率. (CISCO AP 還包括額外的 status 欄位來說明此 AP 提供的功能以及此 AP 的所在位置)
802.11b 封包的種類:
2.1 Beacon 封包
一般的無線 AP, 都會不斷的傳輸 Beacon 封包, Beacon 封包內會包含 SSID 訊息, 支援的傳輸速率, 此無線 AP 的 MAC 位址. 一般的 Beacon 封包速率是在 6~10 Beacon packets/sec.
為了安全性, 現在無線 AP 也提供了不包含 SSID 值的 Beacon 功能, 這種 SSID cloaking 的立意在於: 用戶端除非事先知道所使用 SSID, 否則無法使用這個無線 AP. 但是聰明的讀者一定想到了, 等到有用戶要連接時, 就算有 WEP, 還是可以聽到所使用的 SSID :)
(ref: dedicated sniffing)
*另外也可以利用強波干擾 802.11b 的 2.4GHz 頻率(請參考 FCC 規範),當干擾強到無線 AP 或無線網卡需要重新 re-join, 此時就可以主動聽到 SSID;這種方法造成的斷線情形,對用戶而言也可當作是可能被探測的警訊 :)
2.2 Probe response 封包
當用戶端想要連上網路時,他會依據收到的 Beacon 封包,送出 probe response 封包,其中會包含: 所要加入網域的 SSID、所使用的傳輸速率。
2.3 Data 封包
通常是封裝在 802.11b frames 中的 TCP/IP 封包
2.4 Ad hoc 封包
和 Data 封包相同, 但屬於網卡對網卡傳輸不需繞經無線 AP.
BSSID: mac address of the BSS
SSID: 辨示該 BSS 的 32 bytes 字串
DATA RATE: 包括 1Mbps 2Mbps 5.5Mbps 11Mbps
HR/DSSS: High Rate Direct Sequence Spread Spectrum
(high rate 5.5Mbps/11Mbps)
3. WEP(Wired Equivalent Privacy) link layer encryption
通訊加密協定
WEP 所加密的, 是指 data packet 的部份, 並未包括 join, beacon, probes 等控制訊號封包加密 :)
因為共用 private key 的特性, 使得原本 key length 已經不足的 WEP 更加讓人憂慮其安全性.
使用 RC4 演算法的弱點在於時間強度太弱, 竊聽軟體在幾小時內收集足夠封包就可以完全破解所使用的 WEP 加密傳輸(傳輸流量越大, 相對所需時間越少)
為了補強 WEP 相關弱點,已經有許多協定已經完成改版修正。
由 WiFi 聯盟所提出的 WEP 暫時替代方案 WPA(WiFi Protected Access),是屬於 IEEE 制定中的 802.11i 安全標準的子集合,其中包括了 802.1x 的認證系統 (EAP)與 TKIP(Temporal Key Integrity Protocol),WPA 並非 IEEE 的標準協定,而是 WiFi 聯盟各公司在 802.11i 未完成前的暫時解決方案。
與一般用戶相關的地方是有 pre-shared key 機制,需要在 AP 與用戶端分別輸入預設密碼,之後的使用,便可藉此 pre-shared key 計算出要對封包加密的加密金鑰,並且在用戶使用當中,定時重新產生加密所需金鑰,以避免重複使用加密金鑰的弱點。
完整的 TKIP 除了 pre-shared key 以外,還包括 per-packet key mix、訊息完整性 Michael (MIC) message integrity check、有 sequence 規則的 extended initialization vector(IV)、重新產生加密金鑰 re-keying 等功能,彌補已知的 WEP 協定弱點。
認證方面 WPA 也是採用 mutual authentication 的 EAP 方案。
4. EAP 認證協定
MAC 位址認證極容易被竊聽並假造使用, 因此 MAC filtering 位址認證幾乎等同無用。
現行 802.1x 考慮使用 EAP 協定做為雙方認證使用可以加入其他 plug-in 的解決方案。例如: CISCO LEAP 提供額外的登入認證功能,Certificate,甚至是 PKI 環境
目前各廠商正為了網路假造衍生的各種攻擊,提出一套認證協定,原本運用在撥接等點對點連線的廣泛認證協定 (Extensible Authentication Protocol EAP),已經在 RFC 2284 中有所規範。
認證使用的演算法,則由各網路裝置自行決定。這份 802.1x 協定,包括了 Port Authentication Entity PAE ,這個協定的使用者分別是: 無線網路卡端,wireless AP 端,及後端認證伺服器 RADIUS。
認證的演算法,可以使用一般的帳號密碼機制,配合 challenge response 機制,也可以使用 Certificate 機制,只要使用者端和 AP 端以及後端認證伺服器都有支援即可。
802.1x 探討的安全問題,事實上不只是無線網路安全問題,就連有線乙太網路也充滿著 tcp/ip arp spoofing 等問題,基本上,你能夠作到假造,你就可以扮演雙面人(Man in the middle)完全控制別人的連線,這是現行網路協定的弱點,也是 ipsec 極需實作的原因之一。
IP 層以上的 VPN 實作都還是會受到假造攻擊。
簡而言之,現行 link layer 以上的網路協定,都沒做到 client server 雙邊認證,即使上層有認證,還是可以用底層的假造動作去讓你以為連到真實伺服器,而不自覺。
而 802.1x 的 EAP 是要在 client, AP(server) 之後還掛一個 authentication server,完整的 EAP 包含:
client --> AP(server) authentication --> authentication server
讓 AP(server) 端(其實是 authentication server)告訴 AP 可以確認 client 無誤,才允許他從這個 AP(server) 連上網路。
馬里蘭的研究報告[3]指出,你一開始的單方 (asymmetric , 不包括 client 確認是真實 server 的步驟 ) 認證,可以放一個 Middle Host 把你破掉阿。
即使是認證之後,因為 EAP 協定的不完備,假造端可以趁機再送一個 faked-AP address 給 client 讓他跟真的 AP 認證完後,卻還是連到 faked-AP 端,而 faked-AP 再連到真的 AP 端完成假造的連線動作。
即使使用 EAP-TLS ,但沒有做到相互認證還是會有同樣的弱點。
到最後他說這些假造的動作,如果遇到有做 message authentication 的 EAP-MD5 跟 EAP-TLS 就無效(因訊息有加認證),但即使你有 mutual authentication 還是可以用同樣方法達到 Denial of Service...
又 EAP 已經有許多可以做雙邊認證的加強版協定 (EAP-TLS, EAP-TTLS, EAP-PEAP, WPA) ,就是在 authentication server 確認完 client 之後,client 再對 server 做確認的動作,而雙方都會有一個共享 (symmetric, shared secret) master key,所以在協定實作完整的狀況下,應該就可以免於 spoof/hijack 等攻擊。 DoS除外 :)
5. 802.11i
802.11i 與 WiFi Protected Access 的差別在於(WPA 所缺乏的功能): secure IBSS, secure fast handoff, secure de-authentication and de-association, enhanced encryption protocol(如: AES-CCMP)
6. 軟體層防護措施
WPKI
IPsec
SSH, ssltunnel telnet/ftp/http ...etc
沒有支援認證功能的無線 AP, 也可以考慮 NoCat 安全認證防護 (www.nocat.net)
訊號干擾式防護: 發送假造無線 AP 的軟體防止 War Driving/Flying 式的攻擊,該軟體將會產生 53,000 個假造的無線 AP beacon 封包,讓入侵者難以辨別真實的 AP,藉此達到一定的安全性。
但此法在訊號強波干擾攻擊法下仍可藉由聽取 client 端,而非 AP 端封包遭破解。
測試環境: Linux/Perl5.6+/Prism2,2.5,3 802.11b 無線網卡
http://www.blackalchemy.to/project/fakeap/
7. 實際試驗步驟與結果
硬體設備:
Cisco 無線網卡,Magmount 天線, Garmin GPS
掃描軟體:
Kismet 軟體
實際掃描結果是 448 個無線網路, 其中只有 26% 有啟動WEP 加密, 有 75 個無線 AP 是使用出廠內定設定值. 所竊聽明文資訊如下:
email 信件, 線上購物的信用卡資訊, 網路芳鄰傳輸, uPNP 傳輸, 用戶包括一般公寓家庭用戶, 法律顧問公司, 網路書店, 新聞報社.
發現弱點除了包括明文資料外洩, 也包括不完整的網路認證, 造成接收訊號者可以隨意登入(公司)防火牆的內部網路.
參考文章:
1. yentingkuo.bbs at bbs.mgt.ncu.edu.tw 於
tw.bbs.comp.security
所寫 "Re: 無線區網是否安全?" 系列文章。
2. Cisco Aironet Response to University of Maryland's
Paper, "An Initial Security Analysis of the IEEE
802.1x Standard"
3. "An Initial Security Analysis of the IEEE 802.1x
Standard" Arunesh Mishra and William A. Arbaugh
{arunesh,waa} at cs.umd.edu
http://www.cs.umd.edu/~waa/1x.pdf
4. Comments on“An Initial Security Analysis of the
IEEE 802.1X Standard”
5. The comprehensive guide to 802.11b wireless Neworks
by Dragon
網路環境側寫 Network mapping/profiling
網路環境側寫 (Network mapping):
主動式:
ICMP sweeps, ICMP OS detection
firewalk, nmap
防護機制:
block most ICMP, block packets with TTL=0, 1
被動式:
manually from public resource, automated-> siphon
防護機制:
policy on publishing and posting, egress filtering
分散式攻擊:
基本模式:
client ---command--> server ---command---> agents
進階模式 一:
attacker ----forged ICMP timestamp requests---> target
target ----ICMP timestamp response----> fored
(reply sniffed by attacker)
進階模式 二:
-----> attack node 1 --- | | master --------> attack node 2
------attack(probe)--firewall-> target | -----> attack node 3 ---|
target --firewall--replies---sniffed by master or upstream host--
->?
防護機制:
ingress, egress filtering, IDS inside and outside firewall
traffic log and analysis
VPN and Traffic pattern masking:
SMTP, DNS, HTTP traffic (hiden in plain text sight), and
combination
防護機制:
egress filtering, logging, network dumps and analyses
主動式:
ICMP sweeps, ICMP OS detection
firewalk, nmap
防護機制:
block most ICMP, block packets with TTL=0, 1
被動式:
manually from public resource, automated-> siphon
防護機制:
policy on publishing and posting, egress filtering
分散式攻擊:
基本模式:
client ---command--> server ---command---> agents
進階模式 一:
attacker ----forged ICMP timestamp requests---> target
target ----ICMP timestamp response----> fored
(reply sniffed by attacker)
進階模式 二:
-----> attack node 1 --- | | master --------> attack node 2
------attack(probe)--firewall-> target | -----> attack node 3 ---|
target --firewall--replies---sniffed by master or upstream host--
->?
防護機制:
ingress, egress filtering, IDS inside and outside firewall
traffic log and analysis
VPN and Traffic pattern masking:
SMTP, DNS, HTTP traffic (hiden in plain text sight), and
combination
防護機制:
egress filtering, logging, network dumps and analyses
Labels:
網路安全,
network mapping,
network profiling
入侵偵測系統 IDS(Intrusion Detection System)
*名詞:
入侵偵測系統 IDS(Intrusion Detection Systems)
網路型入侵偵測系統 (Network-based Intrusion Detection Systems)
主機型入侵偵測系統 (Host-based Intrusion Detection Systems)
應用程式型入侵偵測系統 (Application-based Intrusion Detection Systems)
為了方便,以下將以 IDS 來代表入侵偵測系統的簡稱。
入侵偵測系統 IDS(Intrusion Detection Systems)
網路型入侵偵測系統 (Network-based Intrusion Detection Systems)
主機型入侵偵測系統 (Host-based Intrusion Detection Systems)
應用程式型入侵偵測系統 (Application-based Intrusion Detection Systems)
為了方便,以下將以 IDS 來代表入侵偵測系統的簡稱。
網路型入侵偵測系統(以下以網路型 IDS 簡稱)
主機型入侵偵測系統(以下以主機型 IDS 簡稱)
應用程式型入侵偵測系統(以下以應用程式型 IDS 簡稱)
*前言:
在一個網路防禦網裡,IDS 並不能保證你所在網域的安全性,通常 IDS 需要與防火牆、安全人員所制定的安全策略、網路弱點稽查、權限稽核做結合,才能對整個網域做完整的保護措施。
*正題:
一個 IDS 的主要功能有三點,第一是監視目前狀況,第二是偵測的動作,第三是反制方法,而以下所會談到的,主要是第二點的部份,關於監視的方法與原理,請有興趣的讀者自行查閱 sniff/sniffer/sniffing/broadcast 等關鍵字。而要達到這三種功能,我們可以從異常狀況的發生、攻擊事件的確認、可疑事件的綜合分析等方法去達成。
大部份的入侵偵測系統都是以特徵模式(signatures)來辨別是否為蓄意的入侵或有攻擊的意圖,在網路封包的分析上,也開始走向網路規格協定的比對。以採集資料的方式來區分的話,可以將入侵偵測系統分為以監控網路封包為主的網路型IDS、以監控系統紀錄檔來做判斷的主機型 IDS 、以監控應用程式接收值做判斷的應用程式型 IDS。
應用程式型 IDS 主要是因應網路攻擊事件中,光是針對應用程式而使用的攻擊就佔絕大部份,而應用程式輸入值更是攻擊事件的關鍵要點,因此現在出現了針對應用程式接收值做確認的 IDS 。
網路型 IDS:
(A). 運作方式:
在網路的必經節點上過濾所有封包,並即時將這些封包加以分析比對,比如分析封包 header 的資料時,可以偵測到如 source route、out of band、fragmented packet(teardrop) land(same ip, port)
等攻擊,在分析封包內容時,可以偵測到如木馬程式的特定指令、如含有 shellcode 的攻擊程式、含有特定 cgi/php/asp 程式漏洞的特殊指令,這些都可以用最簡單的字串比對等方法來做為攻擊特徵 (signature) 的比對,例如 shellcode 部份可以用累計超過五十個 NOP 指令比對;比對 /etc/passwd 字串以表示有人試圖擷取、修改密碼檔。
在做分析比對的模組上,有以下四種的攻擊特徵比對模式:
(1). 特殊的字串、位元組及特徵值的比對、是否符合網路協定規格
(2). 事件發生的頻率,是否超過所設的門檻值
(3). 可疑事件的關聯性
(4). 統計結果上的異常例外數值 (異於往常的行為模式 *chjong*)
而在比對出符合的攻擊模式後,反應模組會有通知、警告以及做出反制行動等功能,通常會是通知管理者、切斷可疑連線或紀錄可疑連線以做為攻擊證據搜集、研究用。
(B). 網路型 IDS 相對於主機型 IDS 的優(缺)點:
(1). 集中注意於一網路節點:
網路型 IDS 因為只需設置在一網路必經節點上,而不像主機型 IDS 必須設置於網路上的每一台主機,在管理和成本考量上都是較理想的。
(相對的,若只設網路型 IDS 也會因為只靠唯一一層防護而需要冒較高的風險,而且網路型 IDS 如果沒有與應用程式結合運用的話,一遇到加密的點對點連線就沒輒了)
(2). 攻擊者較難除去進行攻擊後留下的封包證據:
因為網路型 IDS 所採取的是即時收集封包,攻擊者要抹滅曾經進行的攻擊證據更加困難。而這些收集到的封包證據也有助於辨認攻擊者。而在主機型 IDS 上,通常他們所用的紀錄檔或是稽核檔案,都可能會被攻擊者入侵後修改,而造成主機型 IDS 失效,甚至誤導之後的稽核檢查動作。
(3). 即時反應,減緩攻擊者造成的傷害:
因為網路型 IDS 所採取的是即時收集封包,可以在分析比對後即時通知、反應,避免給與攻擊者過多時間進行更進一步的攻擊行動。比如當一個惡意的 tcp 連線被偵測到時,網路型 IDS 可以隨即送出一個 tcp reset 封包以截斷這個連線,在一個惡意 udp icmp 連線中,隨即送出 icmp port/destination unreachable 封包以截斷這個連線。主機型 IDS 因為是採定時檢查的方式,容易在反應之前就遭受到阻絕攻擊而導致主機當機、或無法繼續運作、即時反應。
(ref: spoofing!)
(4). 較大的彈性空間:
網路型 IDS 可以選擇和主機型 IDS 一樣放在防火牆內部;但是也可以選擇放在防火牆外部,這點也是主機型 IDS 無法做到的,而此時無論成功通過防火牆或被防火牆擋下的攻擊事件,都會被網路型 IDS 偵測、紀錄下來,以獲得更多關於攻擊者的資訊。
除此之外,網路型 IDS 也不需要像主機型 IDS 要考慮到主機平台是否支援此 IDS 的因素。
(5). 匿蹤、隱形的能力:
相對於主機型 IDS,網路型的 IDS 可以不設定網路介面的位址 (IP address),也就是達到隱形於網路,同時又能截取所有網路封包的資訊。而主機型 IDS 可能就是攻擊者的攻擊目標之一,攻擊者可能針對主機型 IDS 重要的檔案進行移除或更改。
主機型 IDS:
(A). 運作方式:
檢查主機所收集到的系統紀錄檔資料,以找出可疑的攻擊資料。在收集到新的紀錄資料時,IDS 比對可疑的攻擊模式,若有符合攻擊模式特徵(比對模式同網路型IDS 四點),則通知管理人員並做出適當反制措施。
現行的主機型 IDS 除了稽核系統紀錄檔以外,也會定時 (ref: time trap, event trap)對重要的系統設定檔、執行檔進行計算稽核值 (checksum hash, md5, digital signature) 的比對,以確定重要的檔案未受惡意的更改。
而 IDS 的反應速度也就決定於所訂定的檢查頻率、或 event trap 產生(e.g open or modify a file) 的反應時間。當發現攻擊行為時,可以有結束使用者連線,停止使用者權限等反制動作。
現行的主機型 IDS 也有在特定的 port 上進行網路封包檢查,算是結合主機型與網路型 IDS 功能的一種方式,而網路型與主機型相互結合也是 IDS 發展的趨勢之一。
(B). 主機型 IDS 相對於網路型 IDS 的優(缺)點:
(1). 對於攻擊事件的影響有較詳盡的紀錄:
因為主機型 IDS 是將攻擊者所造成的系統改變紀錄下來,因此可以得知更多關於攻擊者對特定主機入侵事件造成的影響,及更準確的紀錄攻擊行動的成敗。這部份的紀錄也可以和網路型 IDS 所能即時測知的預警紀錄互相對照比較。
主機型 IDS 通常有個別使用者的上線紀錄,重要檔案的增刪修改紀錄,使用者權限改變的紀錄,使用者連線到哪裡的紀錄,系統對外開啟的 port 紀錄、由哪一個程式開啟哪些檔案、port number 等紀錄,這些都是網路型 IDS 很難做到的。
(2). console 安全防護:
這是主機型 IDS 可以防護的範圍,而網路型 IDS就無法做到這點防護。
(3). 點對點連線的防護:
目前有許多的點對點連線因為採取加密處理,而無法在網路型 IDS 上做到完全的檢查,除非利用網路架構來解決(ref: reverse proxy),此時就可以在主機型 IDS 上,對連線傳輸的資料做稽核檢察。
(4). 不需另外新增主機硬體:
主機型 IDS 只需要在主機上另外安裝新的軟體,而不像網路型 IDS 需要另外新增主機硬體設備。
應用程式型 IDS:
(A). 變形 shellcode:
主要是針對輸入值的辨認來偵測攻擊行動的發生,可能的話可以直接攔截此輸入值,不讓應用程式執行到惡意的攻擊碼。但在實作偵測上有相當多的問題,因為目前的攻擊程式碼有很多變型的輸入值,從底層的組合語言 shellcode 等的變型,到字元不同編碼的變型,到字串可替代的各種變型都要考慮到,而這些變型如果在網路型 IDS 做檢查的話,勢必會造成處理速度太慢而無法搜集、檢查每個封包。關於字串的比對可能的發展方向是 fuzzy match,可以參考著名的 agrep 實作方法。
在變型的 shellcode 方面,我們可以把偵測連續的 NOP 指令改成是累計數,而不一定用連續的 NOP 作比對,並且對於可能的替代 NOP 用的組合語言指令做一份替換用的指令集列表做比對。針對加裝加密引擎的 shellcode 指令,我們可以加一個解密的模組比對,假如比對出解密的引擎出現,我們就可以假設有變型 shellcode 出現。
(ref: http://www.cansecwest.com/spp_fnord.c , http://www.ngsec.com/ )
(B). Protocol flow and multi-pattern search
應用 protocol analysis 的觀念:
將 client/server 的傳輸分別識為 client->server 的 client flow,以及 server->client 的 server flow。
如此分別我們在已知的傳輸協定中就可以直接將 client flow 拿來做 client request 相關檢查;將 server flow 的資料拿來做 server response 相關檢查,如此一來(分別對 client/server flow 而言),我們可以將比對的規則範圍縮小,也可以在更確切的 protocol
segment 中做規則比對的動作。
multi-pattern 的比對概念在於將某一類的比對規則應用於適合的資料上,因此首先,我們必需先將比對規則做相關類別的分類。比如依據 source/destination port、rule content 等參數為比對規則分類,在每一個分類集合中,也包括了這個分類所適用的封包種類(同時對規則封包做分類)。比如說 protocol flow 就是封包分類標準所用的參數之一。(應用於 snort 2.0 的 multi-rule search 上) snort multi-rule search:
(1). protocol field: (uricontent)
(2). generic content: (byte position in payload)
(3). packet anomaly: (icmp packets > 800bytes)
(ref: http://www.snort.org/docs/Snort_20_v4.pdf )
*閃躲(攻擊) IDS 的方法:
以下討論的各種攻擊方法,主要是針對網路型 IDS 。
目前有一種攻擊程式會在連線當中釋放出誘敵的假封包(decoy with FIN or RST in TCP , of incorrect sequence number.)造成部份會保留連線狀態資料的網路型 IDS 錯認為該連線已經結束,逕而開始真正的攻擊動作。當然,對於直接截取所有封包而未做連線動態資料的網路型 IDS 就較不受影響。
第二種在實用上的攻擊程式則是在連線成功後,先送出大量的假封包(mass packets with wrong sequence numbers)藉此把某些網路型 IDS 的封包資料緩衝區塞滿,接著再進行實際的攻擊動作。當然,對於未設定封包資料緩衝區大小上限的網路型 IDS 這招就無效了,但是無大小上限的實作方式可能就比較需要更聰明的做法來達成,否則遇到傳輸量大的連線必定會變成阻絕攻擊的受害者。但若是以遭到阻絕式攻擊與入侵攻擊兩者的權衡輕重來看,是仍有很多討論空間的 :)
第三種在實用上的攻擊程式是利用封包分段的方式,躲過不檢查分段封包的網路型 IDS,或者是不會將分段封包重組的網路型 IDS 也無法查覺躲在分段封包(包括 IP 層與 TCP 層)中的攻擊程式碼。
(tcp is aware of mtu value, fragmentation example: first 8 bytes tcp header packet, the following packets are all sized to be 32 bytes data)。
另一種分段方法是重疊分段的傳送攻擊碼,比如第一次傳"OVV",第二次傳"ERFLOW",結果是送出 "OVERFLOW"的程式碼。
對於會經過不允許封包分段的網路節點,或者對方是會將過小封包丟棄的路由器或防火牆,此種攻擊法則會失效。(ref: tcp overlap)
第四種在實用上的攻擊程式是在連線之後,送出許多符合目前連線的 SYN 封包,就作業系統本身並不理會這種封包,但是對於會記錄連線狀態的網路型 IDS 而言,則會誤以為是新的連線產生,而與新的封包序號做同步的動作(sequence number sync),在連線 timeout 之前攻擊方再送出一個新序號的 RST 封包,如此就可以讓此 IDS 以為連線已斷,但是事實上真正的行動才正要上演...:P
第五種攻擊是在真正的連線之前,先在攻擊主機上 bind 固定一個 port,再藉同一個 port 做接下來的動作: 送出誘敵的 SYN 封包,而這個封包的 checksum value 我們故意亂填,只要這個 IDS 沒有檢查 checksum 值就會以為已經有連線產生(sync with first SYN),而之後真正的連線封包,反而在 IDS 內被認為是無效的垃圾封包。
第六種是混合型,一開始的情形與第一種攻擊類似,但是接下送出錯誤 checksum 的 FIN/RST 封包讓未檢查 checksum 的 IDS 以為該連線已斷,接下來就開始實際的攻擊動作。
第七種也是以上的混合型,先對目的地送出大量錯誤checksum 的封包,使 IDS 誤判,以躲過 IDS 的偵測。
第八種是藉由計算實際上到目標主機的 TTL 值,再以此值減一(通常就是 IDS 所在位置)送出
FIN/RST/Data 封包藉以讓 IDS 以為該連線已無效,再進行真正的連線。這個方法也可以跟封包分段做結合,也就是利用不會到達目的地的封包(較小的 TTL值、無效的封包),藉此使 IDS 無法比對出真正的攻擊碼。
綜觀以上這些攻擊方法,主要是針對網路協定底層的可能問題如 checksum、sequence number sync、TTL、fragment 等等的封包 header 資料一一進行試驗破解,另外還有許多在網路協定應用程式層面的攻擊尚未介紹,以下我們再來看看另類攻擊包裝的可能方法。
第一種,類似 fragment 封包分段的作法,就是將攻擊的程式分成多段來執行,可以把第一次連線、第二次連線先放上片段的攻擊程式碼,再等到第三次攻擊
才進行真正的執行動作。目前實作的方法是掌握該網路協定的 time out 時限,在同一個 session time out 之前依序送出片段的程式碼,就可以達到躲過 IDS 的目的。值得注意的是,不管是 tcp 或 udp 分段的封包,除了這整串封包的第一個分段封包有 tcp 或 udp header 以外,接下來的分段封包都只含有 ip header 和 tcp 或 udp 的資料。因此,只要第一個分段封包不被發現,就可以達到目的了。
第二種,也是類似封包分段的作法,但是我們可以用不同來源的連線組成真正要執行的程式碼,等到程式碼都上傳完畢再執行。
第三種,利用不同的編碼方式代表同義的字元,比如用二進位或十六進位的方式來代替一般的字元,用 ISO 8859-1 的 &=34 或 " 來代表 " ,比如說十六進位的:
GET %65%74%63/%70%61%73%73%77%64
或者是
GET %65%74%63/%70a%73%73%77d
來代表 GET /etc/passwd
再考慮 UNICODE UTF8 編碼的變種方式( 如%c0%af的 escape sequence、%c0%ae%c0%ae 的 `..' 路徑漫遊),這些不同編碼在網頁處理的漏洞攻擊上,常常扮演著重要的角色。
第四種,用變數名稱代表重要的資料、檔案,用 shell script 的名稱來代表要執行的惡意程式,用不同的程式代表同樣的功能,比如 `echo *' 代表 `ls';字串的處理如 /etc/passwd 可以改成如 /etc//\//passwd,/etc/rc.d/.././\passwd。
第五種,使用加密資料來傳輸,到達目的地之後再將資料解密(ref: VPN, SSL, ipsec)。
第六種,先嘗試把 IDS 所在的主機平台設定為第一攻擊目標,在網路型 IDS 運作前就將該主機平台以阻絕式攻擊癱瘓。或者在 IDS 動作前就先取得權限。
第七種,先以大家較熟的"經典"級(較舊的:)的攻擊從假的來源位址發動,以大量的攻擊封包讓 IDS 的 audit record 佔滿該 IDS 的稽核資料庫;或者是讓 IDS 忙碌於較高頻率的雜訊,再趁亂同時發動攻擊,讓 IDS 措手不及。
第八種,變型的 shellcode,在變型的 shellcode 出現之前,IDS 所使用來辨識 shellcode 的方法就是抓取 NOP(0x90 on IA32) 指令,或者是抓取有執行 /bin/sh 或者是 bind port shell 的動作,但是現在變型的 shellcode 可以把一連串的 NOP 指令轉換成 inc %eax, inc %ebx, pop %eax, nop, dec %eax, dec %ebx ...等等的同義 NOP,(0x90) 指令,而在執行shellcode、bind shell 的部份則用了 xor 等指令來做簡單的加密引擎(從病毒寫法模仿而來),使得 IDS 無法辨認。與 NOP 指令同義的相關指令集(包括x86以外的平台)可到以下的網址取得:
http://www.cansecwest.com/noplist-v1-1.txt
(ref: spoof, stick, snot, frageroute, whisker)
*IDS 未來的發展方向:
(1). 網路型和主機型 IDS 兩者的整合,需考慮到 IDS 本身的穩定性,針對阻絕式服務的應變方式,要能有容錯能力,在發生系統錯誤時能夠自動重新啟動、或者是保有備份系統的運作。(ref: fault tolerance)
(2). 整合的事件紀錄資料庫,整合的事件報告,考慮保留連線狀態可能遺漏的攻擊事件紀錄,加強對封包重組檢查的完備性。(ref: data mining)
(3). 整合的事件處理與事件回應,和防火牆整合的應變程序,和決策支援系統的整合,讓管理者能夠依據個別網路環境實況,得到動態的決策建議。
(ref: decision support system, expert system)
(4). 必需對假警報事件做更完整的檢查,並且需考慮到連線狀態的真假判定,以及所監控的網路協定正確的溝通方法,藉由觀察伺服器回應的封包,要有判斷攻擊事件成功與否的判定能力。不可以為了提高效率就忽略封包完整性的檢查,如此就失去 IDS 存在的意義了。
(5). 針對比對的規則,時間與封包數量方面考慮動態的依照事件發生頻率、異常封包、異常流量修改比對的順序、為各種已知攻擊危險性設定加權值,提高比對的效率。
調整同一來源(主機、網域)攻擊的比重值,增加偵測未知攻擊型態的能力。同時也必須注意到所需蒐集資料量的最佳化處理,以免浪費過多處理用的資料空間。
(ref: packet frequency, Digital Signal Process)
(6). 針對各個協定的網路封包格式,進行強制性的封包 header 資料修正動作,直接避免不符合協定的封包。
朝向以 Intrusion Response 為起點, 以 Intrusion Prevention 為目標的發展方向。強制改變封包的動作所造成的影響,也是另一個研究主題。
(ref: preemption, 2003 iraqi war )
(ref: state-full, detect scan, redirect[reply] to spoof feature in ipfilter, protocol analysis, BlackICE, protocol compliance, uricontent in snort, Boyre-Moore, Aho-Corasick, Algorithms on strings, string matching, similarity between of firewall and ids, ipfilter + bridge = stealth, no ip address and route table, reassemble preprocessor in snort :)
*參考資料: 網路上的某十九篇討論 ids 的論文、文章 :)
(1). Pilymorphic Shellcodes vs. Application IDSs
by Next Generation Security Technologies
(2). IDS Evasion Techniques and Tactics
by Kevin Timm
(3). Insertion, Evasion, and Denial of Service:
Eluding Network Intrusion Detection
by Thomas H. Ptacek tqbf at securenetworks.com
Timothy N. Newsham newsham at securenetworks.com
Secure Networks, Inc. January 1998
(4). An Intrusion Detection Model Combining Abnormal
Detection and Misuse Detection Using Self-Organization Mapping.
by
李昭毅 jolo17 at seed.net.tw
蔡敦仁 drtt at mail.pccu.edu.tw
戴文彬 tai at faulty.pccu.edu.tw
(5). Increasing Performance in High Speed NIDS
A look at Snort's Internals
by Neil Desai ndesai01 at tampabay.rr.com
(6). A look at whisker's anti-IDS tactics
by Rain Forest Puppy
rfp at wiretrip.net
http://www.wiretrip.net/rfp/pages/whitepapers/
whiskerids.html(obsolete)
http://www.cirt.net/code/nikto.shtml
主機型入侵偵測系統(以下以主機型 IDS 簡稱)
應用程式型入侵偵測系統(以下以應用程式型 IDS 簡稱)
*前言:
在一個網路防禦網裡,IDS 並不能保證你所在網域的安全性,通常 IDS 需要與防火牆、安全人員所制定的安全策略、網路弱點稽查、權限稽核做結合,才能對整個網域做完整的保護措施。
*正題:
一個 IDS 的主要功能有三點,第一是監視目前狀況,第二是偵測的動作,第三是反制方法,而以下所會談到的,主要是第二點的部份,關於監視的方法與原理,請有興趣的讀者自行查閱 sniff/sniffer/sniffing/broadcast 等關鍵字。而要達到這三種功能,我們可以從異常狀況的發生、攻擊事件的確認、可疑事件的綜合分析等方法去達成。
大部份的入侵偵測系統都是以特徵模式(signatures)來辨別是否為蓄意的入侵或有攻擊的意圖,在網路封包的分析上,也開始走向網路規格協定的比對。以採集資料的方式來區分的話,可以將入侵偵測系統分為以監控網路封包為主的網路型IDS、以監控系統紀錄檔來做判斷的主機型 IDS 、以監控應用程式接收值做判斷的應用程式型 IDS。
應用程式型 IDS 主要是因應網路攻擊事件中,光是針對應用程式而使用的攻擊就佔絕大部份,而應用程式輸入值更是攻擊事件的關鍵要點,因此現在出現了針對應用程式接收值做確認的 IDS 。
網路型 IDS:
(A). 運作方式:
在網路的必經節點上過濾所有封包,並即時將這些封包加以分析比對,比如分析封包 header 的資料時,可以偵測到如 source route、out of band、fragmented packet(teardrop) land(same ip, port)
等攻擊,在分析封包內容時,可以偵測到如木馬程式的特定指令、如含有 shellcode 的攻擊程式、含有特定 cgi/php/asp 程式漏洞的特殊指令,這些都可以用最簡單的字串比對等方法來做為攻擊特徵 (signature) 的比對,例如 shellcode 部份可以用累計超過五十個 NOP 指令比對;比對 /etc/passwd 字串以表示有人試圖擷取、修改密碼檔。
在做分析比對的模組上,有以下四種的攻擊特徵比對模式:
(1). 特殊的字串、位元組及特徵值的比對、是否符合網路協定規格
(2). 事件發生的頻率,是否超過所設的門檻值
(3). 可疑事件的關聯性
(4). 統計結果上的異常例外數值 (異於往常的行為模式 *chjong*)
而在比對出符合的攻擊模式後,反應模組會有通知、警告以及做出反制行動等功能,通常會是通知管理者、切斷可疑連線或紀錄可疑連線以做為攻擊證據搜集、研究用。
(B). 網路型 IDS 相對於主機型 IDS 的優(缺)點:
(1). 集中注意於一網路節點:
網路型 IDS 因為只需設置在一網路必經節點上,而不像主機型 IDS 必須設置於網路上的每一台主機,在管理和成本考量上都是較理想的。
(相對的,若只設網路型 IDS 也會因為只靠唯一一層防護而需要冒較高的風險,而且網路型 IDS 如果沒有與應用程式結合運用的話,一遇到加密的點對點連線就沒輒了)
(2). 攻擊者較難除去進行攻擊後留下的封包證據:
因為網路型 IDS 所採取的是即時收集封包,攻擊者要抹滅曾經進行的攻擊證據更加困難。而這些收集到的封包證據也有助於辨認攻擊者。而在主機型 IDS 上,通常他們所用的紀錄檔或是稽核檔案,都可能會被攻擊者入侵後修改,而造成主機型 IDS 失效,甚至誤導之後的稽核檢查動作。
(3). 即時反應,減緩攻擊者造成的傷害:
因為網路型 IDS 所採取的是即時收集封包,可以在分析比對後即時通知、反應,避免給與攻擊者過多時間進行更進一步的攻擊行動。比如當一個惡意的 tcp 連線被偵測到時,網路型 IDS 可以隨即送出一個 tcp reset 封包以截斷這個連線,在一個惡意 udp icmp 連線中,隨即送出 icmp port/destination unreachable 封包以截斷這個連線。主機型 IDS 因為是採定時檢查的方式,容易在反應之前就遭受到阻絕攻擊而導致主機當機、或無法繼續運作、即時反應。
(ref: spoofing!)
(4). 較大的彈性空間:
網路型 IDS 可以選擇和主機型 IDS 一樣放在防火牆內部;但是也可以選擇放在防火牆外部,這點也是主機型 IDS 無法做到的,而此時無論成功通過防火牆或被防火牆擋下的攻擊事件,都會被網路型 IDS 偵測、紀錄下來,以獲得更多關於攻擊者的資訊。
除此之外,網路型 IDS 也不需要像主機型 IDS 要考慮到主機平台是否支援此 IDS 的因素。
(5). 匿蹤、隱形的能力:
相對於主機型 IDS,網路型的 IDS 可以不設定網路介面的位址 (IP address),也就是達到隱形於網路,同時又能截取所有網路封包的資訊。而主機型 IDS 可能就是攻擊者的攻擊目標之一,攻擊者可能針對主機型 IDS 重要的檔案進行移除或更改。
主機型 IDS:
(A). 運作方式:
檢查主機所收集到的系統紀錄檔資料,以找出可疑的攻擊資料。在收集到新的紀錄資料時,IDS 比對可疑的攻擊模式,若有符合攻擊模式特徵(比對模式同網路型IDS 四點),則通知管理人員並做出適當反制措施。
現行的主機型 IDS 除了稽核系統紀錄檔以外,也會定時 (ref: time trap, event trap)對重要的系統設定檔、執行檔進行計算稽核值 (checksum hash, md5, digital signature) 的比對,以確定重要的檔案未受惡意的更改。
而 IDS 的反應速度也就決定於所訂定的檢查頻率、或 event trap 產生(e.g open or modify a file) 的反應時間。當發現攻擊行為時,可以有結束使用者連線,停止使用者權限等反制動作。
現行的主機型 IDS 也有在特定的 port 上進行網路封包檢查,算是結合主機型與網路型 IDS 功能的一種方式,而網路型與主機型相互結合也是 IDS 發展的趨勢之一。
(B). 主機型 IDS 相對於網路型 IDS 的優(缺)點:
(1). 對於攻擊事件的影響有較詳盡的紀錄:
因為主機型 IDS 是將攻擊者所造成的系統改變紀錄下來,因此可以得知更多關於攻擊者對特定主機入侵事件造成的影響,及更準確的紀錄攻擊行動的成敗。這部份的紀錄也可以和網路型 IDS 所能即時測知的預警紀錄互相對照比較。
主機型 IDS 通常有個別使用者的上線紀錄,重要檔案的增刪修改紀錄,使用者權限改變的紀錄,使用者連線到哪裡的紀錄,系統對外開啟的 port 紀錄、由哪一個程式開啟哪些檔案、port number 等紀錄,這些都是網路型 IDS 很難做到的。
(2). console 安全防護:
這是主機型 IDS 可以防護的範圍,而網路型 IDS就無法做到這點防護。
(3). 點對點連線的防護:
目前有許多的點對點連線因為採取加密處理,而無法在網路型 IDS 上做到完全的檢查,除非利用網路架構來解決(ref: reverse proxy),此時就可以在主機型 IDS 上,對連線傳輸的資料做稽核檢察。
(4). 不需另外新增主機硬體:
主機型 IDS 只需要在主機上另外安裝新的軟體,而不像網路型 IDS 需要另外新增主機硬體設備。
應用程式型 IDS:
(A). 變形 shellcode:
主要是針對輸入值的辨認來偵測攻擊行動的發生,可能的話可以直接攔截此輸入值,不讓應用程式執行到惡意的攻擊碼。但在實作偵測上有相當多的問題,因為目前的攻擊程式碼有很多變型的輸入值,從底層的組合語言 shellcode 等的變型,到字元不同編碼的變型,到字串可替代的各種變型都要考慮到,而這些變型如果在網路型 IDS 做檢查的話,勢必會造成處理速度太慢而無法搜集、檢查每個封包。關於字串的比對可能的發展方向是 fuzzy match,可以參考著名的 agrep 實作方法。
在變型的 shellcode 方面,我們可以把偵測連續的 NOP 指令改成是累計數,而不一定用連續的 NOP 作比對,並且對於可能的替代 NOP 用的組合語言指令做一份替換用的指令集列表做比對。針對加裝加密引擎的 shellcode 指令,我們可以加一個解密的模組比對,假如比對出解密的引擎出現,我們就可以假設有變型 shellcode 出現。
(ref: http://www.cansecwest.com/spp_fnord.c , http://www.ngsec.com/ )
(B). Protocol flow and multi-pattern search
應用 protocol analysis 的觀念:
將 client/server 的傳輸分別識為 client->server 的 client flow,以及 server->client 的 server flow。
如此分別我們在已知的傳輸協定中就可以直接將 client flow 拿來做 client request 相關檢查;將 server flow 的資料拿來做 server response 相關檢查,如此一來(分別對 client/server flow 而言),我們可以將比對的規則範圍縮小,也可以在更確切的 protocol
segment 中做規則比對的動作。
multi-pattern 的比對概念在於將某一類的比對規則應用於適合的資料上,因此首先,我們必需先將比對規則做相關類別的分類。比如依據 source/destination port、rule content 等參數為比對規則分類,在每一個分類集合中,也包括了這個分類所適用的封包種類(同時對規則封包做分類)。比如說 protocol flow 就是封包分類標準所用的參數之一。(應用於 snort 2.0 的 multi-rule search 上) snort multi-rule search:
(1). protocol field: (uricontent)
(2). generic content: (byte position in payload)
(3). packet anomaly: (icmp packets > 800bytes)
(ref: http://www.snort.org/docs/Snort_20_v4.pdf )
*閃躲(攻擊) IDS 的方法:
以下討論的各種攻擊方法,主要是針對網路型 IDS 。
目前有一種攻擊程式會在連線當中釋放出誘敵的假封包(decoy with FIN or RST in TCP , of incorrect sequence number.)造成部份會保留連線狀態資料的網路型 IDS 錯認為該連線已經結束,逕而開始真正的攻擊動作。當然,對於直接截取所有封包而未做連線動態資料的網路型 IDS 就較不受影響。
第二種在實用上的攻擊程式則是在連線成功後,先送出大量的假封包(mass packets with wrong sequence numbers)藉此把某些網路型 IDS 的封包資料緩衝區塞滿,接著再進行實際的攻擊動作。當然,對於未設定封包資料緩衝區大小上限的網路型 IDS 這招就無效了,但是無大小上限的實作方式可能就比較需要更聰明的做法來達成,否則遇到傳輸量大的連線必定會變成阻絕攻擊的受害者。但若是以遭到阻絕式攻擊與入侵攻擊兩者的權衡輕重來看,是仍有很多討論空間的 :)
第三種在實用上的攻擊程式是利用封包分段的方式,躲過不檢查分段封包的網路型 IDS,或者是不會將分段封包重組的網路型 IDS 也無法查覺躲在分段封包(包括 IP 層與 TCP 層)中的攻擊程式碼。
(tcp is aware of mtu value, fragmentation example: first 8 bytes tcp header packet, the following packets are all sized to be 32 bytes data)。
另一種分段方法是重疊分段的傳送攻擊碼,比如第一次傳"OVV",第二次傳"ERFLOW",結果是送出 "OVERFLOW"的程式碼。
對於會經過不允許封包分段的網路節點,或者對方是會將過小封包丟棄的路由器或防火牆,此種攻擊法則會失效。(ref: tcp overlap)
第四種在實用上的攻擊程式是在連線之後,送出許多符合目前連線的 SYN 封包,就作業系統本身並不理會這種封包,但是對於會記錄連線狀態的網路型 IDS 而言,則會誤以為是新的連線產生,而與新的封包序號做同步的動作(sequence number sync),在連線 timeout 之前攻擊方再送出一個新序號的 RST 封包,如此就可以讓此 IDS 以為連線已斷,但是事實上真正的行動才正要上演...:P
第五種攻擊是在真正的連線之前,先在攻擊主機上 bind 固定一個 port,再藉同一個 port 做接下來的動作: 送出誘敵的 SYN 封包,而這個封包的 checksum value 我們故意亂填,只要這個 IDS 沒有檢查 checksum 值就會以為已經有連線產生(sync with first SYN),而之後真正的連線封包,反而在 IDS 內被認為是無效的垃圾封包。
第六種是混合型,一開始的情形與第一種攻擊類似,但是接下送出錯誤 checksum 的 FIN/RST 封包讓未檢查 checksum 的 IDS 以為該連線已斷,接下來就開始實際的攻擊動作。
第七種也是以上的混合型,先對目的地送出大量錯誤checksum 的封包,使 IDS 誤判,以躲過 IDS 的偵測。
第八種是藉由計算實際上到目標主機的 TTL 值,再以此值減一(通常就是 IDS 所在位置)送出
FIN/RST/Data 封包藉以讓 IDS 以為該連線已無效,再進行真正的連線。這個方法也可以跟封包分段做結合,也就是利用不會到達目的地的封包(較小的 TTL值、無效的封包),藉此使 IDS 無法比對出真正的攻擊碼。
綜觀以上這些攻擊方法,主要是針對網路協定底層的可能問題如 checksum、sequence number sync、TTL、fragment 等等的封包 header 資料一一進行試驗破解,另外還有許多在網路協定應用程式層面的攻擊尚未介紹,以下我們再來看看另類攻擊包裝的可能方法。
第一種,類似 fragment 封包分段的作法,就是將攻擊的程式分成多段來執行,可以把第一次連線、第二次連線先放上片段的攻擊程式碼,再等到第三次攻擊
才進行真正的執行動作。目前實作的方法是掌握該網路協定的 time out 時限,在同一個 session time out 之前依序送出片段的程式碼,就可以達到躲過 IDS 的目的。值得注意的是,不管是 tcp 或 udp 分段的封包,除了這整串封包的第一個分段封包有 tcp 或 udp header 以外,接下來的分段封包都只含有 ip header 和 tcp 或 udp 的資料。因此,只要第一個分段封包不被發現,就可以達到目的了。
第二種,也是類似封包分段的作法,但是我們可以用不同來源的連線組成真正要執行的程式碼,等到程式碼都上傳完畢再執行。
第三種,利用不同的編碼方式代表同義的字元,比如用二進位或十六進位的方式來代替一般的字元,用 ISO 8859-1 的 &=34 或 " 來代表 " ,比如說十六進位的:
GET %65%74%63/%70%61%73%73%77%64
或者是
GET %65%74%63/%70a%73%73%77d
來代表 GET /etc/passwd
再考慮 UNICODE UTF8 編碼的變種方式( 如%c0%af的 escape sequence、%c0%ae%c0%ae 的 `..' 路徑漫遊),這些不同編碼在網頁處理的漏洞攻擊上,常常扮演著重要的角色。
第四種,用變數名稱代表重要的資料、檔案,用 shell script 的名稱來代表要執行的惡意程式,用不同的程式代表同樣的功能,比如 `echo *' 代表 `ls';字串的處理如 /etc/passwd 可以改成如 /etc//\//passwd,/etc/rc.d/.././\passwd。
第五種,使用加密資料來傳輸,到達目的地之後再將資料解密(ref: VPN, SSL, ipsec)。
第六種,先嘗試把 IDS 所在的主機平台設定為第一攻擊目標,在網路型 IDS 運作前就將該主機平台以阻絕式攻擊癱瘓。或者在 IDS 動作前就先取得權限。
第七種,先以大家較熟的"經典"級(較舊的:)的攻擊從假的來源位址發動,以大量的攻擊封包讓 IDS 的 audit record 佔滿該 IDS 的稽核資料庫;或者是讓 IDS 忙碌於較高頻率的雜訊,再趁亂同時發動攻擊,讓 IDS 措手不及。
第八種,變型的 shellcode,在變型的 shellcode 出現之前,IDS 所使用來辨識 shellcode 的方法就是抓取 NOP(0x90 on IA32) 指令,或者是抓取有執行 /bin/sh 或者是 bind port shell 的動作,但是現在變型的 shellcode 可以把一連串的 NOP 指令轉換成 inc %eax, inc %ebx, pop %eax, nop, dec %eax, dec %ebx ...等等的同義 NOP,(0x90) 指令,而在執行shellcode、bind shell 的部份則用了 xor 等指令來做簡單的加密引擎(從病毒寫法模仿而來),使得 IDS 無法辨認。與 NOP 指令同義的相關指令集(包括x86以外的平台)可到以下的網址取得:
http://www.cansecwest.com/noplist-v1-1.txt
(ref: spoof, stick, snot, frageroute, whisker)
*IDS 未來的發展方向:
(1). 網路型和主機型 IDS 兩者的整合,需考慮到 IDS 本身的穩定性,針對阻絕式服務的應變方式,要能有容錯能力,在發生系統錯誤時能夠自動重新啟動、或者是保有備份系統的運作。(ref: fault tolerance)
(2). 整合的事件紀錄資料庫,整合的事件報告,考慮保留連線狀態可能遺漏的攻擊事件紀錄,加強對封包重組檢查的完備性。(ref: data mining)
(3). 整合的事件處理與事件回應,和防火牆整合的應變程序,和決策支援系統的整合,讓管理者能夠依據個別網路環境實況,得到動態的決策建議。
(ref: decision support system, expert system)
(4). 必需對假警報事件做更完整的檢查,並且需考慮到連線狀態的真假判定,以及所監控的網路協定正確的溝通方法,藉由觀察伺服器回應的封包,要有判斷攻擊事件成功與否的判定能力。不可以為了提高效率就忽略封包完整性的檢查,如此就失去 IDS 存在的意義了。
(5). 針對比對的規則,時間與封包數量方面考慮動態的依照事件發生頻率、異常封包、異常流量修改比對的順序、為各種已知攻擊危險性設定加權值,提高比對的效率。
調整同一來源(主機、網域)攻擊的比重值,增加偵測未知攻擊型態的能力。同時也必須注意到所需蒐集資料量的最佳化處理,以免浪費過多處理用的資料空間。
(ref: packet frequency, Digital Signal Process)
(6). 針對各個協定的網路封包格式,進行強制性的封包 header 資料修正動作,直接避免不符合協定的封包。
朝向以 Intrusion Response 為起點, 以 Intrusion Prevention 為目標的發展方向。強制改變封包的動作所造成的影響,也是另一個研究主題。
(ref: preemption, 2003 iraqi war )
(ref: state-full, detect scan, redirect[reply] to spoof feature in ipfilter, protocol analysis, BlackICE, protocol compliance, uricontent in snort, Boyre-Moore, Aho-Corasick, Algorithms on strings, string matching, similarity between of firewall and ids, ipfilter + bridge = stealth, no ip address and route table, reassemble preprocessor in snort :)
*參考資料: 網路上的某十九篇討論 ids 的論文、文章 :)
(1). Pilymorphic Shellcodes vs. Application IDSs
by Next Generation Security Technologies
(2). IDS Evasion Techniques and Tactics
by Kevin Timm
(3). Insertion, Evasion, and Denial of Service:
Eluding Network Intrusion Detection
by Thomas H. Ptacek tqbf at securenetworks.com
Timothy N. Newsham newsham at securenetworks.com
Secure Networks, Inc. January 1998
(4). An Intrusion Detection Model Combining Abnormal
Detection and Misuse Detection Using Self-Organization Mapping.
by
李昭毅 jolo17 at seed.net.tw
蔡敦仁 drtt at mail.pccu.edu.tw
戴文彬 tai at faulty.pccu.edu.tw
(5). Increasing Performance in High Speed NIDS
A look at Snort's Internals
by Neil Desai ndesai01 at tampabay.rr.com
(6). A look at whisker's anti-IDS tactics
by Rain Forest Puppy
rfp at wiretrip.net
http://www.wiretrip.net/rfp/pages/whitepapers/
whiskerids.html(obsolete)
http://www.cirt.net/code/nikto.shtml
Labels:
入侵偵測,
網路安全,
ids,
intrusion detection system,
ips,
network security
訂閱:
文章 (Atom)