Webセキュリティ入門:HTTP・Cookie・脆弱性
多層防御(Defense in Depth)とは
この回でやること
1か所が破られても止まる形にする、多層防御の考え方を学びます。
- 読む 約 7 分
- 最後にクイズ 1 問
このレッスンで学ぶこと
多層防御(Defense in Depth)は、確認を1か所に預けない考え方です。この回では、何を重ねるのか、何を重ねても意味が無いのかを分けます。
読み終えるころには、層として数えてよい確認とそうでない確認を見分けられるようになります。
前提は「いつか破られる」
多層防御の出発点は、どの対策も破られ得るという前提です。
対策に不備が見つかることもあれば、設定が誤っていることも、想定していなかった使い方をされることもあります。1つの対策に全部を預けていると、そこが破られた瞬間に何も残りません。
そこで、破られても次で止まる形にします。
重ねるとはどういうことか
同じ確認を2回書くことではありません。違う層で、違う観点から確かめることです。
注文の詳細を返す機能で考えます。
- 入り口。 到達できる範囲を絞る。管理用の機能を外部に出さない
- 認証。 ログインしているかを確かめる
- 認可。 その注文がその人のものかを確かめる
- データの取り出し方。 そもそも自分の注文しか取れない問い合わせにする
- 応答の組み立て。 必要な項目だけを含める
- 記録。 誰が何を見たかを残す
- 監視。 普段と違う量や順番の利用に気づけるようにする
3が抜けていても4で止まります。4が緩くても5で余分は出ません。5まで抜けても、6と7があれば後から気づける。気づけることも防御のうちです。
記録と監視は攻撃を止めません。それでも、起きたことを知り、範囲を確かめ、二度目を防ぐために要ります。
重ねる価値がある場所
どこにでも重ねればよいわけではありません。確認が増えるほど、コードは読みにくくなり、可用性は下がります。
重ねる価値が大きいのは、次のような場所です。
- 失うものが大きいところ。 個人情報、お金、権限の変更
- 外から近いところ。 認証を経ずに触れる場所
- 間違えやすいところ。 同じ誤りが繰り返し起きている場所
逆に、影響の小さい表示だけの機能に何層も重ねても、労力に見合いません。どこに重ねるかは、起こりやすさと影響の大きさで決めます。
直列に並べる、並列に置かない
重ねるときは、通り抜けるために全部を越えなければならない形にします。
よくある誤りは、「ブラウザ側で確認しているから、サーバー側は簡単でよい」という置き方です。これは重なっていません。ブラウザ側は利用者の手の中にあるので、越えるべき層が実質1つしかない状態です。
信頼境界の外側にある確認は、層として数えない。 利用者の手の中にあるものは、こちらが引いた線の外側だからです。