クイック スタート: Azure CLI を使用して Defender for IoT Firmware Analysis にファームウェア イメージをアップロードする

この記事では、Azure CLI を使用してファームウェア イメージを Defender for IoT Firmware Analysis にアップロードする方法について説明します。

Defender for IoT Firmware Analysis は、ファームウェア イメージを分析し、ファームウェア イメージのセキュリティの脆弱性を理解できるようにするツールです。

前提条件

このクイック スタートでは、Defender for IoT Firmware Analysis の基本的な理解ができていることを前提としています。 詳細については、「デバイス ビルダーのファームウェア分析」を参照してください。 サポートされているファイル システムの一覧については、「Defender for IoT ファームウェア分析についてよく寄せられる質問」を参照してください。

Azure CLI 用の環境を準備する

  • Azure CLI をローカルで実行するには、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

  • az login コマンドを使用して、Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。

  • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

    • 次のコマンドを実行して、Defender for IoT Firmware Analysis をインストールします。
      az extension add --name firmwareanalysis
      
  • インストールされているバージョンおよび依存ライブラリを検索するには、az version コマンドを実行します。 最新バージョンにアップグレードするには、az upgrade コマンドを実行します。

  • サブスクリプションを Defender for IoT Firmware Analysis にオンボードします。

  • az account set コマンドを実行して、ファームウェア イメージをアップロードする適切なサブスクリプション ID を選択します。

ワークスペースにファームウェア イメージをアップロードする

  1. アップロードするファームウェア イメージを作成します。 リソース グループ名、サブスクリプション ID、ワークスペース名をそれぞれのパラメーターに挿入します。

    az firmwareanalysis firmware create --resource-group myResourceGroup --subscription 123e4567-e89b-12d3-a456-426614174000 --workspace-name default
    

このコマンドの出力には、ファームウェア ID である name プロパティが含まれています。 次のコマンドで使用できるように、この ID を保存します。

  1. 次の手順で使用する SAS URL を生成して、ファームウェア イメージを Azure Storage に送信します。 sampleFirmwareID を、前の手順で保存したファームウェア ID に置き換えます。 SAS URL を変数に格納することで、次回以降のコマンドで簡単にアクセスできできるようになります:

    $sasURL = $(az firmwareanalysis workspace generate-upload-url --resource-group myResourceGroup --subscription 123e4567-e89b-12d3-a456-426614174000 --workspace-name default --firmware-id sampleFirmwareID --query "url")
    
  2. ファームウェア イメージを Azure Storage にアップロードします。 パスを含む pathToFile を、ローカル コンピューターのファームウェア イメージに置き換えます。

    az storage blob upload -f pathToFile --blob-url $sasURL
    

これらのコマンドを使用してファームウェア イメージを作成およびアップロードするワークフローの例を示します。 CLI コマンドでの変数の使用方法の詳細については、「Azure CLI のコマンドで変数を使用する方法」をご覧ください。

$filePath='/path/to/image'
$resourceGroup='myResourceGroup'
$workspace='default'

$fileName='file1'
$vendor='vendor1'
$model='model'
$version='test'

$FWID=$(az firmwareanalysis firmware create --resource-group $resourceGroup --workspace-name $workspace --file-name $fileName --vendor $vendor --model $model --version $version --query "name")

$URL=$(az firmwareanalysis workspace generate-upload-url --resource-group $resourceGroup --workspace-name $workspace --firmware-id $FWID --query "url")

$OUTPUT=(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 (1 時間) です。 大きなイメージは分析に時間がかかる場合があるため、必要に応じて --timeout パラメーターを使用してタイムアウトを設定できます。 ファームウェアを作成し、$FWID という変数にファームウェア ID を格納していると仮定して、az resource wait コマンドを --timeout パラメータと共に使用して、分析の状態の確認を自動化する例を次に示します。

$ID=$(az firmwareanalysis firmware show --resource-group $resourceGroup --workspace-name $workspace --firmware-id $FWID --query "id")

Write-Host (‘Successfully created a firmware image with the firmware ID of ‘ + $FWID + ‘, recognized in Azure by this resource ID: ‘ + $ID + ‘.’)

$WAIT=$(az resource wait --ids $ID --custom "properties.status=='Ready'" --timeout 10800) 

$STATUS=$(az resource show --ids $ID --query 'properties.status')

Write-Host ('Firmware analysis completed with status: ' + $STATUS)

分析状態が "準備完了" であることを確認したら、結果をプルするためのコマンドを実行できます。

SBOM

次のコマンドでは、ファームウェア イメージで SBOM を取得します。 各引数を、リソース グループ、サブスクリプション、ワークスペース名、ファームウェア ID の適切な値に置き換えます。

az firmwareanalysis firmware sbom-component --resource-group myResourceGroup --subscription 123e4567-e89b-12d3-a456-426614174000 --workspace-name default --firmware-id sampleFirmwareID

弱点

次のコマンドでは、ファームウェア イメージで見つかった CVE を取得します。 各引数を、リソース グループ、サブスクリプション、ワークスペース名、ファームウェア ID の適切な値に置き換えます。

az firmwareanalysis firmware cve --resource-group myResourceGroup --subscription 123e4567-e89b-12d3-a456-426614174000 --workspace-name default --firmware-id sampleFirmwareID

バイナリのセキュリティ強化

次のコマンドでは、ファームウェア イメージでセキュリティを強化したバイナリの分析結果を取得します。 各引数を、リソース グループ、サブスクリプション、ワークスペース名、ファームウェア ID の適切な値に置き換えます。

az firmwareanalysis firmware binary-hardening --resource-group myResourceGroup --subscription 123e4567-e89b-12d3-a456-426614174000 --workspace-name default --firmware-id sampleFirmwareID

パスワード ハッシュ

次のコマンドは、ファームウェア イメージのパスワード ハッシュを取得します。 各引数を、リソース グループ、サブスクリプション、ワークスペース名、ファームウェア ID の適切な値に置き換えます。

az firmwareanalysis firmware password-hash --resource-group myResourceGroup --subscription 123e4567-e89b-12d3-a456-426614174000 --workspace-name default --firmware-id sampleFirmwareID

証明書

次のコマンドでは、ファームウェア イメージで見つかった脆弱な暗号化証明書を取得します。 各引数を、リソース グループ、サブスクリプション、ワークスペース名、ファームウェア ID の適切な値に置き換えます。

az firmwareanalysis firmware crypto-certificate --resource-group myResourceGroup --subscription 123e4567-e89b-12d3-a456-426614174000 --workspace-name default --firmware-id sampleFirmwareID

キー

次のコマンドでは、ファームウェア イメージで見つかった脆弱な暗号化キーを取得します。 各引数を、リソース グループ、サブスクリプション、ワークスペース名、ファームウェア ID の適切な値に置き換えます。

az firmwareanalysis firmware crypto-key --resource-group myResourceGroup --subscription 123e4567-e89b-12d3-a456-426614174000 --workspace-name default --firmware-id sampleFirmwareID