PowerShellでWindows Defender ATPの検知結果を自動収集しレポートを生成する方法

PowerShellを利用してWindows Defender ATP(Advanced Threat Protection)の検知結果を効率的に収集し、レポートを自動生成する方法を解説します。本記事では、PowerShellスクリプトを使ったデータ取得から、加工、レポート作成、さらに自動化までのプロセスを網羅的に説明します。この手法により、セキュリティ管理者が検知結果を素早く把握し、対応の効率化を図ることが可能になります。Windows Defender ATPの持つ高いセキュリティ性能を最大限に活用し、現代の脅威に迅速かつ適切に対応するためのノウハウを提供します。

Windows Defender ATPとは


Windows Defender ATP(Advanced Threat Protection)は、Microsoftが提供するクラウドベースのエンドポイントセキュリティプラットフォームです。このサービスは、エンドポイント上の脅威を検知し、調査し、対応するための高度な機能を提供します。

主な機能

  • 脅威の検知: 機械学習や行動分析を活用し、マルウェアやゼロデイ攻撃を高精度で検知します。
  • インシデント対応: 侵害が発生した場合に、その影響範囲や発生源を迅速に特定するツールを提供します。
  • 脅威ハンティング: セキュリティチームが潜在的な脅威を能動的に探すためのクエリベースのインターフェースが含まれています。

利用目的


Windows Defender ATPは、次のような状況で利用されます。

  • 組織のエンドポイントにおける脅威の監視と管理
  • セキュリティインシデントの迅速な対応と復旧
  • セキュリティデータの統合分析と監視

PowerShellとの連携


Windows Defender ATPは、豊富なAPIを提供しており、PowerShellを活用することで、そのデータを効率的に収集し、カスタムスクリプトでの運用が可能です。この連携により、セキュリティ運用の自動化と効率化が大幅に向上します。

PowerShellによるスクリプト作成の基本

PowerShellは、Windows環境に標準搭載されている強力なスクリプト言語とシェル環境であり、システム管理やタスクの自動化に広く使用されています。本セクションでは、PowerShellスクリプトを作成するための基本知識と必要な準備について解説します。

PowerShellとは


PowerShellは、.NET環境上で動作し、コマンドラインシェルとしての機能に加え、高度なスクリプト言語としての機能を備えています。以下がその特徴です。

  • オブジェクトベースの設計:出力はテキストではなく、オブジェクトとして処理されます。
  • 豊富なコマンドレット:Get-Commandで利用可能なコマンドを確認できます。
  • 簡単な外部ツールとの連携:REST APIやCLIツールの操作が容易です。

PowerShellスクリプトの作成手順

  1. スクリプトファイルの作成
    PowerShellスクリプトは.ps1拡張子で保存されます。任意のテキストエディタ(例:Visual Studio Code、PowerShell ISE)を使用してファイルを作成できます。
  2. 実行ポリシーの確認
    スクリプトを実行する前に、PowerShellの実行ポリシーを適切に設定する必要があります。以下のコマンドで現在の設定を確認できます。
   Get-ExecutionPolicy


必要に応じて、実行ポリシーを変更します(管理者権限が必要です)。

   Set-ExecutionPolicy RemoteSigned
  1. 基本的なコマンドレットの活用
    PowerShellスクリプトには、次のようなコマンドレットが含まれます。
   Write-Output "Hello, PowerShell!" # メッセージの出力
   Get-Process                       # 実行中のプロセスのリストを取得

Windows Defender ATP APIを利用するための準備


Windows Defender ATPのデータにアクセスするためには、APIとの連携が必要です。以下の準備を行います。

  • API認証情報の取得: Microsoft Azureポータルからアプリケーション登録を行い、必要なAPIキーを取得します。
  • モジュールのインストール: APIの呼び出しを簡単にするために、Invoke-RestMethodInvoke-WebRequestを使用します。

スクリプトの実行方法


作成したスクリプトを実行するには、PowerShellターミナルで次のコマンドを入力します。

.\YourScriptName.ps1


スクリプトを自動化するために、タスクスケジューラと組み合わせることも可能です。

