コンテンツにスキップ

Debug Symbols Present in the Android Application

Androidアプリケーションに存在するデバッグシンボル

説明

アプリケーションには、デバッグ情報、行番号、説明的な関数名やメソッド名などのデバッグシンボルやデバッグ情報が同梱されており、リバースエンジニアリングが容易になります。

ほとんどのクラッシュレポートツールは、スタックトレース(stack trace)のシンボル化を実行するためにシンボルのアップロードをサポートしており、アプリケーションにシンボルが存在する必要はないことに留意してください。

ネイティブライブラリにデバッグシンボルが同梱されていないことを確認するには、次のコマンドを使用します:

readelf --debug-dump=info <library>

推奨事項

アプリケーションからすべてのシンボルとデバッグデータを削除します。

これを行うには、いくつかの推奨事項があります:

  • リリースモード(release mode)でコンパイルすることにより、デバッグ情報を除外するようにビルドタイプ(build type)を構成します。
  android {
      ...
      buildTypes {
          release {
              debuggable false
              ...
          }
      }
  }
  • ネイティブのデバッグシンボルを取り除くために、ProGuardを使用します。
buildTypes {
        ...
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            ...
        }
    }
  • ネイティブライブラリからシンボルを削除するには、stripコマンドを使用します:
strip -s <library>

リンク

基準

  • OWASP_MASVS_L1:
    • MSTG_CODE_3
  • OWASP_MASVS_L2:
    • MSTG_CODE_3
  • PCI_STANDARDS:
    • REQ_2_2
    • REQ_6_2
  • OWASP_MASVS_v2_1:
    • MASVS_RESILIENCE_3
  • HIPAA_CONTROLS:
    • SECURITY212
    • SECURITY213