中間人攻擊

間接入侵攻擊的方式

中間人攻擊(Man-in-the-MiddleAttack,簡稱“MITM攻擊”)是一種“間接”的入侵攻擊,這種攻擊模式是通過各種技術手段將受入侵者控制的一台計算機虛擬放置在網路連接中的兩台通信計算機之間,這台計算機就稱為“中間人”。

簡介


攻擊(--- , )久網路侵段,且今仍廣泛展空,SMB會話劫持、DNS欺騙等攻擊都是典型的MITM攻擊。簡而言之,所謂的MITM攻擊就是通過攔截正常的網路通信數據,並進行數據篡改和嗅探,而通信的雙方卻毫不知情。
隨計算網技術斷展,攻擊越越化。初,攻擊網卡設為混雜模式,偽裝成代理伺服器監聽特定的流量就可以實現攻擊,這是因為很多通信協議都是以明文來進行傳輸的,如HTTP、FTP、Telnet等。後來,隨著交換機代替集線器,簡單的嗅探攻擊已經不能成功,必須先進行ARP欺騙才行。如今,越來越多的服務商(網上銀行,郵箱登陸)開始採用加密通信,SSL(Secure Sockets Layer 安全套接層)是一種廣泛使用的技術,HTTPS、FTPS等都是建立在其基礎上的。

攻擊方式


攻擊(---,簡稱“攻擊”)攻擊早黑客古攻擊段,且今具極擴展空。在網路安全方面,MITM攻擊的使用是很廣泛的,曾經猖獗一時的SMB會話劫持、DNS欺騙等技術都是典型的MITM攻擊手段。在黑客技術越來越多的運用於以獲取經濟利益為目標的情況下時,MITM攻擊成為對網銀、網游、網上交易等最有威脅並且最具破壞性的一種攻擊方式。

信息篡改

當主機A、和主機B通信時,都由主機C來為其“轉發”,如圖一,而A、B之間並沒有真正意思上的直接通信,他們之間的信息傳遞同C作為中介來完成,但是A、B卻不會意識到,而以為它們之間是在直接通信。這樣攻擊主機在中間成為了一個轉發器,C可以不僅竊聽A、B的通信還可以對信息進行篡改再傳給對方,C便可以將惡意信息傳遞給A、B以達到自己的目的。

信息竊取

當A、B通信時,C不主動去為其“轉發”,只是把他們的傳輸的數據備份,以獲取用戶網路的活動,包括賬戶、密碼等敏感信息,這是被動攻擊也是非常難被發現的。
實施中間人攻擊時,攻擊者常考慮的方式是ARP欺騙或DNS欺騙等,將會話雙方的通訊流暗中改變,而這種改變對於會話雙方來說是完全透明的。以常見的DNS欺騙為例,目標將其DNS請求發送到攻擊者這裡,然後攻擊者偽造DNS響應,將正確的IP地址替換為其他IP,之後你就登陸了這個攻擊者指定的IP,而攻擊者早就在這個IP中安排好了一個偽造的網站如某銀行網站,從而騙取用戶輸入他們想得到的信息,如銀行賬號及密碼等,這可以看作一種網路釣魚攻擊的一種方式。對於個人用戶來說,要防範DNS劫持應該注意不點擊不明的連接、不去來歷不明的網站、不要在小網站進行網上交易,最重要的一點是記清你想去網站的域名,當然,你還可以把你常去的一些涉及到機密信息提交的網站的IP地址記下來,需要時直接輸入IP地址登錄。
要防範MITM攻擊,可以將一些機密信息進行加密后再傳輸,這樣即使被“中間人”截取也難以破解,另外,有一些認證方式可以檢測到MITM攻擊。比如設備或IP異常檢測:如果用戶以前從未使用某個設備或IP訪問系統,則系統會採取措施。還有設備或IP頻率檢測:如果單一的設備或IP同時訪問大量的用戶帳號,系統也會採取措施。更有效防範MITM攻擊的方法是進行帶外認證,具體過程是:系統進行實時的自動電話回叫,將二次PIN碼發送至SMS(簡訊網關),簡訊網關再轉發給用戶,用戶收到后,再將二次PIN碼發送到簡訊網關,以確認是否是真的用戶。帶外認證提供了多種不同的認證方式及認證渠道,它的好處是:所有的認證過程都不會被MITM攻擊者接觸到。例如MITM是通過中間的假網站來截獲敏感信息的,相關的“帶外認證”就是指通過電話認證或簡訊認證等方式確認用戶的真實性,而MITM攻擊者卻不能得到任何信息。當然,這種方式麻煩些。

