Linuxプロセスのページテーブルには、コマンドがスタックで実行されるのを停止してオーバーフロー攻撃を防ぐ特別なビットがありますか?

Linuxプロセスのページテーブルには、コマンドがスタックで実行されるのを停止してオーバーフロー攻撃を防ぐ特別なビットがありますか?

それからビデオの中の男は:

https://www.youtube.com/watch?v=1S0aBV-Waeo

スタックを漏洩し、戻りアドレスを操作してスタックをポイントし、NOPコマンドを使用して実行可能コードをスタックにコピーします。

しかし、すべての最新のLinuxシステム(Debianシステムを含む)は、ページテーブルのNX(実行不可能)タイプビットを使用し、このような停止コマンドを使用してスタックで作業することでこれを守ることができると思います。それとも私が何かを見逃しているのでしょうか?

ベストアンサー1

実行不可能なページ(NXビット)はハードウェア機能です。これにより、オペレーティングシステムは実行可能なページを表示できます。プログラムが実行できないメモリページでコードを実行しようとすると、プロセッサにエラーが発生します。

また、スタックが実行可能かどうかは、コンパイラオプション(および結果バイナリ)によって異なります。最新のLinuxディストリビューションは、実行不可能なスタック、スタックカナリア、アドレス空間レイアウトのランダム化など、ユーザー空間バイナリのさまざまな強化技術をサポートしています。例えばUbuntuユーザースペースの強化

これは可能スタックカナリアを使用せずに実行可能なスタックにバイナリをコンパイルして、ビデオ例のようにスタックオーバーフローを可能にします(コンパイルされたプログラム/使用されているオプションは表示されませんが、デフォルトではgccは実行可能ファイルを有効にしないでください)。これらの単純なプログラムのためのスタック)。

また、システムが実行可能+書き込み可能メモリ(ヒープまたはスタック)を必要とするバイナリを実行できないようにSELinux(および他のLinuxセキュリティモジュール)を設定できます。

おすすめ記事