見出し画像

🎶非特権操作のみを実行するコードには署名しないでください javaセキュアコーディングスタンダード

無意味なプログラムのデジタル署名はかえって危険 ENV(javaセキュリティ)しらべ 危険なプログラミング


https://amzn.to/3zrZYrz

ENV00-J 非特権操作のみを実行するコードには署名しないでください

ENV00-J.「非特権操作のみを実行するコードには署名しないでください」とは、セキュリティに関する推奨事項の一つで、Javaのセキュアコーディング標準の中に含まれます。このルールは、アプリケーションのセキュリティを向上させるために、コードが実行する操作に応じて、適切なセキュリティ対策を施すことを目的としています。具体的には、次のような背景と目的があります。

背景

Javaアプリケーションでは、コードに署名(デジタル署名)を施すことで、そのコードの発行者を確認し、コードの完全性を保証することができます。署名されたコードは、信頼された発行者からのものとして扱われ、セキュリティポリシーに基づいて、特定の権限(例えば、ファイルシステムへのアクセス、ネットワーク接続の確立など)を与えられることがあります。

推奨事項

  • 非特権操作のみを実行するコードに署名を施さない: もしコードが実行する操作がすべて非特権的(つまり、追加の権限を必要としない操作)である場合、そのコードには署名を施さないことが推奨されます。これは、不必要に高い権限をコードに付与することを避け、セキュリティリスクを最小限に抑えるためです。

  • 最小権限の原則: コードには、その実行に必要な最小限の権限のみを付与すべきです。これにより、万が一セキュリティが侵害された場合のダメージを最小限に抑えることができます。

実装の考慮事項

  • コードを署名する前に、そのコードが実際に特権操作を必要とするかどうかを検討し、必要最小限の権限で済むように設計を見直すことが重要です。

  • アプリケーションが複数のコンポーネントから構成される場合、各コンポーネントが必要とする権限を個別に評価し、非特権コンポーネントには署名を施さないように管理することが望ましいです。

この推奨事項は、アプリケーションのセキュリティ姿勢を向上させるための一つの手段であり、不必要なリスクの導入を避けるためのガイドラインとして機能します。

例えば、署名されたJavaアプレットを考えてみましょう。証明書が検証されると、広く使われているプラットフォームでは、ユーザーにセキュリティダイアログが表示され、デフォルトで「発行者のコンテンツを常に信頼する」オプションが選択されています。このダイアログでは主に、署名されたコードを実行するかどうかが尋ねられます。残念ながら、ユーザーがチェックボックスを選択した状態でダイアログを確認すると、「常に信頼する...」という設定は、それ以降の警告ダイアログを上書きしてしまいます。攻撃者は、信頼された組織が署名した脆弱なコードを悪用して、このメカニズムを利用することができます。この場合、コードはユーザーの暗黙の許可を得て実行され、自由に悪用される可能性があります。


お願い致します