DNS欺騙


DNS欺騙(DNSSpoofing),就是其中的一種慣用手法。攻擊者通過入侵DNS伺服器、控制路由器等方法把受害者要訪問的目標機器域名對應的IP解析為攻擊者所控制的機器,這樣受害者原本要發送給目標機器的數據就發到了攻擊者的機器上,這時攻擊者就可以監聽甚至修改數據,從而收集到大量的信息。如果攻擊者只是想監聽雙方會話的數據,他會轉發所有的數據到真正的目標機器上,讓目標機器進行處理,再把處理結果發回到原來的受害者機器;如果攻擊者要進行徹底的破壞,他會偽裝目標機器返回數據,這樣受害者接收處理的就不再是原來期望的數據,而是攻擊者所期望的了。例如讓DNS伺服器解析銀行網站的IP為自己機器IP,同時在自己機器上偽造銀行登錄頁面,那麼受害者的真實賬號和密碼就暴露給入侵者了。
如此說來,這種攻擊理應是最強大最危險的,然而實際上它卻很少派上大用場,為什麼,因為DNS欺騙的攻擊模型太理想了。在實際生活中,大部分用戶的DNS解析請求均是通過自己的ISP伺服器進行的,換句話說,就是系統在連接網路時會獲取到ISP伺服器提供的DNS伺服器地址,所有解析請求都是直接發往這個DNS伺服器的,攻擊者根本無處入手,除非他能入侵更改ISP伺服器上DNS服務的解析指向。所以這種手法在廣域網上成功的幾率不大。
當然,這種攻擊的成功率也有例外存在,例如一個ISP伺服器上存在Bind漏洞,攻擊者就能通過Bind漏洞進入伺服器更改掉DNS解析指向,甚至取得最高許可權;另一種方法是入侵路由設備,修改裡面的DNS伺服器地址為自己控制的機器地址,這種方法只能在用戶機器自身是通過路由器返回域名解析的情況下才能成功,多見於一些使用小區寬頻連接Internet的用戶,因為這種用戶機器的DNS地址通常必須指向小區寬頻內部的某台伺服器地址或者交給路由進行轉向,這時候只要攻擊者入侵了路由或者那台關係到所有人的伺服器修改掉DNS記錄,整個小區用戶的網路都完了。當然,攻擊者不能把全世界網站都偽造到他硬碟上,他只需要改幾個重要商務站點的指向即可,這樣便可導致用戶訪問某些商務站點時被轉向到攻擊者的機器去。但是,這種攻擊手法同時對攻擊者自身也是一種傷害:如果小區內有許多用戶都訪問這些商務站點,則大量數據請求會瘋狂消耗攻擊者的機器資源,攻擊者非但不能實時處理數據,更是面臨著機器癱瘓和暴露自己的雙重危險。

會話劫持