スクリプト作成のベストプラクティス

  • コメントを適切に追加して、スクリプトの目的や操作を明確にする。
  • エラーハンドリングを実装して、異常時に適切なメッセージを表示する。
  • セキュリティに配慮し、認証情報を安全に管理する。

このように、PowerShellの基本的なスクリプト作成を習得することで、Windows Defender ATPを活用した高度な運用が可能になります。

Windows Defender ATP APIの利用方法

Windows Defender ATP(現在のMicrosoft Defender for Endpoint)は、REST APIを提供しており、PowerShellと組み合わせることで、エンドポイントデータを取得し、自動化タスクに活用できます。本セクションでは、APIを利用するための基本的な準備とデータ取得の方法を解説します。

API利用の準備

1. APIキーの取得


Windows Defender ATPのAPIを利用するには、Azureポータルでアプリケーションを登録し、必要なAPI認証情報を取得する必要があります。以下の手順で進めます。

  1. Azure Active Directoryにログイン
    Azureポータルにログインし、「Azure Active Directory」メニューにアクセスします。
  2. アプリ登録の作成
  • 「アプリの登録」メニューから「新しい登録」をクリックします。
  • アプリケーション名を入力し、サポートされているアカウントの種類を選択します。
  • 登録を完了すると、アプリケーションID(クライアントID)が取得できます。
  1. APIアクセス許可の設定
  • 「APIアクセス許可」メニューで「Microsoft Defender for Endpoint API」を選択します。
  • 「アクセス許可の追加」で必要なスコープ(例: ThreatIndicators.Read)を選択します。
  1. クライアントシークレットの作成
  • 「証明書とシークレット」メニューで「新しいクライアントシークレット」を作成し、キーをコピーして保存します。

2. Defender ATP APIエンドポイント


APIを呼び出す際には、適切なエンドポイントURLを使用します。以下が主なエンドポイントの例です。

  • 検知情報の取得: https://api.securitycenter.microsoft.com/api/alerts
  • デバイス情報の取得: https://api.securitycenter.microsoft.com/api/machines

PowerShellでのAPI呼び出し

PowerShellを使用してAPIにアクセスするには、以下の手順でスクリプトを作成します。

1. トークンの取得


API呼び出しにはOAuth 2.0トークンが必要です。以下のスクリプト例では、トークンを取得する手順を示します。

# Azure認証情報
$clientId = "YOUR_CLIENT_ID"
$clientSecret = "YOUR_CLIENT_SECRET"
$tenantId = "YOUR_TENANT_ID"
$resource = "https://api.securitycenter.microsoft.com"

# トークン取得エンドポイント
$authUrl = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token"

# トークンリクエスト
$response = Invoke-RestMethod -Method Post -Uri $authUrl -ContentType "application/x-www-form-urlencoded" -Body @{
    client_id = $clientId
    client_secret = $clientSecret
    scope = "$resource/.default"
    grant_type = "client_credentials"
}

# アクセストークン
$accessToken = $response.access_token

2. データ取得


取得したトークンを使用して、Defender ATPのデータを取得します。

# APIエンドポイント
$apiUrl = "https://api.securitycenter.microsoft.com/api/alerts"

# APIリクエスト
$response = Invoke-RestMethod -Method Get -Uri $apiUrl -Headers @{
    Authorization = "Bearer $accessToken"
}

# 結果の表示
$response.value

API呼び出しのベストプラクティス

  • エラーハンドリングの実装: API呼び出しが失敗した場合の対応をスクリプトに組み込みます。
  • トークンのセキュアな管理: 認証情報は安全に保管し、不要になったら破棄します。
  • APIの利用制限に注意: APIには利用制限があるため、大量のリクエストを送る場合は適切な間隔を空けることが推奨されます。

以上の方法を利用して、Windows Defender ATP APIを活用したデータ収集をスムーズに進めることが可能です。

PowerShellでATPデータを取得する手順

Windows Defender ATP(Microsoft Defender for Endpoint)の検知結果をPowerShellを使用して取得する方法を解説します。このセクションでは、具体的なスクリプト例を交えながら、ATP APIからデータを取得するための手順を説明します。

