web-dev-qa-db-ja.com

信頼できないソフトウェアを通常のユーザーとして実行することの危険性は何ですか

信頼できない適切なソフトウェアを使用する必要がある場合や、ソースとしてコンパイルされているかどうかわからない、事前にコンパイルされたオープンソースのソフトウェアを使用する必要がある場合もあります。

/ opt/softwareに適切なアプリケーションをインストールし、通常のユーザー(Sudo、gksudoなどなし)として実行するとします。

  • プログラムを実行すると、インターネットへの接続、Xの監視、キーストローク、ユーザーデータの収集などができることを知っています。
  • システムで重要なものを変更したり、システムに感染したりすることはできません(Linuxアクセス許可システムのため)。
  • プログラムがユーザーのブラウザにプラグイン/拡張機能を追加することが可能です(ブラウザのプロファイルはユーザーのホームディレクトリで利用できるため)。
  • プログラムを閉じて再起動すると、それ以上何もできなくなります。 間違った理由:
    • プログラムは、自動起動プロセスを実行するシェル/ファイル/ディレクトリに自分自身を追加できるため、どのログインでも実行されます。
  • 自動起動プロセスがクリーンであると考えると、再起動せずにプログラムのプロセスがまだアクティブである可能性があります。
  • プログラムは、ユーザーのホームディレクトリ内のファイル(またはユーザーが書き込み権限を持っている他のファイル)を削除または変更できます。

それで私たちは何をすべきか?

  • 適切なプログラムを実行する唯一の安全な方法は、別のユーザーとしてそれを実行することだと思います。
  • どういうわけか別のユーザーとしてプログラムを実行できない場合は、自動起動ファイルの権限を変更して、rootだけがファイルを変更できるようにする必要があります。その後、プログラムを閉じた後、再起動してください。

私は正しいですか?私が見逃しているものはありますか?

6
Ravexina

信頼できないソフトウェアを新しいユーザーとして実行することは良いスタートですが、それだけでは十分ではないかもしれません。

  • 機密性が高いと思われるファイルやデバイスの多くは、誰でも読み取り可能です。非特権ユーザーであっても、システムから多くの情報を抽出できます(通常は/etcから始めます)。

  • 独自のものを適切に構成していない可能性があります。たとえば、この「super-secret-passwords.txt」ファイルが誰からも読み取れないことを絶対に確認しましたか?そして、自分自身またはrootとして実行されているこのバグのある古いソフトウェアについてはどうですか?ディスクに敏感なものを書き込んでいないのですか?

  • nobodyとして実行されているコードは、インターネットにアクセスしてタスクをダウンロードし、システムでコードを実行できます。

  • プロセス間通信に使用されるローカルシステム上のソケット(UNIXドメインソケット)が適切に保護されていない場合があり(正当な理由がある場合もあります)、すべてのプロセスがそのシステムに対して読み取りと書き込みを行うことができます。

実際には、できることがいくつかあります。

起動時にプログラムが何も起動しないことを完全に確認できます。面倒なので、システムをよく理解する必要があります。サービスを自動的に開始する方法はたくさんあります。 (注:プログラムがrootとして実行された場合、initシステムを変更してそれ自体を非表示にする可能性があるため、すべての賭けは無効になります)

ひどいソフトウェアを実行するためのヒント

  1. 実行しないでください。
    まったく回避できる場合は、信頼できないものは実行しないでください。少なくとも、あなたが健全なトレードオフをしていることを確認してください。複雑さはセキュリティの敵です。安全であることが保証されている唯一のコード行は、実行したことのない行です。 :)
  2. プログラムを仮想マシンで実行します。
    VMの設定は非常に簡単です(仮想化インフラストラクチャを設定したくない場合は、VirtualBoxが最適です)。つまり、機密データを含まないマシンを用意し(そこに置く必要があります)、使用するリソースを制御できます。もちろん、これでは完全な保護は提供されません(Webサーバーに要求を殺到したり、Telnet経由で電球にログインしたりするなどの可能性があります)。
  3. プログラムをコンテナで実行します。
    コンテナ(LXD、Docker)は、ローカルマシンでコードを実行するためのsomeセキュリティを提供します。彼らは完璧ではありません。ただし、非特権コンテナは、プログラムにファイルシステムの分離を提供します。コンテナを適切に保護することは芸術であり科学ですが、急速に容易になっています。
  4. 誰かにプログラムを実行してもらいます。
    これは質問にわずかに関連していますが、サードパーティのサービスを使用することで、古くてひどいソフトウェアや、複雑で適切に保護するのが難しいソフトウェアの実行を回避できる場合があります。メールはこの良い例です。私は自分のメールサーバーをホストして維持するための忍耐と時間があるとは信じていません。このようなものを安全に保つのは大変な作業です。
  5. 別のユーザーとして実行します。
    最後の手段として、そしてトレードオフが価値があると思われる場合は、その目的のために特別に作成された新しいユーザーアカウントでプログラムを実行します。信頼できるソフトウェアでこれを行います。

オプション1が最適です。 :)

一般的なアドバイス

  • あなたのOSはかなり安全です。もちろん完全に安全ではありませんが、Ubuntuはかなり良い実績があります。あなたがそれにインストールする他のソフトウェアはそれほど良くないかもしれません。したがって、多くの分離された孤立したマシンでソフトウェアを実行します。これは、1つのプログラムのバグが、潜在的により機密性の高い別のプログラムが悪用可能になることを意味しないことを保証します。
  • ウェブにアクセスします。今日、ほとんどのエンドユーザーソフトウェアには、Web上にある優れた代替手段があります。私のマシンでは、ほとんどChromeとEmacsを実行しています。それだけです。Webサービスを使用することには、もちろんそれ自体がセキュリティ上の影響があります。
  • クラウドに移動します(サーバーソフトウェアの場合)。自分のメールサーバーを実行する必要がありますか? Webサーバー?データベース?クラウドにアクセスして、他の誰かに面倒なセキュリティのことをすべてやってもらいましょう。
5
Stefano Palazzo