MASTG-TEST-0013 対称暗号のテスト (Testing Symmetric Cryptography)

概要

静的解析

コード内の対称鍵暗号のすべてのインスタンスを特定し、対称鍵をロードまたは提供するメカニズムを探します。以下のものを探すことができます。

  • 対称アルゴリズム (DES, AES, など)

  • 鍵生成器の仕様 (KeyGenParameterSpec, KeyPairGeneratorSpec, KeyPairGenerator, KeyGenerator, KeyProperties, など)

  • java.security.*, javax.crypto.*, android.security.*, android.security.keystore.* をインポートしているクラス

よくある暗号設定の問題のリスト も確認してください。

特定された各インスタンスについて、使用されている対称鍵について以下を検証します。

  • アプリケーションリソースの一部ではないこと

  • 既知の値から導出できないこと

  • コード内にハードコードされていないこと

ハードコードされた各対称鍵について、セキュリティ上重要なコンテキストで唯一の暗号化方法として使用されていないことを検証します。

例として、ハードコードされた暗号鍵の使用箇所を見つける方法を説明します。まず、アプリを逆アセンブルおよび逆コンパイル (Java コードの逆コンパイル (Decompiling Java Code)) して Java コードを入手します。たとえば、 jadx を使用します。

ここで SecretKeySpec クラスが使われているファイルを検索します。例えば、再帰的に grep するか、jadx 検索機能を使用するだけです。

grep -r "SecretKeySpec"

これにより SecretKeySpec クラスを使用しているすべてのクラスを返します。次にこれらのファイルを調べて、鍵マテリアルを渡すために使用される変数を追跡します。以下の図は出荷可能アプリケーションでこの評価を実行した結果を示しています。静的な暗号鍵が使用されていることがはっきりとわかります。この鍵はハードコードされており、静的なバイト配列 Encrypt.keyBytes に初期化されます。

動的解析

暗号メソッドで メソッドトレース (Method Tracing) を使用して、使用されている鍵などの入出力値を判別できます。暗号操作の実行中にファイルシステムへのアクセスを監視し、鍵マテリアルの書き込み先または読み取り元を評価します。たとえば、RMS Runtime Mobile SecurityAPI monitor を使用してファイルシステムを監視します。

Last updated

Was this helpful?