Contents

TOMOYO Linux 1.6.x をフル活用するためのヒント

(1) 非 root ユーザによるポリシー操作を認めたい

TOMOYO Linux 1.6.0 からは、非 root ユーザによるポリシーの編集を許可できるようになっています。例えば、 GUI などから ssh 経由でログインしてポリシーを操作したい場合に、 root ユーザでの ssh ログインを許可するような設定に変更する必要がありません。

デフォルトでは root ユーザだけがポリシーの編集ができるようになっていますが、以下のように設定を行うことで、 root 以外のユーザによるポリシーの編集もできるようになります。

(1) /proc/ccs/manager に manage_by_non_root というキーワードを書き込みます。

 echo manage_by_non_root > /proc/ccs/manager

(2) /proc/ccs/ 以下のファイルの所有者を、ポリシーの編集をさせたいユーザに変更します。例えば demo ユーザにポリシーの編集をさせたい場合には以下のようにします。

 chown -R demo:demo /proc/ccs/

(3) /usr/lib/ccs/ ディレクトリのパーミッションを、ポリシーの編集をさせたいユーザがアクセスできるように変更します。( TOMOYO Linux 1.6.2 以降ではデフォルトで 755 になっているのでこの操作は不要です。)

 chmod 755 /usr/lib/ccs/

(4) /etc/ccs/ 以下のファイルの所有者を、ポリシーの編集をさせたいユーザに変更します。例えば demo ユーザにポリシーの編集をさせたい場合には以下のようにします。

 chown -R demo:demo /etc/ccs/

(3) および (4) は一度実行すれば設定が残りますが、 (1) と (2) はシステムを起動する度に実行する必要があります。そのため、システムの起動時に自動的に実行されるようにするために、 /etc/ccs/ccs-post-init というプログラムを使います。上記 (1) および (2) を実行する場合、以下のような内容になります。

 #! /bin/sh
 echo manage_by_non_root > /proc/ccs/manager
 chown -R demo:demo /proc/ccs/

chmod を使って /etc/ccs/ccs-post-init を実行可能な状態にしておくことを忘れないようにしてください。

(2) ポリシーによるメモリ消費を制限したい

TOMOYO Linux 1.6.1 からは、ポリシーを記憶しておくために使用されるメモリの量に上限を設定することができるようになっています。文字列を記憶しておくための Shared: メモリと、個別のアクセス許可を記憶しておくための Private: を指定できます。例えば、以下のように指定すると、それぞれ16MBに設定されます。

 echo Shared: 16777216 > /proc/ccs/meminfo
 echo Private: 16777216 > /proc/ccs/meminfo

これも、 /etc/ccs/ccs-post-init を用いて設定することができます。

(3) ポリシー違反通知を直ちに受け取りたい

TOMOYO Linux 1.6.0 からは、強制モードで動作している間に発生したポリシー違反を直ちに通知してもらうことができるようになっています。

ccs-tools パッケージには /usr/lib/ccs/misc/ccs-notifyd というプログラムが同梱されています。このプログラムは、 /usr/lib/ccs/ccs-queryd と同様に /proc/ccs/query を監視し、ログが発生するとメールを送信するなどのアクションを行います。

TOMOYO Linux 1.6.2 未満でこのプログラムを使うには、 /proc/ccs/profile の中の ALLOW_ENFORCE_GRACE を enabled にする必要があります。

ポリシー違反は短時間に大量発生(1秒間に50回以上)することもありえるので、ポリシー違反が発生するたびに通知が来ても困るでしょう。ですから、このプログラムは、最初のポリシー違反だけを通知して終了するようになっています。多重起動はできないようになっているので、 cron から定期的に起動されるようにすると便利です。例えば1時間に1回を上限として mail コマンドにより通知するには、 /etc/crontab に以下のように指定します。

 00 * * * * root /usr/lib/ccs/misc/ccs-notifyd 0 'mail root@example.com'

TOMOYO Linux 1.6.2 未満の /proc/ccs/query の内容は /proc/ccs/domain_policy に蓄積される内容と同等(ドメイン名とアクセス許可のみ)ですが、 TOMOYO Linux 1.6.2 以降は /proc/ccs/reject_log の内容と同等(ドメイン名とアクセス許可だけでなく時刻やプロセスIDやプログラム実行時のパラメータなども含まれる)になっています。

(4) 危険な環境変数を指定させないようにしたい

