標籤:

如何將Kali Linux秒變成一個能夠攔截網路流量的代理路由器

前言

這個存儲庫包含將Kali Linux設備轉換成路由器的代碼。Kali Linux變成路由器後可以實現兩個功能:

1.記錄所有與wireshark的流量,Wireshark使用WinPCAP作為介面,直接與網卡進行數據報文交換。

2. 將HTTP和HTTPS流量發送至一個攔截代理,例如BurpSuite等,使其能在另一台設備上運行。

本文,我會假設你擁有一個以太區域網USB適配器和一個無線B/G/N USB適配器,Linux支持的任何卡片(USB或內置的)都可以使用。

經常從事網路安全分析的人往往會從嵌入式設備、移動應用程序或windows應用程序中嗅探或攔截流量。對於具有代理意識的設備或應用程序,攔截流量是很簡單的:通過配置應用程序或設備來使用代理,例如BurpSuite。對於非代理的設備或應用程序,攔截流量更具挑戰性。

在本文中,我將描述了如何設置Kali Linux來嗅探TCP/UDP傳輸的任何設備、應用程序或應用程序,通過將Kali配置為一個攔截路由器,可以將特定的流量轉發到另一台設備上的透明代理,例如將HTTP(S)流量轉發到BurpSuite。攔截路由器包括許多複雜的場景,其中許多設備和應用程序會出現彼此交互的情況,例如與web服務交互的嵌入式設備,但也可以通過移動設備和windows應用程序進行配置。為了使實用性最大化,我會在Raspberry Pi上實現上面描述的設置。

安裝

我會將Kali Linux配置為具有代理類型的路由器,連接到這台路由器的客戶端(例如嵌入式設備和手機App)都可以正常進行網路通信,但是有些數據包(例如HTTP和HTTPS包)會被我的Kali Linux設備攔截並被重定向到代理伺服器(例如BurpSuite)。所有通過我的路由器的流量都是用Wireshark監控的。我的Kali Linux設備和BurpSuite都是以透明代理的形式運行的,因為客戶根本不知道代理的存在。這種設置的主要優點是它將客戶端的配置降低到最小值,具體設置如下圖所示。

在配置我的Kali Linux設備之前,我需要配置VMWare和我的網路介面,步驟如下:

1. 在VMWare中運行Kali Linux,並將網路改為橋接模式,這樣可以讓Kali Linux直接鏈接到網路之中,而被監控的設備(應用程序或手機)同樣可以正常連接至網路。

2.我會連接兩個適配器(乙太網和WiFi),並給Kali提供USB連接。如下圖所示,我的適配器是Ethernet LAN Network Adapter ASIX AX88179和Atheros UB91C USB無線適配器。對於WiFi,我可以使用任何兼容Linux的適配器,只要它支持混雜模式(Promiscuous mode)即可。

譯者註:混雜模式(Promiscuous mode)就是將網卡接收到所有的數據全部發送給系統。

下面,我會詳細闡述如何將Kali Linux設備配置為路由器,以及如何通過將其連接到Kali Linux路由器來監控設備和應用程序。

將Kali Linux配置為路由器

我的Kali Linux設備將通過USB網路介面(乙太網和WiFi)連接到自己的網路連接,反之亦然。創建路由器的四個步驟:

1.設置乙太網層,使有線客戶端可以連接到Kali的介面。

2.設置wi – fi數據鏈路層,這樣無線客戶端可以連接到Kali的「軟體訪問點(software access point)」,並從Kali發送或接收IP數據包。我使用了hostapd應用來完成這個任務。通過橋連接介面的訪問點,設備就連接到同一網路。這樣我就可以通過乙太網連接一個移動應用和一個Windows應用程序,監控嵌入式設備。

3.在我的Kali Linux設備上設置網路配置,這樣它就可以正確地將IP數據包從它自己的網路連接轉發到它的連接客戶端。

4.添加諸如DNS和DHCP這樣的網路服務,這樣客戶就可以分配IP地址,並且可以解析域名。我可以使用DNS網路服務將任何域名重定向到我控制下的設備。

