前一段時間,一位朋友在自己電腦上插入了一個USB,但不巧的是,USB里含有病毒,結果電腦就中毒了……出于好奇和友情,我決定分析一下其中的惡意軟件。于是我用USB armory在我的電腦上建立了一個安全隔離沙箱來分析它。

USB armory是由 Inverse Path 設計的一款開源硬件,它是一款U盤大小的微型計算機,通常受到信息安全人士和計算機極客的喜愛。它可以提供ARM A8 800 MHz CPU和512MB RAM,并且具有足夠的功能來實現各種有趣的滲透測試。
在本文中,我發現的最有趣的功能之一是其安全啟動的功能,稱為HAB(High Assurance Boot),通過它可以更好地將USB armory的作用發揮到極致。有趣的是,上周我還聽到過有一個有關此功能的安全建議。
好了,讓我開始分析吧。假設現在安全啟動中沒有漏洞,利用USB ARMORY我可以將PKI密鑰融合到安全引導中,并且只需更換每個分析目標的microSD卡,另外目標惡意軟件沒有很多方法來實現硬件持久性。
要注意的是,在打造USB分析器時,你還需要一個主機適配器,如果沒有它,你將無法實現最后的目標。

USB armory可以在主機和非主機兩種模式下使用。非主機模式是默認模式,允許你將USB armory插入USB端口,并可通過IP地址進行訪問(使用CDC以太網仿真實現此功能)。USB armory基本上可以插入任何計算機并將另一臺計算機通過它對接上。這種配置對于托管安全數據,某種HSM,安全通訊,TOR路由器,密碼管理器,安全的比特幣錢包等都是很有用的。
而主機模式則是本文要使用的模式,在這個配置中,USB ARMORY是一臺獨立的計算機,不過,我可以附加其他USB設備,例如鍵盤,USB顯示器,以太網或WiFi加密狗等。只要有Linux驅動程序,你就可以將它們附加到USB ARMORY。通過這種方式,構建一個小型安全隔離沙箱的計算機是非常容易的。
由于之前,我曾為旅游中所連接的WiFi熱點建立過防火墻,其具體想法就是將一個WiFi接口連接到公共網絡,另一個WiFi或以太網加密狗連接到我的個人設備。通過這種方式,你就可以將你的設備與公共網絡隔離開來,這樣就避免了潛在的惡意攻擊。除此之外,你還可以輕松利用這種方法添加TOR路由和任何其他好玩的功能,比如利用DNS隧道繞過煩人的機場網絡等。
所以借助上面的經驗,我也可以建立基于USB armory的分析器。
硬件要求:
USB ARMORY
USB ARMORY主機適配器
串行到USB適配器
USB 2.0 / 3.0 HUB
JUE130 USB 3.0千兆以太網適配器
一個或多個4GB + microSD卡兼容性列表
至少有一條micro-USB電纜(用于將主機適配器連接到電源)
電池電源組
軟件要求:
Debian 8.x主機
設計如下:

