web-dev-qa-db-ja.com

iOSキーチェーンセキュリティ

iPhoneの証明書を使用して、MS Exchange Syncの認証を行います。この証明書を保護するためのセキュリティコンセプトの実装方法はわかりません。

例えばScreenLockが有効になっていない場合、iPhoneで「フル」キーチェーンアクセスを取得できますか? (または、ジェイルブレイクしたiPhoneを使用)。

誰かこれに関するリンクがありますか?

54
phx

IOSキーチェーンセキュリティに関するフラウンホーファーの研究:

私の知る限り、iOSキーチェーンが使用する暗号化には2つのレベルがあります。最初のレベルでは、ロック画面のパスコードを暗号化キーとして使用します。 2番目のレベルでは、デバイスによって生成され、デバイスに保存されたキーが使用されます。

フラウンホーファーの研究者は、第2レベルを回避する方法を見つけました。暗号化キーはデバイスに保存されるため、これは回避するのが「簡単な」レベルです。そのため、iOS4では、メソッドはkSecAttrAccessibleWhenUnlockedまたはkSecAttrAccessibleWhenUnlockedThisDeviceOnlyを使用しないキーチェーンエントリでのみ機能します。これらのエントリは、電話がロックされている場合でも、第1レベルで復号化されてメモリに存在するためです。

  • IOS 4以降、kSecAttrAccessibleWhenUnlockedおよびkSecAttrAccessibleWhenUnlockedThisDeviceOnlyのキーは追加の暗号化レベルで保護されています
  • IOS 3.x以前では、使用されているアクセシビリティ属性に関係なく、フラウンホーファーの方法を使用してすべてのキーを復号化できます。
  • パスコードがまったくないデバイスは依然として脆弱です
  • 弱いパスコード(6桁未満)を持つデバイスは、依然として多少脆弱です。

パスワード試行ごとに約50ミリ秒。 →1秒あたり約20回の試行。 →基数36の6桁の英数字コードの正しいパスコードの推測が50%変化した場合、約1.7年。4桁の数字の標準シンプルコードは、9分以内にブルートフォースされます。ハードウェアベースではないため、iOSでの不正な試行のカウンターはバイパスできるという仮定に基づいて

Apple Inc. WWDC 2010、コアOS、セッション209「アプリケーションデータの保護」、スライド24

結論:機密データを保存する必要がある場合は、独自の暗号化を使用してください。また、キーをデバイスに保存しないでください。

編集:多数の ニュース記事 があり、フラウンホーファーの調査を引用し、デバイスが盗まれない限り読者が心配しないように安心させています。この攻撃はデバイスへの物理的アクセスによってのみ可能です。

私はなんとなく疑っています。研究者が電話に物理的にアクセスしてテストを行ったという事実は、制限ではなく、問題を単純化する方法に過ぎなかったようです。これは、キーチェーンエントリを解読するために行った操作の説明です。

ジェイルブレイクツールを使用した後、コマンドシェルにアクセスするには、小さなスクリプトを実行して、キーチェーンにあるパスワードにアクセスして解読します。復号化は、オペレーティングシステム自体が提供する機能を使用して行われます。

Jailbreak.meを使用したことがある人なら誰でも知っているように、ジェイルブレイクはデバイスへのphysicalアクセスを必要としません。理論的には、jailbreak.meコードを変更し、次のことを自動化するのは簡単なはずです。

  1. 通常どおりジェイルブレイクを実行します(これに必要なのは、ユーザーが悪意を持って作成されたPDFを開くことだけです)
  2. ジェイルブレイクが完了した後、フラウンホーファーのスクリプトを実行します
  3. パスワードをネットワーク経由で攻撃者が読み取れる場所に送信します

もう一度、キーチェーンに何を入れるかについて注意してください。

47
pepsi

通常、キーチェーンはそのような証明書を保存するための推奨される方法です。ただし、ジェイルブレイクを使用してキーチェーンのセキュリティをバイパスできることが発見されました( article )。

4
Nick Toumpelis

フランホーファーは、iPhoneキーチェーンの安全性に関する調査を行いました。

http://www.sit.fraunhofer.de/Images/sc_iPhone%20Passwords_tcm501-80443.pdf

3
aLt

私はあなたの質問の一部に答えることができますが、他の部分はまだ不明なので、答えを知りたいと思っているので、私は質問を投票しています。

私が答えることができる部分は、「スクリーンロックが有効になっていない場合にアプリが完全なキーチェーンアクセスを取得できるか」です。いいえ、すべてのアプリにはiphoneに独自のキーチェーン領域があります。つまり、アプリは独自のシークレットにのみアクセスできます。これらのシークレットはアプリ自体に対してロックされていないため、キーチェーンエントリをアプリ自体から隠す方法はありません。要約すると、アプリは独自のエントリを読み取ることができ、他のエントリは読み取れません。

しかし、私が知りたいのは、ジェイルブレイクされたデバイスで何が起こるかです。デバイスにジェイルブレイクが発生すると、すべてのアプリのキーチェーンが公開されますか?

2
Ivo Jansch