要注意的是,在執行上述步驟之前,我需要找出適配器出現的介面。為此,我會使用命令ifconfig查看插入USB適配器之前和之後的設備狀態。

$ ifconfig -a

我的乙太網適配器通常會顯示為eth1,而我的WiFi適配器通常會顯示為wlan0。(eth0是由VMWare配置的介面,可以讓Kali訪問網路)。

現在需要配置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:b9

重新啟動網路服務,使設備進入「無管理」狀態。

$ /etc/init.d/networking restart

乙太網配置

在創建我的監控網路之前,我選擇一個合適的網路地址和子網掩碼。選擇一個與Kali所在網路IP範圍(eth0)不同的地址空間,以此來確保受監控設備的IP地址不會跟我們的監控網路發生衝突。在我的配置環境中,我選擇的是172.16.0.0/12。因為我的主網路介面(eth0)通常只接10.0.0.0/8(公司的)或192.168.0 / 16(家庭的)網路地址。

由於我需要讓無線網和有線網處於同一地址空間中,所以我會選擇使用bridge-utils工具在這兩者之間橋接。

$ apt-get install bridge-utils

然後我刪除分配給我的有線介面eth1的任何IP地址。

$ ip addr flush dev eth1

我創建了一個名為br0的橋接介面。

$ brctl addbr br0

我將有線介面eth1添加到橋介面br0。

$ brctl addif br0 eth1

接下來,開啟橋接介面br0。

$ ip link set dev br0 up

根據我選擇的IP地址空間,給這個br0介面分配一個IP地址。因為它的功能是作為被監控設備的網關,所以我們選擇172.16.0.1。

$ ip addr add 172.16.0.1/12 dev br0

無線數據鏈路層

在配置了乙太網介面後,我通過hostapd程序創建了一個無線接入點。在此,我首先安裝apt-get。

$ apt-get install hostapd

然後使用下列信息創建配置文件hostapd.conf。

# create a wireless network with this interface; change it if your wireless card is not wlan0interface=wlan0# change this if a different bridge interface was chosenbridge=br0# the name of our wireless networkssid=Monitor-Network# Change the passphrase to something you likewpa_passphrase=Monitor-Network# the driver useddriver=nl80211auth_algs=3# the wireless channel we listen on.channel=7driver=nl80211# the mode we use (g)hw_mode=g# we dont loglogger_stdout=-1logger_stdout_level=2max_num_sta=5rsn_pairwise=CCMPwpa=2wpa_key_mgmt=WPA-PSKwpa_pairwise=TKIP CCMP

第一行是我的無線區域網將創建的介面,即插在無線適配器wlan0上。我會配置網路的名稱(ssid)及其密碼(wpa_passphrase)。稍後我將在連接設備時使用它。nl80211驅動程序是用於Atheros晶元組,當我希望乙太網和無線USB適配器出現在同一網路時,我會將它們添加到同一橋接介面(br0)中。我的網路是一個g無線網路(hw_mode),因為它與我想要監控的大多數設備兼容。所有其他參數都與WPA和日誌的配置有關。更多信息,請參考hostapd Linux文檔wireless.wiki.kernel.org

由於nl80211驅動程序存在一些漏洞,我會執行以下命令來讓腳本使用wlan介面。

$ nmcli radio wifi off$ rfkill unblock wlan

在創建無線介面wlan0之後,我將其啟動。

$ ip link set dev wlan0 up

接下來,讓hostapd程序開啟監控網路。

$ hostapd ./hostapd.conf -B

網路配置

在配置了無線和有線介面之後,我將Kali配置為將流量轉發到由VMWare配置的介面,以使Kali訪問網路(eth0)。為此,我首先啟用了IP轉發的內核選項,然後告訴iptables程序將所有數據包轉發到該介面。

注意:這個配置僅限實驗環境,因為它是相當不安全的。

$ sysctl -w net.ipv4.ip_forward=1$ iptables -P FORWARD ACCEPT$ iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

網路服務

我使用dnsmasq作為我的DNS和DHCP伺服器。我安裝了apt-get安裝dnsmasq,然後創建一個dnsmasq。conf文件包含以下信息。

