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