web-dev-qa-db-ja.com

UbuntuでXアプリケーションをサンドボックス化する最良の方法

UbuntuでfirefoxやThunderbirdのようなXアプリケーションをサンドボックス化する最良の方法は何ですか(- qubes os の方向に進みますが、単一のアプリケーションのみ)。

私は多くの異なるサンドボックス技術があることを知っています。例えば

  • 仮想ボックスを使用するだけ:これは非常に安全なようですが、リソースが過剰です。 Firefoxを実行するには、VirtualBoxに最小限のOSが必要です。

  • SE-Linuxサンドボックステクノロジー を使用します。これは最良のオプションのようですが、私が知る限り、SElinuxはubuntuで使用できますが、デフォルトでは(RedHat-linuxなどとは対照的に)十分に設定されていません。さらに、SELinuxのサンドボックス部分が欠落しているようです: https://unix.stackexchange.com/questions/67127/how-do-i-install-selinuxs-sandbox-utility-on-linux-mint-debian -edition?lq = 1 したがって、コンパイルする必要があります。

  • 同等のapparmor は本番対応ではないようで、現在のところ、ubuntuには同梱されていません。しかし、私は開発の状態がどうなっているのか、そしておそらくそれの一部となる次のubuntuリリースを待つ価値があるかどうかを見積もることはできません。

  • Gnomeデスクトップは X-sandboxing をサポートしているようです。これをwmに依存しない方法で使用できるかどうかは、私にはわかりません。

  • Lightweigtツール mbox はファイルシステムレベルでのみ動作するようで、Xアプリケーションには不十分です。

  • 同じことは、たとえば sandfox-script のように、自作のchrootソリューションにも当てはまります。

  • Chrootよりも軽量で安全なオプションは Plash のようです。しかし、X保護がどの程度適切に実装されているかはわかりません。

  • 同じ Immunity および FBAC-LSM

  • arkose と呼ばれるプログラムもあり、ubuntuで十分にサポートされているようですが、同時にそれがどのように機能するかについてのドキュメントはほとんどなく、他のアプローチと比較してどれほど安全かわかりません。

  • Docker は、デスクトップアプリケーションよりもサーバーアプリケーション向けに作成されているようです。 Xアプリケーションに対して安全かどうかはわかりません。 kagome という新しいプロジェクトがあり、Dockerとxephyrを組み合わせてXを分離しているようです。ただし、作成者は、Dockerにセキュリティ上の欠陥があり、systemd-nspawn、rkt、lxdなどの別のコンテナーソリューションに切り替える方がよい場合があると指摘しています。

  • 他のソリューションは次のとおりです: seccomp-nurseRainbowvagrantup

  • 最後に、特にFirefoxには、ubuntu用の apparmor profile がありますが、これは デフォルトでは有効になっていません です。これはサンドボックスではありませんが、Firefoxを使用するとある程度のセキュリティが得られます(ただし、上記のサンドボックスソリューションとの比較はわかりません)。

