2016-12-12 8 views
2

セキュリティフィールドには、ヒープエクスプロイトとスタックスマッシング攻撃があります。スタックまたはヒープセグメントのコードを実行できるのはなぜですか?

しかし、/proc/*/mapsファイル、ヒープとスタックセグメント、 にはrw-p -permissionしかありません。

これらの2つのセグメントには実行権限がありません。 私のエンジニアの友人は、インテルCPUでrwパーミッションがあれば、あなたのコードは自動的に実行許可を得られると言いました。 しかし、なぜインテルがこの設計を行うのか理解できません。

+0

が、Intelプロセッサは、[NXビットのオプション]を持っていた(https://でen.wikipedia.org/wiki/NX_bit)をご覧ください。 –

+0

@HansPassantただし、ロングモード(64ビットのページテーブルエントリ)でのみ。 –

+0

あなたはこのhttps://en.wikipedia.org/wiki/Executable_space_protectionを見なければならないかもしれません。実際には、スタックまたはヒープセグメント内のコードはジャンプしても実行できません。セグメンテーションフォルトが発生します。これは、セグメント(スタックまたはヒープ)に実行権限がないのに実行しようとするためです。その後、CPUは例外をスローします。 – bananaappletw

答えて

2

これは、Linuxのすべてのセグメント(Windowsも同じ)が同じベースアドレスと同じサイズを持っているためです。コードは常にコードセグメントを介してアクセスされ、コードセグメントはスタック(または他の)セグメントとまったく同じ領域をカバーするので、コードをどこでも実行できます。

EDIT:

あなたはもっとここで読むことができます:http://www.intel.com/Assets/en_US/PDF/manual/253668.pdf 章3.2使用した真にするために使用SEGMENTS

+0

これは正しくありません。 パラメータ '-z execstack'を使ってコードをコンパイルする以外は、programはNXで保護されています。 – bananaappletw

+0

あなたのセグメントがNXで保護されているかどうかを確認する簡単なツールはこちらです.http://www.trapkit.de/tools/checksec.html – bananaappletw

+0

@bananaappletw:32ビットモードはNXE保護をサポートしていません与えられた)。しかし、はい、64ビット(IA-32e)モードでは、それを使用することは可能ですが、ページングレベル(セグメントレベルではない)でのみ使用できます。 –

関連する問題