BSD界隈四方山話

第128回 OpenBSD pledge(2)システムコール進捗報告

この記事を読むのに必要な時間:およそ 1 分

OpenBSD pledge(2) 進捗報告

OpenBSD Journalにpledge(2)システムコールに関する開発進捗情報が掲載されました。Theo de Raadt氏がtech@メーリングリストに投函したものを掲載したものです。

 pledge() work in progress - OpenBSD Journal

図 pledge() work in progress - OpenBSD Journal

報告の中でTheo de Raadt氏はpledge(2)システムコールに関して2つの変更作業に取り組んでいると説明しました。セマンティックとインテグレーションが複雑なので,作業が完成するにはもうしばらく時間がかかるとしています。取り組まれている変更は現在のpledge(2)システムコールが解決が難しいと考えられている部分で,これを解決するためにインターフェースとセマンティックを変更するとともに,新しい関数も導入するようです(pledgepath()⁠⁠。

pledge(2)システムコールはプロセスが利用できるシステムコールやリソースを制限する機能で,FreeBSDのcapsicumに似ています。システムコールやリソースを制限するという面ではcapsicumに似てはいますが,肝心のメカニズム部分が違っています。capsicumではfork(2)したプロセスに対して制限が引き継がれますが,pledge(2)ではfork(2)したプロセスに対してpledge(2)で設定した規制は引き継がれません。

このためpledge(2)はひたすら多くのコマンドに対してそれぞれにpledge(2)システムコールを適用していくことでセキュリティの強化を図っていましたが,この仕組みだといくつかの問題(特にパス)が解決できないことが課題になっていました。

OpenBSD 6.2ではpledge(2)システムコールの第2引数はパスになっているのですが,現在進められている変更ではここがexecpromiseに変わるそうです(仕組みと実装を注意深く調べる必要があって,なかなか実装は大変みたいです⁠⁠。

パスに関してはpledgepath()を導入するインターフェースに変更する方法が考えられていると説明があります。ニュアンスとしてはchroot(2)的なもののようですが,chroot(2)と違って最上位は'/'のままなので,chroot(2)とまるで同じというものではないようですが,詳しい話は正式にリリースに取り組まれてから取りあげようと思います。

OpenBSDではシステムコールの開発に関してもこんな感じでかなりアグレッシブに進めるといったところがあります。システムコールの追加と変更にはかなり慎重になることが多いコミュニティが多いように思うのですが,OpenBSDはコミュニティが団結していることもあってか,こういった変更を迅速に行うことができるようです。

OpenBSD pledge(2)の取り組みはFreeBSD capsicumとは違っていますが,今回の変更内容を見る限りでは,なんだかんだで似たようなところへ向かっているような気がします。今後のカンファレンスなどでこのあたりに関して興味深い発表があれば随時取りあげていこうと思います。

FreeBSD勉強会

2018年2月8日(木)19:00~ 第68回カーネルソースコードを読んでみよう!(ヴァル研 セミナールーム)

なにげなく使っているオペレーティングシステムですが,その中身を読むことというのはあんまりないのではないでしょうか。そもそもどこから読めばよいかわからない,そんな方が多いんじゃないかと思います。今回のFreeBSD勉強会では,読みやすそうなところをみつくろって,とりあえずカーネルのソースコードを読んでみよう,というのをやってみようと思います。

本勉強会への参加者には抽選か勝ち抜きかでデーモンTシャツなどのグッズをお渡しします :)

参加登録はこちらから。

FreeBSD勉強会 発表者募集

FreeBSD勉強会では発表者を募集しています。FreeBSDに関して発表を行いたい場合,@daichigotoまでメッセージをお願いします。30分~1時間ほどの発表資料を作成していただき発表をお願いできればと思います。