Linuxのサンドボックス化バイナリ

Linuxのサンドボックス化バイナリ

Linuxでバイナリを制限/サンドボックス化するためのさまざまなオプションを理解しようとしています。 dockerのように使用できることがわかりnamespacesましたcgroups。私はSELinux次のようなものを使用できますこのリンクは提案します。どちらを使うべきですか?名前空間とcgroupはSELinuxを使用して実装されていますか? Linuxではどのように共存しますか?

そしていつ能力を使うのですか?バイナリにSElinuxまたはネームスペース/ cgroupポリシーが組み込まれている場合、これらのポリシーが必要なのはなぜですか?

ベストアンサー1

Linuxには、プロセスを制限するために使用できるいくつかのセキュリティメカニズムが含まれています。ほとんどはサンドボックスとコンテナを構築するために一緒に使用できます。いくつかのメカニズムの簡単な概要:

  • デジタル - アナログコンバータランダムアクセス制御): 既存の所有者/グループ権限です。プロセス所有者、グループ、およびファイルに対する既存の権限ビット。

  • りんご必須アクセス制御)、SELinux、AppArmorが最も一般的な実装です。 MACシステムは、サブジェクト(プロセス、ユーザーなど)とオブジェクト(ファイル、ソケットなど)の間にルールを適用して、許可されたアクセスを決定します。 MACルールは、複雑なポリシーとより細かい権限をサポートします。ただし、設定作業が少なくない場合があります。

  • 能力プロセスがスーパーユーザー権限のサブセットを持つことを許可します。ルートとして実行されるプロセスは、権限のないユーザーに切り替える前に特定の機能を維持できるため、最小限のスーパーユーザー機能のみを維持して攻撃の表面を減らすことができます。しかし、多くの機能が広すぎるため、ルートとほぼ同じです。[1]。一部の setuid バイナリは、ファイル機能を使用して非 setuid にすることができます。

  • cgroupプロセス会計、アプリケーションリソースの制約、および管理に使用されます。例えば冷蔵庫グループ内のすべてのプロセスを凍結する安定した方法を提供します(そうでなければ問題になる可能性があります)。

  • 名前空間プロセスが別の環境(マウント、ネットワーク、ユーザー、pidなど)を持つことを許可します。ネットワークネームスペースは同じネットワーク構成を共有せず、各pidネームスペースは親ネームスペースのPIDを知りません。名前空間を使用してLinuxコンテナを構築する方法を簡単に確認できます。

(chroot、seccompフィルタ、ACLなどのより多くのメカニズムがあります。)

一部の機能は冗長です(例:DAC、MAC、および機能)。これらを一緒に使用すると、階層化されたセキュリティを構築するためにまだ役に立ちます。理想的には、バグや誤った構成による脆弱性をこれらの層のいずれかで軽減できます。

各機能には独自のユーティリティとAPIが含まれています。LXC単一のインターフェイスを介してこれらの機能を活用する簡単な方法を提供します。 LXCはまた、部分的な機能のみを使用する設定を可能にします。たとえば、ホストとマウントネームスペースを共有している間にプライベートネットワークネームスペースを持つとします。独自の独立した名前空間を持つコンテナ内で完全なLinuxユーザースペースを実行することもできます。

おすすめ記事