TOMOYO Linux 1.6.0 からは、プログラム実行時に渡される環境変数を制限できるようになっています。環境変数の中には、想定外のプログラムの実行結果をもたらしてしまう危険なものも存在します。そのため、指定できる環境変数を制限することをお勧めします。 参考: http://d.hatena.ne.jp/lurker/20060511/1147354551

MAC_FOR_ENV=learning の状態でシステムを一通り動作させると、渡された環境変数の名前が /proc/ccs/domain_policy に蓄積されます。 grep を使って

 grep ^allow_env /proc/ccs/domain_policy | sort | uniq

を実行すると、環境変数名の一覧を取得できます。取得した環境変数名に危険な環境変数が含まれていないことを確認してください。

環境変数は数が多く、ほぼ全てのドメインに渡されるため、メモリ消費を節約するために /proc/ccs/exception_policy で指定することもできます。 /proc/ccs/exception_policy で指定された allow_env キーワードは、全てのドメインに対して有効です。

特定のドメインに対してだけ /proc/ccs/exception_policy で指定された allow_env キーワードを無効にしたい場合には、そのドメインに対して ignore_global_allow_env というキーワードを指定することができます。

(5) 特定のドメインでは共有ライブラリの読み込みを制限したい

TOMOYO Linux 1.6.0 からは、特定のドメインに対して /proc/ccs/exception_policy で指定されている allow_read キーワードを無効にさせることができるようになっています。

通常、 /proc/ccs/exception_policy に allow_read キーワードで指定されているパス名は例えば共有ファイルのような「全てのドメインから参照されても問題ないファイル」だけを指定します。もし、特定のドメインには参照させたくない場合には、そのドメインに対して ignore_global_allow_read というキーワードを指定することができます。

(6) ポリシー違反の頻発によるCPU資源の浪費を回避したい

TOMOYO Linux 1.6.0 からは、強制モードでポリシー違反が発生した場合に、指定された時間だけプロセスをスリープ状態にさせることで、CPU使用率を下げることができるようになっています。

万一、要求が受理されるまで何度でも繰り返すような処理に対してポリシー違反が発生してしまった場合、決して許可されることの無い要求のためにCPU資源を浪費してしまいます。それを防ぐために、 0.1 秒単位でスリープさせることができるようになっています。 /proc/ccs/profile の SLEEP_PERIOD という項目で指定します。

このような状況は、バッファオーバーフローを攻撃されてシェルの実行が要求されたものの、ポリシーにより拒否されたというケースにより引き起こされます。通常は 0.1 秒( SLEEP_PERIOD=1 )スリープさせるだけで充分でしょう。

(7) プロセスのデバッグを禁止したい

Linux には、プロセスのデバッグなどの用途で使用するための ptrace という機能が存在しています。この機能を悪用されると、プログラム内の機密情報を抜き取られたり、プログラムを改ざんして制御を奪ったりすることが可能になってしまいます。

参考: http://0xcc.net/blog/archives/000077.html

この機能を悪用されないようにするために、 TOMOYO Linux 1.6.0 からは、この機能を使用できるドメインを制限できるようになっています。 /proc/ccs/profile の MAC_FOR_CAPABILITY::SYS_PTRACE という項目で制御します。

デバッガなど一部の特殊なプログラム以外には、この機能を必要とすることはありません。ですので、最初から全てのプロファイルで MAC_FOR_CAPABILITY::SYS_PTRACE=enforcing を指定しておいても問題が起きることは無いと思われます。

(8) プログラム実行時のパラメータをチェックしたい

TOMOYO Linux では、必要に応じてプログラム実行時の引数や環境変数の内容を加味したアクセス許可を指定することができます。

学習モードにより蓄積されるアクセス許可は

 allow_execute プログラム名

