書き込みxor実行(W ^ X)は、メモリのブロック(ページ)を同時に書き込み可能と実行可能の両方としてマークできないというポリシーです。
W ^ Xは次の場合となしでどのような攻撃を防ぎますか。
W ^ Xと「一度だけ書き込み可能、決して実行不可能」はどちらもDEPのサブケースです。 DEPは、読み取りアクセスと実行アクセスを区別することです(書き込み可能ページも読み取り可能ページです)。 W ^ XはDEPを使用して特定のポリシーを適用することです。つまり、特定のページを同時に書き込みおよび実行することはできません。
「データ」を書き込んでから実行するため、プログラマはW ^ Xポリシーへの準拠を要求される可能性があります確実にキャッシュをフラッシュする必要があり、これは明示的でコストのかかる操作です。 (mprotect()
呼び出しを使用して)カーネルを通過することは、そのための難しい方法ではありません。一方、プログラマにそのようなことを明示的に実行させることは、他の状況、つまり攻撃者がバッファオーバーフローを悪用しようとしたときに発生しないことを意味します。これは、「スタックを実行できない」機能の一般化です。 (ただし、バッファオーバーフローはまだ残っています。W^ Xは、攻撃者の生活を困難にします。)
「一度だけ書き込み可能で実行できない」ポリシーは、私には疑わしいように見えます。これは、JITコンパイラと互換性がありません。とにかく、それはW ^ Xのサブケースです:W ^ Xのように、W-> Xへの遷移が禁止されています。