事前準備


以下の項目が揃っていることを確認してください。

  • API認証情報(クライアントID、クライアントシークレット、テナントID)
  • PowerShell環境(最新バージョン推奨)
  • Windows Defender ATPのAPIアクセス権限

スクリプトの作成

以下のスクリプト例は、ATPの検知結果(アラート情報)を取得する手順を示します。

1. 認証トークンの取得


認証トークンを取得するためのスクリプトを作成します。

# Azure認証情報
$clientId = "YOUR_CLIENT_ID"
$clientSecret = "YOUR_CLIENT_SECRET"
$tenantId = "YOUR_TENANT_ID"
$resource = "https://api.securitycenter.microsoft.com"

# トークン取得エンドポイント
$authUrl = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token"

# トークン取得リクエスト
$response = Invoke-RestMethod -Method Post -Uri $authUrl -ContentType "application/x-www-form-urlencoded" -Body @{
    client_id = $clientId
    client_secret = $clientSecret
    scope = "$resource/.default"
    grant_type = "client_credentials"
}

# アクセストークン
$accessToken = $response.access_token
Write-Output "アクセストークンを取得しました"

2. ATPデータの取得


取得したアクセストークンを使用して、アラートデータをAPIから取得します。

# APIエンドポイント
$apiUrl = "https://api.securitycenter.microsoft.com/api/alerts"

# リクエスト実行
$response = Invoke-RestMethod -Method Get -Uri $apiUrl -Headers @{
    Authorization = "Bearer $accessToken"
}

# 結果を表示
$response.value | ForEach-Object {
    Write-Output "Alert ID: $($_.id)"
    Write-Output "Title: $($_.title)"
    Write-Output "Severity: $($_.severity)"
    Write-Output "Status: $($_.status)"
    Write-Output "----"
}

取得データの内容


上記スクリプトで取得されるアラートデータには、以下のような情報が含まれます。

  • Alert ID: アラートの一意識別子
  • Title: 検知された脅威のタイトル
  • Severity: 脅威の深刻度(Low, Medium, High, Critical)
  • Status: アラートの状態(New, In Progress, Resolved)

データをCSVに保存する


取得したデータをCSVファイルとして保存することで、後で分析に利用できます。

# データをCSV形式で保存
$response.value | Export-Csv -Path "ATP_Alerts.csv" -NoTypeInformation -Encoding UTF8
Write-Output "アラートデータをCSVファイルに保存しました: ATP_Alerts.csv"

スクリプト実行例


作成したスクリプトを実行することで、APIから最新のアラートデータを取得し、ターミナルに表示またはCSVに保存できます。

注意点

  • API制限: Microsoft Defender ATP APIにはレート制限があるため、大量のリクエストを送信する場合は注意が必要です。
  • 認証情報の管理: クライアントシークレットなどの機密情報は、安全に管理してください。

この手順により、PowerShellを使用してWindows Defender ATPのデータを効率的に収集できます。

データ加工とフォーマット変換

Windows Defender ATPから取得したデータは、そのままでは扱いにくい場合があります。このセクションでは、PowerShellを使ってデータを整理し、CSVやJSON形式など、分析や共有に適したフォーマットに変換する方法を解説します。

データ加工の基本


取得したデータを必要な形式に変換するための主な手法は以下の通りです。

  • 不要なフィールドを削除し、必要な情報だけを抽出する。
  • フィールド名を分かりやすい名称に変更する。
  • データをグループ化またはフィルタリングする。

例: 必要なフィールドの抽出


取得したアラートデータから、ID、タイトル、深刻度、ステータスだけを抽出するスクリプト例です。

# 必要なフィールドを選択
$filteredData = $response.value | Select-Object id, title, severity, status

# 整理されたデータを表示
$filteredData | ForEach-Object {
    Write-Output "Alert ID: $($_.id)"
    Write-Output "Title: $($_.title)"
    Write-Output "Severity: $($_.severity)"
    Write-Output "Status: $($_.status)"
    Write-Output "----"
}

