LinuCレベル3 セキュリティスペシャリスト アクセスおよび権限制御の強化 問37
アクセスおよび権限制御の強化/システムコールの制御seccompのフィルタモード(SECCOMP_MODE_FILTER)でBPFプログラムが返せるアクションに関する説明として、正しいものをすべて選べ。
当サイトのオリジナル問題(LinuCレベル3 セキュリティスペシャリストの出題範囲「アクセスおよび権限制御の強化」に対応。実際の試験問題ではありません)
- ASECCOMP_RET_KILL_PROCESS は、違反したシステムコールを呼んだスレッドだけでなくプロセス全体をSIGKILLで終了させる
- BSECCOMP_RET_ERRNO は、システムコールを実行せずにフィルタの戻り値に埋め込まれたerrno値をcallerに返す
- CSECCOMP_RET_TRACE でptraceトレーサーが接続されていない場合でも、システムコールは許可されて実行される
- DSECCOMP_RET_ALLOW を返すと、複数のフィルタが設定されていても以降のフィルタ評価がスキップされる
正解:A、B
解説
SECCOMP_RET_KILL_PROCESS はLinux 4.14で追加されたアクションで、違反したスレッドだけでなくプロセス全体(スレッドグループ)をSIGKILLで終了させます。スレッドだけを終了させるのは SECCOMP_RET_KILL_THREAD(旧称 SECCOMP_RET_KILL)です。SECCOMP_RET_ERRNO はシステムコールを実行せず、フィルタ戻り値の下位16ビットに格納されたerrno値をcallerのerrnoに設定して返します。SECCOMP_RET_TRACE でトレーサーが接続されていない場合はENOSYSが返り、システムコールは実行されません。複数のフィルタは最後に設定したものから順に評価され、最も優先度の高いアクションが採用されます(SECCOMP_RET_ALLOWでも全フィルタが評価される)。
選択肢ごとの解説
- A正しい。SECCOMP_RET_KILL_PROCESS(Linux 4.14以降)は違反したシステムコールを呼んだスレッドだけでなくプロセス全体をSIGKILLで終了させる。スレッドのみを終了させるのは SECCOMP_RET_KILL_THREAD である。
- B正しい。SECCOMP_RET_ERRNO はシステムコールを実行せず、フィルタ戻り値のデータフィールドに格納されたerrno値をcallerに返す。プロセス自体は終了しない。
- C誤り。SECCOMP_RET_TRACE でptraceトレーサーが接続されていない場合、システムコールは実行が許可されるのではなく ENOSYS が返り失敗する。システムコールの実行可否はトレーサーが決定する。
- D誤り。SECCOMP_RET_ALLOW を返してもフィルタの評価はスキップされない。複数のフィルタはすべて評価され、最も優先度の高いアクション(KILL > TRAP > ERRNO > … > ALLOW の順)が最終的に適用される。