Linuxで潜在的に不要なプログラムを実行する

Linuxで潜在的に不要なプログラムを実行する

私は学生が書いたプログラムをテストするためのプログラムを書いています。それらを信じることができないか心配され、それが実行されているコンピュータに悪い結果をもたらさないことを確認する必要があります。

システムリソースへのアクセスが制限されており、そのユーザーとしてプログラムを実行している競合テストユーザーを置くことを検討していますが、これまでオンラインで見つけたところによれば、仮想マシンを作成するのが最も安全なオプションです。

正しい方法を選択するのに役立つ人はいますか?安全が私の最大の関心事です。一方、私は過度の解決策を望んでおらず、実際に必要ではないことを学ぶために多くの時間を無駄にしません。

答え1

  • 仮想デバイス再起動せずに最高のセキュリティを提供しますが、パフォーマンスは最低です。

  • 仮想マシンよりも安全な別のオプション:「ライブ」CD/DVD/プッシュドライブの実行ハードドライブにアクセスできません(BIOSで一時的にHDDを無効にします。そうしない場合は、少なくともドライブをマウントするか、自動的にマウントする場合はアンマウントしないでください。ただし、それほど安全ではありません)。

  • ドッカーコンテナは、仮想マシン全体の安全な代替手段です。おそらく(セキュリティの観点から)2つの主な違いは、dockerで実行されているシステムが実際にホストシステムのカーネルを使用していることです。

  • などのプログラムがあります。分離これは特別で安全な環境を作り出します。これはしばしば次のように呼ばれます。砂箱- これは通常chrootベースであり、追加の監督が必要です。あなたに合ったものを見つけてください。

  • シンプルchrootおそらく少し速いですが(特にプログラムの実行に関して)、最も安全ではありません。しかし、...完全に別々のルートツリーをビルド/コピーし、バインドマウント/devなどを使用する必要があります(参照注1次のような! )。したがって、通常、このアプローチはお勧めできません。特に、より安全で一般的に設定しやすいsandbox環境が利用可能な場合にはさらにそうです。

注0:アカウントなどの「特殊ユーザー」側の場合nobody:これは以下を提供します。ほとんどなしセキュリティは単純なものよりはるかに優れていますchroot。ユーザーは、nobody次の権限でファイルとプログラムに引き続きアクセスできます。読むそして実装する権限は次のように設定されます。その他。を使用してテストできますsu -s /bin/sh -c 'some command' nobody。バグやマイナーなセキュリティホールのために誰でもアクセスできるconfig/history/cacheファイルがある場合は、権限を使用して実行中のプログラムがそのファイルにアクセスでき、nobody機密データ(たとえば「pass =」など)をgrepネットワークや他の手段を介して送信する方法はいくつかあります。

注1:Gilesが指摘したように以下にコメントがあります、単純なchroot環境は、特権の上昇を目指す攻撃に対するセキュリティをほとんど提供しません。別のchrootはセキュリティの観点から意味があります。〜しない限り環境は小さく、安全に検証されたプログラムで構成されています。ただ(しかし、まだ潜在的なカーネルレベルの脆弱性を悪用する危険性があります。)chrootで実行されている信頼できないすべてのプログラムは、chroot以外のプロセスを実行していないユーザーとして実行されます。 chrootが(ここで述べた制限を介して)防ぐことは、特権の上昇を必要としない直接的なシステム侵入です。しかしGillesが言ったように別のコメント、このセキュリティレベルもバイパスし、プログラムがchrootから外れる可能性があります。

答え2

仮想マシンを使用してください。それより少ないことは多くのセキュリティを提供しません。

数年前、私はchroot専用のユーザー、または同様のものを使用することを提案したかもしれません。しかし、ハードウェアはより強力になり、仮想マシンソフトウェアは使いやすくなりました。また既成攻撃もさらに洗練されています。もう最後まで行かない言い訳の余地はありません。

VirtualBoxを実行することをお勧めします。数分で仮想マシンを設定し、ここにLinuxディストリビューションをインストールできます。私が推奨するデフォルト以外の唯一の設定はネットワーク設定です。 「NAT」インターフェイス(世界と通信するため)と「ホストのみ」インターフェイス(ホスト間でファイルを簡単にコピーできるようにする)を作成し、次のように入力します。 SSH経由の仮想マシン)。学生プログラムを実行するときは、NAT インターフェイスを無効にします。パッケージをインストールまたはアップグレードする場合にのみ有効にしてください。

仮想マシン内で各生徒のユーザーを作成します。

1NAT インターフェイスをホワイトリストユーザーに制限することはできますが、これは単純で簡単な設定で必要とされるよりも高度な機能です。

答え3

質問に正式に回答したら、以下を追加します。MAGIC:回路/コアの悪意のある老化残念ながら、ACMのペイウォールの後ろにロックされています。この論文では、今日使用されている回路の非常に小さな幅の痕跡が使用されるにつれて老化し、最終的に損傷するという結論を下した。攻撃者は正しいガイダンスを見つけて繰り返し続けることで、ICを迅速に障害にする可能性があります。

仮想マシン、サンドボックス、コンテナ、またはchroot刑務所でも、これらの悪意のあるハードウェア破壊を防ぐことはできません。論文の著者は、これらの一連のコマンドを発見し、実験的にハードウェアを失敗するのに長く使用しましたが、コマンドを漏らさなかったため、まだ実際の脅威ではありません。

答え4

非常に詳細な説明です。Chrootの使用が依然として非常に実行可能なオプションであり、オペレーティングシステム全体またはハードウェア仮想化全体が特定のシナリオでは特に過度な理由です。

それだけ神話Chrootはセキュリティ機能ではありません。 chrootファイルシステムを自動的に構築するためのツールがあり、Chrootは目的のセキュリティ機能として多くの主要アプリケーションに組み込まれています。

一般的な信念とは異なり、すべての状況でオペレーティングシステムの全体的な仮想化やハードウェアの完全なエミュレーションを必要とするわけではありません。これは実際には以下があることを意味します。もっと攻撃面を覆おうとします。順番に、これは次のことを意味します。あまり安全でないシステム。 (おそらく知識のないシステム管理者を対象とする)

ルールはとても簡単です。 chrootに不要なものを入れないでください。デーモンをrootとして実行しないでください。 chroot 以外のユーザーとしてデーモンを実行しないでください。

安全でないアプリケーション、setuidバイナリ、所有されていないシンボリックリンク/ハードリンクを削除します。不要なフォルダを再マウントするには、nosuid、noexec、nodev を使用します。ソースで実行されているデーモンの最新の安定版をビルドします。最も重要なことは、基本システムを安全に保ちましょう!

関連情報