web-dev-qa-db-ja.com

64ビットアプリケーションには、32ビットアプリケーションよりもセキュリティ上のメリットがありますか?

これは、arstechnica.comの特定の article が述べています。

これらの保護対策の1つは、アドレススペースレイアウトランダム化(ASLR)と呼ばれ、DLLおよびアプリケーションメモリを、各32ビットアプリケーションが利用できる4GB内の予測できない場所に移動することによって機能します。これにより悪用が難しくなりますが、32ビットシステムでは保護が制限されます。スペースが4GBしかないため、ランダムに選択できる場所はそれほど多くありません。たとえば、アプリケーションが独自のデータを格納するための大きな空き領域が確保されるように、DLLは比較的接近してパックする必要があります。

これには技術的なメリットがありますか、それとも通常のナンセンスでセキュリティに重点を置いていないサイトが思いついたので、私はこれを提出するべきですか?

7
user10211

[〜#〜] aslr [〜#〜] はかくれんぼゲームです。攻撃者がバッファのオーバーフローとポインタの上書きに成功した場合、OSはアプリケーションコード(メインの実行可能ファイル)をロードしますとそのDLL)をランダムな場所に配置して、攻撃者が意味のある場所に実際にヒットするのを困難にします。構造上、遊び場が大きいほど効果的です。 64ビットモードの拡張アドレス空間は、より大きな遊び場です

物事を定量化するには、32ビットモードでは、アドレス空間は最大で32ビット幅です(カーネルが64ビットモードを認識していない場合、実際には31ビットです)。 DLLローダーはページアライメントを尊重する必要があり、ページはx86で4 kBです。これにより、ASLRのランダム化で最大20ビットのエントロピーが得られますが、実際にはDLLアドレス空間全体を通じて、より高い断片化を引き起こす可能性があります(たとえば、アプリケーションが1 GBの連続バッファを割り当てるのを防ぎます。これは、画像や映画の編集時によくあることです)。これは、たとえば、引用しているテキストです。たとえば、DLLの読み込みはアドレス空間の8分の1(つまり29ビット)内でのみ行われると想定します。位置合わせでは、これは17ビットのエントロピーを意味します。別名131072特定のDLLが存在する可能性のある場所。いずれの場合でも、勤勉な攻撃者は(スクリプトを使用して)攻撃が機能するまで数十万回繰り返すだけで、運に頼ることができます。

64ビットモードでは、アドレススペースが48ビットに拡張され、Windowsでは44ビットに下げられました。これにより、12ビットのエントロピーが追加されます。つまり、攻撃者の労力を4096倍にします(攻撃者が運に依存している場合)。

したがって、何らかの方法で、64ビットモードの拡張アドレス空間によりセキュリティが向上することは事実です。もちろん、ASLRは、バッファオーバーフローが発生した場合にのみ効果があります(== --- ==)。この場合、すでに大きな問題に直面しています。

10
Thomas Pornin