web-dev-qa-db-ja.com

Android耐タンパー性:BuildConfig.DEBUGスプーフィング?

私たちのチームは、ネイティブAndroidモバイルアプリを保護しようとしています。

とりわけ、改ざんなどのチェックにDexguardを使用しています。 rootおよびエミュレーター検出

簡単に言うと、これらのチェックの一部はデバッグビルドで失敗します(主に開発者向けにビルド時間を短くしたいため)。これらをスキップする方法が必要です[1]。

Dexguardの公式サポートによる提案は、次のようなものを使用することでした。

if(!BuildConfig.DEBUG){
    // do actual check if app has been tampered with
}

今私は心配しています:

このような条件付きでは、攻撃者にとって改ざんチェックを非常に簡単に回避できませんか?

私の恐れは、攻撃者がアプリを改ざんしようとした場合、それがDEBUGビルドであると何らかの形で思わせることができれば、簡単に改ざんできることです。したがって、わずかな労力で、すべての(高価な)Dexguard改ざんチェックが回避されます...

私の懸念は正当化されますか?上記のような条件を含めると、攻撃者はアプリを簡単に改ざんできますか?


[1]:ここでの背景は次のとおりです。Dexguardはビルドに非常に時間がかかります。単純な単体テストの再実行では、5秒ではなく50秒など。このため、デバッグビルドでDexguardを無効にします。これにより、Dexguardによって処理されているAPKに依存するため、特定のチェック(改ざん検出など)が失敗します。

サンプルコードが示すように、攻撃者がデバッグバージョンを使用しているかどうかは、セキュリティチェックを簡単に回避できます。実際には、これを行うにはコンパイラ指令が必要です。

コンパイラ指令を使用すると、DEBUGとマークされたコードの部分が最終的なアプリケーションにコンパイルされることはなく、そのため、そのメソッドを安全に使用できます。

3
Xaqron