たれながし.info

とあるITエンジニアの備忘録

Azure SentinelにAzure ADのデータを接続する

Azure SentinelにAzure ADのデータを取り込むため、「データコネクタ」の設定をします。

はじめに

Azure SentinelにAzure ADのデータを取り込むため、「データコネクタ」の設定をします。

取り込めるデータ

計7種類のログが取りこめます。

  • サインインログ(対話型ユーザー サインイン ログ)
  • 対話型ではないユーザー サインイン ログ
  • サービス プリンシパルのサインイン ログ
  • マネージド ID サインイン ログ
  • AD FS サインイン ログ
  • 監査ログ
  • プロビジョニングログ

参考資料

下記を参考に作業しました。
docs.microsoft.com

作業実施

事前準備

Azure Sentinelは構築しておきます。
tarenagashi.hatenablog.jp


「サインインログ(対話型ユーザー サインイン ログ) 」の取り込みのみAzure AD Premium P1/P2ライセンスが必要です(有料ライセンス)。 ※その他についてはライセンス不要
f:id:tarenagashi_info:20210926013935p:plain

Azure ADに接続する

Azure SentinelをAzure ADに接続します。

Azure Sentinelの「データコネクタ」から「Azure Active Directory」を選択する
f:id:tarenagashi_info:20210926014131p:plain


取り込むログを有効にする
f:id:tarenagashi_info:20210926014303p:plain

動作確認

メニュー「ログ」に取り込まれたログ毎のテーブルが作成されます。
f:id:tarenagashi_info:20210926014423p:plain

  • 有効にした時間以降のログのみ取りこまれるようです。
  • ログ取り込みには10分程度の遅延があります。

個人的によく使うKQLクエリのメモ

Log Analyticsワークスペースから結果を取得する時に、個人的によく使うKQLのメモとなります。
KQLで分からないことがあった場合は、まず公式文書を確認することをお勧めします。

docs.microsoft.com

個人的によく使うKQLクエリ

期間指定

betweenで月指定

between演算子を使って特定月の情報を出力する方法になります。
startofmonth関数、endofmonthを使います。

let month = datetime(2021/09);
let start = startofmonth(month);
let end = endofmonth(month);
Table
| where Timestamp between(start..end)
特定月だけ出力

datetime型の変数をtostring関数で文字列にして、startwithでマッチさせます。
年と月の区切りが「"-"」となることに注意が必要です。

let month = "2021-09";
Table 
| where tostring(Timestamp) startswith month

TimeStampをUTCからJSTに変換

TimeStampがUTCの場合、JST変換に変換するには9時間足します(UTC+09:00)。

let offset = 9h;
Table 
| extend Timestamp_JST = Timestamp + offset 

テーブルの作成

datatable演算子でテーブルを作成することができます。

let T = datatable(severity:string, value:long)
    ['High', 2, 'Medium', 1, 'Low', 0];

Join演算子の結合フレーバー

Join演算子で結合フレーバーを指定しない場合、デフォルトの「kind=innerunique」となり、左側のテーブルの重複が除去された内部結合になります。想定しない出力結果になることがあるので、公式マニュアルに目を通して結合フレーバーについてある程度理解しておいた方が良いです。
join 演算子 - Azure Data Explorer | Microsoft Docs

Azure Sentinelの環境構築

Azure Sentinelの構築手順

はじめに

検証目的でAzure Sentinelを構築したので、手順をメモします。

参考にした資料

docs.microsoft.com

docs.microsoft.com

Azure Sentinelについて

料金について

基本は下記3つの料金が掛かるみたいです。
Azure SentinelはLog Analyticsにデータを保持するので、その料金も掛かります。

  • Azure Sentinelの料金
    • Azure Sentinelの分析に掛かる料金、データ1GBあたり数100円程度
      最初31日は無料らしい
  • Log Analyticsの料金
    • ログデータのインジェスト
      • 取り込んだデータに対して掛かる料金、データ1GBあたり数100円程度
    • ログデータの保持
      • 取り込んだデータを保持する料金、データ1GB/月あたり10~20円前後
        Azure Sentinelが有効な場合90日は無料で保持できる

使う機能によっては、他の料金も掛かる。
例えば自動応答機能を使う場合、Azure Logic Appsの料金が掛かる。

