本文說明如何使用 Azure CLI 將韌體映像上傳至韌體分析。
韌體分析是一種工具,可分析韌體映像,並讓您了解韌體映像中的安全性弱點。
先決條件
本快速入門假設您對韌體分析有基本的了解。 如需詳細資訊,請參閱裝置建立器的韌體分析。 如需支援的檔案系統清單,請參閱韌體分析的常見問題。
備妥環境以使用 Azure CLI
安裝 Azure CLI 以在本機執行 CLI 命令。 若您在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱如何在 Docker 容器中執行 Azure CLI。
使用 az login 命令來登入 Azure CLI。 依照終端機中顯示的步驟完成驗證程序。 如需其他登入選項,請參閱使用 Azure CLI 登入。
出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能詳細資訊,請參閱使用 Azure CLI 擴充功能。
- 執行下列命令以安裝韌體分析延伸模組:
az extension add --name firmwareanalysis
- 執行下列命令以安裝韌體分析延伸模組:
若要尋找已安裝的版本和相依程式庫,請執行 az version。 若要升級至最新版本,請執行命令 az upgrade。
將您的訂用帳戶上線至韌體分析。
執行 az account set 命令,以選取要上傳韌體映像的適當訂用帳戶識別碼。
將韌體映像上傳至工作區
產生 GUID 以用作唯一的韌體識別碼。 例如:
python -c "import uuid; print(uuid.uuid4())"
在後續示例中使用命令的輸出作為韌體ID
建立要上傳的韌體映像。 將資源群組名稱、訂用帳戶識別碼和工作區名稱插入個別參數中。
az firmwareanalysis firmware create --resource-group myResourceGroup --subscription 123e4567-e89b-12d3-a456-426614174000 --workspace-name default --firmware-id {firmware ID from command above} --vendor {vendor name} --model {model name} --version {version number}
此命令的輸出包含 name 屬性,也就是您的韌體識別碼。
儲存下一個命令的這個識別碼。
產生 SAS URL,以便在下一個步驟中用來將韌體映像傳送至 Azure 儲存體。 將取代
sampleFirmwareID為您在上一個步驟儲存的韌體識別碼。 您可以將 SAS URL 儲存在變數中,以便日後存取命令:set resourceGroup=myResourceGroup set subscription=123e4567-e89b-12d3-a456-426614174000 set workspace=default set firmwareID=sampleFirmwareID for /f "tokens=*" %i in ('az firmwareanalysis workspace generate-upload-url --resource-group %resourceGroup% --subscription %subscription% --workspace-name %workspace% --firmware-id %firmwareID% --query "url"') do set sasURL=%i將您的韌體映像上傳至 Azure 儲存體。 將取代
pathToFile為韌體映像在您本機電腦上的路徑。az storage blob upload -f "pathToFile" --blob-url %sasURL%
以下是如何使用這些命令來建立和上傳韌體映像的範例工作流程。 若要深入了解如何在 CLI 命令中使用變數,請瀏覽如何在 Azure CLI 命令中使用變數:
set filePath="/path/to/image"
set resourceGroup="myResourceGroup"
set workspace="default"
set fileName="file1"
set vendor="vendor1"
set model="model"
set version="test"
for /f "tokens=*" %i in ('az firmwareanalysis firmware create --resource-group %resourceGroup% --workspace-name %workspace% --file-name %fileName% --vendor %vendor% --model %model% --version %version% --query "name"') do set FWID=%i
for /f "tokens=*" %i in ('az firmwareanalysis workspace generate-upload-url --resource-group %resourceGroup% --workspace-name %workspace% --firmware-id %FWID% --query "url"') do set URL=%i
az storage blob upload -f %filePath% --blob-url %URL%
擷取韌體分析結果
若要擷取韌體分析結果,您必須確定分析的狀態為「就緒」:
az firmwareanalysis firmware show --firmware-id sampleFirmwareID --resource-group myResourceGroup --workspace-name default
確認 [狀態] 欄位顯示 [就緒],然後執行下列命令擷取韌體分析結果。
如果您想要將檢查分析狀態的程序自動化,您可以使用 az resource wait 命令。
az resource wait 命令具有 --timeout 參數,代表分析若未在逾時範圍內達到「就緒狀態」就會結束的秒數。 預設逾時為 3600,也就是一小時。 大型映像可能需要較長的時間進行分析,因此您可以根據需求使用 --timeout 參數來設定逾時。 以下範例說明如何使用 az resource wait 命令搭配 --timeout 參數來自動檢查分析的狀態;假設您建立了一個韌體,並將韌體識別碼儲存在名為 $FWID 的變數中:
set resourceGroup="myResourceGroup"
set workspace="default"
set FWID="yourFirmwareID"
for /f "tokens=*" %i in ('az firmwareanalysis firmware show --resource-group %resourceGroup% --workspace-name %workspace% --firmware-id %FWID% --query "id"') do set ID=%i
echo Successfully created a firmware image with the firmware ID of %FWID%, recognized in Azure by this resource ID: %ID%.
for /f "tokens=*" %i in ('az resource wait --ids %ID% --custom "properties.status=='Ready'" --timeout 10800') do set WAIT=%i
for /f "tokens=*" %i in ('az resource show --ids %ID% --query "properties.status"') do set STATUS=%i
echo firmware analysis completed with status: %STATUS%
確認分析狀態為「就緒」之後,您可以執行命令以提取結果。
韌體摘要
下列命令會擷取韌體分析結果的一般摘要。 將每個引數取代為資源群組、工作區名稱和韌體識別碼的適當值。
az firmwareanalysis firmware summary --resource-group myResourceGroup --workspace-name default --firmware-id 123e4567-e89b-12d3-a456-426614174000 --summary-type Firmware
SBOM
下列命令會擷取韌體映像中的 SBOM。 將每個引數取代為資源群組、訂用帳戶、工作區名稱和韌體識別碼的適當值。
az firmwareanalysis firmware sbom-component --resource-group myResourceGroup --subscription 123e4567-e89b-12d3-a456-426614174000 --workspace-name default --firmware-id sampleFirmwareID
弱點
下列命令會擷取在韌體映像中找到的 CVE。 將每個引數取代為資源群組、訂用帳戶、工作區名稱和韌體識別碼的適當值。
az firmwareanalysis firmware cve --resource-group myResourceGroup --subscription 123e4567-e89b-12d3-a456-426614174000 --workspace-name default --firmware-id sampleFirmwareID
如需 CVE 的摘要,請執行下列命令:
az firmwareanalysis firmware summary --resource-group myResourceGroup --workspace-name default --firmware-id 123e4567-e89b-12d3-a456-426614174000 --summary-type CommonVulnerabilitiesAndExposures
二進位強化
下列命令會擷取韌體映像中的二進位強化分析結果。 將每個引數取代為資源群組、訂用帳戶、工作區名稱和韌體識別碼的適當值。
az firmwareanalysis firmware binary-hardening --resource-group myResourceGroup --subscription 123e4567-e89b-12d3-a456-426614174000 --workspace-name default --firmware-id sampleFirmwareID
如需二進位強化結果的摘要,請執行下列命令:
az firmwareanalysis firmware summary --resource-group myResourceGroup --workspace-name default --firmware-id 123e4567-e89b-12d3-a456-426614174000 --summary-type BinaryHardening
密碼雜湊
下列命令會擷取韌體映像中的密碼雜湊。 將每個引數取代為資源群組、訂用帳戶、工作區名稱和韌體識別碼的適當值。
az firmwareanalysis firmware password-hash --resource-group myResourceGroup --subscription 123e4567-e89b-12d3-a456-426614174000 --workspace-name default --firmware-id sampleFirmwareID
憑證
下列命令會擷取在韌體映像中找到的易受攻擊密碼編譯憑證。 將每個引數取代為資源群組、訂用帳戶、工作區名稱和韌體識別碼的適當值。
az firmwareanalysis firmware crypto-certificate --resource-group myResourceGroup --subscription 123e4567-e89b-12d3-a456-426614174000 --workspace-name default --firmware-id sampleFirmwareID
如需憑證的摘要,請執行下列命令:
az firmwareanalysis firmware summary --resource-group myResourceGroup --workspace-name default --firmware-id 123e4567-e89b-12d3-a456-426614174000 --summary-type CryptoCertificate
索引鍵
下列命令會擷取在韌體映像中找到的易受攻擊密碼編譯金鑰。 將每個引數取代為資源群組、訂用帳戶、工作區名稱和韌體識別碼的適當值。
az firmwareanalysis firmware crypto-key --resource-group myResourceGroup --subscription 123e4567-e89b-12d3-a456-426614174000 --workspace-name default --firmware-id sampleFirmwareID
如需金鑰的摘要,請執行下列命令:
az firmwareanalysis firmware summary --resource-group myResourceGroup --workspace-name default --firmware-id 123e4567-e89b-12d3-a456-426614174000 --summary-type CryptoKey