LinuCレベル3 セキュリティスペシャリスト アクセスおよび権限制御の強化 問24
アクセスおよび権限制御の強化/システムコールの制御seccompのフィルタモード(SECCOMP_MODE_FILTER)に関する説明として、正しいものをすべて選べ。
当サイトのオリジナル問題(LinuCレベル3 セキュリティスペシャリストの出題範囲「アクセスおよび権限制御の強化」に対応。実際の試験問題ではありません)
- ACAP_SYS_ADMINを持たないスレッドがフィルタを設定するには、事前にprctlでno_new_privsを立てておく必要がある
- BフィルタのBPFプログラムはポインタ引数の指す先も読めるため、openに渡されたパス名の文字列で許可を判定できる
- Cフィルタを複数設定した場合は、最後に設定したフィルタの返り値だけが使われ、それより前のフィルタは評価されない
- DフィルタがSECCOMP_RET_LOGを返したシステムコールは実行が許可されたうえで、その呼び出しがログに記録される
正解:A、D
解説
フィルタモードでは、BPFプログラムがシステムコールの番号・アーキテクチャ・引数の値(seccomp_data)を見て、許可・エラー返却・終了・ログ記録などの動作を返します。特権のないプロセスがsetuidプログラムの実行を通じてフィルタを悪用しないよう、CAP_SYS_ADMINを持たないスレッドにはno_new_privsの設定が求められます。BPFプログラムは引数の値そのものしか見られず、ポインタの指す先のメモリは参照できません。複数のフィルタがある場合はすべてが評価され、その中で最も優先度の高い動作が採用されます。
選択肢ごとの解説
- A正しい。seccomp(2)の規定どおり、CAP_SYS_ADMINが無い場合はno_new_privsを立てていないとフィルタを設定できません。
- B誤り。フィルタが見られるのは引数の値(ポインタならアドレス)だけで、指す先の文字列は読めないため、パス名では判定できません。
- C誤り。設定したフィルタはすべて評価され、返された動作のうち最も優先度の高いものが採用されます。
- D正しい。SECCOMP_RET_LOGはシステムコールを許可しつつ、その呼び出しをログに記録させる返り値です。