私たちのチームは、ネイティブ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
とマークされたコードの部分が最終的なアプリケーションにコンパイルされることはなく、そのため、そのメソッドを安全に使用できます。