secure computing mode (seccomp) について
secure computing mode、略して
seccomp は、
Linuxカーネルに実装されている重要なセキュリティ機能です。この技術は、特定の
プロセスが危険な
システムコールを呼び出すことを防ぎ、システムの安全性を高めることを目的としています。seccompは、
プロセスを一度適用した後は再度元の状態に戻すことができない「安全」な状態に移行させます。ただし、`exit()` や `sigreturn()`、および既に開いているファイルディスクリプタに対する `read()` や `write()` はこの制約の対象外です。
seccompが適用されている
プロセスが許可されていない
システムコールを実行しようとすると、
Linuxカーネルはそのイベントを記録し、
システムコールの実行を拒否したり、`SIGKILL` または `SIGSYS` シグナルでその
プロセスを終了させる仕組みとなっています。これにより、seccompは単なるシステムリソースの仮想化を行うのではなく、
プロセスを完全にリソースから独立させることができるのです。
seccompを実現するためには、`prctl(2)`
システムコールに引数として `PR_SET_SECCMP` を指定します。また、
Linuxカーネルのバージョンが3.17以降では、`seccomp(2)`
システムコールが使用できます。さらに、seccompの拡張である
seccomp-bpf は、より柔軟で高いパフォーマンスを発揮する機能を提供します。
使用例
この技術は、様々なソフトウェアで利用されています。たとえば、
OpenSSH や
vsftpd は seccomp をサポートしており、
Googleの
Chrome/Chromium ウェブブラウザもこの技術を利用してサンドボックス環境を構築しています。また、
Dockerや
QEMUといった他の重要なソフトウェアもseccompに基づいて操作しています。そのため、コンテナ内のアプリケーションが安全に実行されることが可能になります。
seccompは、当初は2005年にAndrea Arcangeliによって開発され、パブリック
グリッド・コンピューティングでの安全な処理手段を提供することを目的としていました。この機能は徐々に進化し、
Linuxカーネルのバージョン2.6.12からメインラインに取り込まれることとなります。
多様な応用
Androidはバージョン8.0 Oreo以降で、`zygote`にseccomp-bpfフィルタを利用し、systemdのサンドボックスオプションもseccompに基づいています。さらに、
Linuxのオープンソースサンドボックスプログラムである
Firejail は、
Linuxカーネルのさまざまなセキュリティ機能、特にseccompを活用して安全な環境を提供します。
Chromeは、バージョン20においてAdobe Flash Playerのサンドボックス化にseccomp-bpfを使用し、バージョン23ではレンダラーをサンドボックス化する際にこの技術を利用しています。また、
Snap や
Flatpak などのアプリケーションサンドボックスもseccompを活用しており、安全なアプリケーションの実行を可能にしています。
具体的なアプリケーション例としては、
DropboxのLepton、Gnome Tracker、Firefox、
Torなどがseccompを利用しています。これにより、システムのセキュリティを高め、悪意のある攻撃からシステムを守る効果が期待されています。seccompの導入により、より安全で効率的なコンピュータ環境を構築することができるのです。
結論
このように、secure computing mode (seccomp)は、現代の
Linuxシステムにおけるセキュリティの強化において欠かせない要素です。
プロセスを安全に管理し、システム資源を適切に保護するために、この技術はますます重要性を増しています。