Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
厳しくなったSafetyNet Attestationによる端末チェック
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Aki
October 20, 2021
Programming
2.3k
2
Share
厳しくなったSafetyNet Attestationによる端末チェック
DroidKaigi 2021 Day2 18:00~
Aki
October 20, 2021
More Decks by Aki
See All by Aki
WebViewを守るSafeBrowsingのコントロール / Control result of SafeBrowsing in WebView
akihiroshiota
1
920
Other Decks in Programming
See All in Programming
ふにゃっとしない名前の付け方 〜哲学で茹で上げる、コシのあるソフトウェア設計〜
shimomura
0
120
実践ハーネスエンジニアリング:ステアリングループを実例から読み解く / Practical Harness Engineering: Understanding Steering Loops Through Real-World Examples
nrslib
5
5.6k
AI Agent と正しく分析するための環境作り
yoshyum
2
520
iOS26時代の新規アプリ開発
yuukiw00w
0
120
新規プロダクトを高速で生み出すハーネスエンジニアリング
seanchas116
3
170
サークル参加から学ぶ、小さな事業の回し方
yuzneri
0
200
AI時代だからこそ「Bloc」を採用する価値があるのかもしれない
takuroabe
0
190
2026年のソフトウェア開発を考える(2026/05版) / Software Engineering Scrum Fest Niigata 2026 Edition
twada
PRO
23
13k
色即是空、空即是色、データサイエンス
kamoneggi
1
110
RailsTokyo 2026#4: AI様があれば、 Hotwireの弱点は消えるか?
naofumi
3
380
サーバーレスで作る、動画データ管理基盤
oyasumipants
0
210
ビジネスモデルから紐解く、AI+型駆動開発
hirokiomote
0
190
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
810
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
70
39k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
250
Discover your Explorer Soul
emna__ayadi
2
1.1k
How to build a perfect <img>
jonoalderson
1
5.5k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
350
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
Accessibility Awareness
sabderemane
1
120
Transcript
厳しくなった SafetyNet Attestationによる 端末チェック Akihiro Shiota @aki_sh_7
Agenda SafetyNet Attestationとは 最近のRoot化事情 厳しくなったチェックと新しいパラメータ :evaluationType 変更に対する反応 変更されたSafetyNet Attestationの活用 01
02 03 04 05
Agenda SafetyNet Attestationとは 最近のRoot化事情 厳しくなったチェックと新しいパラメータ :evaluationType 変更に対する反応 変更されたSafetyNet Attestationの活用 01
02 03 04 05
SafetyNet Attestation “SafetyNet Attestation API は、アプリが動作している Android デバイスをアプ リのデベロッパーが評価するための不正利用防止 API
です。この API は、不正利 用検出システムの一部として、サーバーとやり取りしているのが正規の Android デバイスで動作している正規のアプリかどうかを判断するために使用します。” 出典:Android developers, SafetyNet Attestation API, https://developer.android.com/training/safetynet/attestation?hl=ja, 2021/10/7閲覧
SafetyNet Attestation “SafetyNet Attestation API は、アプリが動作している Android デバイスをアプ リのデベロッパーが評価するための不正利用防止 API
です。この API は、不正利 用検出システムの一部として、サーバーとやり取りしているのが正規の Android デバイスで動作している正規のアプリかどうかを判断するために使用します。” 出典:Android developers, SafetyNet Attestation API, https://developer.android.com/training/safetynet/attestation?hl=ja, 2021/10/7閲覧 このデバイスを評価する機能で、代表的に取り上げられるのがルート化チェック
SafetyNet Attestationの仕組み Google Android Device Server 1 2 3 6
7 8 4 5 1. リクエスト開始 2. nonce返却 3. SafetyNet Attestation API呼出 4. 評価結果の署名済み構成証明を リクエスト 5. 署名済み構成証明を端末へ送信 6. 署名済み構成証明のアプリへの返却 7. 署名済み構成証明をサーバへ送信 8. 構成証明の検証結果に応じたレスポ ンス サーバ側で検証するのが大事! Client App Client Backend Google Play services (Safetynet Attestation API) Attestation API Backend
APIのレスポンス中のフィールド フィールド 説明 timestampMs Googleのサーバでレスポンスが生成された時刻。UNIX時間(ミリ秒)。 nonce API呼び出し時にアプリから受け渡されたnonce apkPackageName API呼び出し元アプリのパッケージ名 apkCertificateDigestSha256
API呼び出し元アプリの証明書ハッシュ ctsProfileMatch デバイスの完全性に関する厳密な判定結果。CTSの合格はこっち。 basicIntegrity デバイスの完全性に関する緩やかな判定結果 evaluationType ctsProfileMatchやbasicIntegrityなどの計算に使用される測定のタイプ
代表的な判定結果 デバイスの状態 ctsProfileMatch basicIntegrity CTS に合格した認証済みの正規デバイス true true ブートローダーがロック解除されている認証済みデバイス false
true 正規だが認証されていないデバイス false true カスタム ROM を搭載したデバイス false true エミュレータ false false デバイスがない(プロトコルをエミュレートするスクリプトなど) false false システムの完全性が侵害されている兆候(ルート権限取得など) false false その他のアクティブな攻撃の兆候(API フックなど) false false 出典:Android developers, SafetyNet Attestation API, https://developer.android.com/training/safetynet/attestation?hl=ja, 2021/10/7閲覧
Agenda SafetyNet Attestationとは 最近のRoot化事情 厳しくなったチェックと新しいパラメータ :evaluationType 変更に対する反応 変更されたSafetyNet Attestationの活用 01
02 03 04 05
最近のRoot化 ⚫ 主流はMagisk ⚫ bootイメージにパッチを当て、フラ ッシュすれば容易にRoot化可能 (ブートローダーのアンロックは必要) ⚫ Root隠し機能のMagisk Hideで
SafetyNet Attestationも通過
Agenda SafetyNet Attestationとは 最近のRoot化事情 厳しくなったチェックと新しいパラメータ :evaluationType 変更に対する反応 変更されたSafetyNet Attestationの活用 01
02 03 04 05
厳しくなったチェック ⚫ ctsProfileMatchとbasicIntegrityの結果判定に、Key Attestationを利用 ⚫ 2020年3月~5月より試験導入、2021年1月より本格展開 2020 2021 コミュニティ等でチェックが通ら なくなった報告が上がる
SafetyNet Attestation APIの メーリングリストに仮導入連絡 Mar May Feb Sep 本格導入報告 デバイス名による Key Attestation利用可否の確認導入
厳しくなったチェック ⚫ ctsProfileMatchとbasicIntegrityの結果判定に、Key Attestationを利用 ⚫ Magisk Hideを使っていても、 SafetyNet Attestationを回避することが出来なくなった! ⚫
Key Attestationの結果の改ざんは困難 ⚫ ハードウェアレベルでのサポート+証明書失効なし+ルート証明書がGoogleの場合 ⚫ ブートローダーやブート状態を示す結果を利用していると推測
厳しくなったチェック ⚫ ctsProfileMatchとbasicIntegrityの結果判定に、Key Attestationを利用 ⚫ Key Attestationを使っているかは、レスポンス中のevaluationTypeで確認可能 ⚫ BASIC:従来からの測定データや参照データを利用する方法 ⚫
HARDWARE_BACKED:(ハードウェアレベルの)Key Attestationを利用 ⚫ 2021/9に、判定方法がさらに厳格化 ⚫ Googleが、デバイス名に応じて、 Key Attestationを利用できるのに、利用していないか を確認している?
デバイス評価以外への効果 – 接続元アプリのチェック- サーバ側で、接続してきたアプリの正当性の確認を実施可能 ⚫ 従来でも、apkCertificateDigestSha256により、サーバに接続してきたアプ リが正当であるか確認することはできた ⚫ ただし、先に説明したように、従来は端末の正当性検証を回避する方法があり、 その端末からのAPK情報を信頼することは難しかった。
出典:Android developers, SafetyNet Attestation API, https://developer.android.com/training/safetynet/attestation?hl=ja, 2021/10/7閲覧
Agenda SafetyNet Attestationとは 最近のRoot化事情 厳しくなったチェックと新しいパラメータ :evaluationType 変更に対する反応 変更されたSafetyNet Attestationの活用 01
02 03 04 05
2020年:対応のしようがない… ⚫ 初期はユーザによって、 対象となってるかがまちまち ⚫ 認識されたけど、どう回避するのか ⚫ TEEの脆弱性をついて、KeyAttestationの結果を 改ざん? ⚫
XposedでSafetyNet Attestation APIをHook? ⚫ SafetNet Attestationの結果を改ざん?
2020年:対応のしようがない… ⚫ 初期はユーザによって、 対象となってるかがまちまち ⚫ 認識されたけど、どう回避するのか ⚫ TEEの脆弱性をついて、KeyAttestationの結果を 改ざん? ⚫
XposedでSafetyNet Attestation APIをHook? ⚫ SafetNet Attestationの結果を改ざん? 無理!
Universal SafetyNet Fix ⚫ 2021/1にgithubで公開。おそらく現在最も安定して回避を実現するモジュール。 ⚫ SafetyNet Attestation APIに対して、該当する端末がKey Attestation非対応
であるように見せかける。 ⚫ evaluationTypeはBASICとして判定されるようになる。 ⚫ v1系とv2系では、実装や細部は異なるが、大まかな思想は同じ(v2系はriruを利用) ⚫ 2021/9のデバイス名のチェックにも対応(v2.1)。 デバイス名を変更することで、回避している。
Agenda SafetyNet Attestationとは 最近のRoot化事情 厳しくなったチェックと新しいパラメータ :evaluationType 変更に対する反応 変更されたSafetyNet Attestationの活用 01
02 03 04 05
これまでの再整理 ⚫ Key Attestation対応端末では、Root化などの端末状態の検知精度が向上 ⚫ Magisk+Universal SafetyNet Fixの組み合わせでは、SafetyNet Attestation の回避が成立してしまう。
⚫ ただし、Key Attestation非対応端末として判定される(evaluationTypeがBASICになる)
どのように使っていくか ⚫ 厳しくなった判定結果を享受するのなら、Universal SafetyNet Fixを使っても、 回避できないようにしてやる必要がある。 ⚫ = evaluationTypeにHARDWARE_BACKEDが含まれるものだけ許可 ⚫
アプリ(または機能)の利用可能端末を、Key Attestation対応端末に絞る。
活用時の注意点 ⚫ 対応端末を絞る際に、OSのバージョンで区切ることはできない。 ⚫ Key Attestationが対応必須となったのは、Android 8.0以上。 ⚫ 機能自体は、Android7.0からだが、対応が必須だったわけではない。 ⚫
マニフェストでは、機能制限としての定義はできないので、事前に対応端末を 定義するなら、調査してリスト化することが必要
活用時の注意点 出典:Android developers, SafetyNet Attestation API, https://developer.android.com/training/safetynet/attestation, 2021/10/19閲覧
活用時の注意点 出典:Android developers, SafetyNet Attestation API, https://developer.android.com/training/safetynet/attestation, 2021/10/19閲覧 最高レベルのデバイス完全性の保障が求められるアプリでの利用を想定
懸念点 ⚫ すぐにアプリに導入して大丈夫? ⚫ Android8.0搭載端末が出てきたのは2018年頃(主にキャリア端末)であるため、 幅広い端末で利用してもらうには、もう少し時間が必要? ⚫ 今後破られることは? ⚫ TEEなどが侵害された場合は起こりうるが、失効リストに追加される。
懸念点 ⚫ 後継となるPlay Integrity API(現在EAP中)で、本機能が引き継がれるか。 ⚫ Windows 11等、Google Play Serviceが利用できないものでのAndroidアプリ
実行が増えてきた時にどうするか
まとめ ⚫ SafetyNet Attestationは、Key Attestationの結果を用いることで、 より、デバイスの完全性について、精度の高い判定を行うようになった。 ⚫ 一方、Magisk+Universal SafetyNet Fixにより、Key
Attestation対象外の端 末のふりをすることで、精度の高い判定を回避することは可能 ⚫ 精度の高い判定を利用したい場合は、対象端末を絞る必要が生じる。 ⚫ また、接続元アプリが正規であるかの確認も、精度高く行えるようになった。