web-dev-qa-db-ja.com

iOSアプリ内購入の攻撃保護

AppleのiOSアプリ内購入システムは、過去にアプリをだまして無料でコンテンツを提供させた人々から攻撃を受けてきました。それ以来、彼らはこの種のことを制限しようとするために関係するシステムを改善しました。

Appleから入手できるStoreKitリファレンスドキュメントを読みました。ワークフローや実行する必要のあるチェックなどの概要を理解しています。ただし、セキュリティの問題がある可能性があります。私は気づいていません。

アプリ内購入メカニズムに対して試みることができる盗難攻撃の完全なリスト、開発者がこれらの攻撃を誤って許可する方法、およびそれらを防ぐためのベストプラクティスを誰かが提供できますか?

30
Matt Mc

これらは私が知っている過去と現在の攻撃です:

偽のApp Store

ロシアのプログラマーによって有名になりました Alexey Borodin 、この攻撃は、AppStoreで直接購入レシートを確認するアプリにのみ影響します。デバイスのDNS設定を変更し、偽造されたセキュリティ証明書をインストールすることにより、検証要求が偽のApp Storeサーバーに送信され、購入が有効であることが自動的に返されます。疑いを持たないアプリは、これらの確認呼び出しを受け入れ、コンテンツをユーザーに配信します。

解説

このエクスプロイトが2012年7月に発表された後、Appleは、この種の攻撃が引き続き発生しないように、開発者向けに更新されたドキュメントとアドバイスを発行しました。ボロディンは、さまざまなWeb記事で次のように引用されています。 Appleの更新されたAPIとベストプラクティスのガイドラインに基づいて「ゲームオーバー」であること。

予防

Appleには、この抜け穴専用のドキュメント全体があります ここ(編集:リンクがダウンしています、 ウェイバック 必要に応じて...ドキュメントはiOS 5.1以前をカバーしていましたが)彼らが提起する最大のポイントはアプリにレシートを所有している外部サーバーに送信させてから、サーバーにAppleでレシートを確認させます。ただし、レシートをアプリからApp Storeに直接送信する場合は、次のチェックをお勧めします。

  • AppStoreサーバーへの接続に使用されるSSL証明書がEV証明書であることを確認してください。
  • 検証から返された情報がSKPaymentオブジェクトの情報と一致することを確認します。
  • 領収書に有効な署名があることを確認してください。
  • 新しいトランザクションに一意のトランザクションIDがあることを確認してください。

偽の検証サーバー

アプリがトランザクションレシートをサーバーに送信し、サーバーがそれらをApp Storeに転送する場合、1つのオプションは、攻撃者が検証サーバーを偽造することです。何らかの方法(DNSテーブルの変更、URLの変更など)によって、レシートは別の場所に送信され、「成功した検証」が返されます。このようにして、レシートがサーバーに届くことはなく、AppStoreでレシートを確認する機会もありません。

解説

どうやら、Cydiaストアには、バックグラウンドで実行し、受信トラフィックを監視し、この目的のためにリダイレクトするのに役立つさまざまなアプリがあります。出典: Hussulinuxブログ

予防

領収書が確認されたらすぐにコンテンツを配信する場合、この種の攻撃を防ぐ方法は知られていません。ただし、このシナリオを考えてみましょう。自分のサーバーで管理されているユーザーアカウントシステムがあります。アプリ内購入の目的が特定のユーザーアカウントがアイテムを購入したことをサーバーに通知することであり、アプリがそのアイテムをサーバーからダウンロードする場合、攻撃の影響を受けません。レシートを別のサーバーにリダイレクトしても、攻撃者にとっては何の効果もありません。サーバーがレシートを認識しないため、ユーザーアカウントにアイテムの所有者としてマークを付けることはないためです。

偽の領収書

攻撃者は購入プロセスを偽造して、偽造された領収書を検証サーバーに送信する可能性があります。以前の攻撃とは異なり、領収書の送信場所は変更されませんが、詐欺師に置き換えられます。このなりすましレシートは、実際には、以前のApp Storeトランザクションからの有効なレシートであり、AppStoreはそれをそのように検証します。購入プロセスを偽造してから、なりすましの領収書をサーバーに送信することにより、コンテンツが実際に支払われることはありません。

解説

どうやら、この種のことを行うさまざまなCydiaアプリがあります。 product_idはアプリで使用するものとはまったく異なるため、偽の領収書を見つけることができます。どうやら最も有名ななりすましIDはcom.zeptolab.ctrbonus.superpower1です。出典: Hussulinuxブログ

予防

この攻撃を見つけたリンクで、ブロガーは、確認サーバー(base64_decode)でレシートを解凍し、レシートをAppStoreに送信する前にproduct_idを確認することを推奨しました。ただし、 この記事 Appleでは、最初にレシートをApp Storeに送信してから、返された情報を読んで、レシートが有効であることを確認することをお勧めします。

(また、私が間違っている場合は訂正してください。ただし、検証サーバーがなくても、Appleが推奨する手法を使用して、この種の攻撃を防ぐこともできます。アプリがレシートをApp Storeに直接送信すると、 JSON応答の内容を調べて、それが有効であることを確認します。ただし、これは、外部検証サーバーを使用するというAppleの推奨するベストプラクティスに反するため、推奨しません。)

締めくくりに

これらは私が知っている攻撃です。どこかで間違っている場合は、遠慮なく修正するか、追加の攻撃と修正を行ってください。

注意として、このウェブサイトがあります: http://www.in-appstore.com/ これは、iOS5またはジェイルブレイクされたiOS6デバイスのいずれかで、アプリ内購入を無料で許可すると主張しています。 2013年7月5日現在アクティブです。彼らがどのようにそれを行っているかは100%わかりませんが、DNSの再ルーティングと偽のセキュリティ証明書が関係しているようです。これは偽のAppStoreまたは偽の検証サーバーを意味します。これらの攻撃から保護されていないアプリがまだ存在することを意味します。

リソース

編集:

追加

1人か2人がここを振り回して、この投稿が役に立ったようです。うれしいです。

他の投稿、本、またはあなたがそれをしているのであれば、インターネットの裏腹を精査することのいずれかで、この主題に関して得ることができるより多くの情報があります。ここに私が調べたいウェブサイトや投稿などがいくつかありますが、まだチャンスがありません。後で面白い情報を見つけたら、リンクを追加します。

http://www.se7ensins.com/forums/threads/tut-how-to-hack-ios-games-and-apps.701845/http://www.iapphacks .com /

すぐに気になる点がいくつかあります。ティーンエイジャーが編集したい場合を除いて、プレーヤーのデータを単純なplistに保存しないでください。ディスク上のファイルを編集するだけで金などを手に入れることができれば、IAPシステムをハッキングする必要はありません。おそらく、これらのファイルを暗号化することで、攻撃者の特定のセグメントを思いとどまらせることができます。

Se7ensinsリンクに基づくと、攻撃者はバイナリをこじ開けて、plistファイルの編集と同じかそれ以上の目的を達成するためにそれをいじることができるようですが、これには少し高いスキルレベルが必要になります。おそらく、脱獄検出を設定することで、これに頼るほとんどの人を思いとどまらせることができます。

繰り返しますが、このセクションはほとんど推測ですが、誰かを助けるかもしれません。実際、保護のレベルは、開発者が収益を保護するためにどこまで進んでいくか(セキュリティと暗号化のうさぎの穴を下って)によって異なります。

69
Matt Mc