LoginSignup
4

More than 1 year has passed since last update.

posted at

updated at

【Android】root判定によるチート対策

PONOS Advent Calendar 2020 9日目の記事です。

昨日は@nissy_gpさんのNode.js+Sequelizeで楽観的ロックを使って動作を確認するでした。

はじめに:eyeglasses:

前回の記事で「Android開発者向けオプションを使ったチート対策」を紹介しました。
今回は、「root判定によるチート対策」を紹介します。

この記事の対象者:eyeglasses:

・アプリ開発者
・Android開発者

root化された端末の判定

メモリハックによる値書き換えなどのチート行為は
root化された端末を使用して行われるケースが多いです。

今回はアプリ側からsuコマンドを実行して
IOExceptionの有無で判定してみましょう。
IOException発生の場合はroot権限なし ー> 通常端末
IOException発生しない場合はroot権限あり ー> root端末

java.lang.Runtimeクラスの
exec(String command)メソッドを使用します。

boolean isRoot = false;

try {
    Process process = Runtime.getRuntime().exec("su");
    process.destroy();
    isRoot = true;
    Log.d(TAG, "Root!!");
} catch (IOException e) {
    Log.d(TAG, "NotRoot!!");
} catch (Exception e){
    e.printStackTrace();
}

if(isRoot){
    //root権限ありの時の処理
    //例:情報をサーバーに送信し、root化解除を促すポップアップ表示
}

メリット
アプリのセキュリティーレベルを上げることができる。
実装コストが軽い

デメリット
マニアックな海外製端末で初期出荷状態から
root権限が付与されているケースなどがあり、健全ユーザーがチート扱いされてしまう場合もある。
※経験則になってしまいますが、このパターンはかなりレアケースでした。

注意点
リバースエンジニアリングによるコード改竄で今回のコードを無効化されてしまう恐れもあります。
root対策と同時にリパッケージされた不正アプリ対策を実装するのがお勧めです。
不正アプリ対策
・メモリシャッフル
・難読化
・SafetyNet導入
などがあり、SafetyNet の Attestation APIを使用してリパッケージされていないか判定することができます。

SafetyNetの紹介

SafetyNetでできること
SafetyNet Attestation API
正規の Android デバイスで、正規のアプリかどうか判定できる

SafetyNet Safe Browsing API
URL が Google によって既知の脅威としてマークされているかどうかを判定できる

SafetyNet reCAPTCHA API
悪意のあるトラフィックを検知することができる

SafetyNet Verify Apps API
有害なアプリから端末を保護することができる

SafetyNet Attestation API

実装方法は公式に記載されているので省略しますが
以下の手順で正規アプリかどうか判定することができます。
1.SafetyNet 構成証明をリクエスト

2.SafetyNet 構成認証レスポンスを各種検証

3.apkPackageName: 呼び出し元のアプリのパッケージ名のチェック

4.APK証明書のSHA-256ハッシュ:署名に使用したAPK証明書を検証

5.APKのSHA-256ハッシュ:APKがリリースしたものから改ざんされていないことを確認するために、APKのSHA-256ハッシュが同一か検証

6.BasicIntegrityがtrueであることを確認

※検証処理はサーバー側で行うこと

まとめ

今回紹介したroot判定は自前で実装する手法でしたが
SafetyNet Attestation API
を使用してでも判定することができます。
構成認証レスポンスのBasicIntegrityがfalseの場合はroot端末です

他にもSafetyNetを使用したチート対策があるので
公式ドキュメントを読んでおくことをお勧めします。

明日は@blockの記事です。
お楽しみに!!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
4