フォーマット変換


データをCSVまたはJSON形式に変換する方法を説明します。

CSV形式への変換


CSV形式は、データを表形式で保存するための一般的な形式です。以下のスクリプトで、アラートデータをCSV形式に変換し保存できます。

# データをCSV形式で保存
$filteredData | Export-Csv -Path "ATP_Alerts_Filtered.csv" -NoTypeInformation -Encoding UTF8
Write-Output "データをCSV形式で保存しました: ATP_Alerts_Filtered.csv"

JSON形式への変換


JSON形式は、Web APIやプログラム間のデータ共有に適しています。以下のスクリプトで、データをJSON形式に変換します。

# データをJSON形式に変換
$jsonData = $filteredData | ConvertTo-Json -Depth 2

# JSONデータをファイルに保存
$jsonData | Set-Content -Path "ATP_Alerts_Filtered.json" -Encoding UTF8
Write-Output "データをJSON形式で保存しました: ATP_Alerts_Filtered.json"

高度な加工例

深刻度ごとのデータ集計


深刻度別にアラートを集計する例を以下に示します。

# 深刻度別のアラート数を集計
$severitySummary = $filteredData | Group-Object -Property severity | Select-Object Name, Count

# 結果を表示
$severitySummary | ForEach-Object {
    Write-Output "Severity: $($_.Name), Count: $($_.Count)"
}

日付のフィルタリング


特定期間内のアラートのみを取得する場合のスクリプト例です。

# 日付でフィルタリング
$startDate = (Get-Date).AddDays(-7) # 過去7日間
$filteredByDate = $response.value | Where-Object { $_.creationTime -ge $startDate }

# フィルタ結果を表示
$filteredByDate | Select-Object id, title, severity, creationTime

注意点

  • フィールド名の確認: APIで返されるデータのフィールド名は、公式ドキュメントで確認してください。
  • エンコードの選択: 保存形式に応じて適切なエンコードを選択してください(例: UTF8)。

データ加工とフォーマット変換を適切に行うことで、取得した情報の視認性や活用性が大幅に向上します。

レポート自動生成の設定

PowerShellを使用して取得したWindows Defender ATPのデータをレポート形式にまとめ、自動的に生成する方法を解説します。このセクションでは、レポートの作成手順から、自動化のためのスケジュールタスク設定までを説明します。

レポート生成の基本手順

1. 必要なデータを整理する


取得したデータを整理し、レポートに必要な情報を抽出します。以下は、深刻度別のアラート件数を整理してCSV形式のレポートを作成する例です。

# 深刻度別の集計
$severitySummary = $response.value | Group-Object -Property severity | Select-Object Name, Count

# 集計結果をCSV形式で保存
$severitySummary | Export-Csv -Path "ATP_Report.csv" -NoTypeInformation -Encoding UTF8
Write-Output "レポートを作成しました: ATP_Report.csv"

2. レポートの視覚化


レポートの見やすさを向上させるために、HTML形式で出力する方法も利用できます。以下は、HTMLレポートを生成する例です。

# HTMLレポート作成
$htmlContent = $severitySummary | ConvertTo-Html -Title "Defender ATP Report" -PreContent "<h1>ATPアラートレポート</h1>"

# HTMLファイルに保存
$htmlContent | Set-Content -Path "ATP_Report.html" -Encoding UTF8
Write-Output "HTMLレポートを作成しました: ATP_Report.html"

自動化の設定

1. スクリプトファイルの準備


データ取得からレポート生成までを1つのスクリプトにまとめます。以下のようにスクリプトを作成し、GenerateATPReport.ps1として保存します。

# 認証トークン取得(省略可能)
$clientId = "YOUR_CLIENT_ID"
$clientSecret = "YOUR_CLIENT_SECRET"
$tenantId = "YOUR_TENANT_ID"
$resource = "https://api.securitycenter.microsoft.com"
$authUrl = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token"

