これによると article によると、OpenBSDはユーザーがコンピューターを再起動またはアップグレードするたびに固有のカーネルを作成する機能を実装しています。
それはKARL、「カーネルアドレスランダムリンク」と呼ばれます。これは、ランダムな順序で内部カーネルファイルを再リンクすることで機能し、毎回一意のカーネルバイナリBLOBを生成します。
技術的な説明は言う;
一意のカーネルがリンクされているため、スタートアップアセンブリコードが同じ場所に保持され、ランダムなサイズのギャップが続き、その後、他のすべての.oファイルがランダムに再編成されます。その結果、関数と変数の間の距離はまったく新しいものになります。ポインターの情報リークは、他のポインターまたはオブジェクトを開示しません。ネストされたオフセットの変更によって命令ストリームのポリモーフィズムが損傷するため、これは可変サイズアーキテクチャ上のガジェットの削減にも役立つ可能性があります。
私の理解から、これはKASLRを超える一歩です。 KASLRが保護するよりも細かい粒度でのメモリ位置の推論。
KASLRを使用すると、ROPガジェットがメモリの領域(ヒープスプレーなど)を上書きしにくくなり、最終的に、注入されたコードまたは既知のコードに制御が渡されます。しかし、これは軍拡競争であり、JITスプレーなどのカウンタームーブが進化しました。
ポインターの情報リークは、他のポインターまたはオブジェクトを開示しません。
ランダム化するASLRと同様に、ユーザーランド関数のエントリポイントを改ざんするのを「見つける」ことが困難になり、KASLRが同じことを行う-攻撃者ができる場合、両方とも依然として脆弱です
これはどのようにセキュリティを向上させますか?
どうやら、再起動のたびに(1)を再検討する必要があるため、KARLはこの推論をはるかに難しくしています。これにより、悪用のコストが大幅に増加します(攻撃者が大部分のヒットとミスの手法でカーネルをいじる場合でも、攻撃者が再起動する必要さえない状況を除く)-そしてしたがって、OSはより安全です。
この新しい機能により、どのような種類の攻撃が緩和されますか?
参照ポイントの個別の「知識」に基づいてカーネルオブジェクトの場所を推測することに依存するガジェット。
これは、カーネルアドレス空間のレイアウトのランダム化とどう違うのですか?
これはKASLRの上に追加の防御策です。 KASLRが防御するよりも細かい粒度で動作するガジェットの使用を防御します。