1. 程式人生 > >Tor隱身大法 —— 用Tor來幫助我們進行滲透測試

Tor隱身大法 —— 用Tor來幫助我們進行滲透測試

轉自:http://drops.wooyun.org/tips/1226

0x00 背景

(編者:在這篇文章裡,Chris Crowley提供了一些利用Tor來進行滲透測試的方法,他提供的一些細節和指令碼配置非常有用,尤其是他對Privoxy 的討論部分,謝謝!)

By Chris Crowley

我認為滲透測試的真正價值是能模擬現實世界的真實攻擊行為,所以滲透測試人員應該儘量將自己的行為與那些攻擊者靠攏。但是與真的攻擊者不一樣的是,我們還是應該對我們的目標系統保持一定的謹慎和敏感,而攻擊者肯定不會去管這些。

在這篇文章裡,我向大家分享了一個我經常用的隱藏源IP的方法。一般來說,滲透測試人員有兩個原因需要隱藏他們的真實IP。首先,在測試過程中,我們需要訪問的資源可能是非法的惡意資源(或者懷疑其是惡意的)。其次,我們需要儘量隱藏測試過程中的測試或攻擊來源。

為了研究一個惡意攻擊者或者惡意軟體的行為特徵,我們有可能需要去訪問一些攻擊者控制的資源。比如一個很常見的場景是:使用者在facebook或者一個社交媒體網站上會受到攻擊者的誘騙而去訪問一些url,我們還不太確定攻擊者是如何成功的控制這些跳轉,而這些資源裡包含有很多附加連結和javascript。因為我們要對這樣的一個場景進行滲透測試,我們必須偽裝成一個普通使用者去訪問這些資源,同時又不能被攻擊者識破。

直接通過我們的真實IP去訪問這些惡意網站是很不明智的,因為這無疑相當於直接告訴攻擊者,我們在研究你的網站。此外,如果我們發出的請求看起來很像是一個小白使用者發起的,這無疑告訴攻擊者魚兒上鉤了。這也會使得攻擊者來訪問我們的系統,所以說隱藏我們的源IP是非常重要的。

有些時候,惡意軟體只會在接收到特意的指令才會執行。我們可以嘗試各種各樣的指令來觸發它,但是讓它連線到真實網路這樣觸發無疑是最快的。但是,我們又不想被攻擊者注意到惡意軟體已經在我們的系統上運行了,避免攻擊者會來入侵我們的系統。我們只需要這些行為資訊和整個攻擊過程。我們想還原攻擊過程,但是,我們希望在拿到這些資訊之後能夠馬上斷開惡意軟體的連線。

攻擊者擁有各種各樣的虛擬系統,他們不必擔心自己的源IP暴露。對於一個滲透測試人員來說,一個虛擬的IP地址對於模擬一個真實的攻擊者來說是非常重要的。以下的幾個場景能說明這個道理:首先是網站踩點,一個熟練的攻擊者不會使用相同的一個IP來掃描一個網站。其次是掃描服務型別,如果網站發現有人在不停的掃他,那麼肯定會將這些掃描記錄到日誌裡。試想來自四面八方的掃描,只掃那些常用服務是怎樣的場景。攻擊者會使用一些假IP來掃描目標,然後使用其他的IP來執行滲透。真正的壞蛋的目標只有一個,那就是敏感資訊。你覺得一個聰明的傢伙會把他的真實資訊留下來莫?他會使用不同的系統來製造混亂。第四,是一些在未來今年對滲透測試人員來說很普遍的東西。滲透測試人員會越來越多的將精力花在移動裝置上。

下面概述的方法可以有幾個不同的方式來實現。我只會概述一種可以用的方法,你們可以根據自己的需要來自己調整。

0x01 細節

下面是基本步驟

1、安裝和設定Privoxy  
2、安裝和設定Tor  
3、配置Privoxy將代理指向Tor  
4、通過Privoxy來上網

