天天看點

IE 浏覽器 DOM 樹結構概覽(上)

作者:HausenChen

作為WiFi安全的一部分,近年來WiFi安全事件層出不窮,而其中的ARP攻擊事件更加普遍,越來越成為移動網際網路時代手機使用者的一大痛點。請看以下一個WiFi安全事件。

A君從廣州到上海出差,在星巴克買了一杯咖啡,坐在門口連上某個熱點的WiFi正在浏覽一個網站,發現這個網站需要郵箱注冊,注冊後發現需要登入郵箱激活。于是A君這打開了郵箱大師上的APP。

IE 浏覽器 DOM 樹結構概覽(上)

圖1 使用者登入郵箱使用場景

輸入了賬号和密碼,點選登入,登入成功沒有問題。可是過一會,重新登入這個郵箱,發現登入不上去了。很明顯,使用者A的賬号和密碼是他在喝咖啡的時候被盜取的并且被瞬間修改了。那密碼究竟是怎麼被盜取的呢?

其中一種可能的原因是使用者A連接配接的WiFi遭受ARP攻擊了。

如果我們産品要做一個功能,要求能夠檢測出這種ARP攻擊,在使用者連接配接WiFi的時候能第一時間給予提示,讓使用者免遭損失。針對這樣的安全方面的測試需求,我們應該如何測試呢?

針對1.1中的産品需求,要想測試好,有以下測試難點:

● 安全攻擊原理認知缺乏:

對ARP攻擊的原理不清楚,對産品檢測的邏輯也不清楚;

● 安全測試經驗缺乏:

這類安全方面的功能點沒有測試過,不好下手;

● 測試政策難以制定:

在理清攻擊原理和測試目标的前提下,應該如何設計測試政策,能更高效地完成測試任務?

● 測試環境缺乏:

不知道怎麼搭建測試環境?怎麼評估搭建的測試環境是否滿足測試需求?

針對1.2章節提到的測試難點,下面咱們來一一對症下藥,各個擊破。

先了解一下ARP原理:某機器A要向網關發送封包,會查詢本地的ARP快取記錄(對于anroid系統就是/proc/net/arp),找到網關的IP位址對應的MAC位址後,就會進行資料傳輸。如果未找到,則A廣播一個ARP請求封包,網關識别到是自己的IP位址,于是向A主機發回一個ARP Reply。其中就包含有網關的MAC位址,A接收到網關的應答後,就會更新本地的ARP快取記錄。接着使用這個MAC位址發送資料。

ARP協定的原理存在一個可以被利用的漏洞:當A沒有發起ARP Request時,其他人也可向A發送一個ARP Reply。當A收到一個ARP Reply時,不會質疑,而是直接對本地的ARP快取記錄進行更新,将應答中的IP和MAC位址存儲在ARP快取記錄中。

是以,當區域網路中的某台機器B向A發送一個自己僞造的ARP Reply,即IP位址為網關的IP,而MAC位址是B的,則當A收到後就會更新本地的ARP快取記錄,這樣A本來要發給網關的内容就會發給B了。同理,B也可以用同樣的方式對網關進行ARP欺騙。在A和網關之間作為中間人,而A和B完全不知道。

假設一個隻有三台電腦組成的區域網路,該區域網路由交換機連接配接。其中一個電腦名叫A,代表攻擊方;一台電腦叫S,代表源主機,即發送資料的電腦;令一台電腦名叫D,代表目的主機,即接收資料的電腦(這裡的電腦其實也可以換成智能手機,是以如下圖4中用了電腦/手機表示這個網絡節點)。這三台電腦的IP位址分别為192.168.0.2,192.168.0.3,192.168.0.4。MAC位址分别為MAC_A,MAC_S,MAC_D。其網絡拓撲環境如圖3。

IE 浏覽器 DOM 樹結構概覽(上)

圖2: ARP欺騙網絡拓補圖

現在,S電腦要給D電腦發送資料了,在S電腦内部,上層的TCP和UDP的資料包已經傳送到了最底層的網絡接口層,資料包即将要發送出去,但這時還不知道目的主機D電腦的MAC位址MAC-D。這時候,S電腦要先查詢自身的ARP快取記錄,檢視裡面是否有192.168.0.4這台電腦的MAC位址,如果有,那很好辦,就将封裝在資料包的外面。直接發送出去即可。如果沒有,這時S電腦要向全網絡發送一個ARP廣播包,大聲詢問:我的IP是192.168.0.3,硬體位址是MAC-S,我想知道IP位址為192.168.0.4的主機的硬體位址是多少?