のようにプログラム名だけしか考慮されませんが、アクセスログには以下のようにコマンドライン引数を考慮したアクセス許可を与えるのに必要な情報が含まれています。

 #2008-06-09 12:21:07# profile=3 mode=enforcing pid=893 uid=0 gid=0 euid=0 egid=0 suid=0 sgid=0 fsuid=0 fsgid=0 state[0]=0 state[1]=0 state[2]=0 argc=3 envc=20 argv[]={ "sh" "-c" "(echo\040'.ll\040151n';\040/usr/bin/zsoelim\040/tmp/zmanEMxJmp)\040|\040/usr/bin/tbl\040|\040/usr/bin/nroff\040-mandoc\040-rLL=151n\040-rLT=151n\040-Tascii\040|\040exec\040/usr/bin/pager\040-s" } envp[]={ "TERM=vt100" "SHELL=/bin/bash" "SSH_CLIENT=::ffff:192.168.99.1\04047731\04022" "SSH_TTY=/dev/pts/0" "USER=root" "MAIL=/var/mail/root" "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/lib/ccs" "PWD=/root" "LANG=C" "PS1=\\h:\\w\\$\040" "SHLVL=1" "HOME=/root" "LANGUAGE=en_JP:en_US:en_GB:en" "LOGNAME=root" "SSH_CONNECTION=::ffff:192.168.99.1\04047731\040::ffff:192.168.99.128\04022" "_=/usr/bin/man" "MAN_ORIG_LESS=" "LESSCHARSET=ascii" "LESS=-ix8RmPm\040Manual\040page\040ccs-editpolicy(8)\040?ltline\040%lt?L/%L.:byte\040%bB?s/%s..?e\040(END):?pB\040%pB\\%..$PM\040Manual\040page\040ccs-editpolicy(8)\040?ltline\040%lt?L/%L.:byte\040%bB?s/%s..?e\040(END):?pB\040%pB\\%..$" "MAN_PN=ccs-editpolicy(8)" }
 <kernel> /usr/sbin/sshd /bin/bash /usr/lib/man-db/man
 allow_execute /bin/sh

アクセスログからコマンドライン引数を考慮したポリシーを生成するユーティリティが TOMOYO Linux 1.6.2 以降の ccs-tools パッケージに含まれています。使い方は、

 convert-exec-param < /proc/ccs/grant_log

または

 convert-exec-param < /proc/ccs/reject_log

です。 ccs-auditd により保存された後のログファイルを指定することもできます。

上記のログを convert-exec-param で処理すると以下のようなポリシーが得られます。

 select <kernel> /usr/sbin/sshd /bin/bash /usr/lib/man-db/man
 allow_execute /bin/sh if exec.argc=3 exec.argv[0]="sh" exec.argv[1]="-c" exec.argv[2]="(echo\040'.ll\040151n';\040/usr/bin/zsoelim\040/tmp/zmanEMxJmp)\040|\040/usr/bin/tbl\040|\040/usr/bin/nroff\040-mandoc\040-rLL=151n\040-rLT=151n\040-Tascii\040|\040exec\040/usr/bin/pager\040-s"
 delete allow_execute /bin/sh

