iOSの仮面の脆弱性チェック

いわゆるに関連する記事を最近公開しまし 。 iOSの「マスク」脆弱性。 記事からの抜粋:

「この脆弱性により、既存のアプリケーションの上に悪意のあるアプリケーションをインストールすることができ、この新しいアプリケーションは以前のアプリケーションのすべてのファイルにアクセスできます。 これは、インストールされたアプリケーションが、iOSおよびOS XがOSレベルでアプリケーションを識別するために使用するものと同じバンドル識別子を持つことを前提としています(たとえば、更新を配信する場合)。 脆弱性は、最新のiOS 8.1.1ベータ版を含む7.1.1以降のiOSのすべてのバージョンの影響を受けます。



エンタープライズ証明書を直接知っている人として、私は間違いなく本当の事実に反論/証明したかったです。



したがって、エンタープライズライセンスについて知られていること:



1.企業にのみ発行されます(個人ではなく、 詳細情報 )。

2.エンタープライズライセンスを取得するには、アップルに非常に重要なドキュメントセットを提供する必要があります。 したがって、存在しない会社を指定しても機能しません。

3.エンタープライズライセンスは、内部使用専用に発行れます。 一部のアプリケーションがこの方法で配布されるという事実は、iOS Developer Enterprise Programから除外されるという会社のリスクです。

4.サイトからのアプリケーションのインストールは、マニフェストファイルを介して、HTTPSを介してのみ可能です。

5.エンタープライズライセンスで署名されたアプリケーションをインストールすると、「Company_Name証明書で署名されたApp_Nameアプリケーションを本当にインストールしますか?」というメッセージが表示され、証明書からCompany_Nameが取得されます。



脆弱性をチェックするために、攻撃者の進路を試みましょう。



アプリケーションに署名するには、プロビジョニングプロファイルを作成する必要があります。



プロビジョニングプロファイルの作成
画像








次の手順では、アプリIDを指定します。



アプリIDを選択
画像








ただし、指定するには、次のアプリIDを作成する必要があります。



アプリIDを作成する








この画像は、別のアプリケーションと同様に、 識別子 「バンドル識別子」を使用してアプリIDを作成すると、エラーが発生することを示しています。



合計:

プロビジョニングプロファイルの取得はアプリIDでのみ可能です。アプリIDは、既に登録されている「バンドル識別子」では作成できません。 また、プロビジョニングプロファイルがないと、アプリケーションに署名できません。



2段階



アプリID「Wildcard App ID」を作成する別の方法があります。 会社のウェブサイトは言う:
これにより、単一のアプリIDを使用して複数のアプリを照合できます。 ワイルドカードアプリIDを作成するには、[バンドルID]フィールドの最後の桁にアスタリスク(*)を入力します。




ワイルドカードアプリIDを作成








置き換えたいアプリケーションとまったく同じワイルドカードアプリIDを作成します。 App IDの最後の部分(通常はアプリケーションの名前)に(*)と書きます。



作成されたワイルドカードアプリID








次に、新しいアプリIDのプロファイルを作成します。



社内プロビジョニングプロファイルの作成








したがって、アプリIDを受け取り、そのための配布プロビジョニングプロファイルを作成し、アプリケーションに安全に署名できます。



そのため、Xcodeでプロジェクトを作成し、次のパラメーターを指定します。



Xcodeでプロジェクトを作成する








プロジェクトは空のシングルビューアプリケーションです。



そのため、電話機にインストールされたプログラムはデスクトップ上で誇示されます。



置き換える予定のアプリケーションを備えたデスクトップ








電話を接続してアプリケーションを収集します。 私たちのアプリケーションは、置き換えたいアプリケーションとまったく同じApp IDを持っていることを思い出させてください。 アプリケーションをビルドすると、次のようなデスクトップが得られます。



デスクトップ、私たちのアプリケーションは目標を正常に置き換えます








アプリケーションは本当に「ジャム」です。 脆弱性が確認され始めています。 さて、データについてはどうでしょうか?

悪名高いiToolsアプリケーションを開きます。 アプリケーションのバージョンに注意してください-変更されましたが、ビルドは同じままです(Xcodeでは、ビルド== 1):



これが、iToolsでのアプリの外観です。








内容をコピーして、アーカイバでアプリケーションを開きます。



そして、我々は観察します:再インストールの前にあったすべては、適所に残りました!



前に



元のアプリケーションのフォルダー構造












アプリケーションのなりすまし後のフォルダ構造








その結果、アプリIDを取得し、そのための配布プロビジョニングプロファイルを作成しました。 単純な(空の)アプリケーションを作成し、電話にインストールしました。 これで、アプリケーションに保存されていたすべてのデータがアプリケーションの手に渡されました!



アーカイブを収集し、作成されたプロファイルで署名すると、たとえばサイトまたはメーリングリストを通じてアプリケーションを配布できます。 ユーザーには、「Company_Name証明書で署名されたApp_Nameアプリケーションを本当にインストールしますか?」というメッセージが表示され、証明書からCompany_Nameが取得されます。 ユーザーがAppStoreストアからインストールした有名なアプリケーションがこのような奇妙な方法で更新しようとしているという事実に混乱しておらず、未知の会社の証明書によって署名されている場合でも、そのようなユーザーはこのアプリケーションをインストールし、第三者にデータを提供します。



PSこの方法でアプリケーションから何を「取得」できますか? たとえば、同じiToolsを表示するときと同じですが、すでにリモートにあります。



この記事へのコメントでは、電話(アプリケーションサンドボックス内)に保存されている重要な情報を暗号化すること、そのようなアプリケーションへの「侵入」から保護する方法に関するアドバイスを期待しています。



All Articles