# listen to this interface; change it if a different bridge name was choseninterface=br0# give IP addresses, lease is valid for 8 hoursdhcp-range=172.16.0.10,172.31.255.254,8h# routerdhcp-option=3,172.16.0.1# dns serverdhcp-option=6,172.16.0.1# upstream DNS serverserver=8.8.8.8log-querieslog-dhcp# include addressesaddress=/attacker.com/172.16.0.1

我將DHCP地址發送到DHCP範圍內的橋接介面上的任何請求(172.16.0.10 – 172.31.255.254),然後命令設備連接到我的Kali路由器(172.16.0.1)和我的DNS伺服器(dnsmasq本身通過IP 172.16.0.1的介面br0可到達)。如果dnsmasq不知道DNS查詢的答案,它會詢問上游伺服器(8.8.8.8 – google)來回答問題。我將地址添加到文件的底部,以便這些域名解析到我控制下的設備。我會通過添加更多的行來添加更多的地址,並且每次我都重新啟動dnsmasq來保證進程的順利進行。

$ service dnsmasq restart

嗅探和攔截流量

在我的監控範圍內,網路上設備之間的所有流量都會通過橋接介面(br0),我可以在該介面上運行wireshark來嗅探網路流量。這裡我選擇使用tshark,它相當於是命令行界面的wireshark。接下來,我將監控介面br0,並將所有監控到的流量數據寫入到output.pcap文件中。

$ tshark -i br0 -w ./output.pcap -P

通常,我還希望攔截流量,因此需要更多的iptables規則將HTTP /1.1和HTTPS流量重定向到我的攔截代理(BurpSuite),而不是實際的伺服器。關於其他協議的設置方法包括HTTP/1.0,請參考此處。

第一個規則是在埠80和443上攔截tcp包,並將其發送到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_port

第二條規則是確保回複信息是通過Kali Linux設備發送的,而不是直接發送到被監控的客戶端(這一點很重要)。該規則使用masquerade,這樣Kali Linux設備就可以接收一個動態IP地址。

$ iptables -t nat -A POSTROUTING -o eth0 -s 172.16.0.0/12 -d burpip -j MASQUERADE

第三種可有可無,就是確保Kali路由器將適當的數據包轉發給運行了BurpSuite的設備。適當的數據包是HTTP(- p tcp——dport burp_http_port)和HTTPS數據包(- p tcp——dport burp_https_port),它來自於橋接介面(- s172.16.0 /12),在實際網路(- o eth0)設備上運行目標BurpSuite(- d burpip)。

$ 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 ACCEPT

然後,我將BurpSuite配置為在上面的iptables規則中引用的設備(burpip)和埠(burp_http_port和burp_https_port)上的透明代理。此時,我就可以啟動BurpSuite,點擊Proxy標籤,然後選擇Options菜單,然後點擊Add按鈕。

對於HTTP流量,我將BurpSuite綁定到所有介面上的80埠,即我的iptables規則中的burp_http_port。

我將訪問請求處理選項卡並啟用對不可見代理(invisible proxy)的支持。這是必要的,因為客戶不知道BurpSuite的存在。

對於HTTPS流量,我將BurpSuite綁定到所有介面上的443埠,即我iptables規則中的burp_https_port。

此時,我會訪問請求處理選項卡,將流量重定向到埠443,強制使用SSL,並支持對不可見的代理進行支持。

自動化處理

這麼複雜,手動的話將會非常耗時,所以我想到了自動化處理的方法。你可以在我的GitHub主頁找到相關的配置文件以及腳本。具體步驟如下:

1.從github獲取代碼:

$ git clone https://github.com/koenbuyens/kalirouter.git

2.安裝必要的組件:

apt-get install dnsmasq hostapd bridge-utils

3. 插入USB介面,通過執行iptables來發現適配器的名字和MAC地址。

4.通過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:b9

5.修改hostapd.conf文件,並將其指向正確的無線介面(默認wlan0)。

