単純にこういった定義や標準があります、と紹介してもなかなか原文を参照することは敷居が高いです。このブログでも色々紹介できてきたので、ソフトウェア開発者が知っておくべきセキュリティの定義/標準/ガイドなどをまとめて紹介します。
セキュリティ対策の定義
そもそも定義を間違えていたら、ボタンの掛け違いは止まりません。まず、正しい定義を理解しなけばなりません。ソフトウェアのセキュリティといっても、他のセキュリティ対策の定義と基本は同じです。ISO 27000では広範囲なITセキュリティの対策を定義しています。勿論、用語の定義もあります。
- ISO 27000のセキュリティ対策の定義
標準と基本概念から学ぶ正しいセキュリティの基礎知識
ざっくり言うと、基本的にはセキュリティ対策の本質は緩和策である、と理解していれば良いでしょう。
ISO 27000は多数の企業が導入しているセキュリティ認証制度であるISMSの基盤となっている国際標準です。専門家であるはずのITエンジニアがISMSと異るセキュリティ対策の定義を使っていては信用されません。確実に押さえておきましょう。
セキュリティ対策の評価
セキュリティ対策の評価方法を理解することは次に重要です。セキュリティ対策は「リスクを削減/緩和/排除するもの」だけではありません。リスクを増加させる物もセキュリティ対策です。何らかのコード/ソフトウェアを利用する、ということはそのコード/ソフトウェアとそれに付随するデータに対する脅威を確実に増加させます。ISO 13335はISO 27000との重複も多く、現在はオブソリートになっていますがこの辺りを理解するためにはISO 13335は現在でも参考になると思います。
ISOの文書を参照するのが良いと思いますが、このブログでも簡単にまとめています。
セキュリティ対策の評価他面的に行います。セキュリティ対策はリスクを削減するのみでなく、増加させることも多くありあす。1つのセキュリティ対策でリスクに完全に対応できないのは常です。残存リスクを正しく評価し、適切な対策を導入し、適切なマネジメントサイクルで管理することが欠かせません。
セキュアコーディングの概念
特定のリスクに対するセキュリティ対策も重要ですが、基本的な考え方は更に重要です。どういった考え方で安全なソフトウェアを作るのか?基本概念を理解していないと、個別のリスクに対する対策だけでは全体的/根本的な対策になりません。新しいリスクが常に生まれているからです。
セキュアコーディングの基本的な仕組みを理解するには契約プログラミング/契約による設計が良いと思います。
セキュアコーディング/防御的プログラミングの基本的な考え方は難しくありません。論理的/体系的なセキュアコーディングの理解はを全ての開発者に必要です。
参考:
セキュリティ対策の具体的対策
Webアプリケーション向けの物のありますが、今時はWebインターフェースを全く持たないシステムは少ないと思います。特定のプログラミング言語に特化した具体的対策ではありませんが、セキュアコーディングの基本的考え方より個別具体的な対策ガイドラインになっています。
- SANS TOP 25
参考:開発者は必修、SANS TOP 25の怪物的なセキュリティ対策
- OWASP Secure Coding Practices – Quick Reference Guide
- OWASP TOP 10
https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project
OWASPでは特定の対策を簡潔にまとめたCheat Sheet(カンニングペーパー)を公開しています。よくあるセキュリティ上重要な処理から、言語やフレームワークなど様々なセキュリティ対策について簡潔にまとめた文書が多数公開されています。
プログラミング言語別に体系的にまとめた物にはCERTがセキュアコーディング標準を公開しているものがあります。
- CERT: C/C++/Android/Java/PERL
https://www.securecoding.cert.org/confluence/display/seccode/SEI+CERT+Coding+Standards
更に個別/具体的な脆弱性とその対策にはMITREの情報が役立ちます
- CVE(Common Vulnerabilities and Exposures)製品/ソフトウェアの脆弱性データベース
https://cve.mitre.org/
http://nvd.nist.gov/ - CWE (Common Weakness Enumeration)脆弱性カタログ
https://cwe.mitre.org/ - CAPEC(Common Attack Pattern Enumeration and Classsification)攻撃パターンカタログ
https://capec.mitre.org/
MITREではこの他にもSCAPなどの情報をまとめています。NISTの文書も参考になります。
まとめ
上から順番に重要度が高いです。用語の定義が異るようではコミュニケーションが成り立ちません。ISOの定義は論理的/体系的に考えられた定義です。セキュリティ対策の用語定義を理解し、標準的なセキュリティ対策の評価方法を知り、セキュアコーディング/防御的プログラミングのエッセンスを理解するだけでも、これらを知らないよりは遥かに安全なコードが「自分で書ける」ようになります。
これも追加した方がよいというお奨めがある場合、コメント頂けると助かります。
参考:
- このブログのPHP Securityカテゴリの記事はPHPプログラマ以外でも参考になると思います。