ポインタをキーとするデータ構造からのポインタ漏洩 ノート

ポインタをキーとするデータ構造からのポインタ漏洩

Google Project Zeroは、Appleデバイスのメモリ破損バグを悪用するためにリモートASLRリークが必要であることについて議論しました。これにより、メモリ安全性違反やタイミング攻撃なしにポインタをリモートでリークできる技術が発見されました。この方法は、攻撃者が提供したデータをデシリアライズ、再シリアライズ、および返す攻撃サーフェスに適用されます。macOS/iOSで直接的な実世界の攻撃サーフェスは特定されませんでしたが、NSKeyedArchiverを使用した人工的なケースでこの技術がテストされました。この問題はAppleに報告され修正されましたが、実世界への影響が実証されなかったため、公開バグトラッカーのエントリは作成されませんでした。この新しい技術は、ハッシュテーブルの衝突攻撃に関連する以前の研究に基づいています。歴史的に、HashDoS攻撃は最悪のハッシュテーブルパフォーマンスを悪用してサービス拒否を引き起こしました。以前の研究では、ハッシュ衝突を使用してアドレスをリークする可能性も示唆されていました。HashDoSの概念は、攻撃者が特定のハッシュバケットへのアクセスを遅くすることと見なすことができます。この原則は、FirefoxでJavaScript Map挿入のタイミング測定を通じてヒープアドレスをリークするために利用されました。ポインタキーのデータ構造を反復処理することも、オブジェクトアドレスに関する情報を明らかにすることができます。シリアライゼーションメカニズム、特に任意のオブジェクトグラフを許可するものは、安全でない場合があります。AppleのNSKeyedUnarchiverは、デシリアライズ可能なクラスの許可リストで動作します。特定のテストケースは、攻撃者が提供したデータをNSKeyedUnarchiverを使用してデシリアライズおよび再シリアライズすることにより、共有キャッシュポインタをリークすることを目的としています。NSNullシングルトンオブジェクトのハッシュは、明示的に処理されない場合、デフォルトでそのアドレスになり、これは共有キャッシュに格納されます。NSNumberインスタンスは、数値値に応じて異なる方法でハッシュされます。辞書は、キーの配置を管理するために、ハッシュコードをバケット数で割った値を使用します。