こんにちは!クラウドインフラの守りを固める毎日にワクワクしているあなたへ。
セキュリティの世界へようこそ!
今回は、Azureのネットワークの守りの要である「NSG(ネットワークセキュリティグループ)のフローログ」をテーマに、不審な外部通信やポートスキャンを見つけ出す方法を一緒に紐解いていきましょう。
「ログ分析」や「KQL(Kusto Query Language)」なんて聞くと、なんだか難しそうな呪文のように感じるかもしれませんよね。でも大丈夫です。身近な防犯カメラの映像をチェックする感覚で、一歩ずつ優しく解説していきますので、安心してついてきてくださいね!
—
1. 家の防犯に例える「NSGフローログ」の役割
まずは、私たちが普段暮らす「家」を想像してみてください。
- Azureの仮想マシン(VM): あなたの大切なプライベートルーム
- NSG(ネットワークセキュリティグループ): 部屋のドアや窓(どの人が出入りしていいかを決める鍵付きの番人)
- NSGフローログ: ドアの前に設置された、24時間稼働の「防犯カメラ付き出入り台帳」
NSG自体は「このIPアドレスからの通信は通す、こいつは怪しいから拒否する」という交通整理をしてくれます。しかし、「誰が、いつ、どこから、どのドアをノックしたか(あるいは侵入を試みたか)」という詳細な歴史までは、標準の状態では記憶してくれません。
そこで登場するのが「NSGフローログ」です。これを有効にしてログを保存・分析することで、「あ、さっきから家の裏口の鍵をガチャガチャと順番に試している不審者がいるぞ!」ということに気づけるようになります。これが、今回学ぶセキュリティ監視の第一歩なんです。
—
2. 攻撃者が狙う盲点:なぜポートスキャンが行われるのか?
セキュリティに初めて触れる開発者の方だと、「なぜ攻撃者はわざわざ通信のログに残るような真似をするんだろう?」と疑問に思うかもしれません。
泥棒を思い浮かべてみてください。彼らは最初から頑丈な玄関のドアを重いバールで破壊しようとはしません。まずは暗い夜道で、アパートの部屋を一つひとつ回り、「鍵をかけ忘れている窓はないか?」「開いている隙はないか?」と、ドアノブをカチャカチャと手当たり次第に触って歩きますよね。これがサイバー世界における「ポートスキャン」です。
攻撃者は、私たちがクラウド上に作ったサーバーに対して、自動化ツールを使って数千・数万という「部屋番号(ポート)」を一瞬でノックし続けます。もし、うっかりテスト用に開けたまま忘れていた扉(例えばデータベース用のポートなど)があれば、そこから侵入を試みるわけです。
NSGフローログを分析するということは、まさに「家の周りをうろつく不審な足跡や、全てのドアノブを片っ端から触っていく不審者の動きを、防犯カメラの映像から見つけ出す作業」そのものなのです。
—
3. 実践!Log AnalyticsとKQLで不審な通信を見つけ出す
それでは、実際にAzureのLog Analytics workspaceに集まったNSGフローログを覗き見してみましょう。
ここで使うのがKQL(Kusto Query Language)です。エクセルでデータをフィルターしたり並び替えたりする感覚で書けるので、すぐに慣れますよ。まずは、初心者の方でも実務ですぐに使える基本のクエリを見ていきましょう。
不審な「外部からのブロックされた通信」を炙り出すクエリ
インターネットの海から、あなたのサーバーへアクセスしようとしたものの、NSGのルールによって「バシッ!」と跳ね返された(Denyされた)通信の履歴を集めるクエリです。
// AzureNetworkAnalytics_CL(フローログが格納されるテーブル名の一例です)
AzureNetworkAnalytics_CL
| where TimeGenerated > ago(24h) // 過去24時間のログに絞り込みます
| where FlowDirection_s == "I" // 外部から内部方向(Inbound)の通信のみ対象にします
| where FlowStatus_s == "D" // NSGによって拒否(Deny)された通信をピックアップ
| summarize
access_count = count() // 拒否された総アクセス回数を数えます
by SrcIP_s, Port_d, CloudService
| order by access_count desc // アクセス回数が多い順(しつこい犯人順)に並べ替えます
| limit 20 // 上位20件を表示します
このクエリをAzureポータルの「Log Analytics」画面で実行すると、「どの国の、どのIPアドレス(SrcIP_s)が、どのポート(Port_d)に対して、何回もしつこくアタックしてきていたか」が一覧で綺麗に表示されます。
もしここで、見覚えのない海外のIPアドレスから、特定の管理用ポート(例えばSSHの 22番 やRDPの 3389番)に対して何千回ものアクセス拒否ログが記録されていたら……? それは間違いなく、あなたを狙ったポートスキャン(総当たり攻撃の準備段階)のシグナルです。
—
4. 現場のプロが教える!泥臭いインシデントハンドリングの知見
教科書には「ログを分析して異常を見つけたら遮断しましょう」とサラッと書いてありますが、実際の現場ではもう少し泥臭い判断が求められます。
1. ノイズ(背景雑音)の見極め
インターネット上には、世界中のセキュリティ研究機関やボットネットが放つ「ただの自動スキャン」が常に飛び交っています。正直なところ、すべての拒否ログを個別に追いかけていたら、インフラエンジニアの体がいくつあっても足りません。
まずは「社内から許可されていないはずの外部IPからの高頻度アクセス」や「特定の重要サーバーへの執拗なスキャン」に優先順位をつけて絞り込むことが、現場で疲弊しないためのコツです。
2. 「許可(Allow)」された通信のなかの異常
実は、一番怖いのは「拒否された(Deny)ログ」ではなく、うっかり設定ミスで「許可(Allow)してしまっている通信のログ」です。
例えば、Webサーバー(Port 80/443)としての通信を許可しているつもりが、同じIPレンジからデータベースのポートへの通信まで通してしまっていないか?フローログを見る時は、「通しているはずのないポートへのAllow通信」が混ざっていないかという視点も忘れないようにしましょう。
—
一歩ずつ、確実なセキュリティ対策を
今回は、Azure NSGフローログの基本と、KQLを使った不審な通信・ポートスキャンの見つけ方についてお話ししました。
最初は見慣れないクエリやログの項目に戸惑うかもしれませんが、防犯カメラの映像から不審者を見つけるのと同じように、毎日少しずつログに触れていくことで、「あ、このパターンのログはただのノイズだな」「おっ、このIPの動きはちょっとおかしいぞ」という直感が養われていきます。
セキュリティに「完璧なゴール」はありませんが、こうした地道な監視と発見の積み重ねが、あなたシステムの強力な盾となります。
難しく考えすぎず、まずはご自身の環境で小さなクエリを試すところから、一歩ずつ進んでいきましょう!応援しています!
コメント