In this article
アプリケーションの脆弱性:コードの欠陥とセキュリティリスクを回避する
アプリケーションの脆弱性とは?
アプリケーションの脆弱性とは、悪意ある攻撃者に悪用され、セキュリティ侵害につながる可能性のある、アプリケーションのコードに存在するシステム上の欠陥や弱点です。
2020年のデータ侵害による平均コストは386万ドルに上り、既知の脆弱性の実に82%がアプリケーションコードに存在していました。セキュアコーディングのベストプラクティスとアプリケーションセキュリティソリューションを組み合わせることで、アプリケーション内のコード脆弱性のリスクを軽減できます。
ソフトウェアセキュリティとアプリケーションセキュリティ
ソフトウェアセキュリティは、ソフトウェアの基盤となるプログラムロジックの保護を指します。アプリケーションセキュリティとは異なり、ソフトウェアセキュリティではソフトウェア開発ライフサイクル(SDLC)の初期段階と、アプリケーションの基盤となるコードに重点を置きます。
ソフトウェアがJARやコンテナイメージなどのデプロイ可能な成果物になると、アプリケーションセキュリティの領域に入ります。SDLCのこの段階では、ソフトウェアだけでなく、本番環境への移行に関わるさまざまな相互接続されたシステム、インフラストラクチャ、ネットワーク経路にも焦点が移ります。多くの場合、DevOpsエンジニアなど、運用を担当するスタッフがアプリケーションのセキュリティ確保により積極的に関与します。
SDLCの早い段階から投資することは、アプリケーションセキュリティの取り組みに効果をもたらします。欠陥や脆弱性の少ないアプリケーションほど、セキュリティを確保しやすくなります。コードの脆弱性があると、運用チームやセキュリティエンジニアは事前に対処するのではなく、後手に回って対応せざるを得ません。
アプリケーションセキュリティの重要性
アプリケーションセキュリティでは、ビルドとリリースの各サイクルでプロアクティブに取り組む必要があり、脅威の特定には自動化が活用されることもよくあります。DevOpsエンジニアは、ビルド、テスト、リリースの各段階でさまざまなツールや手法を使い、アプリケーションセキュリティのベストプラクティスを実践しています。
組織でCI/CDプロセスの導入が進むにつれ、アプリケーションセキュリティソリューションへの需要も高まっています。実際、2021年のクラウドネイティブアプリケーションセキュリティの現状レポートでは、クラウドネイティブの導入によって、組織がアプリケーションセキュリティの脆弱性に対処する方法がどのように変化しているかが示されています。設定ミスと、既知でありながらパッチが適用されていないセキュリティ脆弱性が、最も多くのセキュリティインシデントの原因となっていました。適切なアプリケーションセキュリティ戦略があれば、いずれも回避できる問題です。
アプリケーションセキュリティツールを使えば、既知の脆弱性を検出して結果を分類できるため、開発者の手作業への依存を減らせます。また、傾向やパターンを特定し、SDLCのビルド段階やリリース段階で開発者がコードのエラーをテストするのにも役立ちます。
新たな脆弱性が絶えず発生し、手動でのコードレビューや従来のテスト手法には多大な時間がかかります。自動化されたセキュリティツールを活用すれば、多くのメリットが得られます。
アプリケーションの脆弱性トップ10
OWASP Top 10の脆弱性リストを理解することで、開発チームはアプリケーションの脆弱性リスクを軽減できます。最新のOWASP Top 10リストは2021年に公開されました。
2017年版のアプリケーションの脆弱性トップ10は次のとおりです。
インジェクション:インジェクションの脆弱性は、SQL、OS、NoSQL、LDAPインジェクションを通じて、クエリやコマンドに信頼できないデータが挿入されると発生する可能性があります。この攻撃経路で注入された悪意のあるデータはインタープリターをだまし、アプリケーションに本来意図されていない動作をさせます。
認証の不備:アプリケーションがセッション管理やユーザー認証に関する機能を適切に実行しない場合、侵入者はパスワード、セキュリティキー、セッショントークンを侵害し、他のユーザーの身元や権限を一時的または恒久的に乗っ取る可能性があります。
機微なデータの漏えい:転送中または保存中のデータの暗号化など、不可欠なデータ保護対策が講じられていないと、攻撃者が認証情報、クレジットカード番号、社会保障番号、医療情報などの機微なデータや個人を特定できる情報(PII)を閲覧、窃取、改ざんするおそれがあります。暗号化されていないデータは、なりすまし、詐欺、産業スパイなどに関連する悪質な攻撃の格好の標的です。こうした攻撃は、セキュリティ脆弱性の例のほんの一部にすぎません。
XML外部実体(XXE):XML入力を解析するWebアプリケーションでは、設定の不適切なXMLパーサーがだまされ、ハードドライブなどのストレージ装置といった、許可されていない外部実体に機微なデータを送信してしまうことがあります。ハッカーはXXE攻撃を使って重要な情報を探り、内部ファイルやファイル共有を漏えいさせ、内部ポートをスキャンし、リモートでコードを実行し、サービス拒否(DoS)攻撃を仕掛けます。
アクセス制御の不備:アクセス制御に不備があると、Webサイトの訪問者が管理者パネル、サーバー、データベース、その他のビジネス上重要なアプリケーションにアクセスできてしまうことがあります。このOWASP Top 10の脅威は、ブラウザーを標的となる別のURLにリダイレクトするために悪用される可能性があります。
セキュリティ設定のミス:Gartnerによると、クラウド侵害の最大95%は人為的ミスが原因です。セキュリティ設定のミスは、この統計を押し上げる大きな要因のひとつです。OWASP Top 10の中でも、この脆弱性は最もよく見られます。
クロスサイトスクリプティング(XSS):クロスサイトスクリプティングは広く見られる脆弱性で、すべてのWebアプリケーションの半数以上に影響します。悪意のあるクライアント側のJavaScriptやHTMLスクリプトがWebページに注入され、Webアプリケーションが攻撃経路として利用されることで発生します。ユーザーセッションの乗っ取り、Webサイトの改ざん、攻撃者が管理するサイトへの被害者のリダイレクトなどに悪用されます。
安全でないデシリアライゼーション:安全でないデシリアライゼーションは、通常はリモートコード実行に使われる攻撃経路をハッカーに提供しますが、インジェクション攻撃、リプレイ攻撃、権限昇格を利用した攻撃にも使われる可能性があります。
既知の脆弱性を含むコンポーネントの使用:最新の分散型Webアプリケーションには、ライブラリやフレームワークなどのオープンソースコンポーネントが組み込まれています。既知の脆弱性を含むコンポーネントは、アプリケーション全体のセキュリティに影響を及ぼす弱点となります。
ログ記録と監視の不備:攻撃を受けてから検知されるまでに、200日、場合によってはそれ以上かかることがあります。この間に、サイバー犯罪者はサーバーを改ざんし、データベースを破壊し、機密情報を盗み、十分なログ記録と監視が行われていなければ悪意のあるコードを仕込む時間を得てしまいます。
アプリケーションの脆弱性に対処するセキュリティツール
セキュアコーディングは常に目指すべきものですが、コードの脆弱性を完全になくすことはできません。そこで役立つのが、静的アプリケーションセキュリティテスト(SAST)や動的アプリケーションセキュリティテスト(DAST)などのツールです。SASTとDASTの違いや、両者をどう組み合わせればよいか疑問に思う方もいるでしょう。どちらのソリューションもテストを自動化し、ソースコードの弱点を見つけます。悪意のある攻撃者はいずれその弱点を見つけ、悪用しようとします。
静的アプリケーションセキュリティテスト(SAST):SASTは、幅広い静的な入力を評価する構造的テストです。ドキュメントやアプリケーションのソースコードなどが対象になります。SASTツールはソースコードと依存関係をスキャンし、事前に定義されたルールを使って問題や脆弱性を検出し、その正確な位置を示します。
動的アプリケーションセキュリティテスト(DAST):SASTとは反対に、DASTはアプリケーションの実行中に行うブラックボックステストです。これらのツールでは、テスターがシステムの内部動作について詳しい知識を持たないことを前提とします。DASTツールはファジングと呼ばれる手法を用いて実行中のコードを分析し、リクエスト、レスポンス、インターフェース、スクリプト、インジェクション、認証、セッションに関する問題を特定します。
最善の解決策は、SASTとDASTを次のような他のアプリケーションセキュリティ手法と組み合わせることです。
ソフトウェア構成分析(SCA):オリジン分析とも呼ばれるこの手法では、すべてのオープンソースソフトウェアコンポーネントとライブラリを分析します。これらのツールは、ソフトウェアライセンス、非推奨の依存関係、既知の脆弱性を検出し、利用可能なパッチやアップデートをユーザーに通知します。
SASTとSCAの比較と、セキュアなソフトウェアのリリースに両者を活用する方法について、詳しくご覧ください。
インタラクティブアプリケーションセキュリティテスト(IAST):これらのツールは、事前に定義されたテストケースを使ってアプリケーションとデータフローをテストし、静的と動的の両方のアプローチを組み合わせます。結果に基づいて、別のテストケースを推奨することもあります。
サービスとしてのアプリケーションセキュリティテスト(ASTaaS):外部企業にアプリケーションのテストを一任する方法です。ASTaaSでは通常、ペネトレーションテストやAPIの評価など、静的と動的のセキュリティ手法を組み合わせて実施します。
アプリケーションのセキュリティ脆弱性を回避する
効果的なDevSecOps戦略は、アプリケーションの脆弱性リスクの軽減に役立ちます。開発者がセキュリティチームの支援を受けながら、既存の開発ワークフローに無理なくセキュリティを組み込めるようにすることが理想です。セキュリティツールを自動化すれば、開発者の負担を軽減し、コードの脆弱性が見過ごされるのを防げます。