簡介
本指南概述了在空隙模式下更新安全惡意軟體分析裝置的過程。
注意:以氣隙模式維護裝置會降低其效率。在繼續操作之前,請考慮安全性和功能之間的權衡。
必要條件
思科建議您瞭解以下主題:
- 在Windows和Unix/Linux環境中通過命令列輸入的基本知識
- 惡意軟體分析裝置知識
- 思科整合式管理控制器(IMC)知識
採用元件
思科建議熟悉以下主題:
- 基於Windows 10和Linux的作業系統(例如:CentOS、RedHat)
- 魯弗斯2.17
- C220 M4、M510和M520 M5、M610和M620 M6(裝置型號)
本文檔中的資訊基於受控實驗室環境中具有預設配置的裝置。如果您的網路正在作用,請謹慎操作,並在繼續操作之前透徹瞭解任何指令可能造成的影響。
背景資訊
大多數安全惡意軟體分析裝置連線到網際網路並使用線上更新流程。但是,某些裝置嚴格維護在內部網路內(氣隙)。 思科不建議使用此方法,因為它會降低有效性。本指南為必須維護氣隙裝置的使用者提供離線更新過程。
對於離線安全惡意軟體分析更新,思科將根據請求提供更新媒體。按照本文檔中介紹的離線更新流程進行操作。
媒體:Airgap(離線)更新介質由安全惡意軟體分析支援根據請求提供。這是一個ISO檔案,可以複製到USB驅動器或HDD(具有足夠的大小)。
大小:更新介質的大小因支援的版本而異,並且隨著新虛擬機器的引入而顯著增加。 對於當前版本, 大小約為30 GB,包括反同步工具, 它支援與虛擬機器相關的更改的增量更新。
升級啟動週期:每次引導airgap更新介質時,它都會確定要升級到的下一個版本,並將與該下一個版本相關的內容複製到裝置上。如果給定版本沒有任何在裝置運行時必須運行的前提條件檢查,則該版本還可以啟動軟體包安裝。如果版本包括此類檢查或對更新過程中可能新增此類檢查的部分進行覆蓋,則直到使用者登入到OpAdmin並使用OpAdmin > Operations > Update Appliance呼叫更新後,更新才會實際應用。
安裝前掛鉤:根據特定升級是否存在任何安裝前掛接,它會立即運行升級,或者將裝置重新引導回其常規操作模式,以允許使用者進入常規管理介面並開始手動升級。
根據需要重複:因此,每個這樣的介質啟動週期僅向最終目標版本升級(或準備升級)一個步驟;使用者必須開機多少次,才能升級至所需的目的地版本。
限制
氣隙更新不支援CIMC介質。
由於使用的第三方元件的許可限制,在UCS M3硬體達到EOL(壽命終止)後,1.x版本的升級介質不再可用。 因此,在EOL之前更換或升級UCS M3裝置至關重要。
需求
遷移:如果所涵蓋版本的發行說明中包括必須在安裝下一個版本之前進行遷移的情形,則使用者必須執行這些步驟,然後才能再次重新啟動,以避免其裝置進入不可用狀態。
注意:第一個2.1.x版本比2.1.4版本更新,它運行多個資料庫遷移。在這些遷移完成之前繼續操作是不安全的。有關詳細資訊,請參閱Threat Grid裝置2.1.5遷移說明。
如果從2.1.3之前的版本開始,airgap升級介質使用從單個許可證衍生的加密金鑰,因此需要根據每個裝置進行自定義。(唯一可由使用者看到的效果是,如果介質是為支援2.1.3之前的源版本而構建的,安全惡意軟體分析需要事先在這些裝置上安裝許可證,而介質在清單中未為其構建的裝置上無法使用。)
如果從2.1.3版或其後開始,則airgap介質是通用的,不需要客戶資訊。
開始之前
- 備份。繼續進行更新之前,必須考慮備份裝置。
- 檢視發行版的發行說明進行更新,以驗證在計畫更新到較新發行版之前,是否需要進行任何後台遷移
- 驗證裝置的當前版本:OpAdmin > Operations > Update Appliance
- 檢視「內部版本號/版本查詢表」中的Secure Malware Analytics裝置版本歷史記錄,該表在所有Threat Grid裝置文檔中均可用:發行說明、遷移說明、設定和配置指南以及管理員指南。
更新離線(Airgapped)安全惡意軟體分析裝置
首先檢查此頁上的可用空隙版本:裝置版本查詢表
1.開啟TAC支援請求以獲取離線更新媒體。此請求應包括裝置序列號以及裝置內部版本號。
2. TAC支援根據您的安裝提供更新的ISO。
3.將ISO映像燒錄到可引導的USB中。請注意,USB是唯一支援離線更新的裝置/方法。
命名約定
這是更新的檔名,例如:TGA Airgap更新2.16.2-2.17.2。
這意味著此介質可用於運行最低版本的裝置:2.16.2並將裝置升級到版本:2.17.2 .
限制
- 氣隙更新不支援CIMC介質。
- 由於使用的第三方元件的許可限制,在UCS M3硬體達到EOL(壽命終止)後,1.x版本的升級介質不再可用。 因此,在EOL之前更換或升級UCS M3裝置至關重要。
Linux/MAC - ISO下載
需求
思科建議您瞭解以下主題:
- 可以訪問網際網路的Linux電腦下載ISO並建立可引導的USB安裝驅動器。
- Airgap下載說明由安全惡意軟體分析支援提供。
- GO程式語言。下載
- .caibx索引檔案(包含在TAC支援部門提供的zip檔案中)。
- 取消同步工具(包含在安全惡意軟體分析支援提供的zip檔案中)。
採用元件
本文檔中的資訊基於基於Linux的作業系統(例如:CentOS、RedHat)。
本文檔中的資訊基於受控實驗室環境中具有預設配置的裝置。如果您的網路正在作用,請謹慎操作,並在繼續操作之前透徹瞭解任何指令可能造成的影響。
設定
安裝GO程式語言
# wget https://go.dev/dl/go1.23.1.linux-amd64.tar.gz
# tar -xzf go1.23.1.linux-amd64.tar.gz
# mv go /usr/local
安裝後運行這三個命令(如果不是desync命令失敗)
# export GOROOT=/usr/local/go
# export GOPATH=$HOME/Projects/Proj1
# export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
您可以通過以下方式驗證GO版本:
# go version
使用Desync命令下載ISO
步驟1.將Secure Malware Analytics Support提供的Zip檔案的內容(包括desync.linux和.caibx檔案)複製到電腦上本地的同一目錄中。
步驟2.更改到儲存檔案的目錄:
範例:
# cd MyDirectory/TG
步驟3.運行pwd命令以確保您位於目錄內。
# pwd
步驟4.進入包含desync.linux 命令和.caibx 檔案的目錄後,執行您選擇的命令以開始下載程式。
附註:以下是不同ISO版本的示例,請參考Secure Malware Analytics Support提供的說明中的.caibx檔案。
對於2.16.2到2.17.2 ISO版本:
# desync extract -k -s s3+https://s3.amazonaws.com/sma-appliance-airgap-update airgap-update-2.16.2ag-2.17.2.caibx airgap-update-2.16.2ag-2.17.2.iso
對於2.4.3.2到2.5 ISO版本:
# desync extract -k -s s3+https://s3.amazonaws.com/threatgrid-appliance-airgap-update airgap-update-2.4.3.2-2.5.caibx airgap-update-2.4.3.2-2.5.iso
對於2.5到2.7.2ag ISO版本:
# desync extract -k -s s3+https://s3.amazonaws.com/threatgrid-appliance-airgap-update airgap-update-2.5-2.7.2ag.caibx airgap-update-2.5-2.7.2ag.iso
下載開始後,會顯示一個進度條。
附註:您環境中的下載速度和升級介質的大小可能會影響構成ISO的時間。
請確保將下載檔案的MD5與支援提供的捆綁包中的可用檔案進行比較,以驗證下載的ISO的完整性。
下載完成後,ISO將在同一目錄中建立。
將USB插入電腦並運行dd命令以建立可引導的USB驅動器。
# dd if=airgap-update.iso of=/dev/<MY_USB> bs=64M
其中<MY_USB>是USB閃存檔的名稱(請去除尖括弧)。
插入USB驅動器並開啟或重新啟動裝置。在Cisco boot up螢幕上,按F6進入Boot Menu。
提示:
在辦公時間或非高峰時間運行下載,因為這可能會影響頻寬。
若要停止工具,請關閉終端機或按Ctrl+c/Ctrl+z。
若要繼續,請執行相同的命令以繼續下載。
Windows - ISO下載
安裝GO程式語言
- 下載所需的GO程式語言。安裝自 https://golang.org/dl/ 就我而言,我選擇特色版本。重新啟動CMD並使用
關閉並重新開啟CMD run命令以驗證:
go version
使用Desync命令下載ISO
- 安裝 DESYNC 工具。執行命令後,您可以注意到一堆下載提示。大約在2-3分鐘後,應完成下載。
go install github.com/folbricht/desync/cmd/desync@latest
In case desync is not working using above command then change directory to C drive and run this command:
git clone https://github.com/folbricht/desync.git
然後逐一運行以下兩個命令:
cd desync/cmd/desync
go install
- 導航至 go - > bin 位置.例如 C:\Users\<使用者名稱>\go\bin 並複製/貼上此處提供的TAC .caibx 索引檔案。
- (驗證)返回到CMD提示並導航到資料夾go\bin並運行下載命令。您應該立即看到下載過程。等待下載完成。您現在應該擁有所有 .ISO 檔案與先前複製的檔案位於同一位置 .caibx 索引檔案
\$HOME/go/bin/desync extract -k -s s3+https://s3.amazonaws.com/sma-appliance-airgap-update airgap-update-2.16.2ag-2.17.2.caibx airgap-update-2.16.2ag-2.17.2.iso
為了建立此特定的恢復USB,使用Rufus版本2.17至關重要,因為它允許您使用基本的dd選項。您可以在此儲存庫中找到所有RUFUS版本。
從USB啟動裝置
- 插入USB, 重新啟動裝置, 並快速在Cisco引導螢幕按F6以進入引導選單。
- 導航到包含更新的USB驅動器,然後按Enter鍵選擇。
更新介質確定升級路徑中的下一個版本,並將該版本的內容複製到裝置上。裝置可立即運行升級,或重新啟動至其常規操作模式,以允許您進入OpAdmin並手動啟動升級。
完成ISO引導過程後,將Secure Malware Analytics裝置重新引導回操作模式。
登入門戶UI並檢查是否有任何警告說明升級是否安全等,然後繼續。
- 導覽至OpAdmin介面並套用更新(如果更新在重新開機期間未自動套用):OpAdmin > Operations > Update Appliance注意:更新過程包括附加的重新引導,作為更新的一部分,更新由USB介質製成。例如,安裝更新後,必須使用安裝頁面上的Reboot按鈕。
根據需要對USB上的每個版本重複上述步驟。
如何查詢正確的/dev裝置
當USB仍然未連線到終端時,運行命令「lsblk | grep -iE 'disk|part'。
xsilenc3x@Alien15:~/testarea/usb$ lsblk | grep -iE 'disk|part'
sda 8:0 0 931.5G 0 disk
├─sda1 8:1 0 128M 0 part
└─sda2 8:2 0 931.4G 0 part /media/DATA
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 650M 0 part
├─nvme0n1p2 259:2 0 128M 0 part
├─nvme0n1p3 259:3 0 114.1G 0 part
├─nvme0n1p4 259:4 0 525M 0 part /boot
├─nvme0n1p5 259:5 0 7.6G 0 part [SWAP]
├─nvme0n1p6 259:6 0 38.2G 0 part /
├─nvme0n1p7 259:7 0 62.7G 0 part /home
├─nvme0n1p8 259:8 0 13.1G 0 part
└─nvme0n1p9 259:9 0 1.1G 0 part
xsilenc3x@Alien15:~/testarea/usb$
在連線USB介面之後。
xsilenc3x@Alien15:~/testarea/usb$ lsblk | grep -iE 'disk|part'
.sda 8:0 0 931.5G 0 disk
├─sda1 8:1 0 128M 0 part
└─sda2 8:2 0 931.4G 0 part /media/DATA
sdb 8:16 1 3.7G 0 disk
└─sdb1 8:17 1 3.7G 0 part /media/xsilenc3x/ARCH_201902 <--------- not observed when the USB was not connected
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 650M 0 part
├─nvme0n1p2 259:2 0 128M 0 part
├─nvme0n1p3 259:3 0 114.1G 0 part
├─nvme0n1p4 259:4 0 525M 0 part /boot
├─nvme0n1p5 259:5 0 7.6G 0 part [SWAP]
├─nvme0n1p6 259:6 0 38.2G 0 part /
├─nvme0n1p7 259:7 0 62.7G 0 part /home
├─nvme0n1p8 259:8 0 13.1G 0 part
└─nvme0n1p9 259:9 0 1.1G 0 part
xsilenc3x@Alien15:~/testarea/usb$
這確認/dev中的USB裝置為「/dev/sdb」。
其它確認方法,在連線USB線條後:
dmesg指令提供一些資訊。連線USB後,運行命令dmesg | grep -iE 'usb|attached'。
xsilenc3x@Alien15:~/testarea/usb$ dmesg | grep -iE 'usb|attached'
[842717.663757] usb 1-1.1: new high-speed USB device number 13 using xhci_hcd
[842717.864505] usb 1-1.1: New USB device found, idVendor=0781, idProduct=5567
[842717.864510] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[842717.864514] usb 1-1.1: Product: Cruzer Blade
[842717.864517] usb 1-1.1: Manufacturer: SanDisk
[842717.864519] usb 1-1.1: SerialNumber: 4C530202420924105393
[842717.865608] usb-storage 1-1.1:1.0: USB Mass Storage device detected
[842717.866074] scsi host1: usb-storage 1-1.1:1.0
[842718.898700] sd 1:0:0:0: Attached scsi generic sg1 type 0
[842718.922265] sd 1:0:0:0: [sdb] Attached SCSI removable disk <-------
xsilenc3x@Alien15:~/testarea/usb$
fidsk命令提供有關大小的資訊,可用於確認:sudo fdisk -l /dev/sdb。
xsilenc3x@Alien15:~/testarea/usb$ sudo fdisk -l /dev/sdb
Disk /dev/sdb: 3.7 GiB, 4004511744 bytes, 7821312 sectors <-------
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x63374e06
Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 0 675839 675840 330M 0 Empty
/dev/sdb2 116 8307 8192 4M ef EFI (FAT-12/16/32)
xsilenc3x@Alien15:~/testarea/usb$
附註:請記住,在執行「dd」命令之前解除安裝USB。
確認示例中的USB裝置已裝入。
xsilenc3x@Alien15:~/testarea/usb$ sudo mount -l | grep -i sdb
/dev/sdb1 on /media/xsilenc3x/ARCH_201902 type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2) [ARCH_201902]
要解除安裝USB裝置,請使用sudo umount /dev/sdb1。
xsilenc3x@Alien15:~/testarea/usb$ sudo umount /dev/sdb1
重新檢查裝置是否被視為「已裝載」。
xsilenc3x@Alien15:~/testarea/usb$ sudo mount -l | grep -i sdb
status=progress選項
dd 命令中的oflag=sync和status=progress選項。
寫入大量資料塊時,「status=progress」選項提供當前寫入操作的資訊。這有助於確認「dd」命令當前是否正在寫入頁面快取;它可用於顯示所有寫入操作的進度以及完整時間量(以秒為單位)。
不使用時,「dd」不提供有關進度資訊,在「dd」返回之前僅提供寫入操作的結果:
[rootuser@centos8-01 tga-airgap]$ dd if=/dev/zero of=testfile.txt bs=1M count=8192
8192+0 records in
8192+0 records out
8589934592 bytes (8.6 GB, 8.0 GiB) copied, 5.03493 s, 1.7 GB/s
[rootuser@centos8-01 tga-airgap]$
使用時,每秒更新關於寫入操作的即時資訊。
[rootuser@centos8-01 tga-airgap]$ dd if=/dev/zero of=testfile.txt bs=1M count=8192 status=progress
8575254528 bytes (8.6 GB, 8.0 GiB) copied, 8 s, 1.1 GB/s <----------------
8192+0 records in
8192+0 records out
8589934592 bytes (8.6 GB, 8.0 GiB) copied, 8.03387 s, 1.1 GB/s
[rootuser@centos8-01 tga-airgap]
附註:在TGA離線升級過程的正式文檔中,通知的命令是:dd if=airgap-update.iso of=/dev/<MY_USB> bs=64M
經過一些測試後,出現以下示例。
使用裝置/dev/zero建立帶有「dd」的10MB的檔案後。
1M x 10 = 10M(10240 kB +髒檔案頁面快取中的上一個系統資料= 10304 kB —>這是在「dd」末尾的髒頁面快取中感知到的資料)。
[rootuser@centos8-2 testarea]$ cat /proc/meminfo | grep -iE 'dirty' && dd if=/dev/zero of=testfile.txt bs=1M \
count=10 status=progress && cat /proc/meminfo | grep -iE 'dirty' && date +%s
Dirty: 92 kB
10+0 records in
10+0 records out
10485760 bytes (10 MB, 10 MiB) copied, 0.0138655 s, 756 MB/s
Dirty: 10304 kB <----- dirty page cache after "dd" returned | data still to be written to the block device
1633260775 <---- epoch time
[rootuser@centos8-2 testarea]$ cat /proc/meminfo | grep -iE 'dirty' && date +%s
Dirty: 10372 kB
1633260778
[rootuser@centos8-2 testarea]$ cat /proc/meminfo | grep -iE 'dirty' && date +%s
Dirty: 10380 kB
1633260779
[rootuser@centos8-2 testarea]$ cat /proc/meminfo | grep -iE 'dirty' && date +%s
Dirty: 10404 kB
1633260781
[rootuser@centos8-2 testarea]$ cat /proc/meminfo | grep -iE 'dirty' && date +%s
Dirty: 10412 kB
1633260782
[rootuser@centos8-2 testarea]$ cat /proc/meminfo | grep -iE 'dirty' && date +%s
Dirty: 10424 kB
1633260783
[rootuser@centos8-2 testarea]$ cat /proc/meminfo | grep -iE 'dirty' && date +%s
Dirty: 10436 kB
1633260785
[rootuser@centos8-2 testarea]$ cat /proc/meminfo | grep -iE 'dirty' && date +%s
Dirty: 0 kB <--- data in the dirty page cache flushed = written to the block device
1633260786 <---- epoch time
[rootuser@centos8-2 testarea]$
```
1633260786 - 1633260775 = 11 seconds
附註:返回「dd」命令後,對塊裝置的寫入操作未完成,在返回11秒後發現該操作。
如果這是使用TGA ISO建立可引導USB時的「dd」命令,並且我在這11秒之前從終端上刪除了USB =我在可引導USB中會有一個損壞的ISO。
說明:
塊裝置提供對硬體裝置的緩衝訪問。這在使用硬體裝置時為應用程式提供了一層抽象。
塊裝置允許應用通過不同大小的資料塊進行讀/寫;此read()/writes()應用於頁面快取(緩衝區),而不是直接應用於塊裝置。
核心(而不是執行讀/寫操作的應用程式)管理資料從緩衝區(頁面快取)到塊裝置的移動。
因此:
如果應用程式未接到指令,則它無法控制緩衝區的刷新(本例中為「dd」)。
選項「oflag=sync」會在每個輸出塊(由「dd」提供)置於頁面快取中之後強制進行同步物理寫入(由核心執行)。
與不使用選項相比,oflag=sync會降低「dd」效能;但是,如果啟用,它將確保在從「dd」發出的每個write()呼叫之後對塊裝置進行物理寫入。
測試:使用「dd」命令的「oflag=sync」選項,確認在返回「dd」命令時已完成對髒頁快取資料執行的所有寫入操作:
[rootuser@centos8-2 testarea]$ cat /proc/meminfo | grep -iE 'dirty' && dd if=/dev/zero of=testfile.txt bs=1M \
count=10 oflag=sync status=progress && cat /proc/meminfo | grep -iE 'dirty' && date +%s
Dirty: 60 kB
10+0 records in
10+0 records out
10485760 bytes (10 MB, 10 MiB) copied, 0.0841956 s, 125 MB/s
Dirty: 68 kB <---- No data remaining in the dirty page cache after "dd" returned
1633260819
[rootuser@centos8-2 testarea]$ cat /proc/meminfo | grep -iE 'dirty' && date +%s
Dirty: 36 kB
1633260821
[rootuser@centos8-2 testarea]$
髒頁快取中的寫入操作沒有保留任何資料。
寫操作在返回「dd」命令之前(或同一時刻)應用(而不是與上一個測試一樣返回11秒)。
現在,我確信在返回「dd」命令後,髒頁快取中沒有與寫入操作相關的資料=在引導式USB建立過程中沒有問題(如果ISO校驗和正確)。
附註:處理此類情況時,請考慮「dd」命令的此標誌(oflag=sync)。
用於離線升級的硬碟驅動器的啟動順序
需求:
我們需要確保使用「DD」選項使用任何可用工具格式化硬碟,之後將介質複製到驅動器。如果不使用此格式,將無法讀取此媒體。
一旦使用「DD」格式將介質載入到HDD/USB上,我們需要將其連線到TGA裝置並重新啟動裝置。
這是預設的「Boot Menu(啟動選單)」選擇螢幕。我們需要按「F6」引導裝置以選擇引導介質
裝置識別我們的輸入後,會提示裝置進入引導選擇選單。
這是在不同的TGA型號之間可能不同的提示。理想情況下,我們可能會看到使用此選單本身中的引導介質(升級檔案系統)進行引導的選項,但如果看不到此選項,我們需要登入到「EFI外殼」。
在「startup.sh」指令碼完成之前,您必須按「ESC」才能移入EFI Shell。登入到EFI Shell後,我們會注意到在此情況下檢測到的分割槽是3個檔案系統:fs0:、fs1:、fs2。
重要
標識正確的檔案系統:
- 根據上面的螢幕截圖,您可以看到「fs0:」是唯一路徑中包含「USB」的介質,因此我們可以確信此檔案系統將包含啟動介質(升級檔案系統)。
如果缺少檔案系統:
- 如果僅fs0:和fs1:可用,但沒有fs2:,請確認引導介質(升級檔案系統)是否在dd模式下寫入並成功連線。
- 啟動介質(升級檔案系統)的數量應始終低於恢復介質,並且它們應始終緊挨著;USB連線的驅動器是否位於末端開始處這一點可能會改變(因此,它是否位於fs0:或fs2:處的後部位置需要標識
- 在本例中,在下面的螢幕截圖中,它是正確的「.efi」檔案,因為它位於「\efi\boot」分割槽下,並且具有「bootx64.efi」命名約定
要在引導介質(升級檔案系統)中引導裝置,必須執行「bootx64.efi」檔案:
fs0:\efi\boot\bootx64.efi
為了便於您參考,我們已在下面顯示了其他檔案系統的內容:
fs1:這是主引導檔案系統。
fs2:這是恢復映像啟動檔案系統。
其他說明:
驗證包含已裝載的引導介質的正確檔案系統。我們可以通過瀏覽不同的檔案系統並驗證「.efi」引導檔案來做到這一點
附註:實際啟動介質(升級檔案系統)的順序(在本例中為「fs0:」)也可能因其他裝置而異。
名稱和路徑可能會有所不同,但在所有現代影象中,這應該是相同的。
有助於找到正確引導介質(升級檔案系統)的核對表:
- 如果檔案系統的根目錄包含「vmlinuz-appliance」,則它不是引導介質(升級檔案系統)。
- 如果檔案系統的根目錄包含「meta_contents.tar.xz」,則它不是引導介質(升級檔案系統)。
- 如果檔案系統不包含「efi\boot\bootx64.efi」,則它不是啟動介質(升級檔案系統)。