sxadm - Solaris セキュリティー拡張の構成の管理
sxadm enable [-c property=value[,property=value,...]] extension[,extension,...] sxadm delcust [extension,...] sxadm disable extension[,extension,...] sxadm get [-p] [-o "all" | field[,...]] <"all" | property[,...]> [extension] sxadm help [subcommand] sxadm set property=value[,property=value,...] extension sxadm status [-p] [extension]
sxadm exec [-s extension=value],... command
sxadm コマンドは、Solaris セキュリティー拡張を構成し、関連する情報を提供します。これらの拡張は、システムレベルまたはプロセスレベルで適用できます。
プロセスのセキュリティー拡張は exec(2) によって決定され、その時点からプロセスに対して有効になります。拡張は、プロセスが終了するか、再度 exec(2) を呼び出すまで、プロセスの有効期間の間持続します。システムレベルの拡張はすべてのプロセスに影響を与えます。プロセスレベルの拡張は、個々のプロセスに影響を与え、子プロセスが特権プロセスでない場合はすべての子プロセスによって継承されます。「セキュリティー拡張」を参照してください。
個々の実行可能ファイルには、ld(1) で構築する際に、セキュリティー拡張の要件をタグ付けできます。このタグ付けにより、システムレベルの拡張にかかわらず、関連付けられたプロセス要件が確実に満たされます。セキュリティー拡張がタグ付けされている実行可能ファイルは、プロセスレベルの拡張でオーバーライドできます。「実行可能ファイルにタグ付けされる拡張」を参照してください。
次のセキュリティー拡張が使用可能です。これらの拡張は、攻撃者が既知のエントリポイントを見つけたり、あとで実行される場所に攻撃用コードを埋め込んだりする可能性を減らします。
ASLR は、スタック、brk ベースのヒープ、メモリーセグメントマッピングなどのプロセスの重要な部分のランダム化をアクティブにします。位置独立実行可能ファイルとして構築されたアプリケーションのメモリーマッピングも、ASLR でランダム化されます。
NXHEAP は、プロセスヒープに割り当てられたページが実行可能になることを防ぎます。
NXSTACK は、プロセススタックに割り当てられたページが実行可能になることを防ぎます。旧バージョンの /etc/system noexec_user_stack および noexec_user_stack_log 設定との下位互換性は維持されていますが、このような制御は非推奨であり、代わりに sxadm を使用するようにしてください。
デフォルトでは、大域ゾーンおよびすべての非大域ゾーンで、ASLR および NXHEAP 拡張はタグ付けされたバイナリに対してのみ有効になり、NXSTACK 拡張はすべてのプロセスに対して有効になります。
セキュリティー拡張には 1 つ以上のプロパティーを設定できます。すべての拡張に model プロパティーがあります。このプロパティーは、拡張が適用される対象を定義します。次の model プロパティーがあります。
すべてのプロセスに対してセキュリティー拡張を有効にします。
タグ付けされているバイナリに対してセキュリティー拡張を有効にします。
セキュリティー拡張システムのデフォルトに従います。「セキュリティー拡張」を参照してください。
セキュリティー拡張に追加のプロパティーが存在する場合もあります。
NXHEAP および NXSTACK にはロギングプロパティーがあり、これが有効になっている場合、実行不能なメモリー範囲 (NXSTACK の場合はスタック、NXHEAP の場合はヒープとデータ) から実行が試行されると報告されます。
ロギングを有効にします。
ロギングを無効にします。(デフォルト構成)
sxadm のサブコマンド enable、disable、set、および delcust を使用すると、システム全体のセキュリティー拡張を変更できます。たとえば、次の sxadm コマンドは、拡張をシステム全体で有効にします。
% sxadm enable nxstack % sxadm enable aslr,nxheap
次の sxadm コマンドも拡張をシステム全体で有効にしますが、各プロパティーを明示的に指定しています。
% sxadm enable -c model=all aslr % sxadm enable -c model=all -c log=enable nxstack
また、sxadm のサブコマンド exec を使用すると、セキュリティー拡張をプロセスに対して有効または無効にすることができます。このサブコマンドは、セキュリティー拡張のステータスにのみ影響します。拡張のほかのプロパティーは、すべてシステムプロパティーから継承されます。次の sxadm コマンドにより、foobar プロセスは必ず拡張が無効になった状態で実行されます。
% sxadm exec -s aslr=disable -s nxheap=disable foobar
個々の実行可能ファイルには、次の ld(1) オプションで構築する際に、セキュリティー拡張の要件をタグ付けできます。
ASLR のタグ付けを制御します。
実行不能ヒープのタグ付けを制御します。
実行不能スタックのタグ付けを制御します。
mode には enabled または disabled を指定できます。mode が指定されていない場合、デフォルトは enabled です。
タグ付けされた実行可能ファイル内に定義されているセキュリティー拡張は、システム全体のセキュリティー設定と次のように相互に作用します。
セキュリティー設定が有効または無効に指定されている実行可能ファイルは、システムのセキュリティー設定にかかわらず尊重されます。プロセスレベルのセキュリティー設定は、タグ付けされた実行可能ファイルの設定をオーバーライドします。
システムのセキュリティー設定が tagged-files の場合、セキュリティー設定がタグ付けされている実行可能ファイルだけが尊重されます。
sxadm コマンドには次のサブコマンドがあります。
現在のゾーンに対して指定したセキュリティー拡張を有効にします。–c オプションにより sxadm で特定の拡張のプロパティー値を渡すことができます。
拡張をデフォルト構成に復元します。このオプションは実質的にすべてのカスタマイズ内容を削除します。
現在のゾーンに対して指定したセキュリティー拡張を無効にします。
sxadm に関する使用法の情報または各サブコマンドの詳細情報を表示します。
現在のゾーンのすべてのセキュリティー拡張のステータスに関する情報を報告します。–p を指定した場合、出力は簡単に解析可能な形式で表示されます。コマンド行にextensionを指定すると、特定の拡張にフィルタします。マシン解析可能な出力はコロン区切りのフィールドのリストです。
extension:status (model):configuration (model)
各表記の意味は次のとおりです。
拡張の名前
拡張の現在のステータス (有効または無効)
セキュリティー拡張に対して現在有効になっているモデル (すべて、デフォルト、タグ付けされたバイナリ)
拡張の保存されている構成 (有効、無効、またはシステムデフォルト)
文字のコロン (:)、NULL 記号 (\0)、および改行 (\n) は、どのコンポーネント (extension_name、status、extra、および configuration) にも使用できません。
セキュリティー拡張のプロパティーの値を表示します。拡張が指定されている場合は、指定された拡張のプロパティーの値だけを表示します。すべてのセクションに関連するプロパティーを表示するには、"all" を指定します。プロパティーごとに、次の列が表示されます。
extension: the extension the property refers to name: the name of the property value: the value of the property
デフォルトでは、すべての列が表示されます。特定の列またはすべての列を指定するには、–o オプションを使用します。–p を指定した場合、出力は簡単に解析可能な形式で表示されます。そのような形式は、フィールドをコロンで区切ったリストです。
extension:property:value
文字のコロン (:)、NULL 記号 (\0)、および改行 (\n) は、どのコンポーネントにも使用できません。
指定された拡張のプロパティーに値を割り当てます。
セキュリティー拡張の特定の構成で、指定したコマンドを実行します。コマンド行に明示的に構成されていない各セキュリティー拡張に対しては、システム構成が使われます。command によって最終的に生成される子プロセスは、コマンド行に指定された同じセキュリティー拡張の構成を継承します。setuids および特権バイナリはどの構成も継承しません。複数の –s オプションを使用して、コマンド行から複数の構成を表すことができます。同じ拡張が複数回構成されている場合、最後の構成が優先されます。次の例で、foobar は ASLR が有効になった状態で実行されます。
% sxadm exec -s aslr=disable -s aslr=enable foobar
sxadm exec サブコマンドは、デバッガがデバッガによって直接起動された単一のプロセスに適用される一般的な例に対応するように設計されています。もっと複雑なシナリオでは十分でないことがあります。その場合は、sxadm を使用して、システムまたはゾーンレベルのセキュリティー拡張のデフォルトを変更するか、デバッグを容易にするために、ld(1) ユーティリティーを使用して、オブジェクト単位でのタグ付けを適用する必要がある可能性があります。
この機能が有用になるのは主に、ランダム化されたシークレットに基づく拡張 (ASLR など) がアクティブになっているときです。このような場合、メモリーアドレスの変更によってデバッグシナリオが複雑になる可能性があるためです。この機能は、セキュリティー拡張の構成が異なっているアプリケーションを明示的にテストする場合にも役立ちます。
$ sxadm status -p aslr:enabled (tagged-files):system default (default) nxstack:enabled (all):system default (default) nxheap:enabled (tagged-files):system default (default) $ $ sxadm status EXTENSION STATUS CONFIGURATION aslr enabled (tagged-files) system default (default) nxstack enabled (all) system default (default) nxheap enabled (tagged-files) system default (default) $使用例 2 set/get を使用してセキュリティー拡張のプロパティーを設定/取得する
$ sxadm get model aslr EXTENSION PROPERTY VALUE aslr model tagged-files $ $ sxadm set log=enable nxheap $ sxadm get log nxheap EXTENSION PROPERTY VALUE nxheap log enable $使用例 3 デバッグセッションの実行
次のコマンドシーケンスは、ASLR を無効にして実行されているデバッグセッションを示しています。
$ sxadm exec -s aslr=disable /bin/bash $ # Because all processes (except privileged ones) inherit the(disabled) # ASLR configuration mdb, truss & co will have repeatable results. $ truss -t mmap /bin/true mmap(0x00000000, 32, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1,0) = 0xFE5B0000 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1,0) = 0xFE5A0000 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1,0) = 0xFE590000 [...] $ truss -t mmap /bin/true mmap(0x00000000, 32, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1,0) = 0xFE5B0000 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1,0) = 0xFE5A0000 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1,0) = 0xFE590000 [...] $ truss -t mmap /bin/true mmap(0x00000000, 32, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1,0) = 0xFE5B0000 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1,0) = 0xFE5A0000 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1,0) = 0xFE590000
コマンドが正常に完了しました。
エラーが発生したため、コマンドが終了しました。
属性についての詳細は、マニュアルページの attributes(5) を参照してください。
|