6.修改monitor.sh腳本中的介面變數,將其指向正確的介面。其中的WIRELESS_MONITOR_INTERFACE, WIRED_MONITOR_INTERFACE和 INTERNET_INTERFACE分別對應的是USB無線網卡、USB有線網卡和Kali的VMWare介面。默認為wlan0、eth1和eth0。

7.修改monitor.sh腳本中的代理變數,將其指向BurpSuite的IP地址以及埠,其中PROXYBOX, PROXYBOX_HTTP_PORT和 PROXYBOX_HTTPS_PORT分別對應的是IP地址、HTTP埠和HTTPS埠,默認為172.16.0.1、80和443。如果IP地址在另一台設備上運行(在我的設備中是192.168.1.192),則要修改。

8.運行下列命令執行腳本文件。

$ ./monitor.sh

9.輸出數據保存在dumps/output.pcap文件中,你可以通過按下Ctrl+C來停止監控網路流量。

攔截嵌入式設備、移動應用和Windows應用程序的通信流量

啟動監控器腳本後,我可以開始監控連接到我的監控器網路中的設備和應用程序了。

嵌入式設備

我將嵌入式設備連接到我的監控器網路,通過無線方式或通過乙太網連接。然後我讓設備備開始正常運行。在下面的例子中,我的嵌入式設備(10.0.0.38)通過UDP與主與一個內網移動應用進行通信(192.168.1.230)。我可以將這兩個設備連接到我的監控器網路(10.0.0 / 8)來攔截所有流量。

移動應用程序

在我開始監控移動應用程序之前,我必須將BurpSuite的證書添加到移動操作系統的信任證書中,因為現在大多數移動應用程序以及胖客戶機都會驗證該證書。

1. 通過點擊Proxy標籤頁中的Import/export CA certificate選項導出BurpSuite證書。

2. 通過選擇Certificate in DER format選項將證書導出為DER文件。

對於Android應用程序,我先要將信任證書添加到其中。

1. 進入Android的安全設置。

2.從SD卡上安裝一個證書。

3.選擇證書文件。

4.命名證書。

導入證書後,我就可以準備監控應用程序的網路流量了。

1. 將移動設備連接到我的監測網路,密碼是我在hostapd配置文件中設置的密碼。

2.啟動要監控的應用程序。下面的示例就是Amtrak應用程序。

3.在BurpSuite中觀察到監控到的安卓應用的HTTPS流量。

4.也觀察到了wireshark記錄了所有的流量,下圖是Facebook應用程序。

不過要注意的是,為了監控實現HSTS、HPKP或證書固定的應用程序,我需要完成額外的步驟,但這超出了本文的討論範圍。

Windows應用程序

我還可以使用它來監控Windows應用程序的流量,通過將我的Windows設備連接到同一個網路,並向Windows信任存儲區添加BurpSuite的證書。

1.我將我的Windows設備通過乙太網連接到我的監控網路。

2.導入Windows證書,詳細步驟請點此處。

3.我將啟動我感興趣的應用程序,在本例中就是我的瀏覽器。

4.請注意,BurpSuite和Wireshark都可以接收流量。

Raspberry Pi Kali路由器

當我想要一個攜帶型解決方案時,我會會在Raspberry Pi上實現以上的設置。你可以下載Raspberry Pi Kali Linux映像,同時,你很可能需要將上述的自動化部分中的一些設置進行略微的調整,特別是將你的網卡的MAC地址添加到網路管理器配置文件中。

1.下載最新的Kali Linux映像,用於攻擊安全性的Raspberry Pi。這個映像很有可能被xz壓縮,因為它以xz文件的擴展結束。我安裝xz壓縮工具並使用它來提取映像。如果Kali映像沒有被xz壓縮,也就是說,它有img文件擴展名,那我可以跳過這一步。

在MacOSX上,如下所示。

$ brew install xz$ xz -d file-to-extract.xz

在Ubuntu上,如下所示。

$ apt-get install xz-utils$ xz -d file-to-extract.xz

2.將映像快閃到磁碟上,執行df程序兩次,以識別系統上的磁碟。

$ df -h

SD卡的文件系統名稱是以前沒有的,在MacOSX上,它看起來像/dev/ disk2s1。在Ubuntu上,它看起來像/dev/sdb。

