ホワイトリストの作り方

(更新日: 2016/10/31)

ホワイトリストの考え方/作り方は難しくありません。しかし、間違えていることが少なくないようです。

GoogleがCSP(Content Security Policy – ホワイトリスト型のJavaScriptインジェクション対策)の利用状況を調べたところ以下のような結果が得られました。

we take a closer look at the practical benefits of adopting CSP and identify significant flaws in real-world deployments that result in bypasses in 94.72% of all distinct policies.

なんと、約95%のCSP利用サイトがCSPの保護が無効になるような設定になっていた、としています。

 

ホワイトリストの作り方

ホワイトリストの作り方はとても簡単です。

  • デフォルトで拒否する
  • 許可するモノだけ許可する(最小限のモノだけ許可)

これだけです。どういったモノを許可するか?最小限のモノとは何か?はケースバイケースです。コンテクストに合わせて判断します。

CSPはホワイトリストで保護することが前提になっています。CSPの定義で多くみられた根本的な間違いに「全て許可している」「不要な物まで許可している」といった設定があります。

ホワイトリストの作り方は簡単ですが、全て拒否した上で、必要最小限のモノだけ許可しないとホワイトリストになりません。

  • 基本に忠実であること
  • 意図せず許可しているモノがないようにすること(CSPの場合、仕様を正しく把握する)

これらに注意する必要があります。

 

ブラックリストの作り方

セキュリティ対策ではホワイトリストを使うのが基本です。ホワイトリストの反対がブラックリストです。参考までにブラックリストの作り方も紹介します。ホワイトリストの作り方の反対をするだけです。

  • デフォルトで許可する
  • 許可できないモノだけ拒否する

ブラックリストが十分有効に機能するには”許可できないモノを漏れ無く全て把握”する必要があります。一部の許可できないモノを把握するのは簡単です。例えば、HTML出力の場合は<, >, &, ‘, ” が許可できない文字です。

しかし、HTML出力の文字列としては<, >, &, ‘, ” 以外に、制御コードや壊れた文字コードも許可できないモノに入ります。これらを忘れていると誤作動、つまり脆弱性の原因になります。

ブラックリストの方が問題のある定義を作りやすいです。このためセキュリティ標準やガイドラインではホワイトリストを優先するとしています。

 

まとめ

ホワイトリストでは対応できない場合もあるのでブラックリストは同じように重要/有効、とする考え方もあるようですが、この考え方はピント外れです。

ブラックリストは思考手法として脆弱です。ブラックリスト対策でホワイトリスト対策並みの効果を得るには”全てのNGケースを正確に把握する必要”があります。例えば「ユーザー名に改行文字があると不正メールが送られたり、Webページの改ざんができる事がある」と認識している初心者は皆無でしょう。間違いを起こしやすいのでホワイトリストを優先すべきとされています。セキュリティが重要な場合は常にホワイトリスト型の制限の適用を考えるべきです。

ソフトウェア開発者にとってホワイトリスト優先は特に重要です。システム管理者のように出来合いのシステムを使わざるを得ない場合、ブラックリスト型のセキュリティ対策が”効果的”である場合1もあります。しかし、ソフトウェア開発者のように自分が自由に作れるソフトウェアにおいてブラックリストの方が”効果的”であるケースはあまりありません

セキュリティ対策を考える場合、どのようなコンテクストでのセキュリティ対策なのか?が重要です。ソフトウェア開発におけるセキュリティではホワイトリスト優先は原則である、と考えると間違いの可能性が少なくなります。

GoogleのCSP Eavaluatorで見てみると、CSPを「ブラックリスト対策と勘違いしているのでは?」と思えるような定義もありました。

  • ソフトウェア開発におけるセキュリティではホワイトリスト優先は原則である

この考え方であれば少なくとも現状(95%のCSPサイトが不適切)のようにはならなかったのではないでしょうか?

 

 


  1. 例えば、ブラックリスト型で保護するWAF(Web Application Firewall)は”ソフトウェアを改修できない”システム管理者にとっては”効果的”な対策です。 

Comments

comments

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です