在這種設計中,電池電源組用于為所有電源供電,但如果能自由移動,則自供電的USB集線器也可以正常工作。 USB ARMORY主機適配器也可以作為USB condom使用(只能充電的數據線),這意味著我可以安全地從普通的USB端口供電,如果需要的話,電池組還可以為USB供電,如果連接的設備太耗電,例如大硬盤,則可能需要額外的電源。 USB ARMORY連接到主機適配器的一端,而USB集線器連接到另一端,剩余的USB設備則連接到USB集線器。 USB以太網適配器可以連接到我要復制數據的網絡中,以提高防火墻在USB ARMORY網絡和我想要訪問的任何網絡之間的傳輸安全。
另外,反向路徑和其他Linux發行版有幾個預編譯的安裝映像,它們的默認配置是非主機模式。要啟用這些映像上的主機模式,請參閱本文檔https://github.com/inversepath/usbarmory/wiki/Host-adapter。
我沒有在本次使用預編譯的映像,因為在Linux內核沒有組件支持我買的USB以太網適配器(雖然制造商提供的驅動程序可用),所以需要我用軟件來進行自定義設置。最近的反向路徑提供了一個Makefile來構建基于Debian的映像(而不是像以前一樣復制和粘貼一系列命令)。
于是,我自定義了一個名為Armory Sandbox的 fork()函數,還給它增加了一些額外的取證軟件包,還有一個Linux內核配置,其中包含了所有必需的驅動程序,例如USB以太網適配器,還有其他文件系統,例如HFS +。這些配置,都是為了支持我在目標USB設備中找到常見文件系統。如果在實踐中,你還有任何特定要求,就需要生成新的內核配置文件并更新包含的內核配置文件。默認的Armory Sandbox內核配置位于kernel_conf / armorysandbox_linux-4.9.config。如果要更新內核配置,你需要執行以下操作:
KBUILD_BUILD_USER=usbarmory KBUILD_BUILD_HOST=usbarmory ARCH=arm CROSS_COMPILE=arm-none-eabi- make menuconfig
保存配置文件并復制舊配置文件或直接將其保存在內核配置,如果你不這樣做,那么ARM CPU將為主機(在這種情況下為x86)建配置文件,如果你使用非graphical內核配置模式則更好,這樣就可以使用其他make配置選項。
但在構建自己的映像之前,我還需要在Debian主機中安裝一些所需的軟件來構建根文件系統所需的ARM 交叉編譯器和軟件。
sudo apt-get install bc binfmt-support bzip2 gcc gcc-arm-none-eabi git gnupg make parted qemu-user-static wget xz-utils zip sudo debootstrap
由于Makefile要驗證內核和U-Boot簽名,因此我需要導入GPG密鑰:
gpg --keyserver hkp://keys.gnupg.net --recv-keys 38DBBDC86092693E
gpg --keyserver hkp://keys.gnupg.net --recv-keys 87F9F635D31D7652
現在我就可以交叉編譯ARM目標的代碼。
要開始構建Armory Sandbox映像,首先要將repo復制到Debian主機中:
git clone https://github.com/gdbinit/armorysandbox
編輯Makefile并將你自己的ssh密鑰添加到SSH_KEY變量中。
在實踐中,你可以將默認的Debian鏡像更改為更快的鏡像,只需編輯DEBIAN_MIRROR變量即可。你也可能希望將默認的3500Mb圖像大小設置為變量IMAGE_SIZE。假設用的是4GB的最小microSD卡。如果內存更大,我可以調整分區的大小以后的FAQ。如果你不想調整大小,你可以更改此選項,只不過需要更長的時間才能寫入microSD卡。
默認帳戶是usbarmory,密碼與用戶名相同。你應該更改默認密碼(編輯Makefile,查找CHANGEME字符串)。
下一步就是通過四個步驟完成最終構建原始映像:
1.Debian文件系統和軟件包,
2.Linux內核,
3.U-Boot的
4.將內核和U-Boot安裝到原始映像中。
如果一切順利,你最終得到一個armorysandbox-debian_jessie-base_image-YYYYMMDD.raw映像文件?,F在我只需要將映像文件寫入microSD卡:
Linux(使用dmesg驗證目標終端):
sudo dd if=armorysandbox-debian_jessie-base_image-YYYYMMDD.raw of=/dev/sdX bs=1M conv=fsync
Mac OS X(使用diskutil列表驗證目標終端):
sudo dd if=armorysandbox-debian_jessie-base_image-YYYYMMDD.raw of=/dev/rdiskN bs=1m
你不需要關心在microSD卡中分區的問題,此命令將擦除microSD卡中的所有內容,生成的原始映像已包含必要的分區信息。你要做的就是按Enter鍵,仔細檢查目標設備。
dd完成寫入映像后,然后就可以從主機中取出microSD卡,將其插入USB ARMORY。打開USB ARMORY的電源并連接串行控制臺,并驗證其是否正確啟動。
默認的IP地址是10.1.0.1/24,沒有任何配置的網關(至少默認情況下我不希望這個設備數據包被傳送到任何地方)。你只需向使用網絡的設備添加IP別名即可訪問USB armory沙箱。
Mac OS X:
sudo ifconfig en0 alias 10.1.0.2 255.255.255.0
如果這個網絡不行,只需編輯Makefile,然后再通過串口控制臺登錄,然后修改/ etc / network / interfaces配置文件即可。
如果要啟用Secure Boot功能,應閱讀Inverse Path安全引導文檔。請記住,由于本文提到的安全問題,此功能目前不太有利用價值,但在某些場景中仍然有用。但具體我無法評估,例如某些惡意軟件/漏洞可能能夠對安全啟動進行攻擊,并以某種方式攻擊我的設置。本文之所以沒有包含這個設置的最大的原因是這個功能涉及永久性和不可逆轉的功能。
要添加軟件包,你需要編輯Makefile并使用qemu-debootstrap命令修改該行。如果你真的需要有問題的程序包,并且無法構建映像,則可以隨時通過apt-get或dpkg添加它們(可以手動上傳它們,也可以將armory連接到Internet)。
當Armory Sandbox完成啟動時,你可以通過串行控制臺或SSH登錄,插入任何支持的USB設備,掛載并分析其文件系統,或將其映像到另一臺設備上進行分析。完成分析后,你可以放棄microSD,如果你想要真正安全,或者將其擦除并重寫你構建的Armory Sandbox映像的話。就會帶來了一個額外的問題,如何安全地擦除microSD卡?
本文的目的是首先嘗試建立一個隔離的USB分析系統。例如,Circl.lu已經使用Raspberry Pi設備構建了CIRCLean USB Sanitizer。該設備的問題是它嘗試自動將不受信任的文檔轉換為另一種格式,對我來說更重要的是它能使用相同的“隔離”設備訪問感染的USB和好的USB。我更喜歡通過網絡來解決問題,因為我可以在隔離設備和臺式機之間添加防火墻。此外,我不想自動化任何數據轉換,我只想要一個安全隔離網閘。