卸載分區,這樣我就可以寫它了。在MacOSX上,我使用diskutil命令卸載它。由於我的快閃記憶體卡是第二個磁碟(/dev/disk2…),我回執行以下操作。

$ sudo diskutil unmount /dev/disk2

在Ubuntu上,我使用umount命令卸載它。

$ sudo umount /dev/sdb

我用dd命令將Kali複製到SD卡,將rdisk2替換為正確的磁碟,即在我的Kali設備上的/dev/sdb,並將LocationOfKaliImage替換為Kali Linux設備的路徑。

$ sudo dd bs=1m if=LocationOfKaliImage of=/dev/rdisk2

我將Kali擴展到在我的Ubuntu設備上運行gparted應用的完整的SD卡。

$ apt-get install gparted$ gparted

我選擇SD卡,通常是/dev/sdb。觀察數據分區後的空白空間。我右鍵單擊包含數據的分區(下圖中的/ dev/ sdb2淡黃色部分),然後單擊Resize/Move。

在resize對話框中,我將Free Space Following更改為零,並單擊resize。在我的例子中,我將kali分區擴展到大約30GB。

我右鍵單擊pending操作(在gparted底部),選擇應用所有操作。

完成後,我將SD卡彈出,插入到 Raspberry Pi中,將Pi連接到屏幕上,連接鍵盤和滑鼠,並將其與乙太網連接到我的網路上。我將電源插頭插入到Kali Linux中,並以用戶名「root」和密碼「toor」登錄。

我通過運行以下命令來更新設備的軟體:

$ apt-get update$ apt-get upgrade$ apt-get dist-upgrade

我通過執行passwd來更新根密碼:

$ passwd root

要用我的計算機與我的 Raspberry Pi進行連接,就要使用SSH。由於我沒有提前安裝SSH,我將在boot上安裝並啟用它,如下所示:

$ apt-get install openssh-server$ update-rc.d -f ssh remove$ update-rc.d -f ssh defaults

如下所示,我會更改默認鍵:

$ cd /etc/ssh/$ mkdir insecure_old$ mv ssh_host* insecure_old$ dpkg-reconfigure openssh-server

我將更改sshd_config文件以允許根用戶進行身份驗證。注意,這是不安全的,最好創建一個常規用戶。

$ nano /etc/ssh/sshd_config

我對下一行進行了更改:

PermitRootLogin without-password

以代替如下這一行:

PermitRootLogin yes

我保存更改並重新啟動openssh – server。

$ service ssh restart$ update-rc.d -f ssh enable 2 3 4 5

我希望安裝網路工具,以便我能夠使用ifconfig。

$ apt-get install net-tools

然後我在 Raspberry Pi上檢查我的腳本,連接我的USB適配器,按照上述自動化部分的配置說明,使用wlan1而不是wlan0。

$ git clone https://github.com/koenbuyens/kalirouter.git

總結

Kalirouter可以幫助我將Kali Linux設備瞬間轉換成一個代理路由器,它能夠攔截多個設備之間的網路流量。

參考文獻

我在Kali Linux中創建了一個有線或無線路由器時,用到了下面的鏈接。

psattack.com/articles/2

cybergibbons.com/securi

ubuntuforums.org/showth

help.ubuntu.com/communi

wiki.archlinux.org/inde

wiki.archlinux.org/inde

wiki.debian.org/BridgeN

help.ubuntu.com/lts/ser

tldp.org/HOWTO/Transpar

本文翻譯自:github.com/koenbuyens/k ,如若轉載,請註明來源於嘶吼: 4hou.com/technology/760 更多內容請關注「嘶吼專業版」——Pro4hou

推薦閱讀:

互聯網甲方公司和乙方公司安全工程師的薪資範圍大概是什麼樣的?
「極客公開課X滴滴」:安全攻防技術新趨勢
如何看待360補天漏洞響應平台做秀把美的的漏洞全部曝光的事情?
在 Office 文檔的屬性中隱藏攻擊載荷
看我如何破解加密PDF

TAG:信息安全 |