雖然以上步驟我是在linux上面演示的,但是其他系統上的設定基本上大同小異,比如windows,mac ox x。Privoxy 和 Tor組合可以讓你很輕鬆的在Tor網路裡作為一個匿名節點翱翔,這個節點跟IP地址的概念不太一樣。如果有人想通過Tor網路來監控你的資料包的話,他們有可能是知道你在跟誰通訊,但是這個不是我關注的重點,重點是沒有人會知道我們是從哪裡發起這個通訊的。

1、安裝和配置Privoxy

Privoxyd官網(http://www.privoxy.org/)是這樣介紹這款軟體的:Privoxy 是一個擁有高階過濾、修改網頁資料和http header、訪問控制和遮蔽廣告等網際網路垃圾功能的無快取web代理工具。Privoxy 擁有靈活的配置並且可以高度定製化,以滿足各位黑闊的需求。它在單人作業系統和多人作業系統下均有對應的版本。

1 yum -y install privoxy

當然你也可以使用其他的http代理工具,比如polipo 。

2、安裝和配置Tor

Tor的官網(https://www.torproject.org/)是這樣介紹她的:Tor最初是美國海軍研究實驗室設計用來作為第三代洋蔥頭路由的專案。她最初是美國海軍為了保護政府的通訊隱私而開發的。今天,全世界所有的普通人都可以用它來做各種各樣的事情,比如軍人,記者,政府人員,政治分子等等。

對於那些已經熟悉Tor,但是可能因為某些大家都懂的原因,比如被牆了之類的,連線不上Tor的專有網路的人,可以看看這裡看如何通過bridge 來連線到Tor網路:
https://www.torproject.org/docs/bridges.html.en

3、配置Privoxy 指向到Tor

我選擇使用Privoxy 和 Tor組合最主要的原因就是DNS。如果我想控制本地的dns請求,以便我所有的dns請求都不洩露我的資訊,我可以不停的換用一些公用dns伺服器(比如8.8.8.8)。但是Privoxy還提供了一些附加功能用來阻斷請求,而且它還會阻止那些有可能會暴露我們IP的請求。

這配置其實非常簡單。在Linux裡,只需要簡單的配置下Privoxy讓它連結到Tor,那麼Privoxy就會將所有的DNS和HTTP請求轉發到Tor網路裡。

要讓Tor幫你轉發請求,只需在Privoxy裡這樣配置:

forward-socks5 / 127.0.0.1:9050

下面是privoxy 的完整配置檔案(沒有註釋)。從裡面可以很清楚的看到它並沒有監聽所有的埠,而是直接把請求轉發給了Tor。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 $ grep -v "^#" /etc/privoxy/config confdir /etc/privoxy logdir /var/log/privoxy actionsfile match-all.action # Actions that are applied to all sites and maybe overruled later on. actionsfile default.action # Main actions file actionsfile user.action # User customizations filterfile default.filter logfile logfile listen-address :8123 toggle 1 enable-remote-toggle 0 enable-remote-http-toggle 0 enable-edit-actions 0 enforce-blocks 0 buffer-limit 4096 forward-socks5 / 127.0.0.1:9050 . forwarded-connect-retries 0 accept-intercepted-requests 0 allow-cgi-request-crunching 0 split-large-forms 0 keep-alive-timeout 5 socket-timeout 300 handle-as-empty-doc-returns-ok

4、通過代理上網

a)配置環境變數(http_proxy, https_proxy, ftp_proxy)和命令列工具,以便通過代理上網。

舉個例子,wget: wget是一個命令列的瀏覽器。它能跨域和遞迴地向指定地址發出請求,比如:

$ export http_proxy=127.0.0.1:8123  
$ wget -nc -nd http://www.willhackforsushi.com/subscriptions.xml

在上面的例子中,我想檢視Josh的rss feed列表,但是我又不想讓他知道是我看的。我會大概每分鐘左右發出一個請求

 * * * * * wget -nc -nd http://www.willhackforsushi.com/subscriptions.xml 

來監視這個頁面,以防萬一該頁面會發生變化。

現在,wget對於我來說是一個很乖的web機器人。首先它會按照規定請求網站的robots.txt檔案,並嚴格遵守該檔案定義的內容。而且,wget也有nc選項,這個在我之前的例子中也用到了。這個選項的意思是”no-clobber“,或者說不要重複下載已經下載過的檔案。事實上,它下載了但是並不儲存。那麼wget是怎麼知道這個檔案是不是已經下載了呢?毫無疑問,它會監控檔案系統。所以

1 touch robots.txt; wget -nc -nd http://www.willhackforsushi.com/subscriptions.xml

將告訴wget不要儲存 willhackforsushi.com這個網站的robots.txt檔案,而是儲存之前就儲存過的一個空的robots.txt檔案。

b)用-http-proxy選項來開啟安卓虛擬機器