$response = Invoke-RestMethod -Method Post -Uri $authUrl -ContentType "application/x-www-form-urlencoded" -Body @{
    client_id = $clientId
    client_secret = $clientSecret
    scope = "$resource/.default"
    grant_type = "client_credentials"
}

$accessToken = $response.access_token

# データ取得
$apiUrl = "https://api.securitycenter.microsoft.com/api/alerts"
$response = Invoke-RestMethod -Method Get -Uri $apiUrl -Headers @{ Authorization = "Bearer $accessToken" }

# データ整理とレポート生成
$severitySummary = $response.value | Group-Object -Property severity | Select-Object Name, Count
$severitySummary | Export-Csv -Path "ATP_Report.csv" -NoTypeInformation -Encoding UTF8
Write-Output "自動化スクリプトでレポートを生成しました: ATP_Report.csv"

2. スケジュールタスクの設定


Windowsのタスクスケジューラを使用して、スクリプトを定期的に実行する設定を行います。

  1. タスクスケジューラを開く
    スタートメニューから「タスクスケジューラ」を検索して開きます。
  2. 新しいタスクを作成する
  • 「タスクの作成」をクリックします。
  • 名前を入力(例: “ATPレポート生成タスク”)し、「トリガー」タブで実行スケジュールを設定します(例: 毎日午前8時に実行)。
  1. スクリプトの指定
  • 「操作」タブで「プログラムの開始」を選択し、以下を入力します。
    • プログラム/スクリプト: powershell
    • 引数の追加: -File "C:\Path\To\GenerateATPReport.ps1"
  1. タスクの保存
    タスクを保存し、スケジュールに従って実行されることを確認します。

注意点

  • パスの設定: スクリプトやレポートの保存先パスを明確に指定してください。
  • エラーハンドリング: スクリプト内でエラーが発生した場合に通知する仕組みを追加すると、トラブル時の対応が容易になります。
  • セキュリティの確保: 認証情報や重要なファイルは、アクセス権を制限して管理してください。

この自動化設定により、Windows Defender ATPのレポートを効率的に生成し、管理者の運用負荷を軽減できます。

トラブルシューティング

PowerShellを使用してWindows Defender ATPのデータを取得・レポート生成を行う際に発生する可能性がある一般的な問題とその解決方法を解説します。これらのトラブルシューティング手法を理解しておくことで、スムーズな運用が可能になります。

よくある問題と解決方法

1. 認証エラーが発生する


問題: API呼び出し時に「401 Unauthorized」または「Invalid client credentials」といったエラーが発生する。

原因:

  • クライアントID、クライアントシークレット、またはテナントIDが誤っている。
  • 必要なAPIアクセス許可が付与されていない。

解決方法:

  • Azureポータルで登録したアプリケーションの認証情報を再確認する。
  • 「APIアクセス許可」でMicrosoft Defender for Endpoint APIが正しく構成されていることを確認し、「管理者による承認」を適用する。

2. トークン取得エラー


問題: トークン取得時に「Bad Request」や「Invalid scope」といったエラーが発生する。

原因:

  • APIスコープが正しく指定されていない。
  • 認証URLが間違っている。