這時,全網絡的電腦都收到該ARP廣播包了,包括A電腦和D電腦。A電腦一看其要查詢的IP位址不是自己的,就将該資料包丢棄不予理會。而D電腦一看IP 位址是自己的,則回答S電腦:―我的IP位址是192.168.0.4,我的硬體位址是MAC_D。

需要注意的是,這條資訊是單獨回答的,即D電腦單獨向S電腦發送的,并非剛才的廣播。現在S電腦已經知道目的電腦D的MAC位址了,它可以将要發送的資料包上貼上目的位址MAC-D,發送出去了。同時它還會動态更新自身的ARP快取記錄,将192.168.0.4-MAC_D這一條記錄添加進去,這樣,等S電腦下次再給D電腦發送資料的時候,就不用大聲詢問發送ARP廣播包了。這就是正常情況下的資料包發送過程。

總結來說,這個通信過程分為以下四步。

IE 浏覽器 DOM 樹結構概覽(上)

(1)主機S: 查詢自己的ARP快取記錄,确認是否IP-D/MAC-D的記錄存在;

(2)主機S: 發一個ARP請求的廣播包,詢問跟IP-D關聯的MAC位址是多少;

(3)主機D: 發一個ARP回複包,告知我的MAC位址是MAC-D,IP位址是IP-D;

(4)主機S: 更新自己的ARP快取記錄,下次要發包給IP-D的時候直接發給MAC-D。

針對如上ARP攻擊的原理,假如我們要測試一個能檢測出以上ARP攻擊的功能,怎麼辦呢?首先,基于ACC的模型,可以将ARP攻擊檢測功能的三要素定義如下,說白了是要明确測試目标。

(1)Attributes:

A,準确:在有和無ARP攻擊時能準确檢測出有和無ARP攻擊;

B,通用: 不管有沒有ROOT使用者,都能滿足A。

(2)Components:

IE 浏覽器 DOM 樹結構概覽(上)

——圖3 ARP檢測功能子子產品——

(3)Compatibilities矩陣

IE 浏覽器 DOM 樹結構概覽(上)

——表1 ARP檢測功能Compatibilities矩陣——

通過對1.3.2章節對測試目标的确定,借用Safety領域的安全分析方法,我們可以畫出ARP攻擊功能的軟體失效故障樹FTA(Fault Tree Analysis)如下:

故障定義:沒有達到Attributes中的目标,我們用“ARP檢測功能失效”來統稱。

IE 浏覽器 DOM 樹結構概覽(上)

圖4 ARP檢測功能故障樹

由上圖可見,每個條件判斷都是一個邏輯或,我們認為檢測失效、或者檢測展示失效,或者日志上報失效都可以導緻ARP檢測功能失效,是以對每個失效路徑,我們可以快速得到核心用例路徑如下:

IE 浏覽器 DOM 樹結構概覽(上)

表2 由故障樹導出核心用例

對于WiFi安全測試,和普通業務功能測試的最大的差別是WiFi安全測試對測試環境要求很高,是以往往測試環境的準備成為整個WiFi安全測試最難的也是最耗時的點。

那應該怎麼準備測試環境呢?

裝置環境:

PC:一台(裝有TPLINK無線網卡)

手機1:作為熱點手機(華為Mate8,Android 6.0)

手機2(被測手機):連接配接PC,用來檢視ARP快取記錄,确認ARP攻擊成功(OPPO,Android 4.4.2),安裝有騰訊手機管家。

手機3:使用者手機,通過連上熱點,然後登陸郵箱操作(三星S5,Android 4.4.4)

IE 浏覽器 DOM 樹結構概覽(上)

環境準備步驟:

Step1: PC上安裝TPLINK無線網卡驅動,確定TPLINK網卡能用;

Step2:PC上安裝CAIN攻擊軟體,見附錄;

Step3:手機1開設一個熱點,如熱點名為Hausen01;

Step4: 手機2、3和PC都連上該熱點。

經過章節2中Step4後,可以通過ipconfig檢視PC的IP,如本次執行個體為192.168.43.131。

IE 浏覽器 DOM 樹結構概覽(上)

可以通過ipconfig /all檢視PC的MAC,如:EC:17:2F:CE:78:62。

