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

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

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

前提条件

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

Azure PowerShell の環境を準備する

  • Azure PowerShell をインストールするか、Azure Cloud Shell を使用します

  • Connect-AzAccount コマンドを実行して Azure PowerShell にサインインします。 Cloud Shell を使用する場合は、この手順をスキップしてください。

  • Defender for IoT Firmware Analysis の Azure PowerShell を初めて使用する場合は、拡張機能をインストールします。

    Find-Module -Name Az.FirmwareAnalysis | Install-Module
    
  • サブスクリプションを Defender for IoT Firmware Analysis にオンボードします。

  • Set-AzContext を実行して、現在のセッションで使用するサブスクリプションを設定します。 ファームウェア イメージをアップロードするサブスクリプションを選択します。

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

  1. アップロードするファームウェア イメージを作成します。 リソース グループ名、ワークスペース名、および組み込むファームウェア イメージに関する追加の詳細をそれぞれのパラメーター (DescriptionFileNameVendorModelVersion など) に挿入します。

    New-AzFirmwareAnalysisFirmware -ResourceGroupName myResourceGroup -WorkspaceName default -Description 'sample description' -FileName file -Vendor vendor -Model model -Version version
    

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

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

    $sasUrl = New-AzFirmwareAnalysisWorkspaceUploadUrl -FirmwareId sampleFirmwareID -ResourceGroupName myResourceGroup -WorkspaceName default
    
  2. 次のスクリプトを使用して、ファームウェア イメージを Azure Storage にアップロードします。 パスを含む 'pathToFile' を、ローカル コンピューターのファームウェア イメージに置き換えます。 パスを引用符で囲みます。

    $uri = [System.Uri] $sasURL.Url
    $storageAccountName = $uri.DnsSafeHost.Split(".")[0]
    $container = $uri.LocalPath.Substring(1)
    $containerName, $blob = $container -split '/', 2
    $sasToken = $uri.Query
    $filePath = 'pathToFile'
    $storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -SasToken $sasToken
    Set-AzStorageBlobContent -File $filePath -Container $containerName -Context $storageContext -Blob $blob -Force
    

Azure PowerShell コマンドを使用してファームウェア イメージを作成およびアップロードする、エンドツーエンドのワークフローの例を示します。 環境を反映するために、最初に設定された変数の値を置き換えます。

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

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

$FWID = (New-AzFirmwareAnalysisFirmware -ResourceGroupName $resourceGroup -WorkspaceName $workspace -FileName $fileName -Vendor $vendor -Model $model -Version $version).Name

$sasUrl = New-AzFirmwareAnalysisWorkspaceUploadUrl -FirmwareId $FWID -ResourceGroupName $resourceGroup -WorkspaceName $workspace

$uri = [System.Uri] $sasURL.Url
$storageAccountName = $uri.DnsSafeHost.Split(".")[0]
$container = $uri.LocalPath.Substring(1)
$containerName, $blob = $container -split '/', 2
$sasToken = $uri.Query
$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -SasToken $sasToken
Set-AzStorageBlobContent -File $filePath -Container $containerName -Context $storageContext -Blob $blob -Force

ファームウェア分析の結果を取得する

ファームウェア分析結果を取得するには、分析の状態が "準備完了" であることを確認する必要があります。 sampleFirmwareID をファームウェア ID で、myResourceGroup をリソース グループ名で、default をワークスペース名で置き換えます。

Get-AzFirmwareAnalysisFirmware -FirmwareId sampleFirmwareID -ResourceGroupName myResourceGroup -WorkspaceName default

"状態" フィールドに "準備完了 "と表示されていることを確認し、それぞれのコマンドを実行してファームウェア分析の結果を取得します。

分析の状態を確認するプロセスを自動化する場合は、次のスクリプトを使用して、"準備完了" に達するまでリソースの状態を定期的に確認できます。 イメージのサイズに応じて $timeoutInSeconds 変数を設定できます。イメージが大きくなるほど、分析にかかる時間が長くなる場合があるため、必要に応じてこの変数を調整します。

$ID = Get-AzFirmwareAnalysisFirmware -ResourceGroupName $resourceGroup -WorkspaceName default -FirmwareId $FWID | Select-Object -ExpandProperty Id

Write-Host "Successfully created a firmware image, recognized in Azure by this resource id: $ID."

$timeoutInSeconds = 10800
$startTime = Get-Date

while ($true) {
    $resource = Get-AzResource -ResourceId $ID
    $status = $resource.Properties.Status

    if ($status -eq 'ready') {
        Write-Host "Firmware analysis completed with status: $status"
        break
    }

    $elapsedTime = (Get-Date) - $startTime
    if ($elapsedTime.TotalSeconds -ge $timeoutInSeconds) {
        Write-Host "Timeout reached. Firmware analysis status: $status"
        break
    }

    Start-Sleep -Seconds 10
}

SBOM

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

Get-AzFirmwareAnalysisSbomComponent -FirmwareId sampleFirmwareID -ResourceGroupName myResourceGroup -WorkspaceName default

弱点

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

Get-AzFirmwareAnalysisCve -FirmwareId sampleFirmwareID -ResourceGroupName myResourceGroup -WorkspaceName default 

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

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

Get-AzFirmwareAnalysisBinaryHardening -FirmwareId sampleFirmwareID -ResourceGroupName myResourceGroup -WorkspaceName default 

パスワード ハッシュ

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

Get-AzFirmwareAnalysisPasswordHash -FirmwareId sampleFirmwareID -ResourceGroupName myResourceGroup -WorkspaceName default 

証明書

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

Get-AzFirmwareAnalysisCryptoCertificate -FirmwareId sampleFirmwareID -ResourceGroupName myResourceGroup -WorkspaceName default 

キー

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

Get-AzFirmwareAnalysisCryptoKey -FirmwareId sampleFirmwareID -ResourceGroupName myResourceGroup -WorkspaceName default