Linuxでの有害な可能性のあるプログラムの実行


33

学生が書いたプログラムをテストするプログラムを書いています。私はそれらを信頼できないことを恐れており、それを実行しているコンピューターにとってそれがひどく終わらないことを確認する必要があります。

システムリソースへのアクセスが制限されたクラッシュテストユーザーを作成し、そのユーザーとしてプログラムを実行することを考えていましたが、これまでのところネットで発見したことから、仮想システムを作成することが最も安全なオプションになるでしょう...

誰かが正しいアプローチを選ぶのを手伝ってくれますか?セキュリティは私にとって大きな関心事です。その一方で、私はやり過ぎで、本当に必要のないものを学ぼうとする多くの時間を浪費する解決策を望んでいません。


7
ブラウザー(bellard.org/jslinux)でLinuxでプログラムを実行するだけです。とても良いサンドボックスです。:)
Fixee

うわー、それは本当に面白いです!ただし、それを使用するには何らかのインターフェイスを作成する必要があります(プロセス全体が自動化されるため)。チェックアウトする必要があります。このJavascript Linuxがガジェット以上のものであることが判明した場合は、使用することもできます。
コルダ

私は本当にコメントを冗談として意図しましたが、本当にそれを使用できるなら、それは驚くべきことです。正直なところ、LiveCDの回答(RAMdiskを使用)は素晴らしいソリューションです。
フィクシー

まあ、私はそれを使用することができれば、結果にアクセスできるウェブページでも使用します-それは本当に素晴らしく快適です。また、オタク要因のカウント;)また、ライブディスクはオプションではありません-私はそれをいくつかのサーバーで実行するプログラムを作っていると言ったので、再起動は私が余裕がないものです...私はとにかく仮想マシンに固執するでしょう。 ..
コルダ

回答:


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

  • 仮想マシンよりもさらに高いセキュリティのための別のオプション:ハードドライブにアクセスせずに「ライブ」CD / DVD /ペンドライブを起動します(BIOSでHDDを一時的に無効にします。できない場合は、少なくともドライブをマウントしないでください/自動的にマウントされる場合はアンマウントします-しかし、これははるかに安全性が低いです)

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

  • 隔離など、特別な安全な環境を作成するプログラムがあります-これは一般にサンドボックスと呼ばれます-それらは通常、追加の監督を伴うchrootベースで、あなたに合ったものを見つけます。

  • 単純なchrootは(特にプログラムの実行に関して)安全性が最も低くなりますが、おそらく少し速くなりますが、 ...別のルートツリー全体を構築/コピーし、バインドマウント/devなどを使用する必要があります(注を参照)。1以下!)。したがって、一般に、特により安全でセットアップが簡単なsandbox環境を使用できる場合は、このアプローチはお勧めできません。

注0:nobodyアカウントのように、「特別なユーザー」の観点から:これはセキュリティをほとんど与えませんchrootnobodyユーザーは、アクセスファイルやプログラムいることができる読み実行のために設定された権限他のを。でテストできsu -s /bin/sh -c 'some command' nobodyます。そして、誰かがアクセスできる設定/履歴/キャッシュファイルがある場合(間違いまたは軽微なセキュリティホール)、nobodyの権限で実行されているプログラムはそれにアクセスでき、機密データのgrep(「pass =」など)および多くの方法でそれをネットまたは何でも送信します。

注1: Gillesが以下のコメントで指摘したように、単純なchroot環境では、権限昇格を目的としたエクスプロイトに対するセキュリティはほとんどありません。唯一のchrootは、環境が最小限であり、セキュリティが確認されたプログラムのみで構成される場合(ただし、潜在的なカーネルレベルの脆弱性を悪用するリスクが依然として存在する場合)にのみセキュリティ上理にかなっており、chrootで実行されているすべての信頼されていないプログラムが実行されていますchrootの外部でプロセスを実行しないユーザーとして。chrootが防止するのは(ここで述べた制限付きで)、特権の昇格なしの直接的なシステム侵入です。しかし、ジルが別のコメントで指摘したように、そのレベルのセキュリティでさえ回避され、プログラムがchrootから抜け出すことができます。


答えてくれてありがとう。そのようなことになると私は本当の初心者です、1つのことを説明してもらえますか?なぜプログラムがシステム内のファイルを読むのを防ぐ必要があるのか​​(例えば、chrootによって)?(プログラムがそれらを変更できない場合)。
コルダ

