何日か前に GoogleはSandboxedAPIプロジェクトの開始を発表しましたその CおよびC ++で任意のライブラリを分離して実行するためのサンドボックス作成プロセスを自動化できます。
ライブラリからコードを分離する ライブラリによって提供されるハンドルへの攻撃の可能性から保護することができます、ライブラリに入力される外部データを操作することで悪用される可能性のある脆弱性がコードにある場合に備えて、追加のバリアを作成します。 コードはApache2.0ライセンスの下で開かれています。
分離または、Sandbox2ランタイム内で使用して行われます、名前空間、cgroups、およびseccomp-bpfが使用されます。
システムコールとリソースへのアクセスのために、別のプロセスで実行されるサンドボックスに配信されるコード、およびファイルとネットワーク接続は制限されています。
プロセスは、分離されたコードを実行するために直接必要なシステム機能にのみアクセスできます。
Sandbox2は、プロセスを実行するためのコンポーネントを定義しますまたは、分離ルールを適用して、その後の実行をサポートします。
サンドボックス2 Sandbox APIとは別に使用して、ライブラリだけでなく任意のプロセスも分離できます。
保護を強化することに加えて、別々のプロセスでコードを排除することの良い点は、ライブラリとCPUのメモリ消費の制限を別々に規制する可能性と、障害に対する保護です。ライブラリによってアプリケーション全体がクラッシュすることはありません。
サンドボックスAPIについて
SandboxedAPIはSandbox2プラグインです これにより、既存のライブラリを分離モードで実行するための転送が簡素化されます。
サンドボックス化されたAPI サンドボックス環境でライブラリコードを実行できるようにする中間ソフトウェアインターフェイスを提供しますまた、サンドボックス環境でライブラリへの呼び出しを整理し、ライブラリの結果がメインプログラムに確実に配信されるようにします。
Se ProtoBuffsプロトコルに基づく専用RPCを介して分離されたライブラリにアクセスします。
A ライブラリ開発者には、変数へのアクセスを可能にする一連のオプションが提供されます、ファイル記述子、バッファ、およびベースアプリケーションから分離されたライブラリ関数。これには、配列と構造を共有するための自動および制御されたメモリ同期用のツールが含まれます。
このようなデータを分析するソフトウェアライブラリが十分に複雑な場合、特定の種類のセキュリティの脆弱性(メモリ破損エラー、または分析ロジックに関連するその他の種類の問題(パストラバーサルの問題など))の犠牲になる可能性があります。 これらの脆弱性は、セキュリティに深刻な影響を与える可能性があります。
さらに、 分離されたプロセスの動作を監視し、障害が発生した場合にそれらを再起動するためのAPIが提供されています。
分離されたライブラリの場合、分離された関数の注釈コードは、Bazelアセンブリシステムと、基本プロセスと分離されたプロセス間の相互作用のためのプログラムインターフェイス(SAPI)に対して自動的に生成されます。
開発者は、許可されるすべてのシステムコールと操作を定義する分離ルールを含むヘッダーファイルも作成する必要があります (読み取り、書き込み、ファイルのオープン、時間へのアクセス、シグナルハンドラーのインストール機能、mallocを介したメモリ割り当てのサポートなど)。
ライブラリがアクセスする必要のあるファイルとディレクトリは、個別に決定されます。
インストール
現在、このプロジェクトはLinuxでのみ利用可能ですが、将来的には、macOSおよびBSDシステム、長期的にはWindowsのサポートを追加する予定です。 はい サンドボックス化されたAPIをインストールする場合は、指定された手順に従うことができます このリンクで。
計画のうち、それも注目されています CおよびC ++以外の言語でライブラリを分離する機能、 分離のための追加のランタイムサポート (ハードウェア仮想化などに基づく)およびCMakeおよびその他のアセンブリシステムを使用する機能(サポートは現在、Bazelビルドシステムに限定されています)。
出典 https://security.googleblog.com