コードインジェクション攻撃や制御フローハイジャック攻撃(スタックベースのバッファオーバーフローやヒープベースのバッファオーバーフローなど)に対する対策が、主にソフトウェアで実装されているのはなぜだろうか。
一般的で広く展開されている対策の例は次のとおりです。
-ASLR
-スタックカナリア
-実行不可能なメモリ領域
しかし、なぜこれらの対策がハードウェアに完全に実装されていないのか、少なくともハードウェアによってサポートされていないのでしょうか。最近では、再構成可能なハードウェア(FPGAなど)が手頃な価格であるため、このアプローチは完全に可能であるように思われます。
または、ハードウェアベースの対策は存在しますか?もしそうなら、誰かが私にいくつかの例を与えることができますか?
非実行可能メモリ領域は、ハードウェアベースの対策の例です。メモリの非実行可能性は、 メモリ管理ユニット によって強制されます。ヒープオーバーフロー保護は、ハードウェアレベルで実装することもできますが(読み取り不可能なメモリページをヒープ割り当ての最後に配置することにより)、使用可能なアドレススペースが大幅に削減され、次のような割り当てに対してのみ機能するため、通常は実装されません。ページサイズの正確な倍数。
ほとんどの対策はソフトウェアレベルで実装されます。これは、それらに関連する概念(アドレス空間のレイアウトなど)がソフトウェアレベルでのみ存在するためです。