2018/04/06)ホワイトリストとブラックリストの議論はFirewallの利用が一般的になる過程で十分に議論され、90年代に議論され尽くした、と思っていました。解説の余地はまだまだあるようです。ネットワークFirewallによるセキュリティ対策を簡単に振り返り、セキュアコーディングの現状を考察したいと思います。追記:このエントリはネットワークFirewallのポートフィルタリングについて議論しています。ホワイトリストで対策すべきはアプリケーション自体です。ネットワークFiewallはホワイトリスト型セキュリティで対策しますが、WAFなどのアプリケーションFirewallはブラックリスト方式で対策するのが現実的です。ホワイトリストの基本中の基本は”デフォルトで全て拒否する”であることに注意してください。全て拒否した上で、許可するモノ、を指定しないとホワイトリストになりません。繰り返しになりますが定義からホワイトリスト=許可リストブラックリスト=拒否リストセキュリティ対策の原則の一つに、攻撃可能な範囲の最小化、があります。この原則に従うにはリソースへのアクセス許可を最小化(ホワイトリストで可能な限り限定)します。SheetネットワークFirewallによるセキュリティ対策ネットワークFirewallが一般的になり始めたころはインバウンドのパケットフィルタリングに「ブラックリストでも十分効果がある。フィルタリングより脆弱なアプリケーションをアップデートするのが本筋である」のような意見も散見されました。今現在このような意見を持つセキュリティ専門家はいないと思います。90年代は専門家と言われるような人でもこのような意見を持つ方もいました。現在ではFirewallでインバウンドパケットホワイトリストを作成し、限定したパケットのみを許可する構成にする事に異論がある方はいないと思います。ソフトウェアは「入り口ノーガード設計」のままで良いのか?少し遅れてアウトバウンドパケットのフィルタリングも当たり前になりました。インバウンドパケットのフィルタリングだけでは十分なセキュリティは確保できないので、アウトバウンドパケットのフィルタリングも必要である、と考えられました。アウトバウンドパケットもホワイトリストを作成し、限定したパケットのみ通過させる構成が当たり前になりました。(少なくとも組織レベルのネットワークでは)現在では、プロキシやステートフルフィルタリング、クライアントレベルでのネットワーク利用の制御などを行い、アウトバウンドパケットに対してホワイトリストを作成して制限するのは当たり前になっています。WindowsにFirewall機能が無かった頃に、ZoneAlarm(WindowsクライアントOS用ファイアーウォールの先駆け。ホワイトリスト方式のファイアーウォールを簡単に利用できた)をWindowsに必須のアプリケーションとして利用していた方も少なくないと思います。Firewallにはゲートウェイ型、クライアント型の2種類がありますが、その両方ともにインバウンドとアウトバウンドパケットにホワイトリストを作成し、パケットをフィルタリングする事が当たり前になっています。言葉を変えると、ネットワークセキュリティ対策として、入力(インバウンドパケット)と出力(アウトバウンドパケット)両方にホワイトリストと適用し、安全性を向上させる事はセキュリティ専門家でなくても当たり前になっていると言えます。システム開発におけるセキュリティ対策はどうでしょうか?「入力バリデーション」の概念だけはやっと当たり前になったのようですが、入力バリデーションを入力処理でやっていなかったり、2000年から国際セキュリティ標準に記載されている厳格な妥当性検証には程遠い不十分だったります。2010年代後半になっても「入力バリデーションはセキュリティ対策ではない」と非論理的な主張も少なくありません。出力のセキュリティ対策にも不十分なシステムが多数存在します。コーディングレベルでは入力検査は可能な限りホワイトリスト方式で限定的に検査する事が当たり前になりつつありますが、出力のセキュリティレベルを向上させるためにホワイトリスト方式で限定的(安全に)に出力するスタイルはまだまだ一般的とは言えないようです。参考:出力対策の三原則セキュリティに真剣に取り組む姿勢がある企業は、出力に対するホワイトリスト方式の導入は数年前から本格的に取り組んでいます。一般的になったか?というと、残念ながらどうもそうではないと言えるようです。Policy)を大規模に調査したところ95%のサイトがCSPの定義を正しく使わず、本来CSPでXSSが防止できていないとしています。ホワイトリストの作り方を理解していない開発者は世界的にも多いようです。ホワイトリスト方式が難しいサービスを運営しているサイトもありますが、ほとんどのWebサイトは静的なホワイトリスト方式ポリシーを利用できるはです。不整合が起きてはならない場合、トランザクションはシリアライザブルPHPのOpenSSL関数を利用して暗号化する例そもそもエスケープとは何なのか?紹介エレクトロニック・サービス・イニシアチブのWebシステムのコンサルタントのブログです。PHPの開発、PHP4.x/5.xレガシーPHPセキュリティパッチサービスなどを行っています。ブログのサブタイトルを「書かない日記」としているのは、ブログを始めた時にあまり書かないつもりで始めたのでこのサブタイトルになっています。yohgaki@ohgaki.net私が記述したブログ中のコードは記載が無い場合はMITライセンスです。その他のコードは参考リンクなどのライセンス情報を参照ください。