以下のポリシーは man コマンドを実行したときの引数を制限するポリシーの例です。 convert-exec-param で変換後、ウィンドウ幅のような可変部分を \$ というワイルドカードを用いて置換しました。

 <kernel> /usr/sbin/sshd /bin/bash
 use_profile 1
 
 allow_read/write /dev/tty
 allow_capability SYS_IOCTL
 allow_read /etc/mtab
 allow_read /etc/nsswitch.conf
 allow_read /etc/passwd
 allow_read /etc/profile
 allow_read /usr/lib/gconv/gconv-modules
 allow_read /usr/lib/gconv/ISO8859-1.so
 allow_read /root/.profile
 allow_read /root/.bashrc
 allow_read /root/.bash_history
 allow_read /etc/terminfo/v/vt100
 allow_read /etc/inputrc
 allow_read /root/.inputrc
 allow_read /var/log/tomoyo/reject_log.txt
 allow_execute /sbin/reboot if exec.argc=1 exec.argv[0]="reboot"
 allow_execute /usr/bin/id if exec.argc=2 exec.argv[0]="id" exec.argv[1]="-u"
 allow_execute /usr/bin/mesg if exec.argc=2 exec.argv[0]="mesg" exec.argv[1]="n"
 allow_execute /usr/sbin/ccs-editpolicy if exec.argc=1 exec.argv[0]="ccs-editpolicy"
 allow_execute /usr/lib/ccs/misc/convert-exec-param if exec.argc=1 exec.argv[0]="/usr/lib/ccs/misc/convert-exec-param"
 allow_execute /usr/sbin/ccs-loadpolicy if exec.argc=2 exec.argv[0]="ccs-loadpolicy" exec.argv[1]="-d"
 allow_execute /usr/lib/man-db/man if exec.argc=2 exec.argv[0]="man" exec.argv[1]="ccs-editpolicy"
 allow_execute /usr/lib/man-db/man if exec.argc=2 exec.argv[0]="man" exec.argv[1]="\*"
 
 <kernel> /usr/sbin/sshd /bin/bash /usr/lib/man-db/man
 use_profile 3
 
 allow_capability SYS_IOCTL
 allow_read /etc/manpath.config
 allow_read /etc/mtab
 allow_read /var/cache/man/index.db
 allow_read/write /tmp/zman\?\?\?\?\?\?
 allow_create /tmp/zman\?\?\?\?\?\?
 allow_unlink /tmp/zman\?\?\?\?\?\?
 allow_capability SYS_UNLINK
 allow_execute /bin/sh if exec.argc=3 exec.argv[0]="sh" exec.argv[1]="-c" exec.argv[2]="/bin/gzip\040-dc\040/usr/share/man/man8/\*.8.gz\040>\040/tmp/zman\?\?\?\?\?\?"
 allow_execute /bin/sh if exec.argc=3 exec.argv[0]="sh" exec.argv[1]="-c" exec.argv[2]="(echo\040'.ll\040\$n';\040/usr/bin/zsoelim\040/tmp/zman\?\?\?\?\?\?)\040|\040/usr/bin/tbl\040|\040/usr/bin/nroff\040-mandoc\040-rLL=\$n\040-rLT=\$n\040-Tascii\040|\040exec\040/usr/bin/pager\040-s"
 
 <kernel> /usr/sbin/sshd /bin/bash /usr/lib/man-db/man /bin/sh
 use_profile 3
 
 allow_env MAN_ORIG_LESS
 allow_read/write /dev/tty
 allow_read /etc/mtab
 allow_write /tmp/zman\?\?\?\?\?\?
 allow_truncate /tmp/zman\?\?\?\?\?\?
 allow_env LESSCHARSET
 allow_env LESS
 allow_env MAN_PN
 allow_execute /usr/bin/tbl if exec.argc=1 exec.argv[0]="/usr/bin/tbl"
 allow_execute /usr/bin/pager if exec.argc=2 exec.argv[0]="/usr/bin/pager" exec.argv[1]="-s"
 allow_execute /usr/bin/zsoelim if exec.argc=2 exec.argv[0]="/usr/bin/zsoelim" exec.argv[1]="/tmp/zman\?\?\?\?\?\?"
 allow_execute /bin/gzip if exec.argc=3 exec.argv[0]="/bin/gzip" exec.argv[1]="-dc" exec.argv[2]="/usr/share/man/man8/\*.8.gz"
 allow_execute /usr/bin/nroff if exec.argc=5 exec.argv[0]="/usr/bin/nroff" exec.argv[1]="-mandoc" exec.argv[2]="-rLL=\$n" exec.argv[3]="-rLT=\$n" exec.argv[4]="-Tascii"
 
 <kernel> /usr/sbin/sshd /bin/bash /usr/lib/man-db/man /bin/sh /bin/gzip
 use_profile 3
 
 allow_env MAN_ORIG_LESS
 allow_read /usr/share/man/\*/\*
 
 <kernel> /usr/sbin/sshd /bin/bash /usr/lib/man-db/man /bin/sh /usr/bin/tbl
 use_profile 3
 
 allow_env MAN_ORIG_LESS
 allow_env MAN_PN
 allow_env LESSCHARSET
 allow_env LESS
 
 <kernel> /usr/sbin/sshd /bin/bash /usr/lib/man-db/man /bin/sh /usr/bin/pager
 use_profile 3
 
 allow_env MAN_ORIG_LESS
 allow_env MAN_PN
 allow_env LESSCHARSET
 allow_env LESS
 allow_capability SYS_IOCTL
 allow_read /etc/terminfo/v/vt100
 allow_read /dev/tty
 
 <kernel> /usr/sbin/sshd /bin/bash /usr/lib/man-db/man /bin/sh /usr/bin/zsoelim
 use_profile 3
 
 allow_env MAN_ORIG_LESS
 allow_env MAN_PN
 allow_env LESSCHARSET
 allow_env LESS
 allow_read /tmp/zman\?\?\?\?\?\?
 allow_capability SYS_IOCTL
 
 <kernel> /usr/sbin/sshd /bin/bash /usr/lib/man-db/man /bin/sh /usr/bin/nroff
 use_profile 3
 
 allow_env MAN_ORIG_LESS
 allow_env MAN_PN
 allow_env LESSCHARSET
 allow_env LESS
 allow_read /bin/bash
 allow_read/write /dev/tty
 allow_read /etc/mtab
 allow_read /usr/bin/nroff
 allow_capability SYS_IOCTL
 allow_write /dev/null
 allow_execute /usr/bin/locale if exec.argc=2 exec.argv[0]="locale" exec.argv[1]="charmap"
 allow_execute /usr/bin/groff if exec.argc=6 exec.argv[0]="groff" exec.argv[1]="-mtty-char" exec.argv[2]="-Tascii" exec.argv[3]="-mandoc" exec.argv[4]="-rLL=\$n" exec.argv[5]="-rLT=\$n"
 
 <kernel> /usr/sbin/sshd /bin/bash /usr/lib/man-db/man /bin/sh /usr/bin/nroff /usr/bin/locale
 use_profile 3
 
 allow_env MAN_ORIG_LESS
 allow_env LESSCHARSET
 allow_env MAN_PN
 allow_env LESS
 
 <kernel> /usr/sbin/sshd /bin/bash /usr/lib/man-db/man /bin/sh /usr/bin/nroff /usr/bin/groff
 use_profile 3
 
 allow_env MAN_ORIG_LESS
 allow_env GROFF_BIN_PATH
 allow_env LESSCHARSET
 allow_env MAN_PN
 allow_env LESS
 allow_read /usr/lib/gconv/gconv-modules
 allow_read /usr/lib/gconv/ISO8859-1.so
 allow_read /usr/share/groff/1.18.1/font/devascii/DESC
 allow_execute /usr/bin/grotty if exec.argc=1 exec.argv[0]="grotty"
 allow_execute /usr/bin/troff if exec.argc=6 exec.argv[0]="troff" exec.argv[1]="-mtty-char" exec.argv[2]="-mandoc" exec.argv[3]="-rLL=\$n" exec.argv[4]="-rLT=\$n" exec.argv[5]="-Tascii"
 
 <kernel> /usr/sbin/sshd /bin/bash /usr/lib/man-db/man /bin/sh /usr/bin/nroff /usr/bin/groff /usr/bin/troff
 use_profile 3
 
 allow_env MAN_ORIG_LESS
 allow_env GROFF_BIN_PATH
 allow_env LESSCHARSET
 allow_env MAN_PN
 allow_env LESS
 allow_env GROFF_PATH__
 allow_read /usr/lib/gconv/gconv-modules
 allow_read /usr/lib/gconv/ISO8859-1.so
 allow_read /usr/share/groff/1.18.1/font/devascii/DESC
 allow_read /usr/share/groff/1.18.1/font/devascii/R
 allow_read /usr/share/groff/1.18.1/font/devascii/I
 allow_read /usr/share/groff/1.18.1/font/devascii/B
 allow_read /usr/share/groff/1.18.1/font/devascii/BI
 allow_read /usr/share/groff/1.18.1/tmac/troffrc
 allow_read /usr/share/groff/1.18.1/tmac/tty.tmac
 allow_read /usr/share/groff/1.18.1/tmac/hyphen.us
 allow_read /usr/share/groff/1.18.1/tmac/tty-char.tmac
 allow_read /usr/share/groff/1.18.1/tmac/latin1.tmac
 allow_read /usr/share/groff/1.18.1/tmac/andoc.tmac
 allow_read /usr/share/groff/1.18.1/tmac/troffrc-end
 allow_read /usr/share/groff/1.18.1/tmac/an-old.tmac
 allow_read /etc/groff/man.local
 
 <kernel> /usr/sbin/sshd /bin/bash /usr/lib/man-db/man /bin/sh /usr/bin/nroff /usr/bin/groff /usr/bin/grotty
 use_profile 3
 
 allow_env MAN_ORIG_LESS
 allow_env GROFF_BIN_PATH
 allow_env LESSCHARSET
 allow_env MAN_PN
 allow_env LESS
 allow_env GROFF_PATH__
 allow_read /usr/lib/gconv/gconv-modules
 allow_read /usr/lib/gconv/ISO8859-1.so
 allow_read /usr/share/groff/1.18.1/font/devascii/DESC
 allow_read /usr/share/groff/1.18.1/font/devascii/R
 allow_read /usr/share/groff/1.18.1/font/devascii/B
 allow_read /usr/share/groff/1.18.1/font/devascii/I

