はじめに
脆弱性対応に追われる状況は、開発からデプロイまでの時間を浪費し、またサイバー攻撃への対応力を弱めがちです。そこで、開発者が最初からセキュアにソフトウェアを構築する能力を身につける必要性が高まっています。前回の記事では、深刻な影響のある10の脆弱性についてまとめた「OWASP Top 10」から、それぞれの脆弱性についての解説や、開発者の方に活用してほしいOWASPコミュニティの成果物を紹介しました。OWASP Top 10によりソフトウェア・セキュリティの世界の扉を開くきっかけになれば幸いです。
OWASP Top 10では各脆弱性の概要、脆弱性の有無の確認方法、防止方法などを理解できることを紹介しました。このドキュメントは、脆弱性そのものを軸として説明がなされていることから、事前の対策、すなわち脆弱性が発生しないようにするための防止方法を軸として見た視点とは異なっています。そのため、開発者は、それらの脆弱性を作りこまないようにするためにはどうすれば良いか、という視点で活用するには、いささか遠回りです。
本記事で紹介するガイドライン「OWASP Top 10 Proactive Controls」は、事前にそのような脆弱性を作りこまないようにする具体的な手法について解説しています。"Proactive Control"とは"事前の対策"を意味します。このガイドラインに基づいてソフトウェア構築・開発を行うことにより、かなりの程度重大な脆弱性を作りこまないようにすることができます。まさにセキュアなソフトウェア開発の具体的な第一歩として有効な10の手段が紹介されています。
では、早速、OWASP Top 10 Proactive Controlsから、セキュアなソフトウェア開発に一歩足を踏み出しましょう!
OWASP Top 10 Proactive Controlsとは
このガイドラインは、2014年に公開された2.0版が最新版であり、2015年末に向けてマイナーバージョンアップすることが予定されています。本記事公開時点では英語版のみであり日本語化されていませんが、要点を絞って記載されているため、英語のままでも内容を理解する敷居はそれほど高くはありません。ではその中身を早速見てみましょう。
すぐに効く10のセキュリティ向上技術
OWASP Top 10 Proactive Controlsでは、脆弱性を作りこまないようにする以下の具体的な対策が紹介されています。
項番 | 対策 | 概要 |
---|---|---|
C1 | クエリのパラメータ化 | SQLインジェクションなどのインジェクション攻撃を防ぐために、プレースホルダを用いてクエリをパラメータとして解釈させます。 |
C2 | エンコード処理 | インジェクション攻撃やXSS攻撃を防ぐために、特殊な文字列を無害な文字列にエンコードします。 |
C3 | 入力値検証 | インジェクション攻撃やXSS攻撃を防ぐために、正規表現を用いたホワイトリスト、ブラックリストを用いて意図しない入力を制限します。 |
C4 | 適切なアクセス制御 | 本来閲覧を許可されていない機能やリソースへのアクセスを防ぐために、すべてのリクエストに対してアクセス制御(認可)を行います。アクセス制御方針に不備があった場合の手戻り工数は大きくなりがちなため、開発工程前の設計工程においてその内容について入念に確認する必要があります。 |
C5 | アイデンティティおよび認証制御 | 第三者によるなりすましを防ぐために、ユーザIDや本人のみが知りうる情報などを用いてアクセスを試みているユーザが誰なのかを確認(認証)します。認証後はセッション管理により、システムとユーザの通信を維持します。 |
C6 | データおよびプライバシー保護 | 通信内容が傍受され情報が漏洩する、データベースに格納してある機密性の高い個人情報などの情報が漏洩するなどを防ぐために、通信内容やデータベースの格納情報は暗号化し、仮に第三者にその内容が渡っても情報が解読されないようにします。 |
C7 | ロギング、エラーハンドリング、侵入検知 | 不正なアクセスなどによりシステムが停止してしまった場合に、その痕跡を分析、原因特定、改善につなげることを目的として、ログを記録します。ただし、記録する情報には、個人情報や機密性の高い情報が含まれないように留意する必要があります。 |
C8 | フレームワークやライブラリの活用 | スクラッチ開発による大きなセキュリティホールの作りこみを防ぐために、信頼におけるフレームワークやライブラリを活用することを推奨します。ただし、それらフレームワークやライブラリを最新に保っておくことが重要です。 |
C9 | より具体的なセキュリティ要件の考慮 | ソフトウェアのセキュリティを高めるために個別具体的なセキュリティ対策を考えておく必要があります。例えば、パスワード変更のフローや情報を更新する際の完全性のチェック、ユーザ権限管理やトレーサビリティーの確保などが挙げられます。 |
C10 | セキュリティ設計の把握 |
いざというときに迅速に対応できるように、ソフトウェアに関する以下のことを把握、管理しておく必要があります。 ・どのような技術(言語、プラットフォームなど)を用いているか。 ・どこまでが責任(管理)または信頼すべき範囲であるか。 ・どこから攻撃を受ける可能性があるのか。 |
項番が小さいものほど開発時のみに考慮しておくべき技術的な対策であり、項番が大きいものほど開発時に加え、設計や運用においても考慮しておきたい管理的な対策も含まれているのが特徴です。すなわち、開発時におけるセキュリティに関する理解に加え、工程横断的なセキュリティの考え方の理解も深めることができます。
OWASP Top 10 Proactive Controlsでは各対策について、以下の項目を説明しています。
項番 | 項目 | 内容 |
---|---|---|
① | 対策名 | 対策の名称。これだけでどのような対策なのかをざっくり把握できます。 |
② | 対策内容 | ソフトウェアにはどのようなリスクが存在し、そのリスクに対してどのように対策するかについて解説しています。 |
③ | 具体的なコード | 対策を実現するための具体的なコードを一例として記載しています。 |
④ | リファレンス | 対策内容を補足するために、関連性の高いOWASPコミュニティのドキュメントを紹介しています。 |
⑤ | ツール | OWASPコミュニティからリリースされているものを中心に、対策を実現するためのツールを紹介しています。 |