「入力バリデーションはセキュリティ対策である」
もちろん入力バリデーション対策がすべてであるわけではなく,
入力のバリデーションはすべてのプログラムに必須の保護機能です。一部に
入力バリデーションをセキュリティ対策としているのは筆者のみではありません。世界的に利用されているセキュリティ標準でも,
今回は入力のバリデーションが何故セキュリティ対策であるか考えてみます。
“バグ” と “脆弱性” と “セキュリティホール”
セキュリティ対策は,
入力バリデーションが論理的にセキュリティ対策であることは,
- バグ:
- 意図しないプログラムの動作。コードの問題でなく設計の問題である場合もある。
- 脆弱性:
- バグの中でセキュリティ維持に悪影響を与える可能性があるバグ
(※1)。 - セキュリティホール:
- 脆弱性の中で実際にダメージを与えるバグ
(※2)。
入力のバリデーションは,
入力バリデーションが脆弱性・
「セキュリティ対策はバグ対策である」
セキュリティ対策標準であるPCI DSSとISOでは入力バリデーションがどのように定義されているか確認してみましょう。
- ※1
- ISO13335-1では
「脅威によって影響を受け得る資産又は資産グループの弱さ」 と定義されています。 - ※2
- 標準規格などで
「セキュリティホール」 は用語として明確に定義されていませんが, 一般に実際に攻撃可能な脆弱性がセキュリティホールと呼ばれることが多いです。
PCI DSS (OWASP/ SANS)
PCI DSS
PCI DSSでは
6.
5 Develop applications based on secure coding guidelines. Prevent common coding vulnerabilities in software development processes, to include the following: Note: The vulnerabilities listed at 6.
5.1 through 6. 5.9 were current with industry best practices when this version of PCI DSS was published. However, as industry best practices for vulnerability management are updated (for example, the OWASP Guide, SANS CWE Top 25, CERT Secure Coding, etc.), the current best practices must be used for these requirements. 筆者による訳
(※現在, 日本語版を選択しても英語版となるため) 6.
5 セキュアガイドラインに従ったアプリケーション開発を行わなければならない。以下のソフトウェア開発における一般的なコーディングにおける脆弱性を防ぐできである。 備考:6.
5.1から6. 5.9に記載された脆弱性対策はPCI DSSが公開された時点でのベストプラクティスである。しかし, ベストプラクティスは脆弱性対策とともに更新される (例:OWASPガイド, SANS CWE Top 25, CERTセキュアコーディング, など)。これらの要求事項に適合させるためには現在のベストプラクティスを利用しなければならない。
※強調は筆者による
PCI DSSでは,
- OWASPガイド
OWASP
(Open Web Application Security Project) はPCI DSS策定に深く関わっていることでよく知られています。OWASPのコードレビューガイド Ver 1. 1の入力バリデーションの部分には, このように記載されています。 Input validation is one of the most effective application security technical controls. It can mitigate numerous vulnerabilities (but not all). Input validation is more than checking form field values.
訳:入力バリデーションは最も効果的なアプリケーションセキュリティ制御技術の1つです。入力バリデーションは
(すべてではないが) おびただしい数の脆弱性の影響を緩和することができます。入力バリデーションはフィールド値をチェックするだけではありません。 入力バリデーションは最も効果的なアプリケーションセキュリティ制御技術の1つと,
OWASPガイドでも入力バリデーションをセキュリティ対策の重要な機能だと位置づけていることが分かります。 - SANS Top 25
- CERTセキュアコーディング
CERTセキュアコーディングはC/
C++/Javaのコーディング指針として非常に参考になる文書です。しかし, 項目ごとのコーディング指針であるため順位などはないので, どのように記載されているかは省略します。
SANSはセキュリティのトレーニング,
PCI DSSで参照されているSANS Top 25の中で
ID | Description |
---|---|
M1 | Establish and maintain control over all of your inputs. |
M2 | Establish and maintain control over all of your outputs. |
M3 | Lock down your environment. |
M4 | Assume that external components can be subverted, and your code can be read by anyone. |
M5 | Use industry-accepted security features instead of inventing your own. |
GP1 (general) | Use libraries and frameworks that make it easier to avoid introducing weaknesses. |
GP2 (general) | Integrate security into the entire software development lifecycle. |
GP3 (general) | Use a broad mix of methods to comprehensively find and prevent weaknesses. |
GP4 (general) | Allow locked-down clients to interact with your software. |
ここでも入力バリデーションは非常に重要なセキュリティ対策の第一番目として取り上げられています。
2009年のSANS Top 25
CWE-20: 不適切な入力の妥当性チェック
これは,
健全なソフトウェアが犠牲となる原因の第一位であるため, 所定の基準に従った入力を条件付けておかないと, 自ら災難を招くことになる。
※強調は筆者による
SANSでも入力バリデーションを非常に重要なセキュリティ対策であるとしていることがわかります。