アプリケーションセキュリティの重要性が高まっている昨今ですが、ウェブアプリケーションにおける代表的なセキュリティリスクについてまとめられた有名なドキュメント、OWASP Top 10 の2017年版が近くリリースされる予定です。本稿では、まずアプリケーションセキュリティについてのオープンなコミュニティである OWASP について紹介します。次いで OWASP が提供している OWASP Top 10 について紹介し、2017年版への変更内容についても触れます。また Top 10 に具体的にどのような内容が記載されているかをご理解いただくために、2017年版のA9「既知の脆弱性を持つコンポーネントの使用」の内容と変更点についても紹介します。
OWASPはウェブアプリケーションのセキュリティ向上を目的に設立されたオープンなコミュニティ
OWASP(The Open Web Application Security Project)は、ウェブアプリケーションのセキュリティ向上を目的に2001年に設立されて以降、ソフトウェアのセキュリティに関する情報や技術、プロセス等の共有・普及・啓発を行っているオープンなコミュニティです。特定のIT企業等の支配下にはなく、その活動には誰もが自由に参加可能です。ローカルチャプタ―(支部)は世界中にあり、ワールドワイドに活動を行っています。そしてその成果であるドキュメントやツールは無料で提供されています。詳細については https://www.owasp.org/ を参照して下さい。
OWASPには多数のプロジェクトが立ち上がっています。中にはすでにクローズになっているものや非アクティブなものもありますが、執筆時点(2017年8月)でアクティブであるOWASPのプロジェクトのいくつかを、以下に挙げます。
プロジェクト | 概要 |
---|---|
OWASP Top Ten Project | 注意喚起と啓蒙を目的に、ウェブアプリケーションの最も代表的なセキュリティリスクを10個に絞り、その概要と対策をまとめたドキュメントとして、OWASP Top 10 を提供しています。 |
OWASP Proactive Controls | どのソフトウェア開発プロジェクトにおいても考慮すべきセキュリティ対策事項を10個に絞り、その概要と具体策をまとめたドキュメントとして、OWASP Top 10 Proactive Controls を提供しています。 |
OWASP Application Security Verification Standard Project | ウェブアプリケーションがどの程度セキュアであるべきかの検証レベルを定義し、各検証レベルのウェブアプリケーションが満たすべきセキュリティ要件をまとめたドキュメントとして、OWASP Application Security Verification Standard (ASVS) を提供しています。 |
OWASP Cheat Sheet Series | アプリケーションセキュリティに関連する多様なトピックについて、それぞれの情報をまとめたドキュメント群を、OWASP Cheat Sheets として提供しています。 |
OWASP Code Review Project | セキュリティの観点を持ってコードレビューを行う際の技術的参照ドキュメントとしてまとめられた、OWASP Code Review Guide を提供しています。 |
OWASP SAMM Project | SAMM (Software Assurance Maturity Model : ソフトウェア保証成熟度モデル)は、組織のソフトウェアセキュリティ対策における成熟度レベルを定義し、評価・改善を行うためのフレームワークとして公開されています。 |
OWASP Zed Attack Proxy Project | OWASP Zed Attack Proxy (ZAP) は、ウェブアプリケーションに対する自動的な脆弱性スキャンや、手動によるペネトレーションテストに用いられるツールです。 |
OWASP Dependency Check | OWASP Dependency Check は、Java や .NET 等のアプリケーションに対して、それらが依存しているライブラリに既知の脆弱性がないかをチェックするツールです。 |
OWASP WebGoat Project | OWASP WebGoat は、ウェブアプリケーションの脆弱性への攻撃を学習するために、脆弱性を故意に仕込んで作られたウェブアプリケーションです。 |
OWASP AppSensor Project | OWASP AppSensor プロジェクトでは、ウェブアプリケーションへの攻撃をアプリケーション内部で検知して対処する仕組みのガイドとリファレンス実装を提供しています。 |
上に挙げたもの以外にも多彩なプロジェクトがあり、また新しいプロジェクトが追加されることもあります。詳しくは https://www.owasp.org/index.php/Category:OWASP_Project を参照して下さい。
なお、日本にもローカルチャプターがあります。それも OWASP Japan だけでなく、OWASP Kansai や OWASP Kyushu など首都圏以外の地域にもあり、活動の幅を広げています。日本のローカルチャプターでは、OWASP ドキュメントの日本語翻訳の提供のほか、日本独自の成果物として「Webシステム/Webアプリケーションセキュリティ要件書 2.0」の提供や、日本セキュリティオペレーション事業者協議会との共同ワーキンググループとして「脆弱性診断士スキルマッププロジェクト」の活動がされています。詳しくは https://www.owasp.org/index.php/Japan を参照して下さい。
2017年版の OWASP Top 10 がリリース予定
上のプロジェクトの表にも記したとおり、OWASP Top 10はウェブアプリケーションの最も代表的なセキュリティリスクを10個に絞ってその概要と対策をまとめたドキュメントであり、OWASP の最も有名な成果物の一つでもあります。2003年に初めてリリースされた後、2004年、2007年、2010年、2013年と3年毎にリリースされてきました。今年に2017年版がリリースされる予定です。2017年版はRC1(リリース候補1)が4月に公開され、6月末までのパブリックコメント期間の後、7月か8月にはリリースされる予定でしたが、結果RC1は取り下げられました。今後A7・A10の項目は別の項目に置き換えられ(A7・A10以外の項目はそのまま)、11月にリリースされる予定となっています。詳しくは https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project を参照して下さい。
2013年版および2017年版のRC1で挙げられていた項目は以下です。
OWASP Top 10 - 2013 | OWASP Top 10 - 2017 RC1 (Rejected) |
---|---|
A1 - インジェクション | A1 - インジェクション |
A2 - 認証とセッション管理の不備 | A2 - 認証とセッション管理の不備 |
A3 - クロスサイトスクリプティング (XSS) | A3 - クロスサイトスクリプティング (XSS) |
A4 - 安全でないオブジェクト直接参照 | A4 - アクセス制御の不備 |
A5 - セキュリティ設定のミス | A5 - セキュリティ設定のミス |
A6 - 機密データの露出 | A6 - 機密データの露出 |
A7 - 機能レベルアクセス制御の欠落 | A7 - 不十分な攻撃防御 |
A8 - クロスサイトリクエストフォージェリ (CSRF) | A8 - クロスサイトリクエストフォージェリ (CSRF) |
A9 - 既知の脆弱性を持つコンポーネントの使用 | A9 - 既知の脆弱性を持つコンポーネントの使用 |
A10 - 未検証のリダイレクトとフォワード | A10 - 防御されていないAPI |
※上の表は The OWASP Foundation による OWASP Top 10 - 2017 rc1 の Release Notes のページに記載されている表の日本語訳です。
また、2013年版から2017年版のRC1への変更点は、OWASP Top 10 - 2017 rc1 の Release Notes に次のように記載されています。
2013年版のA4「安全でないオブジェクト直接参照」とA7「機能レベルアクセス制御の欠落」がA4「アクセス制御の不備」に再統合されました。
それらは2007年に「アクセス制御の不備」から2つに分割されたもので、アクセス制御における(データと機能性の)各々の問題に、より注意を向けるためでした。もうその必要性はないと思われるため、それらは再び統合されることとなりました。
A7「不十分な攻撃防御」が追加されました。
長年、攻撃に対して防御が不十分であることを追加しようと考えてきました。データを収集した結果、多くのアプリケーションやAPIは、手動・自動のどちらの攻撃に対しても、それを検知し、防ぎ、応答する基本的な能力を欠いていることがわかっています。アプリケーションやAPIの所有者は、攻撃を防御するためのパッチを迅速に適用できる必要があります。
A10「防御されていないAPI」が追加されました。
現在のアプリケーションやAPIは、ブラウザ上の JavaScript やモバイルアプリケーションのような、リッチなクライアントアプリケーションを含んでいることが多く、それらは(SOAP/XML, REST/JSON, RPC, GWT 等の)何らかの種類のAPIに接続します。これらのAPIはあまり守られておらず、多くの脆弱性を含んでいることが多いです。この主要で新たな問題に焦点が当てられるよう、追加されました。
2013年版のA10「未検証のリダイレクトとフォワード」が削除されました。
2010年に、この問題の認知度を上げるためにそれが追加されました。しかし、この問題は予想されたほど蔓延していないことが、データで示されています。そのため、Top 10 の2世代のリリースを経て、今回削除されました。
※以上の内容は、The OWASP Foundation による OWASP Top 10 - 2017 rc1 の Release Notes のページの一部の日本語訳です。
ここで、Top 10 の各項目についてどういった内容が記載されているかをご理解いただくために、その中の1つとして2017年版のA9を採りあげます。以下はその内容を日本語に訳したものです。文字に背景色が付いている箇所は、2013年版から内容が変わっていることを示しています。
A9 - 既知の脆弱性を持つコンポーネントの使用
ライブラリ、フレームワーク、および他のソフトウェアモジュールなどのコンポーネントは、アプリケーションと同じ権限で実行されます。脆弱なコンポーネントが悪用されて攻撃されると、深刻なデータ損失やサーバ乗っ取りまでに至る可能性があります。アプリケーションやAPIが既知の脆弱性を持つコンポーネントを使用していると、アプリケーションの防御は弱体化し、様々な攻撃や影響が可能になるかもしれません。
脅威となる人 | 攻撃手法 | セキュリティ上の弱点 | 技術的影響 | ビジネスへの影響 |
---|---|---|---|---|
アプリケーションに依る | 悪用難易度:普通 | (弱点の)蔓延度:中 (弱点の)検出難易度:普通 |
中程度の影響 | アプリケーション/ビジネスに依る |
脆弱なコンポーネント(フレームワークのライブラリなど)が自動検出ツール等によって特定され、悪用される可能性があります。そのため、想定される攻撃者でない者も脅威となってきています。 | 攻撃者は、スキャンや手動分析を通じて弱いコンポーネントを検出します。そして必要に応じて悪用の仕方をカスタマイズし、攻撃を実行します。使用されるコンポーネントがアプリケーションの深くにある場合、攻撃は困難になります。 | 多くのアプリケーションやAPIに問題があるのは、開発チームがコンポーネントやライブラリが最新であるかどうかに焦点を当てていないためです。時には、開発者は使用しているコンポーネントの全てを把握さえしておらず、バージョンを気に留めてもいません。さらに、コンポーネントの依存関係によって事態が悪化します。既知の脆弱性を持つコンポーネントを検出するのに役立つツールが一般的に利用可能になりつつあります。 | 弱点の範囲は、インジェクション、アクセス制御の不備、XSS等の全てであるかもしれません。影響は、軽微なものからホストの乗っ取り、データの漏洩まで多岐にわたります。 | アプリケーションの各脆弱性がもたらすビジネスへの影響を考慮して下さい。それは些細な事である場合もありますが、非常に危険な状態である場合もあります。 |
脆弱性有無の確認
使っているコンポーネント(クライアント側・サーバ側の両方)について新しい脆弱性の報告を継続的に監視することは大変なことです。脆弱性報告が標準化されていないために、この監視はとても難しくなりがちで、必要とする詳細を探し出すことは困難です(例えば製品ファミリー内にあるまさにそのコンポーネントが脆弱性を持つような場合)。全く困ったことに、多くの脆弱性がCVEやNVDのような情報センターに報告・集約されていません。
脆弱性の有無を確認するには、これらのデータベースを検索し、プロジェクトのメーリングリストや発表で脆弱性に関することを見逃さないようにしないといけません。このプロセスは手動で、あるいは自動化ツールを用いて行うことができます。コンポーネントに脆弱性があることがわかったら、本当に脆弱であるかどうかを慎重に評価する必要があります。ソースコードにコンポーネントの脆弱性を持つ部分が使用されているかどうか、注意を要するまでの影響になるかどうかを確認する必要があります。脆弱性報告が意図的に曖昧にされていると、それらの確認も実施するのが困難になるかもしれません。
防止方法
ほとんどのコンポーネントプロジェクトは、古いバージョンに対する脆弱性パッチを作成しません。したがって問題を解決する唯一の方法は次のバージョンにアップグレードすることですが、それには他のソースコード変更が必要になるかもしれません。そのため、ソフトウェアプロジェクトに以下のようなプロセスが必要になります。
クライアント側・サーバ側両方のコンポーネントのバージョンや依存性を、versions, Dependency Check, retire.js 等のツールを用いて継続的に管理して下さい。
使用しているコンポーネントに脆弱性があるか、NVDのような情報源を継続的に監視して下さい。プロセスを自動化するためにソフトウェア構成分析ツールを使って下さい。
ライブラリを分析し、変更をかける前のランタイムで実際に呼び出されることを確認して下さい。多くのコンポーネントがロードされなかったり呼び出されなかったりします。
コンポーネントをアップグレードするのか(そして必要なら該当するアプリケーションを書き換える)、あるいはHTTPトラフィックやデータフロー、コード実行を分析して脆弱性の悪用を妨げる仮想パッチを適用するのかを決めて下さい。
攻撃シナリオの例
ほとんどの場合、コンポーネントはアプリケーションのフル権限で実行されるため、コンポーネントに欠陥があれば、深刻な影響をもたらす結果となりえます。欠陥は(コーディングエラーのように)偶発的にも、あるいは(コンポーネントのバックドアのように)意図的にも生じえます。発見されている悪用可能なコンポーネントの脆弱性の例を以下に示します。
Apache CXF の認証迂回 - IDトークンの提供失敗により、攻撃者はフル権限で任意のWebサービスを呼び出せます。(Apache CXF は一つのフレームワークで、Apache アプリケーションサーバと混同しないように)
Struts2 遠隔コード実行 - Content-Type ヘッダに攻撃を仕込んで送ると、そのヘッダの内容がOGNL表現として評価されます。それによりサーバ上で任意のコードが実行可能になります。
これらのコンポーネントはアプリケーションユーザに直接アクセスされるため、それらの脆弱なバージョンを使用しているアプリケーションは攻撃の影響を受けやすくなります。他の脆弱なライブラリを使用していても、それらがアプリケーションの内部で使用されていれば、悪用されにくいでしょう
参考資料
OWASP
その他
- Unfortunate Reality of Insecure Libraries
- MITRE Common Vulnerabilities and Exposures (CVE) search
- National Vulnerability Database (NVD)
- Retire.js for detecting known vulnerable JavaScript libraries
- Node Libraries Security Advisories
- Ruby Libraries Security Advisory Database and Tools
※以上のA9の内容は、The OWASP Foundation による OWASP Top 10 - 2017 rc1 の T10 のページの一部、および A9 のページの内容の日本語訳です。
2013年版のA9でも「既知の脆弱性を持つコンポーネントの使用」が採りあげられていましたが、2017年版では次の変更がなされています。
(弱点の)蔓延度が「高(WIDESPREAD)」から「中(COMMON)」に変更されています。
既知の脆弱性を検出するためのツールが、本リスクの認知に伴って利用されるようになり、対策が講じられてきていることによるものと思われます。
(弱点の)検出難易度が「困難(DIFFICULT)」から「普通(AVERAGE)」に変更されています。
APIについて言及されています。
2013年版では脆弱性を持つコンポーネントを使用するものとしてアプリケーションのみ言及されていましたが、昨今の状況を鑑みてAPIへの言及が追加されたものと思われます。
最後に、A9の「防止方法」で採りあげられている3つのツールについて、その概要を以下にまとめておきます。
ツール | 概要 |
---|---|
versions | Maven のプラグインとして提供されており、Maven プロジェクト内のライブラリの既知の脆弱性を検出します。最新バージョンのライブラリを自動適用して pom.xml を書き換えるような機能もあったりします。 |
Dependency Check | 上でOWASPのプロジェクトの例としても紹介した、OWASPのツールです。アプリケーションの依存性をチェックし、依存しているライブラリの既知の脆弱性を検出します。コマンドライン・インタフェースのほか、Maven や Jenkins のプラグイン等でも提供されています。 |
retire.js | JavaScript ライブラリの既知の脆弱性を検出するツールです。コマンドライン・インタフェースのほか、Chrome や Firefox の拡張機能、さらに(脆弱性診断ツールとしても利用される)Burp や(上でOWASPのプロジェクトの例としても紹介した)OWASP ZAP のプラグイン等でも提供されています。 |
留意事項
OWASP Top 10 のドキュメントにも記載されていることですが、Top 10 はあくまで代表的なセキュリティリスクについてまとめたものです。漏れなく重複なく精密に分類されたものではありません。したがって、Top 10 に記載されているもののみ対策すればよいというものではなく、ほかにも考慮すべき数多くのリスクや問題が存在します。Top 10 は、問題に今直面していることの認識を広めて啓発するためのツールであり、記載されているリスクへの対策は取っ掛かりにすぎません。技術の進化や利用範囲の拡大、新技術の台頭等によって、新たな問題も生まれてきつつあり、今後さらにセキュリティが重要になってくることは確実です。Top 10 への対策を皮切りに、アプリケーションセキュリティの取り組みを強化していきましょう。
まとめ
本稿では、OWASP と OWASP Top 10 について簡単に紹介しました。アプリケーションセキュリティはウェブアプリケーション開発・運用において必須の知識です。OWASP Top 10 の2017年版がリリースされた際には、それをぜひご参照いただくことをお勧めします。また OWASP には他にも、アプリケーションセキュリティの取り組みを強化するための有用なドキュメントやツールが種々ありますので、ぜひご活用下さい。