Go to main content
Oracle® Solaris 11.3 でのシステムおよび接続されたデバイスのセキュリティー保護

印刷ビューの終了

更新: 2017 年 3 月
 
 

悪影響からのプロセスヒープと実行可能スタックの保護

コンピュータ攻撃の一般的な方法は、悪意のあるコードをメモリー内に入れて、そのコードにジャンプすることです。そのような攻撃は、書き込み可能で実行可能なセグメントに依存しています。nxheap および nxstack セキュリティー拡張を使用すると、すべての Oracle Solaris プロセスのスタックとヒープを意図的に非実行可能にできます。nxstack セキュリティー拡張によって、noexec_user_stack システム変数が置き換えられます。

プログラムは、スタック上のデータの読み取りと書き込みを行います。通常、それらはコード用に特別に指定されたメモリーの読み取り専用部分から実行されます。スタック上のバッファーをオーバーフローさせる一部の攻撃では、新しいコードをそのスタックに挿入し、プログラムにそれを実行させようとします。スタックメモリーから実行権を削除すると、これらの攻撃が成功するのを防ぐことができます。ほとんどのプログラムは、実行可能スタックを使用せずに正しく機能できます。

64 ビットプロセスには、常に非実行可能スタックがあります。デフォルトでは、32 ビット SPARC プロセスには実行可能スタックがあります。デフォルトで有効になっている nxstack セキュリティー拡張は、32 ビットプロセスのスタックが実行可能にならないようにします。プログラムがスタック上でコードを実行しようとすると SIGSEGV シグナルが送信されます。このシグナルが送信されると、通常、プログラムはコアダンプして終了します。

ログがデフォルトで書き込まれます。このログは、nxstack セキュリティー拡張を設定したために正しく動作しなくなった、実行可能スタックに依存する有効なプログラムを確認するために役立ちます。メッセージが記録されない場合でも、SIGSEGV シグナルは引き続き送られるので、実行中のプログラムはコアダンプで終了します。プロセススタックおよびプロセスヒープからの悪意のあるコードの実行を防止する方法および sxadm(1M) のマニュアルページを参照してください。

プログラムは、スタック実行を明示的にマークまたは防止することができます。プログラム内の mprotect() 関数は、スタックを実行可能として明示的にマークします。詳細は、mprotect(2) のマニュアルページを参照してください。-z nxstack=enable でコンパイルされたプログラムは、システム全体の設定には関係なく、スタックを非実行可能にします。

ヒープは、動的割り当て用に確保されたメモリーです。これは、アプリケーション (プロセス) が終了すると再利用されます。プロセスヒープから実行権を削除すると、悪意のあるコードがヒープに格納されるのを防ぐことができます。ほとんどのプログラムは、ヒープでコードを実行せずに正しく機能します。

nxheap セキュリティー拡張は、ログと同様にデフォルトで有効になっています。例および情報については、プロセススタックおよびプロセスヒープからの悪意のあるコードの実行を防止する方法および sxadm(1M) のマニュアルページを参照してください。