MASTG-TEST-0232 不備のある対称暗号モード (Broken Symmetric Encryption Modes)
概要
Android アプリで 不備のある暗号モードの使用 をテストするには、暗号モードを構成および適用するために使用される暗号フレームワークやライブラリのメソッドに注目する必要があります。
Android 開発では、Java Cryptography Architecture (JCA) の Cipher
クラスが暗号操作の暗号モードを指定できる主要な API です。Cipher.getInstance
は、暗号アルゴリズム、操作モード、パディングスキームを含む、変形文字列を定義します。一般的な書式は "Algorithm/Mode/Padding"
です。たとえば、以下のとおりです。
Cipher.getInstance("AES/ECB/PKCS5Padding")
このテストでは、ECB (Electronic Codebook) などの対称暗号モードに焦点を当てます。
ECB (NIST SP 800-38A で定義) は、固有のセキュリティ上の脆弱性があるため、一般的に推奨されていません。2023 年の NIST の発表を参照してください。明示的に禁止されているわけではありませんが、その使用は制限されており、ほとんどのシナリオでは推奨されていません。ECB は決定論的に動作するブロック暗号モードであり、平文をブロックに分割して個別に暗号化するため、暗号文のパターンが明らかになります。このため、既知平文攻撃 や 選択平文攻撃 などの攻撃に対して脆弱になります。
たとえば、以下のような変形はすべて 脆弱とみなされます。
"AES"
(デフォルト で AES/ECB モードを使用します)"AES/ECB/NoPadding"
"AES/ECB/PKCS5Padding"
"AES/ECB/ISO10126Padding"
ECB やその他のモードについては NIST SP 800-38A - Recommendation for Block Cipher Modes of Operation: Methods and Techniques をご覧ください。また、最新情報については Decision to Revise NIST SP 800-38A, Recommendation for Block Cipher Modes of Operation: Methods and Techniques および NIST IR 8459 Report on the Block Cipher Modes of Operation in the NIST SP 800-38 Series もチェックしてください。
スコープ外: RSA などの非対称暗号モードは ECB などのブロックモードを使用しないため、このテストのスコープ外です。
"RSA/ECB/OAEPPadding"
や "RSA/ECB/PKCS1Padding"
などの変形文字列で、このコンテキストに ECB
を含むことは誤解を招きます。対称暗号とは異なり、RSA は ECB のようなブロックモードでは動作しません。ECB
の指定は いくつかの暗号 API におけるプレースホルダ であり、RSA が ECB モードを使用することを意味するものではありません。これらのニュアンスを理解することで、誤検出を防ぐことに役立ちます。
手順
アプリバイナリに対して semgrep などのツールで Android での静的解析 (Static Analysis on Android) を実行するか、Frida for Android などのツールで メソッドトレース (Method Tracing) (動的解析) を使用して、暗号モードを安全でないモードに指定する暗号関数を探します。
結果
出力には暗号操作で不備のある暗号モードが使用されている場所のリストを含む可能性があります。
評価
アプリ内で不備のあるモードが特定された場合、そのテストケースは不合格です。
Last updated
Was this helpful?