In this article
アプリケーションセキュリティ制御を解説
アプリケーションセキュリティ制御とは?
セキュリティ階層において、アプリケーションセキュリティの制御は、標準やポリシーの下位に位置します。ポリシーは、アプリケーションのセキュリティと保護に求められる境界を定め、標準はその境界を適用するためのルールを定めます。アプリケーションセキュリティの制御とは、そうした標準を実施するために、開発者やほかのチームに割り当てられる具体的な手順です。アプリケーション制御の責任は複数の部門にまたがりますが、開発者は重要な役割を担います。Snykのようなアプリケーションセキュリティソリューションを活用すれば、こうしたポリシーや制御の策定と実施を支援できます。
アプリケーションセキュリティ制御が重要な理由
アプリケーションを使うと、従業員はデータやシステムリソースに簡単にアクセスできます。一方で、ハッカーが基幹システムに侵入する手段にもなります。組織は、社内プロセスや関係者への影響を最小限に抑えながら、アプリケーションセキュリティを確保する必要があるというジレンマに直面します。堅牢なアプリケーション制御は、セキュリティをさらに強化し、侵害発生時のトリアージを支援するとともに、環境内のアプリケーションをより包括的に把握できるようにします。また、セキュリティ態勢を改善するために、企業がアプリケーションセキュリティ制御を確実に利用することも不可欠です。
アプリケーションセキュリティ制御を利用するメリット
セキュリティ制御は、企業のセキュリティプログラムに欠かせない要素です。まず、アプリケーションの脆弱性が悪用されるのを防ぎ、侵害のリスクと潜在的なコストを軽減します。また、アプリケーションやトラフィック、ネットワーク内でやり取りされるデータをより可視化できます。
脆弱性を評価するため、アプリケーションは脅威レベルやビジネス上の目的に基づいて分類されます。そのうえでアプリケーションごとに制御を調整できるため、既存のワークフローへの影響を抑えながら標準を適用できます。
許可リストと拒否リストを使って、アプリケーションの実行を自動的に制御します。ホストを一元管理する大規模な組織では、特に効率が向上します。さらに、リソースを大量に消費するアプリケーションを特定し、アプリケーション制御で関連トラフィックを整理することで、ネットワーク全体の安定性を高められます。
アプリケーション制御は、脅威の監視に新たな手法をもたらします。たとえば、トラフィックをネットワークモデルと比較して、異常な挙動を特定できます。
アプリケーションセキュリティ制御の種類
アプリケーションセキュリティ制御にはさまざまな種類があります。すべてが開発者の責任というわけではなく、制御はプログラミング技法とも異なりますが、さまざまな制御の手法を把握しておくことが重要です。
完全性チェック
データ入力欄のすべての項目が入力されていることを確認します。たとえば、企業はアプリケーションユーザーを定期的に再認証し、承認されたユーザーだけが機密情報にアクセスできるようにする必要があります。その際、完全性チェックを実施して、すべてのユーザーとその権限が再認証されていることを確認します。
妥当性チェック
データがあらかじめ定められた基準を満たしていることを確認し、検証済みのデータだけが入力または処理されるようにします。
識別
ユーザーを正確かつ一意に識別することで、組織は承認されたユーザーやユーザーグループのみにアクセスを制限でき、ゼロトラストセキュリティを実現できます。デバイスが侵害されても、認証済みのユーザーだけがアプリケーションを通じて機密データにアクセスできます。
分類
制御を実施するための前提として、データを機密性のレベル、リスク、規制遵守要件、その他の関連特性に基づいてグループに分類します。
ログ記録
侵害や不審なアクティビティが検知された場合、ログを使ってユーザーの活動を調査し、インシデントを完全に監査できます。どのイベントを記録する必要があるかを定めた、セキュリティログの標準を策定することが重要です。
暗号化
暗号化は、個々のファイルにも、より広範な範囲にも適用できます。オープンソースの暗号化アルゴリズムやシークレット管理ツールを活用すれば、保存中および転送中のデータを保護できるため、すべてを一から開発する必要はありません。
認証
ユーザーまたはソフトウェアコンポーネントが申告したIDが有効かどうかを確認します。これは、IDベースのアクセスガバナンスを適用するための前提条件です。
アクセス制御
承認されたユーザー、IPアドレス、またはアプリケーションにアクセスを制限します。アプリケーションの許可リストと拒否リストは、アクセス制御の2つの手法です。許可リストでは承認されたエンティティだけにアクセスを限定し、拒否リストではブロック対象のリストに含まれるエンティティを除き、アクセスを自動的に許可します。
入力制御
承認された入力だけがアプリケーションシステムに渡されるようにします。
アプリケーションセキュリティ制御の2つのフレームワーク
制御には多くの種類があるため、体系的なアプローチを策定することが重要です。1つの方法は、制御を検知的、是正的、予防的なものに分類することです。別のフレームワークでは、物理的、技術的、管理的な制御に分けます。さらに、入力、処理、出力の制御に分類する方法もあります。
ソフトウェア開発者にとって、制御は当然ながらセキュアコーディングの実践を中心とするものです。しかし、開発者を導くフレームワークが不足している組織は少なくありません。主要なセキュリティ組織は、アプリケーション制御のフレームワークを公開しています。多くの制御は、ネットワーク管理者やセキュリティチーム、あるいは組織全体が共同で担いますが、セキュリティを意識した開発のためのツールを開発者に提供することを特に目的としたものもあります。
CISクリティカルセキュリティコントロール
たとえば、Center for Internet Security(CIS)は、18項目のクリティカルセキュリティコントロールからなるフレームワークを管理しており、そのうちコントロール16はアプリケーションセキュリティを対象としています。推奨される対策には、欠陥の混入を防ぐためのセキュアなプログラミング手法の開発者トレーニング、ソフトウェアの脆弱性に対処するプロセスの構築、アプリケーション固有のポリシーの実施状況を監視するツールの利用などがあります。
CISは、こうした脆弱性管理ツールをできるだけ早い段階でソフトウェア開発ライフサイクルに直接組み込み、根本原因分析、サードパーティ製アプリケーションの検証、自動エラー検出、脆弱性の深刻度を評価する仕組みを備えることを推奨しています。
制御は、脅威モデリングを含むリスク評価手法を用いて策定する必要があります。CISは、データベース向けソフトウェアの強化テンプレートの利用、Webアプリケーションファイアウォールの導入、本番システムと非本番システムの分離など、ほかの実践も推奨しています。
OWASPプロアクティブコントロール
アプリケーションセキュリティの推進を目的としたリソースを公開する非営利団体、Open Web Application Security Project® Foundation(OWASP)は、ソフトウェア開発ライフサイクルにおけるプロアクティブなアプリケーション制御の事実上の標準となるフレームワークも提供しています。
推奨事項は、重要度の高い順に並んでいます。
1. セキュリティ要件を定義する:
シフトレフトは計画段階から始まります。リリースで対応する具体的な要件は何でしょうか?既存のアプリケーションにはどのような不足があるでしょうか?その後、標準を実装し、新しいバージョンを本番環境にデプロイする前にテストします。
2. セキュリティフレームワークとライブラリを活用する
アプリケーションで使われるサードパーティ製ライブラリやオープンソースコンポーネントが増えたことで、現代のアプリケーション制御には新たな側面が加わっています。このステップでは、そうしたコンポーネントが信頼できるソースから提供され、最新の状態に保たれていることを確認します。依存関係や脆弱性を特定するプロアクティブなツールが役立ちます。たとえば、OWASPのDependency CheckやSnykなどです。
3. データベースへのアクセスを保護する
SQLインジェクションを緩和するクエリのパラメータ化などの安全なクエリ手法、安全な認証とデータベースの設定、APIやサービスなどを介した安全な通信が含まれます。
4. データをエンコードしてエスケープする
インジェクション攻撃を防ぐための対策です。クロスサイトスクリプティング(XSS)やOSコマンドインジェクションは、データがシステム内を流れ、悪意のあるコードが実行される例です。
5. すべての入力を検証する
入力検証は、あらゆる状況に当てはまるセキュリティルールではありません。たとえば、XSSやSQLインジェクションを防ぐことはできません。ただし、データがシステムに入力される前に、構文的にも意味的にも有効であることを確認すれば、攻撃対象領域の縮小に役立ちます。
6. デジタルIDを導入する
空港のチェックポイントをデジタル化したようなものです。デジタルIDの検証には、パスワード、多要素認証(SMSだけに頼るべきではありません)、ハードウェアによる暗号認証などの制御が必要です。また、ID管理には、セッション管理の慎重な実装と、Cookieやトークンを安全に扱うための対策も欠かせません。
7. アクセス制御を徹底する
まず、最初の段階で安全な設計アーキテクチャを構築します。たとえば、ロールベースのアクセスルールを参照する代わりに、アクセス制御の検証レイヤーを通じてリクエストを処理し、コード内ではケイパビリティベースのチェックを使います。これにより、アプリケーションコードでポリシーを適用する必要がなくなります。デフォルトではアクセスを拒否し、最小権限の原則に従ってアクセスを許可します。つまり、ユーザーにはタスクの完了に必要な権限だけを付与します。すべてのアクセスイベントをセキュリティログに記録してください。
8. あらゆる場所でデータを保護する
以下の対策が含まれます。
暗号技術やソフトウェアおよびクラウドサービスに組み込まれたセキュリティ機能を使って、保存中のデータを保護する。
可能であれば、データを保存しない。
最新のプロトコル(https、TLS 1.3など)を使って、転送中のデータを保護する。
シークレット管理ツールを使って、証明書、パスワード、その他のシークレットを保護する。
9. セキュリティログと監視を実装する
セキュリティを重視したログ記録により、リアルタイム監視、フォレンジック、規制遵守が可能になります。Apache Logging Servicesなどのフレームワークを使えば、不審なアクティビティへの対応を自動化できます。ログ自体にもリスクがあるため、記録前にデータをエンコードして検証し、安全なサービスにログを保存することが重要です。
10. あらゆるエラーと例外に対処する
エラー処理の仕組みを構築します。システムの停止を防ぐだけでなく、エラーや例外のメッセージを通じた機密情報の漏えいも防げます。例外を一元的に管理し、アプリケーション内の予期しない動作に対処するとともに、すべての例外を記録することが重要です。
CISとOWASPのどちらのフレームワークも、アプリケーションを構築する開発者が、Webアプリケーションからユーザーインターフェース、基盤となるビジネスロジック、その他のコンポーネントに至るまで、コーディング時にセキュリティを考慮する必要があることを強調しています。
OWASP Top 10プロアクティブコントロールを実装するためのヒントをさらにご覧ください。
Snykでアプリケーションセキュリティ制御を実装する方法
アプリケーションセキュリティ制御を適切に実装する責任は、ますます開発者に委ねられています。機密情報の暗号化を忘れたり、ファイルやディレクトリの保護を怠ったりするだけでも、深刻な事態につながりかねません。たとえば、Capital Oneのデータ侵害は、わずかな設定ミスから始まりました。その結果、攻撃者はAmazon S3バケットから1億件を超えるクレジット申請情報をダウンロードできました。
こうした設定ミスは自動化ツールで簡単に検知できるため、悪意のある攻撃者に狙われやすいものです。開発者も自動化ツールを使って、こうした脆弱性を検知し、修正することが不可欠です。SnykはCI/CDツールに統合できる複数のツールを提供し、脆弱性や設定ミスを自動的に検知するとともに、状況に応じた修正のアドバイスを提示します。これにより、CI/CDパイプライン全体でアプリケーションセキュリティ制御を設定し、実装できます。
開発者を第一に考えたツールで、アプリケーションを保護
IDE、リポジトリ、コンテナ、パイプライン全体で、効率的かつ実践的なアプリケーションセキュリティのアドバイスを提供します。
無料アカウントに登録して、Snykでアプリケーションセキュリティ制御を簡単に管理できることをぜひお確かめください。