クライアントのユーザー名とパスワードを使用して有料コンテンツにアクセスする、iOSプラットフォーム上のモバイルアプリケーションの機能

モバイルアプリケーションの開発者は、多くの場合、ユーザーの機密データをユーザーデバイスに保存する必要に直面しています。 これは、たとえば、クレジットカード番号や認証情報などです。 この記事では、iOSモバイルプラットフォームの例を使用して、情報セキュリティの観点から機密データの保存の実装における一般的なエラーについて説明します。

通常、アプリケーション設定は構成ファイルに保存されます。 iOSモバイルプラットフォーム用のアプリケーションの開発に使用されるCocoa Touchライブラリは、NSUserDefaultsクラスにアプリケーション設定を保存するための抽象化レイヤーを提供します。 NSUserDefaultsクラスは、定評のあるシングルトンデザインパターン(シングルトンとして知られています)を実装し、標準アプリケーション構成ファイルを介したインターフェイスアクセスを提供します。

標準アプリケーション構成ファイルは、ホームディレクトリの相対アドレスLibrary / Preferences / <your.company.name>。<App.name> .plistにあります。 サンドボックスにある他のファイルと同様に、他のユーザーレベルのアプリケーションでは読み取りできません。 例外は、システムセキュリティポリシーの変更の対象となるデバイス(ジェイルブレイクされたデバイス)です。

多くの開発者は、NSUserDefaultsクラスを使用する便利さを高く評価しています。 大多数のアプリケーションは、内部設定やユーザー設定を保存するためにそれを使用します。 残念ながら、ユーザビリティがセキュリティと相関することはめったにありません。 機密ユーザーデータを標準設定ファイルに保存することは、開発者の典型的な間違いであり、ユーザー情報の漏洩につながります。

情報セキュリティのコンテキストでエラーについて付録Aのソースコードを調べた結果、アプリケーションが設定用の構成ファイルにユーザー認証データを格納していることが明らかになりました。 元のiOSオペレーティングシステムバージョン6.1.3の制御下でiPadに付録Aをダウンロードした後、認証段階を経て、アプリケーション設定ファイルの探索について設定しました。



画像

1. iPadでアプリケーションをダウンロードします



この脆弱性を実証するために、Windows NTおよびMac OS Xファミリのオペレーティングシステムで利用可能なiExplorerアプリケーションを使用しましたiExplorerアプリケーションは、iOSデバイス用のグラフィカルファイルマネージャーです。 インストールされたアプリケーションのリストに付録Aがあり、ライブラリ/環境設定/ <設定名> .plistを開いて読み取ります。



画像

2.目的のファイルにアクセスできるiExplorerアプリケーションの外観



画像

3.機密情報を含む構成ファイル



機密情報への不正アクセスを目的として、攻撃者が同じアクションを実行できることは明らかです。 さらに、ユーザーのコンピューターまたはジェイルブレイクされたデバイスで実行されている悪意のあるアプリケーションで、アプリケーション設定ファイルを抽出するプロセスを自動化できます。

標準のアプリケーション設定ファイルの不適切な使用の別の例を見てみましょう。 別のアプリケーション(たとえば、付録B)のソースコードを調べた結果、ユーザー認証データが暗号化された形式で構成ファイルに格納されていることが明らかになりました。 データの暗号化には、AES256対称暗号化アルゴリズムとBase64暗号化アルゴリズム定数キーの組み合わせが使用されます。

一見、このアプローチは非常に合理的に思えるかもしれません。 暗号化された情報を傍受する攻撃者はほとんど何もしないようです。 ただし、実際には、攻撃者は取得したデータを使用する少なくとも2つの方法を持っています。

1.構成ファイルの置換。 構成ファイルの置換を実行すると、攻撃者はユーザーの機密データに部分的または完全にアクセスできます。

2.暗号化アルゴリズムとキー抽出の認識。

最初のケースで使用されるアルゴリズムの欠点が明らかな場合、2番目のケースではそのようなハッキングの複雑さを評価する必要があります。 iOSオペレーティングシステムを実行しているデバイスにアプリケーションBをインストールし、アプリケーションのイメージをアップロードします。 通常、アプリケーションイメージは部分的または完全に暗号化されているため、最初に復号化する必要があります。 デバッガを使用して、アプリケーションイメージをメモリからアンロードし、バイナリアプリケーションイメージを編集して、復号化されたセグメントを置き換えます。 このプロセスの詳細な説明はこの記事の範囲を超えており、Mach-O形式のアプリケーションのバイナリイメージを自動的に復号化するツールがあることのみに言及しています。

次の手順は、アプリケーションのバイナリイメージを逆アセンブルすることです。 これを行うには、IDA Pro Interactive Disassemblerを使用します。 __cfstringセクションでパスワード行を検索し、逆参照を表示するように逆アセンブラに依頼してみましょう。



画像

4. IDA Pro逆アセンブラーでの作業



サブルーチン-[Preferences setPassword:]に移動しましょう。 ここでもIDA Proは失敗しませんでした。すべての作業を行いました。



画像

5.バイナリイメージのアセンブラー



ここで何が起こっているかを理解するために、ARMアーキテクチャの第一人者である必要はありません。 オフセット0x0000DDCCでは、ユーザーパスワードはBase64でエンコードされ、オフセット0x0000DDE6では、AES256はTheSuperSecretKeyキーで暗号化されます(実際のアプリケーションでは、異なる暗号化キーが使用されました)。

そのため、攻撃者は、スキルレベルがそれほど高くなくても、暗号化アルゴリズムとキーを10分以内に侵害する可能性があります。 この知識により、攻撃者はユーザーの機密情報への不正アクセスを取得し、ユーザーデータの収集プロセスを自動化できます。

このような脆弱性を解決するための推奨事項には次のものがあります。




All Articles