會話劫持”(SessionHijack)是一種結合了嗅探以及欺騙技術在內的攻擊手段。廣義上說,會話劫持就是在一次正常的通信過程中,攻擊者作為第三方參與到其中,或者是在數據里加入其他信息,甚至將雙方的通信模式暗中改變,即從直接聯繫變成有攻擊者參與的聯繫。簡單地說,就是攻擊者把自己插入到受害者和目標機器之間,並設法讓受害者和目標機器之間的數據通道變為受害者和目標機器之間存在一個看起來像“中轉站”的代理機器(攻擊者的機器)的數據通道,從而干涉兩台機器之間的數據傳輸,例如監聽敏感數據、替換數據等。由於攻擊者已經介入其中,他能輕易知道雙方傳輸的數據內容,還能根據自己的意願去左右它。這個“中轉站”可以是邏輯上的,也可以是物理上的,關鍵在於它能否獲取到通信雙方的數據。
典型的會話劫持是利用TCP/IP的工作原理來設計攻擊的。在談TCP/IP會話劫持前先解釋一下TCP/IP用於確認數據傳輸的判斷機制。許多人一定都有過這樣的疑問:TCP/IP是使用點對點(PointtoPoint)連接進行數據傳輸的,但是它是如何知道上一條數據和下一條數據存在的聯繫的呢。如果發送數據后不慎掉線,恰好另一個人接著IP地址連接到了Internet,那他會不會收到伺服器返回數據。其實只要看過TCP/IP協議的書籍就會明白,TCP協議採用了兩種條件來確認每條已經建立連接的TCP通道,第一個是基礎連接確認,即TCP連接中的四大必備條件:源IP、源TCP埠、目標IP、目標TCP埠;第二個條件是“序號標識”(Sequencenumbers,SEQ),它們是成對出現的,分為“Sequence”(SEQ,序號欄位)和“AcknowledgementSequence”(ACKSEQ,確認序號欄位),TCP每次建立一個連接時,會給雙方指定這樣一條規則:序號欄位指出了本報文中傳送的數據在發送主機所要傳送的整個數據流中的順序號,而確認序號欄位指出了發送本報文的主機希望接收的對方主機中下一個八位組的順序號。(這裡可能比較難理解,可以舉個不專業的例子解釋:流水線上的工人被規定好了每人負責安裝8個不同的零件,則每次傳輸到他們手上的都應該是只留下給他們安裝的8個零件位置,這就是序號欄位;而下一個工人則被規定在前一個工人的基礎上安裝另一個部分的8個零件,這就是確認序號欄位,如果這個工人發現傳到自己手上的產品多了或少了零件,則說明前一個工人出錯,這個產品就被從流水線提取出來返工,這就是TCP對序號的嚴密審查和丟棄制度)。TCP如此謹慎,就是為了避免出現前面提到的假設,雖然這種假設發生的幾率很小(需要滿足TCP的基礎連接確認條件),但是它總有機會發生的。然而不幸的是,這對序號是可以預測的,因為TCP必須遵從以下守則:一台主機即將發出的報文中的SEQ值應等於它所剛收到的報文中的ACKSEQ值,而它所要發送報文中的ACKSEQ值應為它所收到報文中的SEQ值加上該報文中所發送的TCP數據的長度,即兩者存在“本次發送的SEQ=上次收到的ACKSEQ;本次發送的ACKSEQ=上次收到的SEQ+本次發送的TCP數據長度”的聯繫。知道這個規律后,攻擊者就不難發起“中間人攻擊”了,他只需要設法監聽到受害者TCP連接中的第一個條件(源IP、源TCP埠、目標IP、目標TCP埠),就可以得知其中一台主機對將要收到的下一個TCP報文段中SEQ和ACKSEQ值的要求,這樣攻擊者就能在原來的合法主機收到另一台合法主機發送的TCP報文前根據所截獲的信息向該主機發出一個符合條件二(序號標識)的TCP報文,如果該主機先收到攻擊報文,就會受到欺騙而把合法的TCP會話建立在攻擊主機與被攻擊主機之間,而且攻擊報文會讓被攻擊主機對下一次要收到的TCP報文中的確認序號值的要求發生變化,最終使另一台合法的主機向被攻擊主機發出的報文被拒絕,這種模式被稱為“主動劫持”。換句話說,就是其中一方合法主機被攻擊者掠奪了連接的許可權,而攻擊者卻成為了合法的連接方之一。這種會話劫持讓攻擊者避開了被攻擊主機對訪問者的身份驗證和安全認證,從而使攻擊者直接進入對被攻擊主機的的訪問狀態,因而危害嚴重。例如,你剛向某站點發送完賬戶密碼,就被攻擊者搶先冒充你的TCP連接上了,那你的損失可就難預料了。不過,會話劫持對網路環境的一點要求可以讓大家鬆口氣,它必須在使用MAC定址的網路環境中才能發揮作用,必要時還要配合ARP協議欺騙,能同時滿足這兩個條件的只有區域網。而廣域網不是靠MAC地址來查找計算機的,因此攻擊者很難從現有的廣域網結構里插入到某兩台計算機之間。

代理伺服器