構築手順

事前準備

Azure SentinelはAzureのサービスなので、Azureサブスクリプションが必要です。
f:id:tarenagashi_info:20210925145522p:plain

Azure Sentinelの構築

Azure Sentinelを構築します。掛かった時間は5分位でした。

新規にLog Analyticsワークスペースを作成する
※既存のワークスペースも利用可
f:id:tarenagashi_info:20210925145659p:plain


価格が安かったのでリージョンは「米国西部2」を選択しました。
※ログ送信元とリージョンが異なるとデータ転送に課金されるかも(料金 - 帯域幅 | Microsoft Azure
f:id:tarenagashi_info:20210925145723p:plain


作成したワークスペースにSentinelを追加する
f:id:tarenagashi_info:20210925150111p:plain


完了したらこの画面になります。
f:id:tarenagashi_info:20210925150142p:plain

データ保有期間の確認

Log Analyticsのデータ保有期間を確認しておきます。
初期設定は30日ですが、Azure Sentinelが有効な場合90日まで無料らしいので、変更しても良いかもしれない。
f:id:tarenagashi_info:20210925150227p:plain

Microsoft Defender for Endpoint APIを使ってみる

PowerShellREST APIでDefender for Endpointを操作してみる

はじめに

Microsoft Defender for Endpoint」には「Microsoft Defender for Endpoint API」というREST APIがあります。アラート一覧の取得や脆弱性一覧の取得など各種操作ができます。

今回はクライアントにPowerShellを使って、「Microsoft Defender for Endpoint API」を実行してみます。

参考資料

下記資料を参考にしました。

使用できる機能一覧が記載されています。
docs.microsoft.com

Powershellスクリプトサンプルが記載されています。
docs.microsoft.com

事前準備

まず、最初にAzure ADに「アプリの登録」が必要です。

Azure ADの「アプリの登録」から「新規作成」をクリックする
f:id:tarenagashi_info:20210925035705p:plain


「名前」を入力し「登録」
f:id:tarenagashi_info:20210925035746p:plain


追加したアプリの情報「アプリケーションID」「テナントID」をメモしておく
f:id:tarenagashi_info:20210925035948p:plain


APIのアクセス許可」 > 「アクセス許可の追加」 > 「所属する組織で使用しているAPI」 > 「WindowsDefenderATP」を検索しクリックする
f:id:tarenagashi_info:20210925040255p:plain


アクセス許可を与える
※「Alert.Read.All」と「Vulnerability.Read.All」を許可した
f:id:tarenagashi_info:20210925040426p:plain


「管理者の同意を与えます」をクリックする
f:id:tarenagashi_info:20210925040711p:plain


「証明書とシークレット」から「新しいクライアントシークレット」から「追加」する
f:id:tarenagashi_info:20210925040921p:plain


発行された「シークレット値」を認証で使用する
f:id:tarenagashi_info:20210925041031p:plain

APIの実行

API実行の基本的な流れは下記となります。

  1. 認証の実施
    →認証トークンを取得
  2. APIの実行
    →認証トークンをHeaderに記載し、機能毎のURLにHTTP REQUESTを送信
  3. 結果の表示、保存

認証の実施

認証用のPowerShellスクリプトを作成します。

スクリプトを名前「Get-Token.ps1」で保存する
※メモした「テナントID」「アプリケーションID」「シークレット値」を記載する

# That code gets the App Context Token and save it to a file named "Latest-token.txt" under the current directory
# Paste below your Tenant ID, App ID and App Secret (App key).

$tenantId = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX' ### Paste your tenant ID here
$appId = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX' ### Paste your Application ID here
$appSecret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' ### Paste your Application secret here

$resourceAppIdUri = 'https://api.securitycenter.microsoft.com'
$oAuthUri = "https://login.microsoftonline.com/$TenantId/oauth2/token"
$authBody = [Ordered] @{
     resource = "$resourceAppIdUri"
     client_id = "$appId"
     client_secret = "$appSecret"
     grant_type = 'client_credentials'
}
$authResponse = Invoke-RestMethod -Method Post -Uri $oAuthUri -Body $authBody -ErrorAction Stop
$token = $authResponse.access_token
Out-File -FilePath "./Latest-token.txt" -InputObject $token
return $token



スクリプトを実行すると認証トークン(JWT形式)が取得できる ※取得から60分有効

powershell -ExecutionPolicy Bypass .\Get-Token.ps1



認証トークンは「https://jwt.ms」でデコードして、有効期限やアクセス許可など確認できる

  ...
  "exp": 1632390256,
  ...
  "roles": [
    "Alert.Read.All",
    "Vulnerability.Read.All"
  ],
  ...



APIの実行

下記ページを参考にAPI脆弱性一覧を取得してみます。
docs.microsoft.com


スクリプトを名前「Get-Vulnerabilities.ps1」で保存する

# 認証トークンの取得
$token = ./Get-Token.ps1

# HTTP Requestの送信先URL
$url = "https://api.securitycenter.microsoft.com/api/Vulnerabilities"

# HTTPヘッダ
$headers = @{ 
    'Content-Type' = 'application/json'
    Accept = 'application/json'
    Authorization = "Bearer $token"
}

# HTTP GETの送信
$response = Invoke-WebRequest -Method Get -Uri $url -Headers $headers -ErrorAction Stop

# 結果の出力
$response

$dateTimeForFileName = Get-Date -Format o | foreach {$_ -replace ":", "."}
$outputJsonPath = "./Vulnerabilities_$dateTimeForFileName.json"

$results = $response.Content
$results | Out-File -FilePath $outputJsonPath
$outputJsonPath



PowerShellで実行する

powershell -ExecutionPolicy Bypass .\Get-Vulnerabilities.ps1


結果の表示、保存

脆弱性一覧が、Responseの「Content」にJson形式で格納されている

StatusCode        : 200
StatusDescription : OK
Content           : {"@odata.context":"https://api.securitycenter.microsoft.com/api/$metadata#Vulnerabilities","value":
                    [{"id":"CVE-2021-37957","name":"CVE-2021-37957","description":"This vulnerability affects the follo
                    wi...
RawContent        : HTTP/1.1 200 OK
                    x-content-type-options: nosniff
                    x-request-id: 2739653b-0d05-4d78-862f-3f318e0d2ee6
                    OData-Version: 4.0
                    Strict-Transport-Security: max-age=31536000 ; includeSubDomains
                    Content-Lengt...
Forms             : {}
Headers           : {[x-content-type-options, nosniff], [x-request-id, 2739653b-0d05-4d78-862f-3f318e0d2ee6], [OData-Ve
                    rsion, 4.0], [Strict-Transport-Security, max-age=31536000 ; includeSubDomains]...}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : System.__ComObject
RawContentLength  : 5596077

./Vulnerabilities_2021-09-23T18.58.15.6747327+09.00.json



取得した脆弱性情報の先頭1つ目

{
	"@odata.context": "https://api.securitycenter.microsoft.com/api/$metadata#Vulnerabilities",
	"value": [
		{
			"id": "CVE-2021-37957",
			"name": "CVE-2021-37957",
			"description": "This vulnerability affects the following vendors: Google, Ubuntu, Debian. To view more details about this vulnerability please visit the vendor website.",
			"severity": "High",
			"cvssV3": 8.8,
			"exposedMachines": 1,
			"publishedOn": "2021-09-21T00:00:00Z",
			"updatedOn": "2021-09-22T00:00:00Z",
			"publicExploit": false,
			"exploitVerified": false,
			"exploitInKit": false,
			"exploitTypes": [],
			"exploitUris": []
		},

Azure AD登録したWindows10デバイスをIntuneに自動登録する

Azure AD登録したWindows10デバイスをIntuneに自動登録する

f:id:tarenagashi_info:20210923213651p:plain:w450

目的

前提

このページを見ると、IntuneにWindows10デバイスを登録する方法は沢山あります。
docs.microsoft.com

(Intune管理者が登録するとか、Intuneユーザーが登録するとか、Intuneにだけ登録するとか、AzureADに参加してIntuneに同期するとか、もう沢山の方法がある。)

目的

今回は、Azure ADに登録(Azure AD Registered)したWindows10をIntuneにも自動登録してみます。

f:id:tarenagashi_info:20210923213651p:plain:w450

※今回使用したWindows10デバイスはローカル認証しているので「Azure AD登録」としたが、企業などで利用しているオンプレADで認証しているWindows10デバイスの場合、「Hybrid Azure AD Join」にしてIntuneに自動登録することが多いのかなと思う。

参考にしたサイト

Microsoftの公開情報を元に作業しました。
docs.microsoft.com

バイス登録の実施

事前準備

ライセンスの入手

AzureAD PremiumとIntuneのライセンスが必要です。
今回はEMS E5の試用版ライセンスを取得して使用しました。
tarenagashi.hatenablog.jp

ライセンス割り当て

ユーザーに適宜ライセンスを割り当てる
f:id:tarenagashi_info:20210923134847p:plain:w600

Intune自動登録の有効化

Azure ADでWindows10デバイスのIntune自動登録を有効にします。

Azure ADの「モビリティ (MDM および MAM)」から「Microsoft Intune」を選択
f:id:tarenagashi_info:20210923135150p:plain:w600

MDMユーザースコープ」を「すべて」に変更し保存
f:id:tarenagashi_info:20210923135035p:plain:w600

Windows10デバイスのAzure AD登録

Windows10デバイスをAzure ADに登録します。

Windowns10デバイスの[設定] > [アカウント] > [職場または学校にアクセスする] > [接続]をクリックする
f:id:tarenagashi_info:20210923135229p:plain:w600

[電子メールアドレス]にAzure ADアカウントで認証する
※多要素認証が強制になってました
f:id:tarenagashi_info:20210923135339p:plain:w450

Windows HelloのPIN設定が表示されたので、今回はキャンセルしました。
f:id:tarenagashi_info:20210923135525p:plain:w450
f:id:tarenagashi_info:20210923135558p:plain:w450

職場アカウントまたは学校アカウントの追加完了
f:id:tarenagashi_info:20210923135747p:plain:w600

動作確認

Azure ADからデバイス登録されたことを確認する
※結合の種類が「Azure AD Registered」、MDMが「Microsoft Intune」となっている
f:id:tarenagashi_info:20210923140050p:plain:w600

Intune(https://endpoint.microsoft.com)にも登録されたことを確認する (表示されるまで10分位掛かる)
※Azure AD登録した端末なので、所有権が「個人」となっている
f:id:tarenagashi_info:20210923140259p:plain:w600

Enterprise Mobility + Security E5の試用版ライセンス取得してみた。

EMS E5の試用版ライセンスを取得してみた。

はじめに

Intuneを試用したくて、EMS E5の試用版ライセンスを取得したので手順をメモします。
既存のAzure ADテナントに追加する形で取得しました(ライセンス取得と同時にAzure ADテナントも作成する形ではない)。

ライセンス取得

Azure ADのライセンスメニューで「無料試用版を入手する」をクリック
f:id:tarenagashi_info:20210923053514p:plain:w600


EMS E5の「アクティブ化」をクリック
f:id:tarenagashi_info:20210923053640p:plain:w600


数秒で追加されました。250個もあります。
f:id:tarenagashi_info:20210923053808p:plain:w600

割り当てオプション

EMS E5で有効にできる機能一覧です。全部で9個あります。
f:id:tarenagashi_info:20210923053939p:plain:w600

クレジットカードが不正利用されたかもしれない話

ある日、利用しているクレジットカード会社から電話が掛かってきた。
不信なカード履歴があるが、利用したことはありますか?という確認でした。

  • megaXXXXX 111円
  • グローバルXXXサービス 141円

過去のメールやカード利用履歴を確認するも上記のような利用の記憶、記録はなく、カードの不正利用ということになり、カード再発行となるとのことでした。

カード会社からは再発行の手続き説明があり、下記3点の質問があった。
→1,2はいずれも「No」

  1. 家族が利用したということはないか?
  2. パスワードを使いまわしたり、誕生日などから推測可能なことはないか?
  3. カードの最後の利用履歴の確認

カード再発行には2-3週間かかるとのこと。
これから詳細を調査するとのこと。

何か質問はありますか?とのことだったので、
「今回のように100円程度の少額でも不正利用ということはありえますか?」と質問してみた。

カードの存在確認としてありえるとの回答だった。
(カードの存在確認後、高額の利用をするといったことらしい。)

その後、新しいカード届いた。調査結果は教えて貰えなかった。