解決方法:

  • トークン取得用のスクリプトでスコープを正しく設定する(例: https://api.securitycenter.microsoft.com/.default)。
  • 認証URLが「https://login.microsoftonline.com/{テナントID}/oauth2/v2.0/token」であることを確認する。

3. データが取得できない


問題: API呼び出しは成功するが、返されるデータが空である。

原因:

  • 検知結果が存在しない。
  • クエリが適切でないため、フィルタリングでデータが除外されている。

解決方法:

  • Defenderポータルで対象期間のデータが存在するかを確認する。
  • APIエンドポイントのクエリパラメータを見直し、特定期間や深刻度の指定を変更する。

4. スクリプトがタイムアウトする


問題: データ取得処理が遅延し、スクリプトがタイムアウトする。

原因:

  • データ量が多すぎる。
  • ネットワークの問題やAPIサーバーの遅延。

解決方法:

  • データを期間や深刻度でフィルタリングして、取得量を減らす。
  • Invoke-RestMethod-TimeoutSecオプションを使用してタイムアウト値を延長する。
$response = Invoke-RestMethod -Method Get -Uri $apiUrl -Headers @{ Authorization = "Bearer $accessToken" } -TimeoutSec 120

5. レポートが正しく生成されない


問題: CSVやHTMLレポートが正しく作成されない、またはデータが欠けている。

原因:

  • データ加工の際にフィールドが不適切に選択されている。
  • 出力先のパスに書き込み権限がない。

解決方法:

  • スクリプトのデータ加工部分(Select-Objectなど)を確認し、必要なフィールドが正しく指定されていることを確認する。
  • 出力先ディレクトリのアクセス権を確認し、適切な権限を付与する。

デバッグとログ出力


問題の原因を特定するには、スクリプト内で適切なログを出力することが有効です。

ログを出力する例

# スクリプト開始時のログ
Write-Output "スクリプトの実行を開始しました: $(Get-Date)"

# トークン取得時のログ
if ($accessToken) {
    Write-Output "トークンを正常に取得しました"
} else {
    Write-Error "トークン取得に失敗しました"
}

# APIデータ取得時のログ
if ($response.value) {
    Write-Output "データを取得しました: $($response.value.Count) 件"
} else {
    Write-Error "データ取得に失敗しました"
}

注意事項

  • スクリプトの実行環境: 実行環境(PowerShellのバージョンやネットワーク構成)に依存する問題が発生する場合があるため、環境設定を確認してください。
  • API制限: APIの利用制限(レートリミット)に注意し、大量のリクエストを送信する際は適切に間隔を空けるようにします。

これらのトラブルシューティング手法を活用することで、Windows Defender ATPのスクリプト運用における問題を迅速に解決できます。

応用例とセキュリティ監視の強化

PowerShellを活用してWindows Defender ATP(Microsoft Defender for Endpoint)のデータを取得し、レポート生成を自動化する手法は、セキュリティ運用を大幅に効率化します。本セクションでは、この方法をさらに応用することでセキュリティ監視を強化する方法や追加機能を紹介します。

応用例

1. リアルタイム通知の実装


ATPで検知された重大なアラートをリアルタイムで通知する仕組みを追加することで、迅速な対応が可能になります。

例: Microsoft Teamsに通知を送信する
Microsoft TeamsのWebhookを利用して、ATPアラートを通知するスクリプトの例です。

# Teams Webhook URL
$webhookUrl = "https://outlook.office.com/webhook/YOUR_WEBHOOK_URL"

# アラートの重大度がHigh以上のものをフィルタリング
$highSeverityAlerts = $response.value | Where-Object { $_.severity -eq "High" -or $_.severity -eq "Critical" }

# Teamsに通知を送信
$highSeverityAlerts | ForEach-Object {
    $message = @{
        text = "High severity alert detected: $($_.title)"
    } | ConvertTo-Json -Depth 2

    Invoke-RestMethod -Uri $webhookUrl -Method Post -ContentType "application/json" -Body $message
}
Write-Output "重大なアラートをTeamsに通知しました"

2. データベースへの保存


取得したデータをローカルまたはクラウドのデータベースに保存し、後から詳細な分析を行う基盤を構築します。

例: SQLiteへの保存
以下は、ATPデータをSQLiteデータベースに保存するスクリプト例です。

# SQLite接続設定
Add-Type -TypeDefinition @"
using System.Data.SQLite;
public class SQLiteWrapper {
    public static void Execute(string connectionString, string query) {
        using (var connection = new SQLiteConnection(connectionString)) {
            connection.Open();
            using (var command = new SQLiteCommand(query, connection)) {
                command.ExecuteNonQuery();
            }
        }
    }
}
"@
$connectionString = "Data Source=ATPData.db;Version=3;"
$query = "CREATE TABLE IF NOT EXISTS Alerts (ID TEXT, Title TEXT, Severity TEXT, Status TEXT);"
[SQLiteWrapper]::Execute($connectionString, $query)

# データを挿入
$alerts = $response.value | Select-Object id, title, severity, status
$alerts | ForEach-Object {
    $insertQuery = "INSERT INTO Alerts (ID, Title, Severity, Status) VALUES ('$($_.id)', '$($_.title)', '$($_.severity)', '$($_.status)');"
    [SQLiteWrapper]::Execute($connectionString, $insertQuery)
}
Write-Output "データベースにアラートを保存しました"

3. 脅威分析のダッシュボード化


取得したデータをPower BIやGrafanaなどの可視化ツールに取り込み、リアルタイムで監視可能なダッシュボードを作成します。

  • Power BI: ATPデータをCSVやJSON形式でエクスポートし、Power BIにインポートしてカスタムビジュアルを作成します。
  • Grafana: ATPデータをPrometheusやElasticSearchに送信し、ダッシュボードで監視する設定を行います。

セキュリティ監視の強化

1. 過去の傾向分析


過去のアラートデータを基にトレンド分析を行うことで、攻撃パターンやリスクの高い時間帯を特定できます。

# 過去30日間のアラートを取得
$startDate = (Get-Date).AddDays(-30)
$alertsLast30Days = $response.value | Where-Object { $_.creationTime -ge $startDate }

# 日ごとのアラート数を集計
$dailySummary = $alertsLast30Days | Group-Object -Property { $_.creationTime.ToString("yyyy-MM-dd") } | Select-Object Name, Count

# 集計結果を表示
$dailySummary | ForEach-Object {
    Write-Output "Date: $($_.Name), Alert Count: $($_.Count)"
}

2. 脅威インテリジェンスとの統合


外部の脅威インテリジェンスデータと組み合わせて、ATPアラートのリスクをさらに評価します。たとえば、IPアドレスやドメインの情報をVirusTotalや他の脅威インテリジェンスAPIを使って照合します。

# VirusTotal APIでIPアドレスを照合
$virusTotalApiKey = "YOUR_API_KEY"
$ip = "1.2.3.4" # 例として取得されたIP
$response = Invoke-RestMethod -Uri "https://www.virustotal.com/api/v3/ip_addresses/$ip" -Headers @{ "x-apikey" = $virusTotalApiKey }

# 結果を表示
Write-Output "IPアドレス: $ip"
Write-Output "リスク評価: $($response.data.attributes.last_analysis_stats)"

3. 自動修復の実装


特定のアラートが検出された場合に自動修復をトリガーする仕組みを構築します。たとえば、ATPのデバイス隔離機能をPowerShellで実行できます。

# デバイスを隔離するAPI呼び出し
$deviceId = "YOUR_DEVICE_ID"
$apiUrl = "https://api.securitycenter.microsoft.com/api/machines/$deviceId/isolate"

$response = Invoke-RestMethod -Uri $apiUrl -Method Post -Headers @{ Authorization = "Bearer $accessToken" } -Body @{ Comment = "Suspicious activity detected" }
Write-Output "デバイスを隔離しました: $deviceId"

まとめ


PowerShellを使ったWindows Defender ATPのデータ取得やレポート生成は、セキュリティ運用の効率化だけでなく、応用次第でリアルタイム通知、データ分析、ダッシュボード作成、自動修復など、セキュリティ監視の高度化を実現できます。これらの応用例を取り入れることで、より強固で効率的なセキュリティ運用を構築できます。

まとめ

本記事では、PowerShellを活用してWindows Defender ATP(Microsoft Defender for Endpoint)の検知結果を収集し、レポートを自動生成する方法を解説しました。APIを用いたデータ取得から、加工、レポート生成、自動化設定、さらには応用例やセキュリティ強化策までを網羅しました。

PowerShellを用いることで、効率的かつ柔軟にセキュリティ運用を管理することが可能となります。特に、自動化による運用負荷の軽減や、リアルタイム通知、データ可視化、脅威インテリジェンスとの統合といった応用は、セキュリティ監視体制を次のレベルへと引き上げます。

これらの手法を実践に活用することで、セキュリティ管理者は迅速な対応と効果的なリスク軽減を実現できるでしょう。セキュリティ運用の効率化と強化に向け、ぜひ参考にしてください。

コメント

コメントする