このユーティリティは機械的に引数の内容を条件文に変換しますが、常に引数が意味を持つとは限りません。例えば、

 ls *

というリクエストにより指定された内容は状況によって変化するでしょうから、制限する意味はほとんどありません。反対に、

 sh -c "/usr/sbin/sendmail root"

というリクエストにより指定された内容は状況に応じて変化しないでしょうから、制限する価値があります。

内容を確認して、制限する価値があると判断したものを ccs-loadpolicy -d により /proc/ccs/domain_policy に読み込ませてください。

(9) プログラム実行時の引数や環境変数などを編集(無害化)したい

(8) で紹介しているのは、プログラム実行時の引数および環境変数をチェックして、不適切なものがあればプログラムの実行を要求したプロセスに対してプログラムの実行が認められないことを通知する手順です。

それに対し、ここで紹介するのは、プログラムの実行が認められないことを通知するのではなく、プログラム実行時の引数および環境変数(例えば TMP )などを編集した上で、要求されたプログラムを実行する手順です。

TOMOYO Linux 1.6.0 からは、要求されたプログラムを実行する前に、ポリシーにより指定された別のプログラムを実行させることができるようにするための execute_handler というキーワードが利用できます。

ccs-tools パッケージには、この機能を利用するサンプルとして、 /usr/lib/ccs/misc/audit-exec-param というプログラムが同梱されています。このプログラムは、プログラム実行時の引数や環境変数などのパラメータを syslog に記録してから、要求されたプログラムを実行します。 ソースコードは http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi/*checkout*/trunk/1.6.x/ccs-tools/ccstools/audit-exec-param.c?root=tomoyo に、 execute_handler の仕様の詳細は http://tomoyo.sourceforge.jp/1.6/policy-reference.html.ja#execute_handler にあります。 audit-exec-param.c 自身はパラメータの編集を行いませんが、これを参考にしながらカスタマイズしてください。要求されたプログラムの内容を検査させてから実行を許可したり、パイプ経由でやり取りされるデータを検査させたりすることもできます。

