tech-sjh

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=89
99

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/

沒有留言:

張貼留言

版權宣告、免責聲明


姓名標示、非商業性、相同方式分享3.0台灣授權條款授權。
免責聲明: 本文所載資料僅供參考,並不構成投資建議,
讀者閱讀或使用該資料所導致結果需要自擔風險與責任,
作者概不承擔閱讀人行為之任何風險與責任。
除非有特別宣稱,作者言論並不代表所屬任何團體、公司、或其他人意見。