11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PONOSAdvent Calendar 2020

Day 9

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

Last updated at Posted at 2020-12-09

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の記事です。
お楽しみに!!

11
4
0

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
  3. You can use dark theme
What you can do with signing up
11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?