LinuCレベル3 セキュリティスペシャリスト アクセスおよび権限制御の強化 問19
アクセスおよび権限制御の強化/システムコールの制御x86-64のサーバーで、SystemCallFilter= を設定したsystemdのサービスユニットに、あわせて SystemCallArchitectures=native を指定した。この指定の主な目的として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル3 セキュリティスペシャリストの出題範囲「アクセスおよび権限制御の強化」に対応。実際の試験問題ではありません)
- Aサービスの実行ファイルがネイティブのアーキテクチャ向けにビルドされているかを起動前に検査し、違えば起動を中止する
- Bカーネルが提供していないシステムコールの番号を呼び出したときに、プロセスを終了させずにENOSYSを返すようにする
- CシステムコールをvDSO経由ではなく、CPUのsyscall命令経由でだけ受け付けるようにし、呼び出しの経路を統一する
- D32ビットx86など非ネイティブのABIでのシステムコールを禁じ、別のABIを経由してフィルタを迂回されるのを防ぐ
正解:D
解説
x86-64のLinuxでは、ネイティブの64ビットABIに加えて、32ビットx86(i386)やx32のABIでもシステムコールを呼び出せます。ABIごとにシステムコールの番号が異なるため、ネイティブABIだけを想定したフィルタは、別のABIを使われると迂回される可能性があります。SystemCallArchitectures=native を指定すると、ネイティブのアーキテクチャ以外のシステムコールは使えなくなり、この抜け道を塞げます。systemd.exec(5)でも、SystemCallFilterを使う場合はこの設定で非ネイティブのABIを無効にすることが推奨されています。
選択肢ごとの解説
- A誤り。SystemCallArchitecturesはシステムコールのフィルタの設定で、実行ファイルのビルド対象を検査する機能ではありません。
- B誤り。未実装のシステムコールに対する戻り値を決める設定ではありません。エラー番号を指定するのは SystemCallErrorNumber= です。
- C誤り。呼び出しに使う命令や経路を切り替える設定ではありません。どのアーキテクチャ(ABI)のシステムコールを許すかを指定します。
- D正しい。非ネイティブのABIのシステムコールを禁止して、ネイティブABI向けのフィルタを別のABIで迂回されるのを防ぎます。