不再可靠的代理伺服器
代理伺服器(ProxyServer)的存在已經是很長久的事實了,而且由最初的幾個基於TCP/IP協議的代理軟體如HTTP、SMTP、POP3和FTP等發展到SSL、SOCK4/5以及其他未知的代理類型,可謂給一些特殊用途者提供了極大的方便。例如,通過代理跨過某些伺服器的IP屏蔽,從而瀏覽到本來不能看到的信息;或者害怕自己IP暴露被對方入侵而尋找層層代理把自己包裹起來;還有些是因為系統不支持Internet共享而被迫採用代理軟體來讓內部網路的計算機能正常連接Internet……此外還有許多原因,讓各種代理伺服器經久不衰。
代理伺服器相當於一個透明的數據通道,它根據客戶發來的“要求連接某計算機”的請求數據,進而用自己本身作為原客戶機器去連接目標計算機,在目標計算機返回數據后,再發送給原客戶,這時目標計算機獲取到的是代理伺服器的IP,而不是原客戶IP,從而實現突破IP屏蔽或者讓對方無法獲取你的真實IP。
簡單舉個HTTP代理伺服器工作的原理:IE發送一個包含目標URL的HTTP請求,代理伺服器接收並析出HTTP報文里的目標URL和相關參數,然後把這個URL作為一次標準的HTTP連接過程與目標網站連接,獲取目標網站返回的數據后緩衝到代理伺服器的硬碟上,再把這些數據返回給客戶端。
請求連接目標URL------>連接目標伺服器------->
客戶端-------------------------代理伺服器------------------------目標伺服器
<-----返回數據----(緩衝)<-------------返回數據
其它協議的代理工作模式也都差不多,代理伺服器充當了一個數據轉向的工作站,相當於一個專門負責數據轉發的“勤勞工人”。
代理伺服器的工作模式,正是典型的“中間人攻擊”模型。代理伺服器在其中充當了一個“中間人”的角色,通訊雙方計算機的數據都要通過它。因此,“代理伺服器進行的‘中間人攻擊’”逐步成為現實,相對於其他“中間人攻擊”方法,這種利用代理伺服器暗渡陳倉的做法簡直天衣無縫,攻擊者可以自己寫一個帶有數據記錄功能的代理服務程序,放到任意一台穩定的肉雞甚至直接在自己機器上,然後通過一些社會工程學手段讓受害者使用這個做了手腳的“代理伺服器”,便可守株待兔了。這種方法最讓人不設防,因為它利用的是人們對代理的無條件信任和貪便宜的想法,使得一個又一個“兔子”自動撞了上來,在享受這頓似乎美味的“胡蘿蔔”的同時卻不知道安全正在逐漸遠離自己。
如果製作這個代理伺服器的攻擊者僅限於窺探數據,那麼受害者的損失可能還能估量,但是如果攻擊者在目標伺服器返回的數據里加入一個帶有木馬程序的數據呢。例如在HTTP代理返回的HTML報文里加入一個MIME攻擊漏洞代碼,而受害者的計算機恰好沒有打相應補丁,那麼由此帶來的損失就難以估量了,而且計算機技術不高的受害者也難以查出木馬究竟是從哪裡來的,因為很少有人懷疑代理伺服器自身會有問題。

攻擊示例


中間人攻擊示意圖
假設愛麗絲(Alice)希望與鮑伯(Bob)通信。同時,馬洛里(Mallory)希望攔截竊會話以進行竊聽並可能在某些時候傳送給鮑伯一個虛假的消息。
首先,愛麗絲會向鮑勃索取他的公鑰。如果Bob將他的公鑰發送給Alice,並且此時馬洛里能夠攔截到這個公鑰,就可以實施中間人攻擊。馬洛里發送給愛麗絲一個偽造的消息,聲稱自己是鮑伯,並且附上了馬洛里自己的公鑰(而不是鮑伯的)。
愛麗絲收到公鑰后相信這個公鑰是鮑伯的,於是愛麗絲將她的消息用馬洛里的公鑰(愛麗絲以為是鮑伯的)加密,並將加密后的消息回給鮑伯。馬洛里再次截獲愛麗絲回給鮑伯的消息,並使用馬洛里自己的私鑰對消息進行解密,如果馬洛里願意,她也可以對消息進行修改,然後馬洛里使用鮑伯原先發給愛麗絲的公鑰對消息再次加密。當鮑伯收到新加密后的消息時,他會相信這是從愛麗絲那裡發來的消息。
1.愛麗絲髮送給鮑伯一條消息,卻被馬洛里截獲:
愛麗絲“嗨,鮑勃,我是愛麗絲。給我你的公鑰”-->馬洛里鮑勃
2.馬洛里將這條截獲的消息轉送給鮑伯;此時鮑伯並無法分辨這條消息是否從真的愛麗絲那裡發來的:
愛麗絲馬洛里“嗨,鮑勃,我是愛麗絲。給我你的公鑰”-->鮑伯
3.鮑伯回應愛麗絲的消息,並附上了他的公鑰:
愛麗絲馬洛里<--[鮑伯的公鑰]--鮑伯
4.馬洛里用自己的公鑰替換了消息中鮑伯的公鑰,並將消息轉發給愛麗絲,聲稱這是鮑伯的公鑰:
愛麗絲<--[馬洛里的公鑰]--馬洛里鮑勃
5.愛麗絲用她以為是鮑伯的公鑰加密了她的消息,以為只有鮑伯才能讀到它:
愛麗絲“我們在公共汽車站見面!”--[使用馬洛里的公鑰加密]-->馬洛里鮑勃
6.然而,由於這個消息實際上是用馬洛里的公鑰加密的,所以馬洛里可以解密它,閱讀它,並在願意的時候修改它。他使用鮑伯的公鑰重新加密,並將重新加密后的消息轉發給鮑伯:
愛麗絲馬洛里“在家等我!”--[使用鮑伯的公鑰加密]-->鮑伯
7.鮑勃認為,這條消息是經由安全的傳輸通道從愛麗絲那裡傳來的。
這個例子顯示了愛麗絲和鮑伯需要某種方法來確定他們是真正拿到了屬於對方的公鑰,而不是拿到來自攻擊者的公鑰。否則,這類攻擊一般都是可行的,在原理上,可以針對任何使用公鑰——密鑰技術的通訊消息發起攻擊。幸運的是,有各種不同的技術可以幫助抵禦MITM攻擊。

