web-dev-qa-db-ja.com

制御フローハイジャック攻撃への対策が主にソフトウェアで実装されているのはなぜですか?

コードインジェクション攻撃や制御フローハイジャック攻撃(スタックベースのバッファオーバーフローやヒープベースのバッファオーバーフローなど)に対する対策が、主にソフトウェアで実装されているのはなぜだろうか。

一般的で広く展開されている対策の例は次のとおりです。
-ASLR
-スタックカナリア
-実行不可能なメモリ領域

しかし、なぜこれらの対策がハードウェアに完全に実装されていないのか、少なくともハードウェアによってサポートされていないのでしょうか。最近では、再構成可能なハードウェア(FPGAなど)が手頃な価格であるため、このアプローチは完全に可能であるように思われます。

または、ハードウェアベースの対策は存在しますか?もしそうなら、誰かが私にいくつかの例を与えることができますか?

4
user3171258

非実行可能メモリ領域は、ハードウェアベースの対策の例です。メモリの非実行可能性は、 メモリ管理ユニット によって強制されます。ヒープオーバーフロー保護は、ハードウェアレベルで実装することもできますが(読み取り不可能なメモリページをヒープ割り当ての最後に配置することにより)、使用可能なアドレススペースが大幅に削減され、次のような割り当てに対してのみ機能するため、通常は実装されません。ページサイズの正確な倍数。

ほとんどの対策はソフトウェアレベルで実装されます。これは、それらに関連する概念(アドレス空間のレイアウトなど)がソフトウェアレベルでのみ存在するためです。

4
Mark