技術的には man-in-the-middle attack と同様の処理ですが、介在するプログラムはセキュリティのために行うべき処理を行うためのものである点が異なります。

煮ても焼いても食えない(無害化できない)要求の場合は、 execute_handler キーワードにより実行されたプロセスを終了させることにより、プログラムの実行を要求したプロセスを終了させることができます。あるいは、要求されたのとは異なるプログラム(例えば /bin/false )を実行させることもできます。

(10) 侵入者をハニーポットへ誘導したい

(9) で紹介しているのは、ポリシーで許可されているプログラムの実行要求と許可されていないプログラムの実行要求の両方を処理します。パラメータのチェックをユーザランドで行うため、柔軟な制御が可能な反面、ポリシーで許可されているプログラムの実行要求であっても別のプログラムを経由して実行されるため、パフォーマンス面では不利になります。

それに対し、ここで紹介するのは、ポリシーで許可されていないプログラムの実行要求のみを処理します。言い換えると、強制モード( MAC_FOR_FILE=enforcing )の状態で拒否された実行要求だけを扱います。

TOMOYO Linux 1.6.0 からは、強制モードにおいて、要求されたプログラムの実行がポリシーによって拒否された場合、ポリシーにより指定された別のプログラムを実行させることができるようにするための denied_execute_handler というキーワードが利用できます。

学習モードおよび確認モードを用いてシステムの振る舞いを解析することにより、ポリシーで実行を許可すべきプログラムをすべて把握することができるはずです。すると、ポリシーで実行を許可していないプログラムの実行要求が発生するのは、侵入者がシェルなどの起動を試みた場合に限られると考えることができます。そのため、ポリシーで実行を許可していないプログラムの実行要求が発生した場合だけ、振る舞いを観測するためのプログラム(いわゆるハニーポット)を実行することができるようになっています。

denied_execute_handler の仕様の詳細は http://tomoyo.sourceforge.jp/1.6/policy-reference.html.ja#denied_execute_handler にあります。 残念ながら、ハニーポットとして動作するためのサンプルプログラムはまだ作成していません。シェルの実行が要求された場合は、シェルであるかのように振舞うものの、システムに危害を与えるような要求は実際には実行せず、偽物の実行結果を適当に出力してやればよいと思います。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-11-12 (木) 11:18:32 (3657d)