🚨

Azure使いだすときにSentinelでやっておくべきこと

2021/08/02に公開

はじめに

以前の↓こちらの記事で、「Azure使いだすときにSentinel使ってやるべきはこんなことかな?」という主旨のことを書いていました。
https://zenn.dev/tomot/articles/7ddeb902e8f426

Sentinel有効化(検討中)
まずActivityLogやSigninLogについては連携した方が良いでしょう。
よくある「攻撃を受けている、不穏な動きには気づけるようにしたい」あるいはAWSでいう「Rootアカウントのサインインには気づけるようにしようね」を最低ラインと考えると、
AzureADの「グローバル管理者」とサブスクリプションの「所有者」のログインには気づきましょう、というのが良いと思いますが、適当なフィルタは見当たらず…

具体的にコレは有効にしとこうね、と言う情報が世の中にあまり見当たらず、有識者の方の情報をお待ちしています!

今回、諸々と弄ってみて、改めてやるべきことを考えてみたので今回はそれを記事に残します。結局のところ、あれこれ考えてクエリルールをいじるよりは、マネージドサービスがオススメしているものをベストプラクティスとして素直に受け取りましょう!という内容です。

Sentinelの基本的な設定方法から解説しているので、はじめてSentinelを触る方でもこの記事に従って設定していけば、設定の勘所が分かるようになると思います。まずはやってみてください!細かい分析ルールの検討は次のステップです。
(Sentinelの基本的な設定方法がわかる方は、「設定内容の考察」まで飛ばしてもらっても大丈夫です。)

Azure Sentinelとは

スケーラブルでクラウドネイティブ型の セキュリティ情報イベント管理 (SIEM) および セキュリティ オーケストレーション自動応答 (SOAR) ソリューションです。
(参考)
https://docs.microsoft.com/ja-jp/azure/sentinel/overview

横文字で説明されるとよくわからないですが、

  • ログの類をかき集めてきて
  • 横断的にログにクエリをかけてインタラクティブに分析したり可視化したり
  • クエリルールに合致するとアラートを上げたり、
  • インシデント管理(自動的に対処したり、人を割り当てて対応させたり)や通知をする
    というサービスですね。

今回は「Azure環境作ったら最初にやるべきこと」のSentinel編ということで、私の考える「まずやるべきこと」(ログ収集⇒分析ルール設定⇒アラート設定)を整理していきたいと思います。

設定方法

Azure SentinelはLogAnalyticsに対するガワのようなサービスです。LogAnalyticsにログを収集し⇒Sentinelがログの分析や可視化を行う、という仕組みの都合上、まずLogAnalyticsのワークスペースを作成することから始めます。
その後、Sentinel側の設定を行い、ログの分析ができるようにしていきます。

初期設定

LogAnalyticsのWS作成

まずLogAnalyticsのワークスペースを作成します。
…といっても、リージョン、リソースグループや名前を決めるだけです。Tierのようなものも選択肢が無いので、迷うところはありません。

Sentinelメニューを検索して

「作成」ボタンから

「新しいワークスペースの作成」と進めます

後は普通のLogAnalyticsの作成と一緒です

Sentinel作成

Sentinelの画面に戻ると、先ほど作成したLogAnalyticsのワークスペースが見えますので、選択して「追加」ボタンを押下。

ね、カンタンでしょ?

Sentinel設定

ここまででSentinelの作成が完了しており、後は設定をポチポチしていけばOKです。

ログの接続

まずは左ペインの「構成」>「データコネクタ」から、集めてくるログを選択します。
ログ収集ツールとしてSentinelが優れている点の1つが、このログ収集の仕組みで、かなりの種類のログの収集設定をマネージドに行うことができます。特にAzureのログであればポチポチするだけです。
ここでは、「まずやること」として2種類のログを収集します。

Azure Active Directory

「Azure Active Direcoty」というコネクタを開くと、↓のような画面になります。

一番右のペインで、「コネクタページを開く」を選択し、

続いて「構成」のところで連携対象のログ種別にチェックを入れて保存します。AzureADの診断設定でExportできるものと同じ種別が並んでますね。Infomationが出ていますが、P1かP2ライセンスが無いと、サインインログは取得できないよーとなっています。FreeTrialもあるので、ぜひ試してみましょう。
…これで、LogAnalyticsのワークスペースにログが連携され、Sentinelで分析する下地ができました。
ね、カンタンでしょう??

