如何構建完美的Dropbox(上)
Dropbox是一款免費網絡文件同步工具,是Dropbox公司運行的在線存儲服務,通過云計算實現因特網上的文件同步,用戶可以存儲并共享文件和文件夾。Dropbox提供免費和收費服務,Dropbox的收費服務包括Dropbox Pro 和 Dropbox for Business。在不同操作系統下有客戶端軟件,并且有網頁客戶端。
即便如此完美的工具,也發生過網絡安全事故。早在2012 年,Dropbox 超過 6000 萬帳戶資料就被盜過一次。再比如在2016年,攻擊者利用Dropbox傳播了一種名為petya的勒索軟件,他們點擊存儲在Dropbox共享上,而用戶沒有意識到,只要點擊Dropbox后他們的計算機上就會安裝病毒。
我們一直在為FriendlyArm NanoPi R1S單板計算機(SBC)制作軟件映像,他們將用它來演示一些近距離攻擊技術。我將通過安裝Armbian發行版以及P4wnP1 ALOA詳細介紹配置R1S的過程。我們還將快速了解如何將USBProxy配置為一個鍵盤記錄器。
首先,我們將利用MaMe82的P4wnP1將R1S配置為USB攻擊的平臺,雖然最初是為Raspberry Pi Zero W創建的,但從本質上講,沒有任何限制。Raspberry Pi Zero W,在中國,大家叫我樹莓派Zero W,在這里,我簡稱為RPi Zero W。
我作為樹莓派家族里的新生代寵兒,與前輩1代一樣用ARM11內核的BCM2835處理器,但我的運行速度比之提升了約40%。
相比Raspberry Pi Zero,我增加了與3代B一樣的WiFi和藍牙,能適應更多場合。我們真正需要的是帶有USB設備控制器(UDC)的SBC,以及通過該設備控制器進行通信的某種方式!R1S完全符合上述描述,它具有2個千兆以太網端口,我們可以在設置時最初使用它們,但最終我們將專用于以太網攻擊,具體的過程我們稍后介紹。 R1S還具有內置的WiFi,盡管它不是特別好的芯片組!但是,我們可以將其用作訪問點以允許遠程訪問設置的dropbox。我們還可以將USB主機端口用于LTE調制解調器或更長距離的其他網絡接口。但首先,我們將使用默認情況下Armbian在USB端口上提供的串行控制臺進行連接。
我們將以Armbian Buster當前版本(Armbian_20.02.1_Nanopi-r1_buster_current_5.4.20.7z)為基礎。下載文件,解壓縮.img文件,然后按照Armbian網站上的說明將其寫入microSD卡。通常,我會執行以下操作,但要確保你使用的設備是正確的設置!
- 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線將R1S連接到計算機。確保你選擇的線是數據線,而不僅僅是充電線!幾分鐘后,你應該在主機上看到一個串行端口(這發生在R1S啟動并擴展文件系統以填充SD卡之后)。如果看不到新的串行端口,請檢查數據線!
dmesg -w顯示R1S的枚舉
你應該能夠使用首選的終端仿真器連接到串行端口,我喜歡使用picocom,并且我相信Windows上的Putty也可以很好地工作。你不必擔心波特率,但115200應該可以。使用Linux主機,串行端口枚舉為ttyACM設備,例如/dev/ttyACM0。建立連接后,最初的Armbian登錄/設置屏幕會打招呼。以“root”用戶身份登錄,密碼為“1234”,然后重新輸入密碼“1234”以開始將其更改為新密碼。記住你的新root密碼!你可能不需要創建非特權用戶,但是如果你確實愿意,可以這樣做!
以root / 1234身份登錄,然后更改root密碼
在中斷或完成“新用戶帳戶”的創建過程后,注銷,然后作為根用戶或來自非特權用戶的sudo -s重新登錄。在引導過程中,我們將一條以太網線從本地網絡連接到R1S的WAN端口。幾秒鐘后,R1S應該分配了一個IP地址。
從本地DHCP服務器獲取IP地址
現在我們可以SSH到我們的R1S。我還復制了ssh公鑰,以使將來的連接更簡單。
在運行P4wnP1之前,我們需要禁用USB串行控制臺,以便P4wnP1可以管理USB設備控制器。首先,停止systemd在設備上啟動登錄提示:
- systemctl disable serial-getty@ttyGS0.service
- systemctl stop serial-getty@ttyGS0.service
然后,通過阻止加載g_serial模塊,停止自動創建串行設備。這樣,我們將立即將其卸載,并防止日后再次加載:
- rm /etc/modules
- rmmod g_serial
現在克隆P4wnP1 ALOA存儲庫,然后將必要的(預構建的)零件復制到正確的位置。理想情況下,我們會從頭開始構建,但是在構建過程中目前存在一些錯誤。幸運的是,為Raspberry Pi Zero W構建的二進制文件在NanoPi R1S上運行得很好!
- 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
現在P4wnP1正在運行,你應該可以在端口8000上以與SSH相同的IP訪問P4wnP1 Web界面,即http://nanopi-r1:8000。這里沒有身份驗證,因為假設P4wnP1公開的網絡是一個受信任的網絡。
現在是測試USB配置是否正常的好時機,你應該能夠使用右側的復選框選擇一個或多個USB類來實施。我通常喜歡實現鍵盤和鼠標以及自定義的HID設備。然后,確保左上角的USB已啟用,然后單擊“部署”。
配置P4wnP1 USB配置文件
你應該看到R1S連接到的計算機檢測到一個新的USB設備。例如,在主機上使用“dmesg”,你應該看到類似以下內容:
- [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
如果要在啟動時部署此USB配置,則可以單擊Store,然后輸入“startup”作為配置文件名稱。另外,也可以根據需要在手動控制下進行部署。
此時,你應該擁有一個功能正常的P4wnP1設備,并且可以按照Internet上的各種教程來實際使用USB功能來攻擊連接的設備。
注意:我發現P4wnP1在配置(在P4wnP1內)連接到現有的接入點時非常不穩定。如果這是你的需要,我寧愿建議使用NetworkManager進行這種配置。在這種情況下,我建議你忽略下一段,并禁用P4wnP1中的WiFi配置,并將其另存為啟動配置文件。
如果你確實想利用內置Wi-Fi界面的熱點功能進行遠程訪問,則可能希望讓P4wnP1為你進行管理,只是因為使用NetworkManager進行配置似乎并不容易。如果是這樣,你將需要告訴NetworkManager忽略該接口,因此不會存在所有權沖突。你可以通過編輯/etc/NetworkManager/NetworkManager.conf并在底部添加以下兩行來完成此操作:
- [keyfile]
- unmanaged-devices=interface-name:wlan0
現在,你可以使用Web界面中的“WiFi設置”標簽,將P4wnP1配置為將Wi-Fi界面作為接入點運行。將其存儲為“啟動”配置文件的一部分,以在啟動時自動對其進行配置。
當設備將在現場部署且沒有熟悉的Wi-Fi網絡可供連接時,這將很有用。可以說,隱藏SSID有助于將其隱藏起來。當然,一旦你開始與它關聯,任何本地Wireless IDS都會很快發現你!或者,你可以選擇使用LTE加密狗或其他不太明顯的通信機制(例如Bluetooth或802.15.4無線電)進行連接。不過,這里將不討論如何設置它!
另外,我想我會嘗試使用USBProxy設置鍵盤記錄器。盡管它被做了特殊標記,但仍然可以正常使用!這個想法是通過創建相同的USB小工具描述符,并簡單地將數據包從一側復制到另一側,來“鏡像”通過USB-A連接器插入R1S的USB設備。研究USB協議可能是最有趣的,但是開箱即用它也可以充當鍵盤記錄器。
除了要確保首先安裝libusb和libusb-dev軟件包外,我將不涉及編譯的所有細節。同樣,默認情況下,鍵盤記錄器功能與ROT13過濾器綁定,因此,你在鍵盤上輸入的任何內容都將由13個字符轉置。因此,在編譯之前,你可能需要注釋掉第153行,其中添加了PacketFilter_ROT13插件。當你在那里時,還應通過將“r +”參數更改為“a +”,將第143行的fopen調用更改為追加到日志文件,而不是將其打開只進行讀取。主要原因是,如果輸出文件尚不存在,則執行將失敗,另一種解決方法是在執行之前修改outputfile。
編譯后,你可以運行usb-mitm –k來啟動鍵盤記錄器。這會將觀察到的擊鍵信息轉儲到stderr,這可能并沒有那么大的幫助。你還可以向-k開關傳遞一個可選參數,指定要寫入的文件:usb-mitm –kkeystrokes,這會將觀察到的擊鍵記錄在輸出文件中。
捕獲的擊鍵
總而言之,我們創建了一個USB攻擊平臺,該平臺可用于將擊鍵和鼠標移動注入所連接的受害者,以及執行各種其他USB攻擊,例如使用優先級路由來啟動USB網絡接口。如果有現成的外部USB鍵盤可以通過R1S插入,我們也可以將其用作USB鍵盤嗅探器。接下來,我們將研究如何將R1S偽裝成以太網人員,插在已授權的受害者和其上游交換機之間。在這種配置中,我們可以利用受害計算機傳遞任何網絡身份驗證控制機制的能力,同時“劫持”其IP和MAC地址,以使R1S生成的任何流量實際上都來自受害計算機。
接下來,我將重點介紹兩種情況下作為以太網攻擊工具的操作。首先,作為可以連接到未使用的以太網端口的Dropbox,并提供對目標網絡的遠程訪問;其次,作為以太網的中間人(Ethernet Person in the Middle),可以將其放置在合法設備與其內部設備之間。在上游交換機中,使用合法設備的IP地址和MAC地址覆蓋自己的流量。在第二種情況下,我們也可以擊敗網絡訪問控制措施,因為合法設備將處理所有這些。
但是,需要注意的一件事是引起任何異常網絡流量,這可能會引發警報。一個明顯的示例是在計劃的apt更新發生時對armbian.org進行DNS查找,或嘗試解析0.debian.pool.ntp.org。更復雜的可能是Linux特有的特定DHCP選項和參數,這些選項和參數不適用于只支持windows的網絡。在將你的設備連接到潛在的惡意網絡之前,最好熟悉你的設備上運行的所有進程,以及它們在網絡上的確切樣子!稍后我將演示一種最小化這種意外流量的方法。
攻擊準備
如上所述,我假設你將內置的WiFi接口配置為你控制的接入點的客戶端,或者配置為AP本身,這樣我們就可以通過WiFi連接到R1S,而不受P4wnP1的影響。你可以在命令行上使用nmtui連接到串行控制臺時完成此操作,如果你確實知道自己在做什么,則可以使用nmcli !設置以太網接口
第一個建議是重命名接口,以對應于案例中的LAN和WAN名稱,這有助于避免混淆接口。你可以使用以下命令來完成此操作,該命令可以正確配置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 /中創建兩個文件,分別以lan和wan接口命名,并帶有應重命名的設備的路徑。這些應該是NanoPi R1S的標準配置,但在其他設備上可能會有所不同。你還應該確保NetworkManager不會嘗試管理以下接口:
- cat << EOF >> /etc/NetworkManager/NetworkManager.conf
- [keyfile]
- unmanaged-devices=interface-name:wan,interface-name:lan
- EOF
創建這些文件后,請重新啟動以激活規則,重命名接口并重新加載NetworkManager。
重命名后的wan和lan接口
讓我們考慮這樣一個場景:你發現了一個未使用的以太網端口,并希望連接你的設備。這是一個潛在的風險活動,因為任何網絡訪問控制(NAC)系統可以檢測你的未經授權的活動,并警告操作人員。盡管如此,它很可能會成功,因此值得嘗試。
你要了解的第一件事是目標端口是否實際存在,幸運的是,我們可以使用NanoPi R1S上的3個LED來獲得即時反饋。不幸的是,LAN和WAN LED很難看到,呈綠色,而紅色SYS LED更容易看到。我建議的配置如下,SYS LED用來顯示CPU使用率,WAN和LAN LED用來顯示鏈路狀態(當鏈路被檢測到時)和被檢測到的RX流量(當只接收到流量時閃爍)。
- 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每次啟動時都能運行,建議將以上內容添加到/etc/rc.local。請注意,如果沒有IP鏈接設置部分,則鏈接檢測將無法工作!如果你希望紅色LED指示WAN鏈接,請在上面的腳本中交換LED1和LED2。
現在,如果你給R1S通電,只需將以太網線插入WAN或LAN端口,就會告訴你該數據線是否接通,以及該數據線是否有活動。這樣可以避免將R1S連接到禁用或斷開的端口。也就是說,R1S在以太網端口上也確實有指示燈LED,因此這不是完全必要的!
觸發硬件LED的選項,所選觸發器位于方括號中,當前為[cpu]
然后,你可以通過WiFi連接并開始監視網絡流量,然后再決定要如何進行。例如,請求DHCP租約,或簡單地劫持觀察到的網絡范圍內的未使用IP地址。
下一篇文章中,我們將介紹自動化攻擊方案、網絡訪問控制、網絡命名空間等可能的攻擊手段。
本文翻譯自: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/如若轉載,請注明原文地址。