如何構(gòu)建完美的Dropbox(下)
自動(dòng)化攻擊方案
這還可以自動(dòng)區(qū)分上面提到的兩種場(chǎng)景,通過(guò)監(jiān)控 /sys/class/net/lan/carrier和/sys/class/net/wan/carrier,我們可以檢測(cè)LAN和WAN接口是否有一個(gè)或兩個(gè)連接。
如果你希望自動(dòng)化網(wǎng)絡(luò)配置,一個(gè)選項(xiàng)是監(jiān)控這些文件,如果LAN接口是活動(dòng)的,則假定這是一個(gè)處于中間位置的人的場(chǎng)景,而如果LAN接口沒(méi)有載體,則繼續(xù)執(zhí)行“未使用的端口”場(chǎng)景。如下所示:
- while [ `cat /sys/class/net/wan/carrier` == 0 ] ; do
- sleep 1
- done
- if [ `cat /sys/class/net/lan/carrier` == 0 ] ; then
- # execute "unused port" scenario
- else
- # execute Person in the Middle scenario
- fi
這樣,你就可以繼續(xù)選擇一個(gè)IP地址,或者使用DHCP請(qǐng)求一個(gè)IP地址。請(qǐng)注意,由于請(qǐng)求的字段不同,或者發(fā)送到服務(wù)器的填充字段不同,有時(shí)可能會(huì)區(qū)分Windows和Linux DHCP客戶(hù)機(jī)。花一些時(shí)間監(jiān)控和微調(diào)你自己的DHCP請(qǐng)求可能是值得的,然后開(kāi)始探索你連接的網(wǎng)絡(luò)。
Windows 10 DHCP請(qǐng)求(左)和Kali Linux(右)之間的區(qū)別
關(guān)于網(wǎng)絡(luò)訪問(wèn)控制
你可能在會(huì)議室中發(fā)現(xiàn)了一個(gè)未使用的網(wǎng)絡(luò)端口,但是很可能會(huì)受到網(wǎng)絡(luò)訪問(wèn)控制(NAC)檢查。從802.1x到連接新設(shè)備上的服務(wù)以檢查諸如防病毒配置等服務(wù)的網(wǎng)絡(luò)服務(wù)器,它們的形式多種多樣。如果新設(shè)備無(wú)法通過(guò)檢查,則交換機(jī)端口將禁用或配置為受限VLAN,而無(wú)法訪問(wèn)真正有趣的系統(tǒng),真令人失望!
解決此類(lèi)控件的一種簡(jiǎn)單方法是對(duì)現(xiàn)有設(shè)備執(zhí)行中間人攻擊,這可能是PC,打印機(jī),甚至是IP電話(huà)。在許多情況下,打印機(jī)等設(shè)備無(wú)法執(zhí)行802.1x身份驗(yàn)證,因此在該特定網(wǎng)絡(luò)端口上將其禁用。在其他情況下,設(shè)備具有在網(wǎng)絡(luò)上的必要授權(quán),因此,網(wǎng)絡(luò)端口已分配給正確的VLAN。中間設(shè)備的人需要做的就是確保它發(fā)送的任何流量看起來(lái)都和受害者的一樣,這樣開(kāi)關(guān)就不會(huì)檢測(cè)到任何不正常的東西。如果在一個(gè)端口上檢測(cè)到不止一個(gè)MAC地址,那么可以配置許多交換機(jī)關(guān)閉一個(gè)端口,這是你真的不希望發(fā)生的事情!
為此,我在閱讀了這篇文章后,創(chuàng)建了一個(gè)簡(jiǎn)單的shell腳本,該腳本設(shè)置了適當(dāng)?shù)膇ptables規(guī)則以使任何來(lái)自R1S的流量似乎來(lái)自受害者??梢栽贕itHub上的slimjim腳本的舊版本中找到該過(guò)程的基礎(chǔ)。從本質(zhì)上講,要弄清楚被攔截設(shè)備的MAC和IP地址,然后使用Linux ebtables(第2層)和iptables(第3層)規(guī)則來(lái)確保從person -in- middle設(shè)備到更廣泛網(wǎng)絡(luò)的所有流量都來(lái)自被攔截設(shè)備的MAC和IP地址。如果你還希望能夠與被攔截的設(shè)備進(jìn)行交互,請(qǐng)選擇要使用的上游設(shè)備的MAC和IP地址,并將其偽裝成該設(shè)備。鑒于該裝置所處的特殊位置,直接與受害者相連,你可以選擇任何上游裝置來(lái)偽裝成它。
早期的slimjim依賴(lài)于手動(dòng)將可到達(dá)設(shè)備的MAC地址和IP地址分別添加到ARP和路由表中,它還要求操作員使用tcpdump -nneli lan -Q in這樣的命令來(lái)識(shí)別被攔截設(shè)備的MAC和IP地址,并在運(yùn)行腳本之前執(zhí)行一些手動(dòng)配置。當(dāng)前版本的slimjim為你完成了所有這些工作,并將觀察到的DNS流量映射到相關(guān)地址。不過(guò)需要python腳本,這在資源受限的設(shè)備上可能不可行!
一旦配置了網(wǎng)橋,即使沒(méi)有識(shí)別出受害者的詳細(xì)信息,網(wǎng)絡(luò)訪問(wèn)控制解決方案也應(yīng)該能夠連接到受害者,執(zhí)行所需的任何身份驗(yàn)證過(guò)程,并相應(yīng)地激活端口。
從網(wǎng)絡(luò)訪問(wèn)控制中竊取憑據(jù)
一個(gè)有用的技巧是了解網(wǎng)絡(luò)訪問(wèn)控制實(shí)際上是如何工作的,在某些情況下,我們已經(jīng)看到,NAC解決方案使用SSH或SMB之類(lèi)的協(xié)議建立到新設(shè)備的經(jīng)過(guò)身份驗(yàn)證的連接,并提供可以獲取和重用的憑據(jù)。此連接用于執(zhí)行目錄、或驗(yàn)證驗(yàn)證防病毒軟件是否是最新的等等。在這些端口上運(yùn)行合適的蜜罐服務(wù)可能會(huì)導(dǎo)致明文憑據(jù)(或等價(jià)的哈希)泄漏,這些憑證通常是高度特權(quán)帳戶(hù),能夠登錄到所有連接到網(wǎng)絡(luò)的工作站!
不幸的是,802.1x解決方案并非如此!
網(wǎng)絡(luò)命名空間
Linux自2002年以來(lái)一直支持名稱(chēng)空間約有18年,但是對(duì)于很多人來(lái)說(shuō),它們?nèi)匀皇且粋€(gè)謎。存在用于各種不同資源類(lèi)別的名稱(chēng)空間,例如進(jìn)程、文件系統(tǒng)、網(wǎng)絡(luò)、用戶(hù)ID等。這些名稱(chēng)通常由Docker工具之類(lèi)的容器工具使用,以限制所包含系統(tǒng)可以看到的資源。它們還可以幫助防止命名沖突,就像很多人的名字叫John一樣。
在這個(gè)實(shí)例中,我們感興趣的是網(wǎng)絡(luò)名稱(chēng)空間,因?yàn)樗鼈兲峁┝艘环N方法,使網(wǎng)絡(luò)接口及其整個(gè)網(wǎng)絡(luò)堆棧僅對(duì)系統(tǒng)上運(yùn)行的程序的子集可見(jiàn)。通過(guò)將網(wǎng)絡(luò)接口分配給網(wǎng)絡(luò)名稱(chēng)空間,只有在該網(wǎng)絡(luò)名稱(chēng)空間內(nèi)運(yùn)行的進(jìn)程才能看到或訪問(wèn)該接口。
Opsec注意事項(xiàng)
如前所述,由R1S產(chǎn)生的無(wú)意的網(wǎng)絡(luò)流量(如DNS查找)可能會(huì)泄露整個(gè)游戲。避免這種情況的一種方法是在網(wǎng)絡(luò)名稱(chēng)空間(例如pitm)中隔離以太網(wǎng)接口,并仔細(xì)考慮在該名稱(chēng)空間中啟動(dòng)哪些進(jìn)程。當(dāng)前的slimjim腳本也會(huì)處理這個(gè)問(wèn)題,在名稱(chēng)空間內(nèi)創(chuàng)建一個(gè)屏幕實(shí)例。在pitm名稱(chēng)空間內(nèi)啟動(dòng)的任何進(jìn)程都可以訪問(wèn)以太網(wǎng)接口,而在名稱(chēng)空間外創(chuàng)建的進(jìn)程則不能。這樣,我們就可以確保不會(huì)有意外的流量擊中目標(biāo)的網(wǎng)絡(luò),暴露他們的存在!
安裝slimjim
要在R1S上安裝slimjim,應(yīng)執(zhí)行以下步驟。首先,在以太網(wǎng)接口上禁用IPv6:
- cat << EOF > /etc/sysctl.d/01-disable-ipv6.conf
- # disable IPv6 on Ethernet interfaces
- #
- net.ipv6.conf.wan.disable_ipv6 = 1
- net.ipv6.conf.lan.disable_ipv6 = 1
- EOF
不幸的是,Linux IPv6堆棧執(zhí)行了一些自動(dòng)沖突檢測(cè),這可能允許意外的流量傳出到以太網(wǎng)接口。接下來(lái),安裝所需的軟件包:
- apt install -y dnsmasq tcpdump ebtables redsocks iftop python3-pypcap python3-dpkt python3-pyroute2 python3-iptables python3-setuptools python3-cffi
我們希望防止Redsocks自動(dòng)啟動(dòng),因?yàn)槌撬趐itm名稱(chēng)空間內(nèi)運(yùn)行,否則它將無(wú)法訪問(wèn)網(wǎng)絡(luò)接口。 slimjim腳本將在命名空間內(nèi)為我們啟動(dòng)它。我們還希望將Redsock偵聽(tīng)的IP地址更新為位于以太網(wǎng)橋上??梢赃@樣做:
- systemctl disable --now redsocks
- sed -i -e 's|log = .*;|log = "stderr"|' -e 's|daemon = on;|daemon = off;|' -e 's|local_ip = 127.0.0.1;|local_ip = 169.254.0.1;|' /etc/redsocks.conf
在本文中,我們實(shí)際上不會(huì)使用redsocks,但是在此文章中使用了類(lèi)似的“中間人”技術(shù),其中提供了有關(guān)如何使用它的信息。
接下來(lái),我們從GitHub克隆slimjim存儲(chǔ)庫(kù):
- git clone https://github.com/RoganDawes/slimjim
- slimjim/slimjim
運(yùn)行slimjim將在第一個(gè)窗口中使用slimjim腳本啟動(dòng)屏幕會(huì)話(huà)。你將看到它等待受害者的數(shù)據(jù)包,以識(shí)別要使用的MAC和IP地址。
確認(rèn)受害者的MAC和IP地址
注意:在運(yùn)行slimjim腳本之前,LAN和WAN接口之間不會(huì)通過(guò)任何流量。我建議你利用前面介紹的自動(dòng)化技術(shù),通過(guò)檢測(cè)連接了LAN接口的活動(dòng)接口來(lái)自動(dòng)啟動(dòng)slimjim,或者,在斷開(kāi)目標(biāo)網(wǎng)絡(luò)連接之前,手動(dòng)啟動(dòng)slimjim。
一旦確定了受害者的MAC和IP地址,就可以關(guān)閉該窗口。另一個(gè)窗口將運(yùn)行一個(gè)名為pitm_snoop.py的python腳本,該腳本監(jiān)視網(wǎng)絡(luò)流量以識(shí)別相鄰設(shè)備并更新ARP和路由表。這是必要的,因?yàn)閟limjim阻止R1S執(zhí)行自己的ARP查找以避免暴露。
為廣播域中的設(shè)備添加ARP條目,并將名稱(chēng)映射到IP地址
另一個(gè)窗口將運(yùn)行dnsmasq實(shí)例,該實(shí)例配置為僅執(zhí)行基于本地“主機(jī)文件”的查找。主機(jī)文件也由pitm_snoop.py根據(jù)觀察到的來(lái)往受害者的DNS流量來(lái)創(chuàng)建和更新。通過(guò)這種方式,你可以了解被攔截設(shè)備正在與哪些主機(jī)通信,并了解網(wǎng)絡(luò)布局。如果你希望使用目標(biāo)服務(wù)器的名稱(chēng)服務(wù)器,則可以編輯名稱(chēng)空間的自定義/etc/resolv.conf文件(通??稍?etc/netns/pitm/resolv.conf中找到)。
另一種弄清楚受害者與誰(shuí)交談的方法是運(yùn)行iptraf。slimjim啟動(dòng)一個(gè)iptraf實(shí)例,以用戶(hù)友好的方式顯示通過(guò)pitm橋的網(wǎng)絡(luò)流量。
處理網(wǎng)絡(luò)命名空間的復(fù)雜性
使用網(wǎng)絡(luò)名稱(chēng)空間來(lái)隔離以太網(wǎng)接口有時(shí)會(huì)讓事情變得有些棘手,特別是當(dāng)你需要能夠?qū)⒘髁繌目刂平涌谝龑?dǎo)到網(wǎng)橋時(shí),或者反之亦然。為了解決這個(gè)問(wèn)題,我們創(chuàng)建了一對(duì)虛擬網(wǎng)絡(luò)接口,分別為169.254.20.1(名稱(chēng)空間內(nèi)部)和169.254.20.2(名稱(chēng)空間外部)。使用這些可以將流量路由進(jìn)出命名空間。我的首選方法是使用SSH隧道,如下所示:
在R1S上,為pitm名稱(chēng)空間內(nèi)的虛擬接口添加一個(gè)/etc/hosts條目:
- 169.254.20.1 pitm
將以下條目添加到你的個(gè)人〜/ .ssh / config文件中:
- Host pitm
- User root
- ProxyJump nanopi-r1
- RemoteForward 1080
- Host nanopi-r1
- User root
- RemoteForward 1080
然后,如果你在R1S上安裝了ssh公鑰,你可以使用以下命令直接ssh到pitm名稱(chēng)空間:
- ssh pitm
這利用了OpenSSH的“ProxyJump”功能,并在另一個(gè)內(nèi)部建立了一個(gè)ssh連接的隧道,以便到達(dá)命名空間內(nèi)的虛擬接口。這將啟用簡(jiǎn)潔的功能,例如使用本地計(jì)算機(jī)上的Wireshark進(jìn)行遠(yuǎn)程網(wǎng)絡(luò)監(jiān)視:
- ssh pitm tcpdump -nli pitm -w - | wireshark -k -i -
當(dāng)然,其他所有SSH端口轉(zhuǎn)發(fā)技巧也都可用。
此基于slimjim的解決方案不適用于使用802.1x-2010的網(wǎng)絡(luò),該網(wǎng)絡(luò)可以使用MACsec加密受害者與交換機(jī)之間的數(shù)據(jù)包。
本文翻譯自:https://sensepost.com/blog/2020/making-the-perfect-red-team-dropbox-part-2/