顯示具有 辨識 標籤的文章。 顯示所有文章
顯示具有 辨識 標籤的文章。 顯示所有文章

2008年2月23日 星期六

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 使用時的協定版本
(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/