はじめに
基本情報技術者試験の過去問(DMZの配置問題)を解いたことをきっかけに、DMZ・防火壁・認証・認可といった概念を一つずつ掘り下げた。
最初はバラバラの用語に見えたが、最終的に 「多層防御(defense in depth)」 という一つの考え方でつながった。その流れをまとめる。
DMZとは(まず復習)
DMZは特別な装置ではなく、ネットワークを区切った一つのセグメントである。
インターネットと社内LANの「間に挟まれた」緩衝区域で、外部に公開しなければならないサーバ(Webサーバなど)をここに置く。
配置の基準は「重要かどうか」ではなく、「外部の不特定多数に直接公開する必要があるか」 である。
重要なデータ(DB)はむしろ外に出す理由がないので、一番奥の社内LANに置く。「重要だからDMZ」は誤りだ。
ここで大事な区別:
DMZ(区域)は「挟む」
防火壁(番人)は「止める」
役割が違う。DMZ自体は何も遮断しない。遮断するのは境界にある防火壁である。
防火壁は「何を見て」通す・止めるのか
防火壁は接続要求が来ると、次の3つを見て、ルール一覧と照らし合わせて通す/止めるを決める。
送信元IP → 宛先IP : ポート番号
例として、DBサーバ(3306番)への通信をこう制御する。
送信元宛先ポート動作社内WebサーバDBサーバ3306許可インターネットDBサーバ3306拒否(それ以外すべて)(すべて)(すべて)拒否
一番下の行が重要だ。良い設定は 「基本はすべて拒否、許可したものだけ通す(default deny)」 にする。
だから「インターネット → DB」はルールに書かれていないので、自動的に拒否される。攻撃者はDBの前に届くことすらできない。
なぜ default deny が安全か
管理者がルールを一つ書き忘れたとき、結果がまったく違う。
default deny → 必要な通信が「できない」(=不便。すぐ気づいて直せる)
default allow → 危険な通信が「通ってしまう」(=侵害。静かに開いていて、やられるまで気づかない)
失敗しても安全な側に倒れる。これが基本原則だ。
余談:ポート番号を珍しい番号に変えて「誰も見つけられないから安全」と考えるのは防御ではない。
攻撃者はポートスキャンで開いているポートを数秒で見つける。
「知らないからできない」は防御にならない。「知っていてもできないように道を断つ」のが防御だ。
認証と認可は別の関門
サーバの前まで来ても、まだ二つの関門が残っている。
認証(Authentication)=「あなたは誰か」(ID・パスワードなど)
認可(Authorization)=「あなたは何をしてよいか」(権限)
見分け方はシンプルで、ログインできたかどうかが分かれ目になる。
「ログインはできたのに、給与データは開けなかった」
→ 認証は通過、認可で止まった。
多層防御 ― 一枚破られても即陥落ではない
ここが今回いちばんの学びだった。防御は一枚の壁ではなく、何枚も重ねる。
たとえばWebサーバが乗っ取られたとする。攻撃者は「Webサーバの立場」からDBに要求を送れる。
防火壁のルールは「送信元=Webサーバなら許可」なので、この要求は正常な通信として通ってしまう。
つまり 防火壁が破られたのではなく、乗っ取られたWebサーバを防火壁が「正常」と誤認する のだ。
しかし、それでもDBはすぐには陥落しない。DBの前にはまだ 認証(アカウント・パスワード)と認可 が残っているからだ。
さらに、DBアカウントを「読み取り専用」に絞っておけば(最小権限の原則)、たとえ突破されても
情報の漏洩は起きるが、データの破壊・改ざんは防げる。被害の範囲をあらかじめ切っておくわけだ。
防御を段階で並べるとこうなる。
防火壁(経路) … 道を断つ
認証 … 誰かを確認する
認可(最小権限) … できることを絞る
どれか一枚が破られても、それは「破られた」であって「全陥落」ではない。壁を重ねる意味はここにある。
まとめ
DMZはセグメントの一種。「挟む」のがDMZ、「止める」のが防火壁。
防火壁は「送信元 → 宛先 : ポート」を見て判定する。基本は default deny。
認証(誰か)と認可(何をしてよいか)は別の関門。ログインできたかどうかが分かれ目。
多層防御:一枚破られても即陥落ではない。最小権限が被害を限定する。
一つの過去問から、ここまで一本につながった。