通過一個安卓虛擬機器安裝一些app來進行滲透測試是一個不錯的方法,當你在虛擬機器裡輸入命令時,多半會用到 "-http-proxy ipaddr:port"。

確保你先運行了privoxy 。如果虛擬機器不能訪問privoxy 的本地埠,那麼這些設定會失效。還會以圖解的方式出現警告。

舉個例子:

1 emulator -avd IceCreamSandwich -partition-size 256 -qemu -http-proxy 127.0.0.1:8123

現在,所有虛擬機器裡的資料包都會通過privoxy轉發到Tor網路裡。

不得忽視的一點是:在虛擬機器啟動前,必須先開啟privoxy ,並確保本地埠監聽是正常的。如果虛擬機器在啟動了之後不能連線到privoxy 的埠,那麼它就會忽略這些代理選項,而且虛擬機器還會直接使用本地網路來與外界通訊,這無疑會暴露我們的源IP。

c)配置一個應用程式(或者裝置)來使用代理

http_proxy環境變數對基於命令列的工具來說非常有用,因為大部分的命令列工具都會使用到它。但是,視窗工具不同於BASH的環境變數,他們有自己獨立的代理設定。所以你可以通過配置好的應用來連線到代理。比如在chrome裡可以這樣:

開啟chrome,輸入"chrome://settings/"  
選擇高階選項  
在網路選項裡,點選“更改代理設定”按鈕  
配置http和https代理到127.0.0.1:8123

(所有主流瀏覽器的設定基本上大同小異)

d)通過 iptables 規則來分配資料包

如果你的應用程式不使用命令列代理環境變數,而且你也不能通過配置一個應用程式來連線代理,你還可以通過配置iptables 來使用NAT轉換資料包到代理上。

下面是一個我經常用的bash指令碼:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #!/bin/bash ## CHECK FOR ROOT wai=`whoami` if [[ "$wai" != "root" ]] then echo " You need to be uid 0. Re-run as: sudo $0 " exit fi ## SET SYSTEM TO PREROUTING IP PACKETS echo "1" > /proc/sys/net/ipv4/ip_forward ## HTTP TRAFFIC iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 8123 ## HTTPS TRAFFIC iptables -t nat -A PREROUTING -p tcp --destination-port 443 -j REDIRECT --to-port 8123 ## CHECK FOR BURP pgrep -fl privoxy 2>&1 > /dev/null || echo "Are you sure privoxy is running?\nOr maybe you intend to use something else I didn't check for."

我認為我已經設定好了後,我測試了下看它咋樣。先來wget谷歌一下,

1 wget http://www.google.com

然後我用tcpdump抓包看了下

1 tcpdump -Xnnv -i eth0 port 80 or port 443 or port 53

因為如果我的代理工作正常的話,我在本地用tcpdump應該是抓不到任何資料包的。

注意我的請求被重定向到了google.fr,因為我是在Tor的匿名節點當中。

NewImage

現在,你們可以盡情的幹壞事了!各位大黑闊們!確保你們的訪問都得到了授權哈。。。比如你可以看看那些高大上的軟體是如何和自己家庭網路互通的。

現在,你已經具備了一定的匿名性了(前提是你們要有一定的授權哈),你可以用爬蟲爬爬目標網站,下一些惡意軟體來研究一下,或者跑一些你正在測試的app,與此同時,你不必擔心你的源位置會被暴露。

from:http://pen-testing.sans.org/blog/pen-testing/2014/03/16/tor-nonymous-using-tor-for-pen-testing