Azure アクティビティ

こちらはAzureのアクティビティログを連携するためのコネクタです。
連携するログは、AzureADと違い1種類だけなのですが、この設定は少し凝っており、2021/7/26現在、Azureポリシーを使って設定するようになっていました。
Azureポリシーについては別の記事で触れたこともありますが、「正しい設定になっていなかったら決まったARMテンプレートをデプロイ」ということができるので、このような使い方もできるわけですね。

それ以外のログについて

今回は「まずやること」なので収集対象としませんでしたが、AWSのCloudTrailログや、各種セキュリティアプライアンスのログ、ネットワーク機器のログなども収集することができます。SecurityCetnerのアラートなども取り込むことができるので、これも「まずやること」に含めてもよいかもしれません。ただ、少なくとも「AADのログ」と「アクティビティログ」は全Azure利用者必ず出力されているログですので、今回の対象は2つで進めます。

プレイブック

アラートが発報されたら、通知が飛ぶようにするために、オートメーション>プレイブック、から通知の仕組みを作ります。
プレイブックの中身はLogicAppなので、慣れてる人にとってはすぐできると思います。

構成

「空のロジックアプリ」を作成し、2つのパーツを組み合わせます。

  • Sentinelのトリガー
  • メール送信

Sentinelのトリガー

こちら、日本語でも「Sentinel」と検索すると出てくるトリガーなのですが、そのトリガーではSentinel側からうまく認識されず設定できませんでした。ですのでこちらは「ポータルを英語表示に切り替えて」から作成しています。
※以前にも別のところで、日本語ポータルのバグ…というのを踏んだことがあるので、アルアルなのかもしれません。

メール送信

私はm365アカウントを持っているのでOffice 365 Outlookのアクションを使いましたが、Sendgridなどを使うのが一般的かと思います。また、試してはいないのですが、最近はGmailも使える様子?(アイコンが見えました。)
メールの中身は下記のように設定していきます。通知内容、何が適正なのかまでは検討できなかったので、重要度とタイトル、説明文くらいを出して、通知を受けたらSentinel画面を確認に行くスタイルです。

分析

プレイブックを作成したら、各データコネクタのページに戻り「次の手順」を選択します。「分析」ルールを有効化できるようになっています。ここで表示されるルールは、『このデータコネクタから取得できるログに関連する分析ルール』です。
下の画像の例はデータコネクタ「Azure アクティビティ」から分析できる内容です。

ルールの作成ボタンを押下すると、説明や実際のクエリ文を確認することができます。

例えば一番上に見えている「Known IRIDIUM IP」であれば、

「全般」タブにて

IRIDIUM command and control IP. Identifies a match across various data feeds for IP IOCs related to the IRIDIUM activity group.

ということなので、要は怪しいところから接続されてたら検知、ですね。

「ルールのロジックを設定」タブで

具体的なクエリ、つまりどういうIPアドレスを対象にしているかが記載されています。また、チェックをかける間隔や今のログ状態でクエリを実行したときにどう結果が出るのか?ということも確認できます。
※IPアドレスやクエリ自体は、Builtin(Azureのマネージドの世界)で提供されているのでおそらく勝手に更新されます。ですので、ココでの紹介は割愛。

最後に「自動応答」タブで

先ほど作成したプレイブックを、この「アラートの自動化」に設定します。先ほど書いた通り、日本語環境で作成したLogicAppは、ココでプルダウンに表示されませんでした…。なんででしょう?手が空いたらサポートに問い合わせてみるかな…

つまり、ココでプルダウンで表示されているLogicAppは英語版で作成したものです。

以上の内容で、保存します。

テスト実行

それでは、AADのログを連携すると使用できる、「Brute force attack against Azure Portal」という分析を設定して、テストします。

クエリ文を見ると「20分以内、5回のサインイン失敗、1回のサインイン成功」という条件になっていました。せっせと5回間違えてからサインインします。

分析設定の中で決めたチェック間隔を待つと、通知が飛んできます。

