web-dev-qa-db-ja.com

Linuxで専用ソフトウェアを安全に実行する

夏のプロジェクトとして、私が実行している多くのゲームのようなプロプライエタリソフトウェアが個人ファイルにアクセスできないようにしたいと考えています。サンドボックスをよく調べた結果、chimples = securityのように、chrootのようなものは複雑すぎて使用できないと判断しました。これらのすべてのアプリケーションを実行するユーザーを作成し、このユーザーが含まれていない個人アカウントのグループのメンバーだけがドキュメントにアクセスできることを確認しました。物事は機能しているように見えますが(特に、ビデオグループに追加した後)、セキュリティの問題がまだ残っているかどうかを尋ねるのが賢明だと思いました。

  • アプリケーションはControl-Alt-Fn [1-12]の制御を盗むことができますか?
    • アプリケーションは、他のユーザーが実行している別のxサーバーで何が起こっているかを読み取ることができますか?
  • プロプライエタリソフトウェアの私のアカウントに弱いパスワードがあるかどうかは重要ですか?
  • / home/$ USERフォルダー自体は、自分のグループまたは私以外の誰にも権限を与えないため、そこにあるファイルがどのような権限を持っているかは関係ありません。中のファイル名は読めませんよね?
  • Wineは、脆弱性となるファンキーなシステムレベルのことをしませんか?
  • / tmpディレクトリに脆弱性はありますか?
  • そのアカウントで実行されているアプリケーションが私のドキュメントへのアクセスを取得するために使用できる他の脆弱性はありますか?
  • この種のことについての良い習慣は何ですか?

私はdebianテストを実行しています。何かアドバイスをいただければ幸いです。

10

とにかく、Chrootはセキュリティを提供しません。非常に特定のユースケース用にのみ設計されています。 Debianの不安定なchrootのセキュリティ問題 および chroot "jail"-何であり、どのように使用するのですか? を参照してください。

Xサーバーにアクセスできるアプリケーションは、多くのことを実行できます。同じサーバー上のウィンドウを表示する他のアプリケーションをスヌープできます。キーの押下を記録できます。キーを再バインドできます。それは他のアプリケーションにキープレスを注入することができます。クリップボードにアクセスできます。通常のユーザーとして実行されるアプリケーションを決して実行しないXサーバーで信頼できないアプリケーションを実行する場合、アプリケーションが別のコンソールに切り替える機能を削除できることを除いて、これは問題ではありません。

Wine自体は昇格された特権で実行されません。 Xサーバーは実行します(ルートとして実行されます)。そのため、Xサーバーに脆弱性があれば、失われます。 Xサーバーをrootとして実行しないようにする努力が続けられていますが、これにはコードの一部を最大限の特権レベルで実行されるカーネルドライバーに移動することが含まれます。常にカーネルを信頼する必要があります。

どのアプリケーションも/tmpおよび/var/tmpのファイルにアクセスできます。これが問題になる場合は、これらのディレクトリを独自のファイルに使用しないでください。ユーザーごとの一時ディレクトリを設定するのは非常に簡単です。 libpam-tmpdirパッケージ をインストールします。アプリケーションは、システム上のユーザーのリスト、インストールしたプログラムのリストなど、機密と見なす可能性のある他のデータにもアクセスできます。ディレクトリの下にある読み取り不能な(より正確には、実行権限がない)データアプリケーションはアプリケーションからアクセスできません。

アプリケーションの要求が厳しくない場合(特にグラフィックを多用しない場合)は、仮想マシンの専用OSインストールで実行してください。これは、専用ハードウェアが不足している場合に最も分離されます。その仮想マシンのネットワークアクセスを拒否し、機密データを入れないでください。これにより、プライバシー侵害に対する二重の保護が得られます。

最も安全なアプローチは、仮想マシン(VM)で専用ソフトウェアを実行することです。これはセットアップがかなり簡単で、無料のVM(VirtualBoxなど)を見つけることができます。ただし、ゲームについて言及しているため、これはゲームでは機能しない可能性があります(グラフィックを多用する一部のゲームでは、許容できないパフォーマンスの低下を引き起こす可能性があります)。

もう1つの可能性は、OSの2番目のコピーをハードドライブの別のパーティションにインストールし、独自のアプリケーションを実行したいときに「for-fun」OSで再起動することです。しかし、これはおそらく実際に使用するにはあまりにも面倒です。

3番目の可能性は、ユーザー(非root)アカウントからソフトウェアをインストールできる場合、独自のソフトウェア用に新しいユーザーアカウントを作成し、そのアカウントとしてソフトウェアをインストールして、そのアカウントから実行することです。 Sudoまたは 'ssh -X'を使用する場合は、ログアウトして再度ログインする必要がない場合もあります(ただし、Xプロトコルに根本的な脆弱性があるため、セキュリティが低下する可能性があります)。

4番目の可能性は、SELinuxをサポートするLinuxディストリビューションで実行している場合、SELinuxのサンドボックスプログラムを使用することです。たとえば、 このLinux Foundationの記事 、または Dan Walshのブログ投稿Dan Walshのスライド を参照してください。ただし、これを使用するのが少し面倒な場合があることを警告します。

凝ったものにしたい場合は、 sandboxing.org に他のサンドボックステクノロジーをいくつかリストします。目的のために、 PlashThe Plash wiki も参照)はおそらく最も洗練された成熟したサンドボックスであるため、必要に応じてPlashも試すことができます。

残念ながら、これは簡単なことではありません。 OSがこれをもっと簡単にしてくれることを願っていますが、現時点では少し苦痛だと思います。

7
D.W.