Dockerはapparmorとseccompの両方をサポートしているようです。 Dockerでは、コンテナーの実行時に機能を削除することもできます。
ただし、どのアプローチを使用するかに関するドキュメントやガイドラインは見つかりませんでした。
それらが何のために使用できるかにかなりのオーバーラップがあるようです、私はこれらのオプションのどれをいつ使用するべきかについての一般的なガイドラインを理解することができませんでした。
誰かがガイドラインを提供できますか?
私の場合、サーバー上で多くの学生コードを実行する必要があります。 Javaおよびc ++プログラムの実行を許可します。1つのディレクトリ(データボリューム)への書き込みアクセスを許可します。ネットワークアクセスや複雑なものを必要としません。
確保するためのガイドラインをいくつか提供してください。
それらはすべて使用できます。
これらのセキュリティ機能にはそれぞれ異なる目的があり、実際にはほとんど重複していません。これらはすべて、プロセスが危険にさらされた後にプロセスが引き起こす可能性のある損害を軽減するように機能します。これらはすべて非常にオーバーヘッドが低く、ソフトウェアのセキュリティを大幅に向上させるために使用できます。
Seccomp は、ユーザースペースプログラムがsyscallフィルターを設定できるようにするLinuxの機能です。これらのフィルターは、許可されるシステムコールと、それらに許可される引数を指定します。これは、カーネルの攻撃対象領域を減らす非常に低レベルのフィルターです。たとえば、特権を昇格するためにそのsyscallへの単純な呼び出しを許可するkeyctl()
のバグは、その呼び出しへのアクセスが制限されているプログラムのprivescで必ずしも使用できるとは限りません。
AppArmorは、LSM(Linux Security Module)として機能する必須アクセス制御フレームワークです。オブジェクト(ファイル、パスなど)へのサブジェクト(プログラム)のアクセスをホワイトリストまたはブラックリストに登録するために使用されます。 AppArmorを使用すると、プログラムは/etc/passwd
に読み取りアクセスできますが、/etc/shadow
にはできません。ポリシーを使用して、機能を制限したり、ネットワークアクセスを制限したりすることもできます。
Capabilities および機能の削除は、特権プロセスが付与された特権のサブセットを特権プロセスが取り消す一般的な手法です。ルートプロセスは、たとえば、ネットワークにそのままの接続を作成するために必要な機能や、ルートのままであっても標準のUNIXファイルアクセス許可(DAC)をバイパスするために必要な機能を削除できます。削除できる機能の数は限られているため、この手法は非常に細かいわけではありませんが、それでも、プログラムが侵害された場合にプログラムが受ける可能性のある損害は軽減されます。
一般に、次のことを知っておく必要があります。
Seccompは、カーネルの脆弱性が悪用される可能性を減らします。
AppArmorは、アプリケーションがアクセスすべきでないファイルにアクセスするのを防ぎます。
機能の低下により、侵害された特権プロセスが実行できるダメージが減少します。
@ forest でよく答えられましたが、セキュリティフレームワークとセキュリティ設計全般に関する私の見解を反映したいくつかの提案を追加したいと思います。セキュリティを強化することは、自分を何から保護しているのか、少なくとも何を保護しているのかを理解することにつながります。ただし、これらはすべてセキュリティポリシーから開始する必要があります。ポリシーが策定されると、選択が容易になります。いくつかのケースを考えてみましょう。ユースケースが反映されている場合とそうでない場合があります。ただし、それらを検討する前に、使用可能なオプションを次のように絞り込むと役立つ場合があります。
そして今、ケース: