web-dev-qa-db-ja.com

KASLRは実際に悪用に対してより多くのセキュリティを提供しますか?

[〜#〜] aslr [〜#〜] がどのように機能するか、およびLinuxとWindowsの両方のシステムでどのように実装されているかについて、私はすべて知っています。マルウェアが考慮しなければならない追加の保護レイヤーを提供します。しかし、コンピュータが長期間オンのままになっている今日、ASLRはアドレス空間を思い通りにランダム化していないようです。 Windows 8には、ASLRが効果的であることを確認するための 追加の手順 があります。

Linuxカーネルをビルドしてアップグレードしたとき、カーネルレベルのASLRについて知り、ブート時に次のように述べていることに気付きました。

KASLR not enabled

いくつかの検索を行った後、一般的にはKASLRでそれほど多くは見つかりませんでした。だから今、ここで誰かがそれを経験したことがあるかどうか知りたいです。

  1. KASLRは価値がありますか?大きなメリットはありますか?カーネルを再構築し、KASLRとそのすべてのジャズ用に構成する必要があります。ひどくはありませんが、少し迷惑です。
  2. これはWindowsの世界に存在しますか?もしそうなら、Windowsはその実装でより良い仕事をしますか?

または、世界はまだそれに対応していないのかもしれません...

13
RoraΖ

KASLRは、Linux向けにリリースされた日から激しい批判を受けており、その日も敗北しました。 grSecurityのSpenderがそれについて投稿しましたLWNのコメントとともに )これは単純化した方法でのみ要約します。元のソースを読むことを強くお勧めします。

アドレススペースレイアウトのランダム化 は、スタック上の多数のポインターの位置をランダム化することにより、元々複雑なエクスプロイトに適用されていました。 ASLRを無効にするには、のいずれかが必要です。

  • 誤って正しいランダムなアドレスを見つけるまでブルートフォーシング(アプリを再起動する必要があり、KASLRにはほとんど適用されません)
  • メモリレイアウトに関する情報をリークするポインタを取得する

2番目のオプションはカーネルにとって非常に有望です。ハードウェア構成によってはアドレス空間が限られている場合があるため、大きなランダムオフセットをあまり多く持つことはできません。最も重要なのは、カーネルが全体のオフセットを変更できないことです。ライフサイクル全体!つまり、 1つのメモリレイアウトリークは、マシンが再起動されるまでKASLR を無効にします。この種のバグはSpenderによってかなり頻繁に発生すると言われています。

これがまさにLinux KASLRが弱い理由であり、Spenderによると「失敗」さえあります。このメカニズムはカーネル用ではありませんでした。詳細については、彼の記事をご覧ください。彼は他の実装についても語っています。上記の点から、弱いのは実装だけでなく、設計であることを理解する必要があります。 KASLRは、悪用の条件がはるかに好ましいため、従来のASLRよりも実装方法に多くの注意が必要です

編集:どうやらあなたは知ることから離れたグーグル検索にすぎない Windows KASLR実装を利用する方法

7