防禦


攻防為一家,有攻就有防,只要措施正確,MITM攻擊是可以預防的。對於DNS欺騙,要記得檢查本機的HOSTS文件,以免被攻擊者加了惡意站點進去;其次要確認自己使用的DNS伺服器是ISP提供的,因為當前ISP伺服器的安全工作還是做得比較好的,一般水平的攻擊者無法成功進入;如果是依靠網關設備自帶的DNS解析來連接Internet的,就要拜託管理員定期檢查網關設備是否遭受入侵。
至於區域網內各種各樣的會話劫持(區域網內的代理除外),因為它們都要結合嗅探以及欺騙技術在內的攻擊手段,必須依靠ARP和MAC做基礎,所以網管應該使用交換式網路(通過交換機傳輸)代替共享式網路(通過集線器傳輸),這可以降低被竊聽的機率,當然這樣並不能根除會話劫持,還必須使用靜態ARP、捆綁MAC+IP等方法來限制欺騙,以及採用認證方式的連接等。
但是對於“代理中間人攻擊”而言,以上方法就難以見效了,因為代理伺服器本來就是一個“中間人”角色,攻擊者不需要進行任何欺騙就能讓受害者自己連接上來,而且代理也不涉及MAC等因素,所以一般的防範措施都不起作用。除非你是要幹壞事,或者IP被屏蔽,或者天生對網路有著恐懼,否則還是不要整天找一堆代理來隱藏自己了,沒必要的。常在河邊走,即使遇上做了手腳的代理也難察覺。

其他的非加密的中間人攻擊


一個著名的非加密中間人攻擊的例子是貝爾金無線路由器2003年的某一個版本所造成的。它會周期性地接管通過它的HTTP連接,阻止數據包到達目的地。並將它自己對請求的回應作為應答返回。而它發送的回應,則是在用戶原本應該顯示網頁的地方,顯示一個關於其他貝爾金產品的廣告。在遭到了解技術詳情的用戶的強烈抗議后,這個功能被貝爾金從路由器後續版本的固件中刪除。
另一個典型的非加密中間人攻擊的例子是“圖靈色情農場”。布賴恩·華納說,這是垃圾郵件發送者用來繞過驗證碼的“可以想象的攻擊”。垃圾郵件發送者設置了一個色情網站,而訪問這個色情網站需要用戶解決一些驗證問題。這些驗證問題實際上是其他網站的驗證問題。這樣就可以達到繞開網站驗證發送垃圾郵件的目的。然而,Jeff Atwood指出,這次襲擊僅僅是理論上的——沒有任何證據指出垃圾郵件發送者曾經在2006年創建了圖靈色情農場。然而,2007年10月有新聞報道稱,垃圾郵件發送者確實創建了一個Windows遊戲,當用戶鍵入從雅虎收到的註冊郵箱驗證碼后,程序將獎勵用戶色情圖片。這將允許垃圾郵件發送者創建臨時的免費電子郵件帳戶以發送垃圾郵件。