用手機(jī)從鎖定的計(jì)算機(jī)中偷取憑證信息
了解到這一點(diǎn)之后,我們就可以嘗試用Android網(wǎng)絡(luò)共享功能——也就是所謂的Tethering來創(chuàng)建網(wǎng)絡(luò)。啟用網(wǎng)絡(luò)共享功能之后,手機(jī)設(shè)備就能夠接收來自主機(jī)的所有通信數(shù)據(jù),手機(jī)是作為網(wǎng)關(guān)存在。這樣一來要執(zhí)行中間人攻擊簡(jiǎn)直輕而易舉。
本文中,我將為大家講解其中涉及的步驟,工具,以及進(jìn)行一次成功攻擊所需要的配置。
Android網(wǎng)絡(luò)共享功能
Android設(shè)備進(jìn)入U(xiǎn)SB Tethering網(wǎng)絡(luò)共享模式的時(shí)候,系統(tǒng)會(huì)在USB接口新增一個(gè)USB接口描述符并重啟。
主機(jī)操作系統(tǒng)會(huì)查詢Android設(shè)備,也就是通過USB端口連接手機(jī)的時(shí)候, 它會(huì)接收USB網(wǎng)絡(luò)設(shè)備描述符,之后加載驅(qū)動(dòng)程序。
驅(qū)動(dòng)一旦加載,主機(jī)操作系統(tǒng)會(huì)創(chuàng)建一個(gè)新的網(wǎng)絡(luò)接口(通過USB)。主機(jī)處理該網(wǎng)絡(luò)接口與處理其他接口的方式?jīng)]有差別。此時(shí)USB連接處在活躍狀態(tài),主機(jī)就會(huì)發(fā)送DHCP請(qǐng)求來獲取IP。
在原生的Android網(wǎng)絡(luò)共享配置中,系統(tǒng)會(huì)用dnsmasp建立一個(gè)DHCP和DNS服務(wù)器來響應(yīng)該請(qǐng)求。它為主機(jī)提供連接到網(wǎng)絡(luò)所需的IP地址以及路由信息。
在Android Tethering網(wǎng)絡(luò)共享的具體實(shí)施中,這些配置細(xì)節(jié)是硬編碼到Tethering.java程序包中的。顯然,在已獲得root權(quán)限的Android設(shè)備中,我們自己動(dòng)手配置這些信息不是難事。
除此之外,iptables轉(zhuǎn)發(fā)規(guī)則可以設(shè)置為從USB到外部接口(通常為Wi-Fi或3G)間轉(zhuǎn)發(fā)流量。完成這項(xiàng)操作后,主機(jī)就可以使用USB網(wǎng)絡(luò)連接到互聯(lián)網(wǎng)了(即網(wǎng)絡(luò)共享功能)。
中間人攻擊
攻擊者在網(wǎng)絡(luò)中投放惡意數(shù)據(jù)包,迫使網(wǎng)絡(luò)設(shè)備連接攻擊者的網(wǎng)絡(luò),那么發(fā)動(dòng)中間人攻擊也就不需要Tethering了。就像前文所說的那樣,通過Tethering網(wǎng)絡(luò)共享連接的話,主機(jī)所有的流量都會(huì)流經(jīng)設(shè)備。即便設(shè)備連接到其他網(wǎng)絡(luò),部分網(wǎng)絡(luò)流量還是會(huì)流經(jīng)USB網(wǎng)絡(luò),這對(duì)于某些身份憑證信息的泄露已經(jīng)足夠了。
盜取憑證
這一例中,中間人攻擊工具我們選擇了Responder。這是個(gè)被動(dòng)憑證收集工具,Responder監(jiān)聽指定的NetBIOS Name Service(NBT-NS)以及本地鏈路多播名稱解析 (LLMNR)查詢。該工具包含了通過TCP和UDP端口監(jiān)聽的欺騙身份驗(yàn)證服務(wù)器。受害者被重定向至這些服務(wù)器,這樣就能獲取到這些人的身份驗(yàn)證憑證了。
使用Responder劫持流量并捕獲憑證非常高效。特別是當(dāng)用戶在網(wǎng)上的動(dòng)作比較活躍的時(shí)候(例如,瀏覽網(wǎng)頁,訪問內(nèi)部共享等)。
從鎖定機(jī)器中盜取憑證
該攻擊向量首先假定用戶不在或者在網(wǎng)絡(luò)中不活躍。還有些先決條件,用戶之前必須已經(jīng)登錄過主機(jī),或者說已經(jīng)在主機(jī)上進(jìn)行過身份認(rèn)證,另外當(dāng)然也需要我們能夠?qū)嶋H接觸到這臺(tái)主機(jī)及其USB端口。
網(wǎng)絡(luò)代理自發(fā)現(xiàn)協(xié)議 (WPAD)協(xié)議可用來自動(dòng)定位proxy auto-config (PAC)文件。PAC的位置可以通過DHCP響應(yīng)“site-local”選項(xiàng)252(即auto-proxy-config)與“ http://example.com/wpad.dat”值提供給用戶。
DHCP比DNS擁有更高的優(yōu)先權(quán)。如果DHCP提供WPAD URL,則DNS不會(huì)執(zhí)行查詢,這只適用于DHCPv4。在DHCPv6中沒有定義WPAD選項(xiàng)。
所有的Web瀏覽器都支持該協(xié)議,包括Windows,MacOSX,Linux以及iOS和Android系統(tǒng)的。不過默認(rèn)只有在Windows操作系統(tǒng)中啟用。
方法結(jié)合
談到網(wǎng)絡(luò)共享功能和DHCP,我們前面已經(jīng)提過,用Android設(shè)備可以創(chuàng)建網(wǎng)絡(luò)和DHCP服務(wù)器。使用Android的dnsmasq也可以很方便的創(chuàng)建DHCP服務(wù)器,并且配置WPAD選項(xiàng)指向Responder。
至于身份驗(yàn)證,在鎖定的計(jì)算機(jī)上之所以可以這樣攻擊是因?yàn)?a >代理自動(dòng)配置文件包含了DHCP響應(yīng)所需的細(xì)節(jié)信息。
當(dāng)主機(jī)嘗試檢索PAC文件,Responder的HTTP服務(wù)會(huì)返回一個(gè)“(407)身份驗(yàn)證請(qǐng)求”信息。在大多數(shù)情況下,主機(jī)通過用戶緩存的憑證進(jìn)行身份驗(yàn)證。
Windows使用NTLM協(xié)議來完成認(rèn)證,這是個(gè)challenge-response身份驗(yàn)證協(xié)議。用戶密碼hash以及challenge-response步驟在此作為用戶身份驗(yàn)證的token。
雖然沒有明文憑證可供攻擊者直接使用,但破解出hash并獲得用戶密碼還是有可能的。如果密碼強(qiáng)度比較弱,那么破解所需的時(shí)間不會(huì)太長(zhǎng)。
不過對(duì)于剛啟動(dòng)的機(jī)器來說由于還沒有緩存憑證,所以這種攻擊方式是無效的。然而一旦用戶先前就進(jìn)行過身份驗(yàn)證,主機(jī)就可以嘗試再次獲取文件。
不過還面臨一個(gè)挑戰(zhàn),就是如何在Android設(shè)備上跑Responder(這是個(gè)Python項(xiàng)目)。這里提供多種解決方案供考慮,最簡(jiǎn)單粗暴的方法就是安裝qPython應(yīng)用。qPython是一款針對(duì)Android的Python編譯器,它能夠完美的運(yùn)行Responder。還有個(gè)替代方案是安裝NetHunter,NetHunter是從Kali Linux移植到Android之上的,同樣的它也包含Python編譯器。
一臺(tái)已root的Android設(shè)備,一顆好奇的心?
安裝qPython,下載腳本和Responder,然后按指示進(jìn)行。
這段視頻展示的是Windows 10鎖屏界面。測(cè)試主機(jī)最新安裝了Windows操作系統(tǒng),且沒有加入任何域,未連接到其他任何網(wǎng)絡(luò),用戶之前通過了身份驗(yàn)證后鎖定了屏幕。
連接一臺(tái)Android設(shè)備,運(yùn)行上面提到的Responder腳本。注意在執(zhí)行Responder后的幾秒鐘,在沒有進(jìn)行任何交互的情況下,用戶的NTLM hash已經(jīng)捕獲到。下圖展示了捕獲到的數(shù)據(jù):
腳本執(zhí)行步驟,通過設(shè)置網(wǎng)絡(luò)并運(yùn)行Responder啟用網(wǎng)絡(luò)共享功能。
黃色部分為捕獲到的hash
解決方案
在操作系統(tǒng)和瀏覽器中禁用自動(dòng)代理配置設(shè)置,至少可以防止上述鎖屏攻擊。不過在公司網(wǎng)絡(luò)中需要用到代理或者依賴于自動(dòng)配置,當(dāng)然就會(huì)有些麻煩了。不過我們要使用代理,最好是硬編碼設(shè)置或者由自動(dòng)配置腳本提供。以下為不同操作系統(tǒng)規(guī)避這種攻擊的設(shè)置方法:
Windows 10, 8.1, and 8
- 打開設(shè)置 (開始 → 在Windows 10中為設(shè)置 / 左下角 → Windows 8, 8.1為更改計(jì)算機(jī)設(shè)置).
- 選擇 網(wǎng)絡(luò) 之后選擇左邊的代理.
- 確保“自動(dòng)檢測(cè)設(shè)置”已禁用.
Windows 7, Vista, XP
- 單擊開始進(jìn)入控制面板.
- 在控制面板中選擇互聯(lián)網(wǎng)選項(xiàng).
- 在連接選項(xiàng)卡中選擇LAN設(shè)置.
- 確保“自動(dòng)檢測(cè)設(shè)置”已禁用.
MacOSX
- 打開系統(tǒng)偏好.選擇網(wǎng)絡(luò)之后選擇活躍連接
- 選擇高級(jí)之后進(jìn)入代理選項(xiàng)卡.
- 確保“自動(dòng)發(fā)現(xiàn)代理”已禁用.