スマホ関連の海外ニュースです。
2016 年 8 月 25 日には、アップルは、ペガサスと呼ばれる iOS 監視ツールキットの発見に対してセキュリティ更新 iOS 9.3.5 を発表しました。解除以前に発見されたこのツールキットを使用していた 3 つ別の iOS 0-day 脆弱性を侵害する (iOS 9.3.5 リリース) まで完全にパッチを適用した iOS マルウェア iOS デバイス。残念なことにこれらの脆弱性に関する公開情報は非常に薄いので、それらについての暗闇に公衆を維持することを決めた Citizenlab と目を光らせて (当事者間の発見のためのアップル クレジット) と林檎。彼らも共有しているないマルウェアのサンプル一般大衆と独立したサードパーティ製の分析は、この瞬間までは不可能です。SektionEins ですでに固定の脆弱性の詳細については、暗闇の公衆を保つことは間違っていると考えて我々 は、iOS のカーネルに関する質問に特化されます、ためセキュリティでご覧にしましたのでペガサスによって悪用の脆弱性を把握するために発表したアップルをパッチします。 残念ながら iOS セキュリティ パッチを分析としてまっすぐ進むが期待するほどではありません。IOS 9 カーネルは、デバイス (そしてファームウェア ファイル) を暗号化された形式でのみ格納されます。カーネルを復号化することができますいずれかを悪用する低レベルを持っている必要があるため復号化されたカーネルのコピーをつかむためにまたは問題の iOS 向けの脱獄を持っているとカーネル メモリからダンプします。SektionEins の後で行うし、9.3.4 iOS および iOS から iOS 9.3.5 カーネル ダンプに当社専用の脱獄を使用することにしましたが、私たちの研究室でデバイスをテストします。私たちは通常、彼は完全に復号化された iOS のカーネルがカーネルの脆弱性を物理メモリからダンプできるか開示しているブログの記事で最近マシュー Solnik によって記述されたメソッドを使います。一度ダンプされた 2 つのカーネルの違いについて分析する必要があります。このタスクを実行するオープン ソースのバイナリ差分プラグイン IDA のための Diaphora を使いました。私達の比較のため私たち井田に iOS 9.3.4 カーネルをロード待っていた、autoanalysis を完了するし、SQLITE データベースの形式が Diaphora を使用して現在の IDA のデータベースをダンプする Diaphora を使用します。我々 は iOS 9.3.5 カーネルでこのプロセスを繰り返すし、差分 2 つのデータベースに Diaphora を言った。この比較の結果は、次の図に表示されます。Diaphora は、iOS 9.3.5 によって変更されているいくつかの機能を検索します。ただしこれらの変更のほとんどは、ちょうどジャンプ ターゲットを変更します。変更された関数の一覧から、最も興味深い機能が OSUnserializeXML と思われるかなり明確になります。9.3.4 iOS および iOS 9.3.5 間多く (順序の変更) のため、機能が変更されたために、その差分の分析はかなり難しいです。しかしさらなる分析の実際にインラインを別の関数この関数であり、脆弱性を見つける可能性があります簡単に iOS のカーネルにかなり似ている XNU のソース コードを見るだけで明らかにしました。OS x 10.11.6 XNU カーネルは、opensource.apple.com で見つけることが。コードにインライン関数が実際に OSUnserializeBinary であることを明らかにしました。 OSUnserializeBinary は、OSUnserializeXML バイナリ シリアル化されたデータを処理するために追加された比較的新しいコードです。この関数は、OSUnserializeXML は、同じ方法でユーザー入力にしたがって公開されます。つまり、攻撃者が悪用それら単に任意の IOKit API (またはマッハ API) 関数の呼び出しを許可するには、引数、関数に一致する単純な IOKit などがシリアル化されます。これはまた、iOS または OS X で使用される任意のサンド ボックス内からこの脆弱性をトリガーできることを意味します。この新しい関数のソース コードは libkern/c++/OSSerializeBinary.cpp にありしたがって代わりにアップルが適用される正確なパッチを分析しようとすると、監査することができます。新しいシリアル化された形式のバイナリ形式が非常に複雑ではありません。それはヘッダーとして 32 ビットの識別子から成りの後に、32 ビット配置マーカーとデータ オブジェクト。次のデータ型がサポートされている: バイナリ形式エンコード ビット 24 30 32 ビット ブロックにこれらのデータ型。下位 24 ビットは、例えば長さまたはコレクション要素のカウンターを格納する数値データとして予約されています。ビット 31 がコレクションの最後の要素をマークし、他のすべてのデータ (文字列、記号、バイナリ データ、番号) 追加 4 バイト データ ストリームに整列します。POC は例については下記を参照してください。 それは以前 PHP.net の人々 に SektionEins によって明らかにされた PHP 関数 unserialize() で脆弱性の後の使用に非常によく似て見えるのでかなり簡単に判明した脆弱性をスポッティングします。OSUnserialize() の脆弱性は、同じ原因から生じて: デシリアライザーは、逆シリアル化中に以前解放されたオブジェクトへの参照を作成できます。オブジェクトが逆シリアル化されたときに、オブジェクトのテーブルに追加されます。このコードはこんな感じ: これは安全ではないと同じ過ち PHP は setAtIndex() マクロ記憶あなたはここで見ることができるオブジェクトの参照カウンターは増加しませんので: いない v ##Array 内の参照の追跡問題にならない場合は合法的に逆シリアル化中にオブジェクトを解放する方法はありませんでした。残念ながら、少なくとも 1 つのコード パスでは、逆シリアル化中にオブジェクトを解放ことができます。次のコードから見ることができるディクショナリ要素の処理は、OSSymbol と OSString のキーをサポートしています。しかし、OSString キーの場合、彼らは OSString オブジェクトの破壊に続いて OSSymbol に変換します。残念ながら破壊の時に、OSString オブジェクトが既に描画オブジェクト テーブルに追加されます。それは単に使用することが可能このため既にこれへの参照を作成する kOSSerializeObject データ型は OSString オブジェクトを破壊しました。これは脆弱性の後古典的な使用です。
続きを読む…
PEGASUS iOS Kernel Vulnerability Explained
On 25th of August 2016 Apple released the security update iOS 9.3.5 in response to the discovery of an iOS surveillance toolkit dubbed PEGASUS. Unlinke previously discovered iOS malware this toolkit was using three different iOS 0-day vulnerabilities to compromise fully patched (until the release of iOS 9.3.5) iOS devices. Unfortunately public information about these vulnerabilities is pretty thin because Citizenlab and Lookout (the parties Apple credits for the discovery) and Apple have decided to keep the public in the dark about them.
Read more…