パスワード、クレジットカード番号、健康記録、個人情報、企業秘密などの機微データは、特にそのデータがプライバシー法(EUの一般データ保護規制GDPR)や、PCIデータセキュリティ基準 (PCI DSS)のような財務データ保護規則またはその他の規制に準拠している場合に、追加の保護が必要になります。 攻撃者は、さまざまな方法でWebアプリケーションやWebサービスアプリケーションからデータを盗み出すことができます。 例えば、機微情報が通信セキュリティなしでインターネットを介して送信された場合、共有ワイヤレス接続上の攻撃者は別のユーザのデータを参照して機微情報を盗む可能性があります。 また、攻撃者はSQLインジェクションを使用して、アプリケーションデータベースからパスワードやその他の資格情報を盗み、その情報を公開することができます。
システム内のデータを分類し、各データがどのレベルの機微性に該当しているかを判断することが重要です。 各データカテゴリは、各レベルの機微性に必要な保護ルールに対応できます。 例えば、機密でない公開マーケティング情報は、公開ウェブサイト上に置くことができる公開データとして分類することができます。 クレジットカード番号は、保存中または送信中に暗号化する必要があるプライベートユーザデータとして分類することができます。
機微データをネットワーク経由で送信する場合は、何らかの種類のエンドトゥエンドの通信セキュリティ(または送信時の暗号化)を考慮する必要があります。 TLSは、通信セキュリティのための最も一般的で広くサポートされている暗号化プロトコルです。 これは、セキュアな方法でネットワーク上で通信するために、多くのタイプのアプリケーション(Web、Webサービス、モバイル)で使用されます。 セキュアな通信を適切に防御するには、TLSをさまざまな方法で適切に構成する必要があります。 トランスポート層セキュリティの主な利点は、クライアント(ウェブブラウザ)とウェブアプリケーションサーバとの間、およびウェブアプリケーションサーバとバックエンドと他のブラウザベース以外のエンタープライズコンポーネントとの間で伝送されるときに、不正な開示や変更から保護することです。
機微データ管理の第1のルールは、可能な限り機微データの保存を避けることです。 機微データを保存する必要がある場合は、不正な開示や変更を防ぐために、何らかの方法で暗号化して保護されていることを確認してください。 暗号は、情報セキュリティのより高度なトピックの1つであり、その理解に最も多くの学校教育と経験が必要なものです。 暗号化には多くのアプローチがあり利を得ることは難しいです。Webソリューションのアーキテクトや開発者が完全に理解する必要がある長所と短所があります。 さらに、暗号研究は、高度な数学と数論に基づいており、参加することは容易ではありません。 暗号機能をゼロから構築する代わりに、Google Tinkプロジェクト、Libsodiumや多くのソフトウェアフレームワークとクラウドサービスに組み込まれたセキュアなストレージ機能など、ピアレビューやオープンソリューションを使用することを強く推奨します。
モバイルデバイスは定期的に紛失または盗難され、機微データが含まれているため、モバイルアプリケーションは特にデータ漏洩のリスクがあります。 原則として、必要最小限のデータのみをモバイルデバイスに保存する必要があります。 しかし、機微データをモバイルデバイスに保存する必要がある場合は、機微データを各モバイルオペレーティングシステム固有のデータストレージディレクトリに保存する必要があります。 AndroidではAndroidキーストア、iOSではiOSキーチェーンになります。
秘密鍵は、機微性の高い機能のアプリケーションで使用されます。 例えば、秘密鍵は、JWTに署名し、クレジットカードを保護し、様々な形式の認証を提供し、他の機微性の高いセキュリティ機能を促進するために使用することができます。鍵管理では、以下を含むいくつかのルールに従わなければなりません。
- 秘密鍵が不正アクセスから保護されていることを確認する
- 以下に示すように、適切な秘密保管庫に鍵を保存する
- 複数のキーが必要な場合は、独立したキーを使用する
- 必要に応じてアルゴリズムとキーを変更するためのサポートを構築する
- 鍵ローテーションを処理するアプリケーション機能を構築する
アプリケーションには、セキュリティ運用に必要な数多くの「秘密」が含まれています。 これには、証明書、SQL接続パスワード、サードパーティのサービスアカウントの資格情報、パスワード、SSHキー、暗号化キーなどが含まれます。 これらの秘密の不正な開示や変更は、システムへの不正アクセスの成功につながる可能性があります。 アプリケーションの秘密を管理するには、以下を考慮してください。
- コードや設定ファイルに秘密を保存したり、環境変数で秘密を渡したりしないでください。GitRobやTruffleHogのようなツールを使ってコードリポジトリに秘密がないかをスキャンしてください。
- KeyWhizやHashicorpのVault projectやAmazon KMSのような秘密保管庫に鍵やその他のアプリケーションレベルの秘密を保管し、実行時にアプリケーションレベルの秘密にアクセスできるようにします。
- OWASP Cheat Sheet: Transport Layer Protection
- Ivan Ristic: SSL/TLS Deployment Best Practices
- OWASP Cheat Sheet: HSTS
- OWASP Cheat Sheet: Cryptographic Storage
- OWASP Cheat Sheet: Password Storage
- OWASP Cheat Sheet: IOS Developer - Insecure Data Storage
- OWASP Testing Guide: Testing for TLS
- SSLyze - SSL構成スキャンライブラリおよびCLIツール
- SSLLabs - TLS / SSL構成のスキャンとチェックのための無料サービス
- OWASP O-Saft TLS Tool – TLS接続テストツール
- GitRob - GitHub上の公開されているファイルの機微情報を見つけるためのコマンドラインツール
- TruffleHog -誤ってコミットした秘密を検索する
- KeyWhiz – 秘密管理
- Hashicorp Vault – 秘密管理
- Amazon KMS - AmaxonAWS上での鍵管理