クラッシュテストユーザーアカウントは確かにあなたにいくつかの基本的なセキュリティを提供します。それでも、防止したい/必要なことがいくつかあります。これらは、プログラムに組み込まれている一般的な脆弱性の悪用や、ソーシャルハッキング、将来のリモート攻撃を目的とした情報収集などの形で発生する可能性があります。
rozcietrzewiacz

理由:ユーザーがインターネット接続を使用できないようにする方法はありますか?
コルダ

1
nobodyインターネットにアクセスできるのかな。
コルダ

1
@rozcietrzewiacz保護を提供するchrootの重要な要件は、chrootの外側でプログラムを実行しているユーザーとしてchrootされたプログラムを実行しないことです。それ以外の場合、chrootされたプロセスは、chrootされていないプロセスをptraceし、そのように何でもできます。
ジル 'SO-悪である停止

10

仮想マシンを使用します。それ以下では、あまりセキュリティが提供されません。

数年前には、chrootされた専用ユーザーなどを提案したかもしれません。しかし、ハードウェアはより強力になり、仮想マシンソフトウェアは使いやすくなりました。さらに、既製の攻撃はより高度になりました。ここに完全に行かない理由はもうありません。

VirtualBoxを実行することをお勧めします。数分で仮想マシンをセットアップし、その中にLinuxディストリビューションをインストールできます。私がお勧めするデフォルト以外の設定は、ネットワーク設定のみです。「NAT」インターフェース(世界と通信するため)と「ホストのみ」インターフェース(ホストとの間でファイルを簡単にコピーして、 VM)。生徒のプログラムを実行している間はNATインターフェイスを無効にします¹。ソフトウェアパッケージをインストールまたはアップグレードするときにのみ有効にしてください。

仮想マシン内で、学生ごとに1人のユーザーを作成します。

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


2

ここでは非常に完全な説明である chroot環境に使用することはまだ非常に現実的な選択肢である理由について、なぜ完全なオペレーティングシステムまたは完全なハードウェア仮想化は、特定のシナリオで特に過剰ですが。

Chrootがセキュリティ機能ではないというのは神話にすぎません。chrootファイルシステムを自動的に構築するツールがあり、Chrootは意図的なセキュリティ機能として多くのメインストリームアプリケーションに組み込まれています。

一般的な考えに反して、すべての状況でオペレーティングシステムの完全な仮想化、またはハードウェアの完全なシミュレーションが必要なわけではありません。これは、実際には、攻撃対象となる領域を増やすことを意味します。これは、安全性低いシステムを意味します。(知識の少ないシステム管理者向け)

ルールはかなり単純です。chroot内に必要のないものを置かないでください。rootとしてデーモンを実行しないでください。chrootの外部でデーモンを実行しているユーザーとしてデーモンを実行しないでください。

安全でないアプリケーション、setuidバイナリ、所有者のいないシンボリックリンク/ハードリンクを削除します。nosuid、noexec、nodevを使用して不要なフォルダーを再マウントします。実行中のデーモンの最新の安定バージョンをソースからビルドします。そして何よりも、基本システムを保護します!


2

質問が公式に回答された後、これを追加します:MAGIC:悪意のある回路/コアの老化、残念ながらACMのペイウォールの背後に閉じ込められています。この論文の結論は、現在使用されている回路の非常に小さな幅のトレースが使用中に古くなり、最終的に故障することです。正しい命令を見つけて何度も繰り返すことにより、攻撃者はICを急速に故障させることができます。

VM、サンドボックス、コンテナ、chroot jailのいずれも、この種のハードウェアの悪意のある破壊を防ぐことはできません。この論文の著者は、そのような命令シーケンスと実験的に老朽化したハードウェアが故障することを発見しましたが、命令を提供しなかったため、しばらくの間は本当の脅威ではないかもしれません。


1

BSD派生UNIX(Mac OS Xを含む)には、と呼ばれる機能がありsandboxます。マンページには

DESCRIPTION サンドボックス機能は、アプリケーションが自主的にオペレーティング・システム・リソースへのアクセスを制限することができます。この安全メカニズムは、脆弱性が悪用された場合の潜在的な損害を制限することを目的としています。他のオペレーティングシステムのアクセス制御に代わるものではありません。

これは、chroot利用可能な施設とは別のものです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.