過去問ドリル

LinuCレベル3 セキュリティスペシャリスト アクセスおよび権限制御の強化 問38

アクセスおよび権限制御の強化/システムコールの制御

本番サーバー上で、PID 5678 のサービスプロセスが呼び出しているシステムコールを eBPF を使ってリアルタイムに監視・記録したい。方法として適切なものはどれか。

当サイトのオリジナル問題(LinuCレベル3 セキュリティスペシャリストの出題範囲「アクセスおよび権限制御の強化」に対応。実際の試験問題ではありません)

正解:D

解説

bpftrace は eBPF を用いてカーネル内でイベント処理を完結させるため、strace に比べてオーバーヘッドが大幅に少なく本番環境に適しています。syscalls:sys_enter_* のようなトレースポイントに pid フィルタを組み合わせることで、特定プロセスのシステムコールをリアルタイムに記録できます。strace は ptrace を使うためシステムコールのたびに対象プロセスが一時停止し、本番環境では大きなオーバーヘッドになります。perf stat はCPUサイクル・キャッシュミス等のハードウェア性能カウンタを集計するツールで、個別のシステムコール名の記録には向きません。auditd は監査ルールを通じてシステムコールをカーネルで記録できますが、eBPFを使った仕組みではありません。

選択肢ごとの解説

  • A誤り。strace は ptrace を使ってシステムコールを追跡する仕組みであり、対象プロセスがシステムコールのたびに一時停止するため本番環境へのオーバーヘッドが大きく、eBPFを利用した方法でもない。
  • B誤り。perf stat はCPUサイクル・キャッシュミス・ブランチミスなどのハードウェア性能カウンタを集計するツールで、どのシステムコールが呼ばれたかを個別に記録する目的には適さず、eBPFを使う仕組みでもない。
  • C誤り。auditctl でシステムコール監査ルールを追加する方法はカーネルの監査サブシステムを使った追跡であり、eBPFを利用した仕組みではない。また、後からaudit.logを解析する形態でリアルタイム性も低い。
  • D正しい。bpftrace は eBPF を使いカーネル内でトレースを処理するため、ptrace に比べてオーバーヘッドが小さい。トレースポイントにPIDフィルタを組み合わせることで特定プロセスのシステムコールをリアルタイムに記録できる。
LinuCレベル3 セキュリティスペシャリストの問題を演習モードで解く