IE 浏覽器 DOM 樹結構概覽(上)

由此我們可以得到整個攻擊環境的網絡拓撲圖如下:

IE 浏覽器 DOM 樹結構概覽(上)

圖中,攻擊确認手機也就是被測對象,由于我們的測試目标是騰訊手機管家的APP檢測ARP攻擊的能力,是以這台手機要裝上騰訊手機管家。

Step1: 攻擊前ARP表檢查

攻擊前先檢測手機ARP表如下(可以看到HW address列沒有出現兩個同樣的MAC位址,說明目前網絡沒有受到ARP攻擊)。

IE 浏覽器 DOM 樹結構概覽(上)

Step2: 關閉防火牆

Step3: 嗅探器打開

打開CAIN,啟動嗅探器

IE 浏覽器 DOM 樹結構概覽(上)

Step4: 裝置掃描

掃描區域網路的所有裝置

IE 浏覽器 DOM 樹結構概覽(上)

直到掃描結果如下(可以看到裝置IP和章節3中的網絡拓補圖是對應的,這裡因為CAIN安裝在PC上,而CAIN不會顯示本機的IP,是以192.168.43.131在這裡看不出來):

IE 浏覽器 DOM 樹結構概覽(上)

Step5: 攻擊鍊路添加

切換到底部ARP的TAB,點選菜單欄+号。

IE 浏覽器 DOM 樹結構概覽(上)

在彈出的頁面(如下),滑鼠點選頁面左側一個host節點,比如192.168.43.152, 會在頁面右側出現跟該節點的同一區域網路的其他節點,比如192.168.43.20(另一台手機),和192.168.43.1(網關)。

IE 浏覽器 DOM 樹結構概覽(上)

點選上圖右側的網關節點,即選擇了192.168.43.152到網關的鍊路,點選OK後會跳轉到以下界面,說明這條攻擊鍊路被添加了。

IE 浏覽器 DOM 樹結構概覽(上)

Step6: 啟動ARP攻擊

點選以下圖中的黃色圖示即可。

IE 浏覽器 DOM 樹結構概覽(上)

Step7: 攻擊成功确認

CANI上的表現:

IE 浏覽器 DOM 樹結構概覽(上)

Step8: 密碼盜取

接下來我們重制下章節1.1的使用者場景:

通過192.168.43.152這台手機(假如是一台使用者手機)的郵箱用戶端,登入一個qq郵箱看看。

IE 浏覽器 DOM 樹結構概覽(上)

一點選登入,回到攻擊PC的CAIN軟體界面,可以看到密碼和賬号直接明文顯示了。是不是很震撼?

IE 浏覽器 DOM 樹結構概覽(上)

Step9: 安全探秘

通過Step8,我們都看到密碼被PC捕獲到了,但為什麼會這樣子呢。下面來解釋下。

在192.168.43.20的手機,通過USB連接配接PC,adb shell進去列印ARP快取記錄如下:

IE 浏覽器 DOM 樹結構概覽(上)

結合章節1.3.1講到的ARP攻擊原理,看第二條記錄:攻擊PC的IP是192.168.43.131,MAC是ec:17:2f:ce:78:62,說明我192.168.43.20要發包給攻擊PC的話,可以正常找到攻擊PC的MAC,這個沒有問題。

但是看第三條記錄:192.168.42.1——ec:17:2f:ce:78:62,這說明什麼呢?我們都知道我們在區域網路要想通路外網的話要通過網關,說明我192.168.43.20要通路外網的話,先發包給網關,也就是192.168.42.1,但是由于這個緩存表記錄的網關的IP對應的是攻擊PC的MAC,是以導緻我發給網關的包都會跑到攻擊PC去了。這就是為什麼說登入用戶端會造成密碼洩露的根源。也就是章節1.1的安全事故的根源。

在經過1.3.4.3的ARP攻擊确認後,我們在被測手機,打開騰訊手機管家,連接配接被攻擊熱點,确認以下幾點:

其他測試路徑确認方法類似,此處從略。

作為一個測試人員,在接到一個安全測試的測試需求時,應該如何下手?

這樣基本就能應對安全測試的一些入門問題了。至于深度安全測試,比如出現問題時候如何定位,産品資料有問題時如何和從測試人員的角度主導或者配合開發、産品童鞋跟進解決,諸如此類的問題本文先不講,留到後續再讨論。