だから多くのアプローチがあるようですが、サンドボックスのセキュリティの観点からそれらがどのように(そしてなぜ)比較するのか[〜#〜] x [〜#〜]-使いやすさの点で、特にubuntu-linuxでの、FirefoxやThunderbirdのようなアプリケーション。誰かがこれについていくつかの詳細、それらをどのように分類するか、そして私の目的のために私が詳細に調べるのにどれが価値があるかを教えてくれると嬉しいです。

17
student

subuser を使用すると、Dockerを使用してアプリケーションをサンドボックス化できます。 Firefoxをサンドボックス化したいとします。

フォルダmy-subuser-imagesを作成してから、最初のフォルダに2つ目のフォルダfirefoxを作成します。

my-subuser-images/firefox

firefoxフォルダーに、さらに別のサブフォルダーを作成する必要があります:docker-image

それが完了したら、2つのファイルを作成する必要があります。

  • permissions.json

そして

  • docker-image/SubuserImagefile

ファイルレイアウトは subuser-default-repository にあるもののようになります。

permissions.jsonファイルで、Firefoxに許可されていることをサブユーザーに伝えます。

{"description":"A popular web browser."
,"maintainer":"student"
,"executable":"/usr/bin/firefox"
,"gui":{"clipboard":true}
,"sound-card":true
,"allow-network-access":true
,"basic-common-permissions":true}

以下は、私が設定した権限の概要です。

  • "gui":Firefoxが XPRA X11ブリッジ を使用してX11にウィンドウを安全に表示できるようにします
  • 「サウンドカード」:Firefoxがサウンドカードと通信できるようにします
  • "allow-network-access":Firefoxがネットワークにアクセスすることを許可します
  • "basic-common-permissions":Firefoxが独自の特別に含まれるホームディレクトリに設定を保存するなどのいくつかの基本的なことを実行できるようにします。LOCALおよびタイムゾーンなどを参照してください。

ただし、Firefoxが自身のサブユーザー以外のファイルにアクセスすることはできません。たとえば、必要に応じて、user-dirs権限を追加して、ダウンロードディレクトリへのアクセスを許可することができます。

permissions.jsonファイルを作成したら、SubuserImagefileを作成できます。

docker-image/SubuserImagefileDockerfileのようになります。

FROM ubuntu
RUN apt-get update && apt-get upgrade -y && apt-get install -yq firefox

これで、サブユーザーイメージの設定が完了しました。

次のコマンドを実行して、firefoxサブユーザーを作成できます。

$ subuser subuser add firefox firefox@/home/student/my-subuser-images

次のコマンドを実行して、firefoxサブユーザーを実行できます。

$ subuser run firefox

複数のfirefoxサブユーザーを作成できます。これは、複数のFacebookアカウントまたはGoogleアカウントを持ち、常にログアウト/ログインする必要がない場合に便利です。インターネットバンキングを行うときにクロスサイトスクリプティングのリスクを軽減したい場合にも役立ちます。

subuser subuser add internet-banking firefox@/home/student/my-subuser-images

次のコマンドでインターネットバンキングサブユーザーを実行できます

subuser run internet-banking

~/.subuser/homesにアクセスすると、サブユーザーのホームディレクトリにアクセスできます。

以下は、システムで実行されているFirefoxのスクリーンショットです。

enter image description here

Debianを実行しているという事実にもかかわらず、インストールされているのはFirefoxのUbuntuバージョンです。

サブユーザーのイメージを他のユーザーと共有して、すべての人がアプリケーションをサンドボックス化する負担を軽減できます。 Firefoxイメージを共有する場合は、my-subuser-imagesにcdして、そのフォルダーをgitリポジトリーに変換できます。

$ cd ~/my-subuser-images
$ git init
$ git add .
$ git commit -m "Add Firefox image"

次に、このgitリポジトリをどこかにプッシュすると、他のユーザーが次のコマンドでFirefoxイメージを簡単にインストールできます。

$ subuser subuser add firefox firefox@http://example.com/student/my-subuser-images.git

ローカルでセットアップを行った場合と同じ方法で、そのサブユーザーを実行します。

6
timthelion

Ubuntuのドキュメントには、SELinuxを使用するXアプリケーション用のサンドボックスコマンドがあります。

http://manpages.ubuntu.com/manpages/precise/man8/sandbox.8.html

SELinuxは、それを使用する上で多くのWebページ、書籍、ツールなどが存在するという点で素晴らしいルートです。それはOSと非常にうまく統合します。これは、それが複雑である理由の1つです。 Tresysは、これらの設定を簡単にするNiceツールを販売しています。

SELinuxのようなものは、オレンジブック時代のコンパートメントモードワークステーションから派生したもので、バニラOSにセキュリティを追加しようとしました。私が知っている最後の生き残った(そして維持された)製品は、Argus Pitbullラインです。これはSolarisだけでしたが、現在はRHELです。これらはSELinuxよりもはるかに包括的ですが、その代償を払うことになります。 VMWareとLinuxを組み合わせたGeneral Dynamics High Assurance Platformもあります。

VMアプローチは使いやすいですが、信頼できるコンピューティングベースでより多くのリソースを消費し、より多くの機能を備えています。そこで行う最善のことは、非常に軽量なディストリビューション(CrunchBangが頭に浮かぶ)を使用することです。ホストとゲスト間でファイルを移動するためのフォルダー共有を許可する場合は、SELinuxまたはSMACK必須コントロールを介してVMを個々のフォルダーに制限できます。

VMオプションをより安全にすることを目的とするQubesOSプロジェクトもあります。それは現在かなり良い形で使いやすいです。

あなたの質問の全体的な問題は、XもUbuntuも相互に信頼できないアプリを安全に分離するように設計されていないことです。何十年にもわたる研究が、多くのプロトタイプ/製品を使用して、UNIXとXでそれを実行することに費やされました。それらを見て、Ubuntuを見て、彼らがそのようなことをしていないことを保証します。 SELinuxのものはそのために少ししか機能せず、仮想マシンのアプローチにはまだ多くの攻撃面があります(VMM、Dom0など)。 Genode、QubesOS、ヨーロッパのPerseusセキュリティアーキテクチャ、OKL4/OKLinuxスイート、およびTUドレスデンのNizzaアーキテクチャは、Linuxとの互換性でこれに対処するために知っている唯一のオープンメソッドです。それらの機能と完全性はかなり異なります。

メインストリームのLinuxを実行している場合、保証されるのを待っている0日があります。オンラインではない別のPCと、KVMスイッチです。そして読み取り専用メディア(CD-Rなど)、一方向ケーブル、またはデータを移動するためのガード。読み取り専用メディアへのバックアップ。可能な場合は読み取り専用メディアからのロード。コンポーネントが安く、適度なパフォーマンスを受け入れる場合、セットアップ全体のコストは1,000ドル未満です。ハイパフォーマンスでは2,000〜3,000ドル。

4
Nick P

このプロジェクトを上記の優れたプロジェクトのリストに追加したいと思います。サーバー、グラフィカルアプリケーション、さらにはユーザーログインセッションなど、あらゆるタイプのプロセスをサンドボックス化できます。

https://l3net.wordpress.com/projects/firejail/

Firejailは、Linuxネームスペースを使用して信頼できないアプリケーションの実行環境を制限することにより、セキュリティ侵害のリスクを軽減するSUIDセキュリティサンドボックスプログラムです。これにより、プロセスとそのすべての子孫が、ネットワークスタック、プロセステーブル、マウントテーブルなどのグローバルに共有されたカーネルリソースの独自のプライベートビューを持つことができます。

1
bensonw