期待した通りの内容でメールが送信されました。

設定内容の考察

それでは、一番重要な「どのルールを有効化するか」です。前の記事で書いた通り、私のイメージは「AWSでいうところのルートアカウントのサインインを検知しよう」だったのですが、SentinelのBuilt-inな分析ルールにはそのような項目はありません。
公式ドキュメントや、イベントでの宣伝によれば、「SentinelやSecurityCenterで分析している内容は、マイクロソフトが受けている各種攻撃を分析して得たルールで、実際に数多く発生している危険な攻撃を検知できる」という主旨のことが謳われています。
ということで、セキュリティの専門家でもない利用者としては、何も考えずにまずはSentinel上で優先度(危険度)が高い順に有効化しましょう。
分析ルールは、先ほどの「データコネクタ」から遷移してもよいのですが、左ペインのメニューから
「構成」>「分析」>「規則のテンプレート」タブ
のところで、「データソース」絞る方が探しやすいと思いますので、こちらを紹介します。

上で書いた通り、「Azure Active Directory」と「Azure アクティビティ」に対する分析を有効化します。

Azure アクティビティに対する分析

プレビューのものも含め、10項目表示されます。(2021/8/2現在)
でに有効化したものは「使用中」のタグが付いていますね。

ざっと眺めると、

  • 怪しいところからのアクセスが、SEVERITY:高
  • 侵害されて怪しい操作をされているとすると、こういう操作だよね?が、SEVERITY:中
  • そういう使い方もすることはあるけど…注意して見てねが、SEVERITY:低
    と分類されているようです。
    その環境の使い方次第ではオオカミ少年になってしまう可能性がありますが、"高"~"中"くらいは全ての人が有効にしてもよいのではないでしょうか。

Azure Active Directoryに対する分析

Azure ADに関するログの分析は、1画面に収まらないくらいあります。

基本的なSEVERITYの付け方はAzure アクティビティと同じようですが、言い換えてみると

  • SEVIRITY:高…通常の運用では発生しないイベントなので、発生したら危ないと思え
  • SEVIRITY:中…普通はあんまり発生しないイベントだから気を付けて見た方がいいよ。
  • SEVIRITY:低…通常運用でも在り得るけど、注意したほうがいいよ
    くらいの温度感でしょうか。やはり、"高"~"中"くらいは万人にオススメ出来て、"低"は環境次第で見た方が良いかな、という感じです。("低"のイベントは日常的に発生する環境も在り得るので、環境次第では見る必要が無い。というニュアンスですね。)
    なお、データソースを見ると複数のログを対象にしているものがあります。
    クエリの内容を見ると、複数のログの特定条件をAndでチェックするもの(全ログを連携していないと意味がないモノ)や、Or条件でチェックするもの(それぞれのログで条件にマッチしていればアラートが発火するモノ)があります。

And条件の例

「Cisco - firewall block but success logon to Azure AD」というルールのクエリでは、CiscoASAとうう特定の製品の「CommonSecurityLog」とAADの「SigninLogs」のjoinが行われています。
本記事の例のように、CiscoASAのログを連携させていない場合、このクエリ文では何も取得できませんので、有効化しても意味がないルールということになります。

Or条件の例

先ほど例にあげた「Known IRIDIUM IP」などが、代表例です。連携可能なデータソースは下記の通りたくさんありますが、

クエリ文を見ると全てのテーブル(≒データソース)がUnion句でつなげられています。Unionは、ザックリ言えば全てのテーブルから条件に合うレコードを全部取ってくるような動きをしますので、内どれか1つでもデータソースを連携させていれば意味があります。
以上をふまえて、SEVERITYが高く意味があるルールは有効化して様子を見てみましょう!

おわりに

「Azure使いだすときにSentinelでやっておくべきこと」というテーマで書きました。
世の中では、Sentinelいいよ〜すごいよ〜という記事は多いのですが、逆にベーシックな設定方法や、まずやるべき分析内容に言及された情報は少ないように思います。結果、Sentinelは何となく壁が高いように感じられるので、私もなかなか手が出せずにいました。

とっかかりとして、本記事を参考に設定してみてもらえたら嬉しいです。(そして、フィードバックください!)

Discussion