web-dev-qa-db-ja.com

コードメモリページが読み取り可能である必要があるのはなぜですか?

各命令をCPUに読み込んで実行する必要があることを理解しています。これが、コードページを「r-x」にする必要がある理由です。

しかし、私の観察では、実行のためにコードをCPUに読み取る動作は正常ですが、コードを別のメモリ空間に読み取る(たとえば、コードを汎用レジスタにコピーする)ことは非常に疑わしいです。一例として、「ASLRをバイパスするためのジャストインタイムコードの再利用」( http://www.ieee-security.org/TC/SP2013/papers/4977a574.pdf )、およびI攻撃者は他の多くの方法で使用できると信じています。

だから私の質問は、なぜコードページから「r」権限を削除しないのか、つまり、コードが実行のためにCPUにのみ読み込まれるようにCPUを設計しないのかということです。

3
Infinite

私たちはフォンノイマンアーキテクチャの結果、つまりデータとコードの共有メモリスペースを扱っています。これには利点がありますが、ご指摘のとおり、攻撃方法などのセキュリティ上の問題もあります。

ゼロから始めた場合、そのようなCPUを構築できなかった理由はないと思いますが、アンチウイルスからDRM、奇妙な最適化を行うビデオゲーム、デバッガー、who-knows-what-elseまで、多くのプログラムが機能しませんでした。そのような制限があります。下位互換性を期待する今日の市場にそのCPUを導入するのは難しいでしょう。一部の人々は、今日のコンピューターでDOSプログラムを実行したいと思っています。これらの種類のものは、主要なアーキテクチャの変更を困難にします。

3
crovers