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的匿名節點當中。
現在,你們可以盡情的幹壞事了!各位大黑闊們!確保你們的訪問都得到了授權哈。。。比如你可以看看那些高大上的軟體是如何和自己家庭網路互通的。
現在,你已經具備了一定的匿名性了(前提是你們要有一定的授權哈),你可以用爬蟲爬爬目標網站,下一些惡意軟體來研究一下,或者跑一些你正在測試的app,與此同時,你不必擔心你的源位置會被暴露。
from:http://pen-testing.sans.org/blog/pen-testing/2014/03/16/tor-nonymous-using-tor-for-pen-testing