KaliRouter安裝與使用全指南
譯者:WisFree
預估稿費:200RMB
投稿方式:發送郵件至linwei#http://360.cn,或登陸網頁版在線投稿
寫在前面的話
KaliRouter可以將你的Kali Linux設備變成一台路由器,你將不僅能夠記錄下所有的網路流量(Wireshark),而且還可以將HTTP和HTTPS流量發送至一個攔截代理,例如BurpSuite等等。
安裝
我們會將Kali Linux配置成一台代理型路由器,連接至這台「路由器」的客戶端(例如嵌入式設備和手機App)都可以正常進行網路通信,但是其中的某些數據包將會被我們的Kali Linux設備所攔截並使用Wireshark進行監控,並重定向至代理伺服器。Kali Linux設備以及BurpSuite都將以透明代理的形式運行,客戶端不會感受到它們的存在。整個運行架構如下圖所示:
在配置我們的Kali Linux之前,我們需要配置VMWare和網路介面。
1.t我們在VMWare中運行Kali Linux,並將網路改為橋接模式,這樣可以讓Kali Linux直接鏈接到網路之中,而被監控的設備(應用程序或手機)同樣可以正常連接至網路。
2.t我們需要連接兩個適配器(乙太網和WiFi),並給Kali分配USB適配器,我們選擇使用的是Ethernet LAN Network Adapter ASIX AX88179和Atheros UB91C USB無線適配器。其實你可以使用任何一款Linux兼容的USB無線網卡,只要它支持混雜模式即可。
將Kali Linux配置成路由器
我們的Kali Linux設備會將USB網路介面的流量路由到Kali自己的網路連接,創建路由器的方法如下。
開始配置之前,我們需要先查看本機的網路介面。我們可以使用命令ifconfig查看插入USB適配器之前和之後的設備狀態。
$ ifconfig -an
我們的乙太網適配器一般會是eth1,而WiFi適配器一般是wlan0。
我們需要配置network-manager服務,告訴該服務我們會將適配器的MAC地址添加到/etc/NetworkManager/NetworkManager.conf文件的unmanaged-devices參數之中,並接管我們自己添加的介面。
[keyfile] unmanaged-devices=mac:d8:eb:97:b6:ce:12;mac:56:6b:a2:90:c4:b9n
接下來,重啟網路服務,這樣設備會進入「無管理」狀態。
$ /etc/init.d/networking restartn
乙太網配置
在創建監聽網路之前,我們需要選擇一個合適的網路地址和子網掩碼。我們這裡要選擇一個與Kali所在網路IP範圍(eth0)不同的地址空間,以此來確保受監控設備的IP地址不會跟我們的監控網路發生衝突。在我們的配置環境中,我們選擇的是172.16.0.0/12。
由於我們需要讓我們的無線網路和有線網路處於同一網路中,我們選擇使用bridge-utils工具在這兩者之間搭建一個橋樑。
$ apt-get install bridge-utilsn
接下來,刪除任何分配給有線網路介面(eth1)的IP地址。
$ ip addr flush dev eth1n
創建一個名為br0的橋接介面。
$ brctl addbr br0n
將我們的有線介面eth1添加到橋接介面br0。
$ brctl addif br0 eth1n
接下來,開啟橋接介面br0。
$ ip link set dev br0 upn
根據我們選擇的IP地址空間,給這個br0介面分配一個IP地址。因為它的功能是作為被監控設備的網關,所以我們選擇172.16.0.1。
$ ip addr add 172.16.0.1/12 dev br0n
Wi-Fi數據鏈路層
配置好乙太網介面之後,使用hostapd程序創建一個無線接入點。使用apt-get命令安裝hostapd(關於hostapd的使用和配置信息,請參考【這份文檔】):
$ apt-get install hostapdn
然後使用下列信息創建配置文件hostapd.conf:
# create a wireless network with this interface; change it if your wireless card is not wlan0 interface=wlan0 # change this if a different bridge interface was chosen bridge=br0 # the name of our wireless network ssid=Monitor-Network # Change the passphrase to something you like wpa_passphrase=Monitor-Network # the driver used driver=nl80211 auth_algs=3 # the wireless channel we listen on. channel=7 driver=nl80211 # the mode we use (g) hw_mode=g # we dont log logger_stdout=-1 logger_stdout_level=2 max_num_sta=5 rsn_pairwise=CCMP wpa=2 wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP CCMPn
創建完無線介面wlan0之後,我們要啟用無線接入點:
$ ip link set dev wlan0 upn
接下來,讓hostapd程序開啟監控網路:
$ hostapd ./hostapd.conf -Bn
網路配置
配置好無線和有線網路之後,我們要開啟內核選項以支持IP轉發功能,然後配置iptables將所有的網路數據包轉發至該介面。
$ sysctl -w net.ipv4.ip_forward=1 $ iptables -P FORWARD ACCEPT $ iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEn
網路服務
我們使用dnsmasq來作為我們的DNS和DHCP伺服器。使用下列命令安裝dsnmasq:
$ apt-get install dnsmasqn
然後使用下列信息創建並配置dnsmasq.conf文件:
# listen to this interface; change it if a different bridge name was chosen interface=br0 # give IP addresses, lease is valid for 8 hours dhcp-range=172.16.0.10,172.31.255.254,8h # router dhcp-option=3,172.16.0.1 # dns server dhcp-option=6,172.16.0.1 # upstream DNS server server=8.8.8.8 log-queries log-dhcp # include addresses address=/attacker.com/172.16.0.1n
配置完成之後,我們需要重啟dnsmasq守護進程:
$ service dnsmasq restartn
嗅探並攔截流量
在我們的監控網路中所有設備的網路流量都是通過橋接介面br0傳遞的,我們可以直接通過wireshark來嗅探該介面的網路流量。我們這裡選擇使用tshark,它相當於是命令行界面的wireshark。接下來,我們將監聽介面br0,並將所有監聽到的流量數據寫入到一份文件中(output.pcap)。
$ tshark -i br0 -w ./output.pcap -Pn
一般來說,我們還需要攔截流量,因此我們還需要設置一些iptables規則來將HTTP/1.1和HTTPS流量重定向到我們的攔截代理(BurpSuite)。關於其他協議的設置方法,請參考這份【文檔】。
第一條規則將會攔截埠80和443的所有tcp包(HTTP和HTTPS),並將數據發送給BurpSuite。
$ iptables -t nat -A PREROUTING -i br0 -p tcp --dport 80 -j DNAT --to-destination burpip:burp_http_port $ iptables -t nat -A PREROUTING -i br0 -p tcp --dport 443 -j DNAT --to-destination burpip:burp_https_portn
第二條規則將確保響應信息在發送到客戶端之前先經過我們的Kali Linux。
$ iptables -t nat -A POSTROUTING -o eth0 -s 172.16.0.0/12 -d burpip -j MASQUERADEn
第三條規則其實並不是必須的,這條規則將確保Kali路由能夠正確地將數據包發送給BurpSuite。
$ iptables -A FORWARD -s 172.16.0.0/12 -d burpip -i br0 -o eth0 -p tcp --dport burp_http_port -j ACCEPT $ iptables -A FORWARD -s 172.16.0.0/12 -d burpip -i br0 -o eth0 -p tcp --dport burp_https_port -j ACCEPTn
接下來,我們要將BurpSuite配置成一個透明代理。打開BurpSuite,點擊Proxy標籤,然後選擇Options菜單,然後點擊Add按鈕。
對於HTTP流量,我們要給BurpSuite綁定80埠,然後勾選All interfaces選項。
接下來我們跳轉到Request handling標籤頁,然後勾選Support invisible proxying選項。這一步操作是必須的,勾選之後客戶端將不會感受到BurpSuite的存在。
對於HTTPS流量,我們需要給BurpSuite綁定埠443,然後勾選All interfaces。
然後點擊Request handling標籤,按照如下圖所示的方法進行設置。
自動化
為了方便起見,我們應該儘可能地實現自動化。你可以在我的GitHub主頁找到相關的配置文件以及腳本。
首先,從github獲取Kalirouter的項目源碼:
$ git clone https://github.com/koenbuyens/kalirouter.gitn
安裝相關的依賴組件:
apt-get install dnsmasq hostapd bridge-utilsn
插入USB適配器,然後使用命令iptables -a找出適配器的名字和MAC地址。
告訴network-manager服務我們將通過添加適配器MAC地址來接管相關介面,並運行命令/etc/init.d/networking restart來重啟網路服務。/etc/NetworkManager/NetworkManager.conf文件的修改內容如下所示。
[keyfile] unmanaged-devices=mac:d8:eb:97:b6:ce:12;mac:56:6b:a2:90:c4:b9n
修改hostapd.conf文件,將其指向正確的無線網路介面(默認為wlan0)。
修改monitor.sh腳本中的介面變數,將其指向正確的介面。其中的WIRELESS_MONITOR_INTERFACE, WIRED_MONITOR_INTERFACE和 INTERNET_INTERFACE分別對應的是USB無線網卡、USB有線網卡和Kali的VMWare介面。默認為wlan0、eth1和eth0。
修改monitor.sh腳本中的代理變數,將其指向BurpSuite的IP地址以及埠,其中PROXYBOX, PROXYBOX_HTTP_PORT和 PROXYBOX_HTTPS_PORT分別對應的是IP地址、HTTP埠和HTTPS埠,默認為172.16.0.1、80和443。
運行下列命令執行腳本文件:
$ ./monitor.shn
輸出數據保存在dumps/output.pcap文件中,你可以通過按下Ctrl+C來停止監控網路流量。
攔截嵌入式設備、移動應用和Windows應用程序的通信數據
運行了我們的監控腳本之後,我們就可以開始監控目標設備的網路流量了。
嵌入式設備
我們用一台嵌入式設備連接到了我們的監控網路中,然後讓設備開始正常運行。如下圖所示,我們的嵌入式設備(10.0.0.38)正在通過UDP與一個內網移動應用進行通信(192.168.1.230)。
移動應用
在開始監控移動應用之前,我們必須先設置好相關的信任證書。
1.t通過點擊Proxy標籤頁中的Import/export CA certificate選項導出BurpSuite證書。
2.t通過選擇Certificate in DER format選項將證書導出為DER文件。
對於安卓端應用來說,我們先要添加信任證書。
1.t進入安卓系統的安全設置中。
2.t然後從SD卡安裝證書。
3.t選擇證書。
4.t命名證書。
導入證書之後,我們就可以開始監聽應用程序的網路數據了。
1.t讓移動設備連接到我們的監控網路之中,密碼是我們在hostapd配置文件中設置的密碼。
2.t然後運行應用程序,下面給出的例子是Amtrak應用程序。
3.t我們可以在BurpSuite中看到監聽到的安卓應用HTTPS流量。
4.t我們可以觀察到wireshark記錄下的所有的流量(圖例為Facebook App)。
Windows應用程序
1.讓我們的Windows設備連接到我們的監控網路之中。
2.t導入Windows證書,詳細步驟請參考這份【文檔】。
3.t開啟需要監控的應用程序,我們這裡直接選擇Web瀏覽器。
4.tBurpSuite和Wireshark都將接收到所有的網路流量。
總結
Kalirouter可以幫助我們將Kali Linux設備轉換成一個能夠攔截網路流量的代理路由器,對該項目感興趣的同學可以訪問Kalirouter的GitHub主頁獲取詳細信息【傳送門】。註:同學們還可以在樹莓派上使用Kalirouter。
參考資料
https://www.psattack.com/articles/20160410/setting-up-a-wireless-access-point-in-kali/
https://cybergibbons.com/security-2/quick-and-easy-fake-wifi-access-point-in-kali/
https://ubuntuforums.org/showthread.php?t=716192
https://help.ubuntu.com/community/NetworkConnectionBridge
https://wiki.archlinux.org/index.php/Internet_sharing#Configuration
https://wiki.archlinux.org/index.php/software_access_point#Bridge_setup
https://wiki.debian.org/BridgeNetworkConnections#Manual_bridge_setup
https://help.ubuntu.com/lts/serverguide/network-configuration.html
http://www.tldp.org/HOWTO/TransparentProxy-6.html
推薦閱讀:
※最經典的前端面試題之一,你能答出什麼幺蛾子?
※HTML5的Websocket(理論篇 I)
※談談 HTTP 緩存
※APP精細化HTTP分析(二):響應性能分析與優化