如何構(gòu)建完美的Dropbox(上)
Dropbox是一款免費(fèi)網(wǎng)絡(luò)文件同步工具,是Dropbox公司運(yùn)行的在線(xiàn)存儲(chǔ)服務(wù),通過(guò)云計(jì)算實(shí)現(xiàn)因特網(wǎng)上的文件同步,用戶(hù)可以存儲(chǔ)并共享文件和文件夾。Dropbox提供免費(fèi)和收費(fèi)服務(wù),Dropbox的收費(fèi)服務(wù)包括Dropbox Pro 和 Dropbox for Business。在不同操作系統(tǒng)下有客戶(hù)端軟件,并且有網(wǎng)頁(yè)客戶(hù)端。
即便如此完美的工具,也發(fā)生過(guò)網(wǎng)絡(luò)安全事故。早在2012 年,Dropbox 超過(guò) 6000 萬(wàn)帳戶(hù)資料就被盜過(guò)一次。再比如在2016年,攻擊者利用Dropbox傳播了一種名為petya的勒索軟件,他們點(diǎn)擊存儲(chǔ)在Dropbox共享上,而用戶(hù)沒(méi)有意識(shí)到,只要點(diǎn)擊Dropbox后他們的計(jì)算機(jī)上就會(huì)安裝病毒。
我們一直在為FriendlyArm NanoPi R1S單板計(jì)算機(jī)(SBC)制作軟件映像,他們將用它來(lái)演示一些近距離攻擊技術(shù)。我將通過(guò)安裝Armbian發(fā)行版以及P4wnP1 ALOA詳細(xì)介紹配置R1S的過(guò)程。我們還將快速了解如何將USBProxy配置為一個(gè)鍵盤(pán)記錄器。
首先,我們將利用MaMe82的P4wnP1將R1S配置為USB攻擊的平臺(tái),雖然最初是為Raspberry Pi Zero W創(chuàng)建的,但從本質(zhì)上講,沒(méi)有任何限制。Raspberry Pi Zero W,在中國(guó),大家叫我樹(shù)莓派Zero W,在這里,我簡(jiǎn)稱(chēng)為RPi Zero W。
我作為樹(shù)莓派家族里的新生代寵兒,與前輩1代一樣用ARM11內(nèi)核的BCM2835處理器,但我的運(yùn)行速度比之提升了約40%。
相比Raspberry Pi Zero,我增加了與3代B一樣的WiFi和藍(lán)牙,能適應(yīng)更多場(chǎng)合。我們真正需要的是帶有USB設(shè)備控制器(UDC)的SBC,以及通過(guò)該設(shè)備控制器進(jìn)行通信的某種方式!R1S完全符合上述描述,它具有2個(gè)千兆以太網(wǎng)端口,我們可以在設(shè)置時(shí)最初使用它們,但最終我們將專(zhuān)用于以太網(wǎng)攻擊,具體的過(guò)程我們稍后介紹。 R1S還具有內(nèi)置的WiFi,盡管它不是特別好的芯片組!但是,我們可以將其用作訪問(wèn)點(diǎn)以允許遠(yuǎn)程訪問(wèn)設(shè)置的dropbox。我們還可以將USB主機(jī)端口用于LTE調(diào)制解調(diào)器或更長(zhǎng)距離的其他網(wǎng)絡(luò)接口。但首先,我們將使用默認(rèn)情況下Armbian在USB端口上提供的串行控制臺(tái)進(jìn)行連接。
我們將以Armbian Buster當(dāng)前版本(Armbian_20.02.1_Nanopi-r1_buster_current_5.4.20.7z)為基礎(chǔ)。下載文件,解壓縮.img文件,然后按照Armbian網(wǎng)站上的說(shuō)明將其寫(xiě)入microSD卡。通常,我會(huì)執(zhí)行以下操作,但要確保你使用的設(shè)備是正確的設(shè)置!
- mount | grep mmcblk0 | while read dev rest; do
- sudo umount $dev
- done && (pv Armbian_20.02.1_Nanopi-r1_buster_current_5.4.20.img | sudo dd of=/dev/mmcblk0 bs=2048)
完成后,將micro SD卡插入R1S,然后使用microUSB線(xiàn)將R1S連接到計(jì)算機(jī)。確保你選擇的線(xiàn)是數(shù)據(jù)線(xiàn),而不僅僅是充電線(xiàn)!幾分鐘后,你應(yīng)該在主機(jī)上看到一個(gè)串行端口(這發(fā)生在R1S啟動(dòng)并擴(kuò)展文件系統(tǒng)以填充SD卡之后)。如果看不到新的串行端口,請(qǐng)檢查數(shù)據(jù)線(xiàn)!
dmesg -w顯示R1S的枚舉
你應(yīng)該能夠使用首選的終端仿真器連接到串行端口,我喜歡使用picocom,并且我相信Windows上的Putty也可以很好地工作。你不必?fù)?dān)心波特率,但115200應(yīng)該可以。使用Linux主機(jī),串行端口枚舉為ttyACM設(shè)備,例如/dev/ttyACM0。建立連接后,最初的Armbian登錄/設(shè)置屏幕會(huì)打招呼。以“root”用戶(hù)身份登錄,密碼為“1234”,然后重新輸入密碼“1234”以開(kāi)始將其更改為新密碼。記住你的新root密碼!你可能不需要?jiǎng)?chuàng)建非特權(quán)用戶(hù),但是如果你確實(shí)愿意,可以這樣做!
以root / 1234身份登錄,然后更改root密碼
在中斷或完成“新用戶(hù)帳戶(hù)”的創(chuàng)建過(guò)程后,注銷(xiāo),然后作為根用戶(hù)或來(lái)自非特權(quán)用戶(hù)的sudo -s重新登錄。在引導(dǎo)過(guò)程中,我們將一條以太網(wǎng)線(xiàn)從本地網(wǎng)絡(luò)連接到R1S的WAN端口。幾秒鐘后,R1S應(yīng)該分配了一個(gè)IP地址。
從本地DHCP服務(wù)器獲取IP地址
現(xiàn)在我們可以SSH到我們的R1S。我還復(fù)制了ssh公鑰,以使將來(lái)的連接更簡(jiǎn)單。
在運(yùn)行P4wnP1之前,我們需要禁用USB串行控制臺(tái),以便P4wnP1可以管理USB設(shè)備控制器。首先,停止systemd在設(shè)備上啟動(dòng)登錄提示:
- systemctl disable serial-getty@ttyGS0.service
- systemctl stop serial-getty@ttyGS0.service
然后,通過(guò)阻止加載g_serial模塊,停止自動(dòng)創(chuàng)建串行設(shè)備。這樣,我們將立即將其卸載,并防止日后再次加載:
- rm /etc/modules
- rmmod g_serial
現(xiàn)在克隆P4wnP1 ALOA存儲(chǔ)庫(kù),然后將必要的(預(yù)構(gòu)建的)零件復(fù)制到正確的位置。理想情況下,我們會(huì)從頭開(kāi)始構(gòu)建,但是在構(gòu)建過(guò)程中目前存在一些錯(cuò)誤。幸運(yùn)的是,為Raspberry Pi Zero W構(gòu)建的二進(jìn)制文件在NanoPi R1S上運(yùn)行得很好!
- apt install -y dnsmasq
- git clone https://github.com/RoganDawes/P4wnP1_aloa
- cd P4wnP1_aloa
- mkdir -p /usr/local/P4wnP1
- cp build/P4wnP1_* /usr/local/bin/
- cp -r dist/* /usr/local/P4wnP1/
- cp build/webapp* /usr/local/P4wnP1/www
- mv /usr/local/P4wnP1/P4wnP1.service /etc/systemd/system/
- systemctl enable P4wnP1.service
- systemctl start P4wnP1.service
現(xiàn)在P4wnP1正在運(yùn)行,你應(yīng)該可以在端口8000上以與SSH相同的IP訪問(wèn)P4wnP1 Web界面,即http://nanopi-r1:8000。這里沒(méi)有身份驗(yàn)證,因?yàn)榧僭O(shè)P4wnP1公開(kāi)的網(wǎng)絡(luò)是一個(gè)受信任的網(wǎng)絡(luò)。
現(xiàn)在是測(cè)試USB配置是否正常的好時(shí)機(jī),你應(yīng)該能夠使用右側(cè)的復(fù)選框選擇一個(gè)或多個(gè)USB類(lèi)來(lái)實(shí)施。我通常喜歡實(shí)現(xiàn)鍵盤(pán)和鼠標(biāo)以及自定義的HID設(shè)備。然后,確保左上角的USB已啟用,然后單擊“部署”。
配置P4wnP1 USB配置文件
你應(yīng)該看到R1S連接到的計(jì)算機(jī)檢測(cè)到一個(gè)新的USB設(shè)備。例如,在主機(jī)上使用“dmesg”,你應(yīng)該看到類(lèi)似以下內(nèi)容:
- [2316641.797152] usb 1-5: new high-speed USB device number 40 using xhci_hcd
- [2316641.809806] usb 1-5: New USB device found, idVendor=1d6b, idProduct=1347, bcdDevice= 1.00
- [2316641.809808] usb 1-5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
- [2316641.809810] usb 1-5: Product: P4wnP1 by MaMe82
- [2316641.809811] usb 1-5: Manufacturer: MaMe82
- [2316641.809812] usb 1-5: SerialNumber: deadbeef1337
- [2316641.815378] input: MaMe82 P4wnP1 by MaMe82 as /devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5:1.0/0003:1D6B:1347.0028/input/input85
- [2316641.867750] hid-generic 0003:1D6B:1347.0028: input,hidraw0: USB HID v1.01 Keyboard [MaMe82 P4wnP1 by MaMe82] on usb-0000:00:14.0-5/input0
- [2316641.868575] input: MaMe82 P4wnP1 by MaMe82 Mouse as /devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5:1.1/0003:1D6B:1347.0029/input/input86
- [2316641.868921] hid-generic 0003:1D6B:1347.0029: input,hidraw1: USB HID v1.01 Mouse [MaMe82 P4wnP1 by MaMe82] on usb-0000:00:14.0-5/input1
- [2316641.869892] hid-generic 0003:1D6B:1347.002A: hiddev96,hidraw2: USB HID v1.01 Device [MaMe82 P4wnP1 by MaMe82] on usb-0000:00:14.0-5/input2
如果要在啟動(dòng)時(shí)部署此USB配置,則可以單擊Store,然后輸入“startup”作為配置文件名稱(chēng)。另外,也可以根據(jù)需要在手動(dòng)控制下進(jìn)行部署。
此時(shí),你應(yīng)該擁有一個(gè)功能正常的P4wnP1設(shè)備,并且可以按照Internet上的各種教程來(lái)實(shí)際使用USB功能來(lái)攻擊連接的設(shè)備。
注意:我發(fā)現(xiàn)P4wnP1在配置(在P4wnP1內(nèi))連接到現(xiàn)有的接入點(diǎn)時(shí)非常不穩(wěn)定。如果這是你的需要,我寧愿建議使用NetworkManager進(jìn)行這種配置。在這種情況下,我建議你忽略下一段,并禁用P4wnP1中的WiFi配置,并將其另存為啟動(dòng)配置文件。
如果你確實(shí)想利用內(nèi)置Wi-Fi界面的熱點(diǎn)功能進(jìn)行遠(yuǎn)程訪問(wèn),則可能希望讓P4wnP1為你進(jìn)行管理,只是因?yàn)槭褂肗etworkManager進(jìn)行配置似乎并不容易。如果是這樣,你將需要告訴NetworkManager忽略該接口,因此不會(huì)存在所有權(quán)沖突。你可以通過(guò)編輯/etc/NetworkManager/NetworkManager.conf并在底部添加以下兩行來(lái)完成此操作:
- [keyfile]
- unmanaged-devices=interface-name:wlan0
現(xiàn)在,你可以使用Web界面中的“WiFi設(shè)置”標(biāo)簽,將P4wnP1配置為將Wi-Fi界面作為接入點(diǎn)運(yùn)行。將其存儲(chǔ)為“啟動(dòng)”配置文件的一部分,以在啟動(dòng)時(shí)自動(dòng)對(duì)其進(jìn)行配置。
當(dāng)設(shè)備將在現(xiàn)場(chǎng)部署且沒(méi)有熟悉的Wi-Fi網(wǎng)絡(luò)可供連接時(shí),這將很有用??梢哉f(shuō),隱藏SSID有助于將其隱藏起來(lái)。當(dāng)然,一旦你開(kāi)始與它關(guān)聯(lián),任何本地Wireless IDS都會(huì)很快發(fā)現(xiàn)你!或者,你可以選擇使用LTE加密狗或其他不太明顯的通信機(jī)制(例如Bluetooth或802.15.4無(wú)線(xiàn)電)進(jìn)行連接。不過(guò),這里將不討論如何設(shè)置它!
另外,我想我會(huì)嘗試使用USBProxy設(shè)置鍵盤(pán)記錄器。盡管它被做了特殊標(biāo)記,但仍然可以正常使用!這個(gè)想法是通過(guò)創(chuàng)建相同的USB小工具描述符,并簡(jiǎn)單地將數(shù)據(jù)包從一側(cè)復(fù)制到另一側(cè),來(lái)“鏡像”通過(guò)USB-A連接器插入R1S的USB設(shè)備。研究USB協(xié)議可能是最有趣的,但是開(kāi)箱即用它也可以充當(dāng)鍵盤(pán)記錄器。
除了要確保首先安裝libusb和libusb-dev軟件包外,我將不涉及編譯的所有細(xì)節(jié)。同樣,默認(rèn)情況下,鍵盤(pán)記錄器功能與ROT13過(guò)濾器綁定,因此,你在鍵盤(pán)上輸入的任何內(nèi)容都將由13個(gè)字符轉(zhuǎn)置。因此,在編譯之前,你可能需要注釋掉第153行,其中添加了PacketFilter_ROT13插件。當(dāng)你在那里時(shí),還應(yīng)通過(guò)將“r +”參數(shù)更改為“a +”,將第143行的fopen調(diào)用更改為追加到日志文件,而不是將其打開(kāi)只進(jìn)行讀取。主要原因是,如果輸出文件尚不存在,則執(zhí)行將失敗,另一種解決方法是在執(zhí)行之前修改outputfile。
編譯后,你可以運(yùn)行usb-mitm –k來(lái)啟動(dòng)鍵盤(pán)記錄器。這會(huì)將觀察到的擊鍵信息轉(zhuǎn)儲(chǔ)到stderr,這可能并沒(méi)有那么大的幫助。你還可以向-k開(kāi)關(guān)傳遞一個(gè)可選參數(shù),指定要寫(xiě)入的文件:usb-mitm –kkeystrokes,這會(huì)將觀察到的擊鍵記錄在輸出文件中。
捕獲的擊鍵
總而言之,我們創(chuàng)建了一個(gè)USB攻擊平臺(tái),該平臺(tái)可用于將擊鍵和鼠標(biāo)移動(dòng)注入所連接的受害者,以及執(zhí)行各種其他USB攻擊,例如使用優(yōu)先級(jí)路由來(lái)啟動(dòng)USB網(wǎng)絡(luò)接口。如果有現(xiàn)成的外部USB鍵盤(pán)可以通過(guò)R1S插入,我們也可以將其用作USB鍵盤(pán)嗅探器。接下來(lái),我們將研究如何將R1S偽裝成以太網(wǎng)人員,插在已授權(quán)的受害者和其上游交換機(jī)之間。在這種配置中,我們可以利用受害計(jì)算機(jī)傳遞任何網(wǎng)絡(luò)身份驗(yàn)證控制機(jī)制的能力,同時(shí)“劫持”其IP和MAC地址,以使R1S生成的任何流量實(shí)際上都來(lái)自受害計(jì)算機(jī)。
接下來(lái),我將重點(diǎn)介紹兩種情況下作為以太網(wǎng)攻擊工具的操作。首先,作為可以連接到未使用的以太網(wǎng)端口的Dropbox,并提供對(duì)目標(biāo)網(wǎng)絡(luò)的遠(yuǎn)程訪問(wèn);其次,作為以太網(wǎng)的中間人(Ethernet Person in the Middle),可以將其放置在合法設(shè)備與其內(nèi)部設(shè)備之間。在上游交換機(jī)中,使用合法設(shè)備的IP地址和MAC地址覆蓋自己的流量。在第二種情況下,我們也可以擊敗網(wǎng)絡(luò)訪問(wèn)控制措施,因?yàn)楹戏ㄔO(shè)備將處理所有這些。
但是,需要注意的一件事是引起任何異常網(wǎng)絡(luò)流量,這可能會(huì)引發(fā)警報(bào)。一個(gè)明顯的示例是在計(jì)劃的apt更新發(fā)生時(shí)對(duì)armbian.org進(jìn)行DNS查找,或嘗試解析0.debian.pool.ntp.org。更復(fù)雜的可能是Linux特有的特定DHCP選項(xiàng)和參數(shù),這些選項(xiàng)和參數(shù)不適用于只支持windows的網(wǎng)絡(luò)。在將你的設(shè)備連接到潛在的惡意網(wǎng)絡(luò)之前,最好熟悉你的設(shè)備上運(yùn)行的所有進(jìn)程,以及它們?cè)诰W(wǎng)絡(luò)上的確切樣子!稍后我將演示一種最小化這種意外流量的方法。
攻擊準(zhǔn)備
如上所述,我假設(shè)你將內(nèi)置的WiFi接口配置為你控制的接入點(diǎn)的客戶(hù)端,或者配置為AP本身,這樣我們就可以通過(guò)WiFi連接到R1S,而不受P4wnP1的影響。你可以在命令行上使用nmtui連接到串行控制臺(tái)時(shí)完成此操作,如果你確實(shí)知道自己在做什么,則可以使用nmcli !設(shè)置以太網(wǎng)接口
第一個(gè)建議是重命名接口,以對(duì)應(yīng)于案例中的LAN和WAN名稱(chēng),這有助于避免混淆接口。你可以使用以下命令來(lái)完成此操作,該命令可以正確配置systemd-network。
- printf "lan\tplatform-1c1b000.usb-usb-0:1:1.0\nwan\tplatform-1c30000.ethernet\n" | while read iface path; do
- cat << EOF > /etc/systemd/network/10-$iface.link
- [Match]
- Path=$path
- [Link]
- Name=$iface
- EOF
- done
這將在/ etc / systemd / network /中創(chuàng)建兩個(gè)文件,分別以lan和wan接口命名,并帶有應(yīng)重命名的設(shè)備的路徑。這些應(yīng)該是NanoPi R1S的標(biāo)準(zhǔn)配置,但在其他設(shè)備上可能會(huì)有所不同。你還應(yīng)該確保NetworkManager不會(huì)嘗試管理以下接口:
- cat << EOF >> /etc/NetworkManager/NetworkManager.conf
- [keyfile]
- unmanaged-devices=interface-name:wan,interface-name:lan
- EOF
創(chuàng)建這些文件后,請(qǐng)重新啟動(dòng)以激活規(guī)則,重命名接口并重新加載NetworkManager。
重命名后的wan和lan接口
讓我們考慮這樣一個(gè)場(chǎng)景:你發(fā)現(xiàn)了一個(gè)未使用的以太網(wǎng)端口,并希望連接你的設(shè)備。這是一個(gè)潛在的風(fēng)險(xiǎn)活動(dòng),因?yàn)槿魏尉W(wǎng)絡(luò)訪問(wèn)控制(NAC)系統(tǒng)可以檢測(cè)你的未經(jīng)授權(quán)的活動(dòng),并警告操作人員。盡管如此,它很可能會(huì)成功,因此值得嘗試。
你要了解的第一件事是目標(biāo)端口是否實(shí)際存在,幸運(yùn)的是,我們可以使用NanoPi R1S上的3個(gè)LED來(lái)獲得即時(shí)反饋。不幸的是,LAN和WAN LED很難看到,呈綠色,而紅色SYS LED更容易看到。我建議的配置如下,SYS LED用來(lái)顯示CPU使用率,WAN和LAN LED用來(lái)顯示鏈路狀態(tài)(當(dāng)鏈路被檢測(cè)到時(shí))和被檢測(cè)到的RX流量(當(dāng)只接收到流量時(shí)閃爍)。
- modprobe ledtrig-netdev # not loaded by default
- cd /sys/class/leds/
- echo cpu > LED1/trigger # labelled sys
- echo netdev > LED2/trigger # labelled wan
- echo wan > LED2/device_name
- echo 1 > LED2/link
- echo 1 > LED2/rx
- echo netdev > LED3/trigger # labelled lan
- echo lan > LED3/device_name
- echo 1 > LED3/link
- echo 1 > LED3/rx
- ip link set dev wan up
- ip link set dev lan up
為了在R1S每次啟動(dòng)時(shí)都能運(yùn)行,建議將以上內(nèi)容添加到/etc/rc.local。請(qǐng)注意,如果沒(méi)有IP鏈接設(shè)置部分,則鏈接檢測(cè)將無(wú)法工作!如果你希望紅色LED指示W(wǎng)AN鏈接,請(qǐng)?jiān)谏厦娴哪_本中交換LED1和LED2。
現(xiàn)在,如果你給R1S通電,只需將以太網(wǎng)線(xiàn)插入WAN或LAN端口,就會(huì)告訴你該數(shù)據(jù)線(xiàn)是否接通,以及該數(shù)據(jù)線(xiàn)是否有活動(dòng)。這樣可以避免將R1S連接到禁用或斷開(kāi)的端口。也就是說(shuō),R1S在以太網(wǎng)端口上也確實(shí)有指示燈LED,因此這不是完全必要的!
觸發(fā)硬件LED的選項(xiàng),所選觸發(fā)器位于方括號(hào)中,當(dāng)前為[cpu]
然后,你可以通過(guò)WiFi連接并開(kāi)始監(jiān)視網(wǎng)絡(luò)流量,然后再?zèng)Q定要如何進(jìn)行。例如,請(qǐng)求DHCP租約,或簡(jiǎn)單地劫持觀察到的網(wǎng)絡(luò)范圍內(nèi)的未使用IP地址。
下一篇文章中,我們將介紹自動(dòng)化攻擊方案、網(wǎng)絡(luò)訪問(wèn)控制、網(wǎng)絡(luò)命名空間等可能的攻擊手段。
本文翻譯自:https://sensepost.com/blog/2020/making-the-perfect-red-team-dropbox-part-1/ 與 https://sensepost.com/blog/2020/making-the-perfect-red-team-dropbox-part-2/如若轉(zhuǎn)載,請(qǐng)注明原文地址。