ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
App AttestとDeviceCheckによる不正行為の抑制
Appやコンテンツを保護するために開発されたAppleの強力な不正防止ツールであるApp AttestとDeviceCheckの使用方法を紹介します。App AttestをAppに組み込み、Appやコンテンツの改ざんを防止することで、App Attest展開における秘密を解き明かします。また、DeviceCheckを使用して、Appでプレミアムコンテンツを受け取った顧客と、不正な手段でコンテンツを手に入れた顧客とを確実に区別する方法も紹介します。
リソース
- Accessing and modifying per-device data
- Assessing fraud risk
- Establishing your app’s integrity
- Validating apps that connect to your server
関連ビデオ
WWDC21
-
ダウンロード
ㅤ ♪ ♪ ようこそ 「App AttestとDeviceCheckによる 不正行為の抑制」に App Storeの トラスト・セキュリティチーム所属の ヤン・シェールィです App Attestと Device Checkを使い Appを守る方法を ご紹介します Appleは お客様やデベロッパが App Storeを 信頼し安心して利用 できるよう 日々奮闘中で このセッションでは その技術的な側面を扱います 反面 ビジネス面や 概念的な側面を 扱っているのは 同じくWWDC21の 「アカウント、プロモーション、 およびコンテンツの保護」です
iOS 11で DeviceCheckを導入し プロモーションに扮した 詐欺の防止を図りました あなたがAppに新機能を 追加したとします 宣伝すべきですね なので1回限りの 無料アイテムを配布します しかし 無料アイテム欲しさに Appのインストール アンインストールを 繰り返し 悪用する人が いるかもしれません このような形で 無料アイテムの贈呈を 幾度のインストールで 悪用されるのは 恐らく嫌ですよね
でも DeviceCheckを使えば 商品の要求が 正当なプロモーションなのか 不正が見られるデバイス からなのか 判明します
Appleサーバ上に 一つのデバイスにつき 2ビット分の情報と タイムスタンプが保存できます
このデバイス情報の内容は デベロッパ次第です
情報の更新・照会が できるよう Appleが 保管をしています
同一デベロッパの 全てのAppに共通なので 2ビットで 全てのAppで 用途が果たせるよう 設定の際 お気をつけください
Appの再インストールや デバイスの持ち主の変更 全設定を初期化した 場合もこの情報は残ります プロモーションの方針 App戦略に従って タイムスタンプを使い 情報をリセットするのが 賢明かもしれません
もっと詳しく 学びたい方は WWCD2017収録の 「Privacy and Your Apps」 もどうぞ DeviceCheckフレームワーク のドキュメントもご覧ください
DeviceCheckの ご紹介でした 次に DeviceCheck フレームワークの App Attestを ご紹介します
サーバに リクエストが送られた際 本当に自分のAppから なのか分からない事も
App Attestを使えば リクエストに ハードウェア依拠の 表明を添付することが できます この表明を使いリクエストが 正規のAppleデバイス上の 正規のAppからのものなのか確認できます 旅行しながら アイテムを集めていく そんなAppを作ったのに 改ざんされたAppから 外出もせずに アイテムが 入手できてしまったり
多人数プレイの カーレースゲームで 無制限のパワーアップを使い 一挙に一位獲得ができる 大多数のユーザーは 大迷惑ですね
デベロッパ側からしても 土曜日の朝に目覚めて 嬉しいことに サーバにリクエストが 殺到していたとします でも調査すると関係ない Appからのものだった とても落胆するでしょう
App Attestを使えば Appの本物と 偽物を見分け ユーザー体験 開発者の収益 を守ることが可能です
App Attestは3つの 主な機能で あなたとAppのユーザーを 保護します
App Attestは 以下の3つの条件を 満たすリクエストのみ 容認するよう サーバに伝えますが その条件とは Appleデバイスから 発信されていること 本物のAppが 稼働していること ペイロードに 改変が加えられていないこと
App Attestが この三条件を どう確認するのでしょうか? App Attestの基軸は 一対のキーのペアと このキーのペアが 正銘なAppleデバイスからだと Appleが認証した 構成証明 この二つになっていて 秘密鍵は保管し App Attest APIの Secure Enclaveにてのみ アクセス可能です
Appはこの鍵を使い リクエストを送付 サーバはその 署名を確かめ 本物のAppleデバイスが 出自だと確認します
Appleデバイス上で これを実行する場合 必ず署名が必要です 無許可改変のAppで 実行する際は 自身のユーザー情報を 使いますが Appの身元も それに伴い 変わります
Appleは構成証明の中に 身元情報のハッシュを含蓄
証明に記された身元と 本物のAppの身元とを 比べることにより リクエストが 改変Appかどうか 分かるようにしました
リクエストが本物のデバイス 本物のAppから 出ていることは確認できました でも ペイロードはどうでしょう
Appが ペイロードを送る前に App Attestは 証明済みの鍵を使い ペイロードの要約に 署名をすることができます こうすれば ペイロードの 表明が完成
ペイロードを 表明とともに サーバに送ります ペイロードを鑑み 表明を検証することにより 通信中にペイロードの 改変がなかったと安心できます
以上 三機能でした では プライバシー面は どうでしょう
Appleではプライバシーを 重要視しており Appエコシステムの管理にあたり 不可欠である そう考えています App Attestはプライバシーを 念頭に置いており
証明措置は 正真のデバイスが 身元だと証明しつつ データの追跡を 防止するため 全て匿名になっており ハードウェアも 識別できません
App Attestの鍵は インストールの度に取り替え 再インストールをする度に 消失します バックアップも なされておらず デバイス間の同期も 行えません Appに採用する場合 ご注意ください
App Attestの機能は 学んでいただけたでしょう 次はAppへの 導入に関し 詳しく説明します App Attestの導入には 三つの手順があります 鍵の作成 鍵の証明・検証 表明の作成・検証です まずはApp Attestの鍵の 作成について コールは全て isSupportedの プロパティで ガードする必要があります Secure Enclaveを 搭載のデバイスは App Attestをサポートします しかしApp Extentionなど isSupportedが偽と返る 場合もあります こういった場合 雑な対応は避けてください
直ちにアクセスを 拒否するのでなく リスク信号の 一環として捉えましょう とりあえず発信人を 「信頼できない」とみなし リスク査定の 手順に従い 大事な機能を 使用可とするか ユーザーごとに 決めます
もう一つの徴候は あなたのサーバに コールするデバイスで App Attestのサポートを しないものが 急増することです App Attestを サポートする 発信人の比率が 激減した場合 改変Appを使った デバイスかもしれません App Attestの鍵が 作成できたら 鍵の証明をする 必要があります 中間者攻撃や反射攻撃を 防ぐためには 一度限りでチャレンジ認証を 行う必要があります ではサーバから Appに促しを送ります
証明をユーザーID その他の情報と リンクする場合 clientDataHashを 作成する促しにより 双方をハッシュします clientDataHashと keyIdを用意すれば attestKey APIも 準備OKです
秘密鍵を使い attestKeyは ハードウェア証明の リクエストを作成し 認証をするため Appleに送付します 認証が済めば Apple側から Appに 匿名の 証明オブジェクトを送ります カスタムペイロードとともに 証明を送付し サーバに認証のため 送り返します 証明をサーバに 送ることができたら 最後は認証をしましょう
証明はWeb認証方法を 使っており 三つの要素で 構成されています Appleに署名された 証明書の一覧 認証データ構造 リスクメトリックの受信です
認証に必要な 三要素 確認していきます
証明書欄は リーフに加え 中間証明書で 構成されています App Attestの ルート証明書は Apple Private PKI レポジトリにあり 証明書チェーンを 全て認証すると デバイスが Appleの ものだと証明されます
attestKeyをコールする際 clientDataHashなどから ノンスという 一度限りのハッシュが作られ それがリーフ証明書に 含まれていますが
改ざんを防止するには サーバ上で ノンスを再構築し マッチングを行います
認証データブロックには App身元のハッシュなど 複数のプロパティがあり これを使い 本物のAppからの ものだと確認できます
鍵証明には レシートも含まれており リスクメトリックの要求や 保存が可能です 後ほどもっと詳細に 説明いたしましょう
全ての条件が満たされたら Attest鍵は本物 ユーザー情報と リンクされた鍵は 以後のリクエスト認証のため 保管を
まとめると 偽返答は全てが不正ではない isSupportへの 偽返答 ランプアップ中の 詰まり 一般的な ネットワーク不全等 問題には 的確に反応し リスクシグナルとして 全体的なリスク査定の 一環としましょう
この認証方式の 導入については 添付資料に 詳しくあります attest-Key APIを コールすると Appから App Attest宛てに ネットワークコールを作成します Appのインスタンス 一回に限らますが インストールベースが 大きい場合は App Attestに多数の リクエストを送信する事もあります 資源を節約し レートリミットされないよう この機能は インストールベースに対し ゆっくり 浸透させましょう 例えば アクティブユーザーが 一日百万なら 一 二日で 済ませましょう なんと百億人 いるとなったら 一か月以上かかります
認証鍵を導入したら 次の課題は generateAssertionの APIを使う App サーバ間の 大切な通信の保護です
Appleサーバが 関与しないため 表明の手順は認証手順より 単純になります
鍵を使った 表明はすべて デバイス上で作成 サーバ上で認証となります
まずはサーバに 一意の促しを要求 次にペイロードの 要約を作り generateAssertionのコール ダイジェストを使って ノンスを作成し App Attest鍵で 署名します
これでAppは ペイロード それに表明を サーバに送信 最後に サーバが ペイロードを認証
表明ペイロードは ハイレベル構成となっています 署名と認証データの 説明に移ります
署名を認証するには 逆の手順に沿い サーバ上で ノンスを再構築し 公開鍵で 署名を認証します
署名が正規の場合 ペイロードは無変更だと 断定できます
認証データのセクションには 身元情報のハッシュがあり
このハッシュを認証すれば 表明が 正規のAppだと 分かります
認証データには 無期増加の カウンターも 含まれていますが 反射攻撃を阻止するには サーバに カウンタ値を記録 リクエストがある度に 数値が増加したか確認します
鍵があるので このプロセスは 何度でも繰り返せます なお 表明により Appleサーバを 呼び出す事はありませんが 暗号を使った演算なので 待ち時間は生じます App Attest導入の際 この待機時間を 算入してください
表明は重要性が高く 頻度の低いコールに 向いているため 呼び出しの際 待機時間・演算能力の点で 優れています
即時 頻繁な ネットワーク指示の場合は 表明が適していないかも しれません
よく頑張りました! App Attestの 導入はひとまず完了です もうこれでサーバ リクエストを査定し 正規のものか 改変か判断でき この不正探知能力を 利益につなげる このようなことが 可能です しかし これで油断はいけません 同一のデバイスで いくつもの鍵を作り App Attestを騙した 攻撃者が 改変Appを そのデバイスを介して サーバに 繋げることが考えられます 当社はこの種の不正行為を 探知するため App Attestリスクメトリック サービスを 提供しており あるデバイスが作成した 鍵の数を Appごとに 把握することができます attestKeyは表明に加え リスクメトリックの レシートを返しますが このレシートをサーバに送り 新レシートを還元することが できます 新レシートには リスクメトリックが示され
定期的に最新の レシートを回収することで デバイス App対の関係を 確かめられます
これはレシート構造の ハイレベルビューで PKCS7コンテナとなります 詳細については 「不正リスクの査定」を DeviceCheckの 資料よりご覧ください
App Clipは iOSの将来有望な新機能です iOS 15ではそのApp Clipに App Attestをつなげ App ClipからフルAppへの 引継ぎをお手伝いします App ClipとフルAppは App Attest上では 同一の身元を持つと みなされているので サーバ側から Appの身元を認証する際 ご注意ください
App Clipが 削除されたり 期限を満了した場合は 本Appと同様 鍵も無効化されます
App Clipについては 以上です App Attest成功のポイントを 是非覚えておいてください デバイスでなく サーバ側から認証する Appを改変し 認証コード 無効化を計る攻撃など
反射攻撃を阻止するために 一度限りサーバへの チャレンジを導入する
isSupportへの 偽返答 ランプアップ中のつまり 一般的なネットワーク不全 このような問題を しっかり予知する また不意の発展は リスクシグナルとする
App Attestと DeviceCheckは 総合不正対策のため 必要な情報を伝達しますが DeviceCheckは プロモーションの不正防止
App Attestは App改変の 即時探知を お手伝いし あなたのAppや ユーザーの満足をお守りします ご静聴ありがとうございます App Attestや Device Checkを 活用したAppに 出逢えるのが楽しみです “ピース“を!
-
-
8:02 - Create an App Attest key
let appAttestService = DCAppAttestService.shared if appAttestService.isSupported { appAttestService.generateKey { keyId, error in guard error == nil else { /* Handle the error. */ } // Cache keyId for subsequent operations. } } else { // Handle fallback as untrusted device }
-
9:34 - Generate key attestation
appAttestService.attestKey(keyId, clientDataHash: clientDataHash) { attestationObject, error in guard error == nil else { /* Handle error. */ } // Send the attestation object to your server for verification. }
-
13:14 - Generate assertion
appAttestService.generateAssertion(keyId, clientDataHash: clientDataHash) { assertionObject, error in guard error == nil else { /* Handle error. */ } // Send assertion object with your data to your server for verification }
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。