plegde と unveil に似た分離メカニズムが FreeBSD 用に開発されています

FreeBSD では、OpenBSD プロジェクトによって開発された plegde および unveil システム コールを彷彿とさせる、アプリケーション分離メカニズムの実装が提案されています。 plegde での分離は、アプリケーションで使用されていないシステム コールへのアクセスを禁止することで実現され、unveil では、アプリケーションが操作できる個々のファイル パスへのアクセスのみを選択的に開くことで実現されます。アプリケーションに対しては、システム コールとファイル パスの一種のホワイト リストが形成され、他のすべてのコールとパスは禁止されます。

FreeBSD 用に開発されている plegde と unveil の類似物の違いは、コードを変更せずに、または最小限の変更でアプリケーションを分離できる追加レイヤーの提供にあります。 OpenBSD では、plegde と unveil は基礎となる環境との緊密な統合を目的としており、各アプリケーションのコードに特別なアノテーションを追加することによって使用されることを思い出してください。保護の構成を簡素化するために、フィルターを使用すると、個々のシステム コールのレベルで詳細を省略し、システム コールのクラス (入出力、ファイルの読み取り、ファイルの書き込み、ソケット、ioctl、sysctl、プロセス起動など) を操作できるようになります。 。特定のアクションが実行されるときに、アプリケーション コードでアクセス制限関数を呼び出すことができます。たとえば、必要なファイルを開いてネットワーク接続を確立した後、ソケットやファイルへのアクセスを拒否できます。

FreeBSD 用の plegde および unveil のポートの作成者は、任意のアプリケーションを分離する機能を提供することを意図しており、そのためにカーテン ユーティリティが提案されており、これにより、別のファイルで定義されたルールをアプリケーションに適用できるようになります。提案された構成には、システム コールのクラスと特定のアプリケーション (サウンドの操作、ネットワーク インタラクション、ロギングなど) に固有の一般的なファイル パスを定義する基本設定を含むファイルと、特定のアプリケーションのアクセス ルールを含むファイルが含まれています。

カーテン ユーティリティを使用すると、ほとんどの未変更のユーティリティ、サーバー プロセス、グラフィカル アプリケーション、さらにはデスクトップ セッション全体を分離できます。カーテンは、Jail および Capsicum サブシステムによって提供される隔離メカニズムと組み合わせて使用​​できます。起動されたアプリケーションが親アプリケーションに設定されたルールを継承し、個別の制限でそれらを補う場合、ネストされた分離を組織することもできます。一部のカーネル操作 (デバッグ機能、POSIX/SysV IPC、PTY) は、現在のプロセスまたは親プロセスによって作成されていないカーネル オブジェクトへのアクセスを防ぐバリア メカニズムによってさらに保護されています。

プロセスは、curtainctl を呼び出すか、OpenBSD にあるものと同様の libcurtain の plegde() および unveil() 関数を使用することによって、独自の分離を構成できます。アプリケーションの実行中にロックを追跡するために、sysctl「security.curtain.log_level」が提供されています。 X11 および Wayland プロトコルへのアクセスは、カーテンの実行時に「-X」/「-Y」および「-W」オプションを指定することで個別に有効になりますが、グラフィカル アプリケーションのサポートはまだ十分に安定しておらず、多くの未解決の問題があります (問題は主に X11 を使用するときに発生し、Wayland サポートははるかに適切に実装されています)。ユーザーは、ローカル ルール ファイル (~/.curtain.conf) を作成することで、制限を追加できます。たとえば、Firefox から ~/Downloads/ ディレクトリへの書き込みのみを許可するには、ルール「~/Downloads/ : rw +」を使用して「[firefox]」セクションを追加します。

この実装には、必須アクセス制御 (MAC、Mandatory Access Control) 用の mac_curtain カーネル モジュール、必要なハンドラーとフィルターの実装を備えた FreeBSD カーネル用のパッチ セット、アプリケーションで plegde 関数と unveil 関数を使用するための libcurtain ライブラリが含まれます。カーテン ユーティリティ、サンプル構成ファイル、ユーザー空間内の一部のプログラムのテストとパッチのセット (たとえば、$TMPDIR を使用して一時ファイルとの作業を統合するため)。可能な限り、作成者はカーネルとアプリケーションへのパッチを必要とする変更の数を最小限に抑えるつもりです。

出所: オープンネット.ru

コメントを追加します