ユーザーが許可しない限り、アプリケーションは他のアプリケーションのデータまたはユーザーのプライベートデータにアクセスできません。これは明らかなニーズではありませんか?しかし、私たちが起動するすべてのプログラムは、$ HOMEディレクトリ、マイク、およびカムへのフルアクセス権を持っています。ほとんどのユーザーは、(たとえば)Skypeが自分のプライベートファイルのどこかに送信を開始したり、マイクからサウンドをストリーミングしたりしても気付かないでしょう。
これを修正する方法を探しています。メソッドがSELinuxポリシー、LSMモジュール、カーネルパッチの記述、別のUNIXのようなOSへの切り替えを示唆している場合でも、自由に提案してください。
ここに私が持っていたいくつかのアイデアと私がそれらを拒否した理由があります:
他のアイデア?既成の解決策を知っていることを教えてください:)
[〜#〜]更新[〜#〜]
私は自分のLSM(SELinuxの代替)の開発を始めました。ここには誰も興味がないようです。しかし、念のため、ここで私を見つけることができます。
https://gitlab.com/mogryph/chariot
またはここ:
私に合った解決策は見つかりませんでした。それで、結局、自分のLSM(Linux Security Module)の開発を始めました。現在、それは開発の初期段階にありますが、私が望んでいたことを(ほぼ)達成することはすでに可能です。基本的な原則は次のとおりです。
ユーザーは最大64個の権限を定義できます。権限は番号で識別されますが、人間が読めるエイリアスもある場合があります。例:
シンプルなユーティリティを使用して、ユーザーは設定するファイルをマークできます。
a)このファイルを読み取るために必要な権限。
b)このファイルを変更するために必要な権限。
c)このファイルの権限may実行された場合に持つ。
例:
[〜#〜]重要[〜#〜]プログラム(プロセス)は、親が持っていないアクセス許可を持つことができません。例:
PID 1(すべてのユーザースペースプロセスの親)は、完全な権限で始まります。その後、すべてのプログラムのアクセス許可は、このプログラムが持っていないアクセス許可を親のアクセス許可から削除することによって決定されます。
デフォルトでは、プログラムには権限がありません。また、ファイルを読み取る/変更するための権限は必要ありません。したがって、LSMを有効にしても何も壊れません。
「インターネットの使用」や「マイクの使用」などのシステム権限を実装する計画もあります。
このような何か...そのようなロジックで重大な違反が見られたら教えてください。
私のPCでは、systemd、agetty、login、bash、xinit、sh、startkde、start_kdeinit_wrapper、start_kdeinit、kdeinit5、konsoleのすべての権限を強制的に与えられました。
これで、KDEメニューまたはkonsoleから起動するプログラムmayは、すべての権限を持ちます。しかし、それらのほとんどはもちろんありません。
ユーザーが許可しない限り、アプリケーションは他のアプリケーションのデータやユーザーのプライベートデータにアクセスできません。 これは明らかなニーズではありませんか?
いいえ、これは明白ではありません。従来、システムにインストールされたソフトウェアは信頼できると見なされていました。つまり、ユーザーがインターネットにアクセスして有害な可能性のあるアプリケーションをダウンロードすることは想定されていませんでした。また、ユーザーが安全でないソフトウェアを実行して、リモートサイトとのやり取りが悪くなり、リモートの攻撃者がローカルデータにアクセスできるようになることも予想されていませんでした。
したがって、UNIX(およびその他のOS)のセキュリティ境界は、アプリケーションではなくユーザーによるものです。実際、アプリケーションの概念すらありません。複雑なアプリケーション(Officeなど)は、実際にはいくつかのバイナリ、ライブラリ、構成ファイルなどで構成されています。
この設計は、多くの使用例、つまりシステムが最初からあまり変更されない場合や、信頼できるソフトウェアのみがインストールされる場合でも有効だと思います。しかし、現在では、ユーザーが信頼できない可能性のあるソースからソフトウェアを実際にインストールしたり、安全でない可能性のあるソフトウェアをインストールしたりして、このソフトウェアがあまり害を及ぼさないことを期待する場合もあります。これらの場合、ユーザーのみをセキュリティ境界として使用するという元のパラダイムでは不十分です。
異なるパラダイムで設計されたOSがあります。つまり、ユーザーが悪意のある可能性のあるアプリケーションをインターネットからダウンロードし、プライベートデータへのアクセスを制限したい場合が一般的です。たとえば、Androidの例では、各アプリケーションは基本的に独自のユーザーとしてインストールされているため、ユーザー境界を使用して、別のアプリケーションによって生成されたデータへのアクセスを制限します(これは動作が少し簡略化されています)。
したがって、デフォルトで信頼されていないアプリケーションを検討する場合は、別のパラダイムで設計されたOSを変更するのではなく、このパラダイムを中心に設計されたOSを最初から実行する方がよいでしょう。ご存じのとおり、信頼されていないアプリケーションの概念を、信頼されたアプリケーションを中心に設計されたシステムに適用しようとすると、扱いにくく不便です。
SELinuxの代わりに AppArmor を参照することをお勧めします。それはあなたが望む振る舞いを提供し、維持するのがより簡単です。ただし、実行したいallプログラムに適したAppArmorプロファイルを定義するのは大変な作業なので、通常は、信頼できない、またはセキュリティの低いプログラム(開発者/発行者がプロファイルを提供していない場合)。
つまり、汎用オペレーティングシステムは、概して、この種のサンドボックス化向けに設計されていません。サンドボックス化は近年、OS機能としてますます人気が高まっていますが、期待どおりに普遍的に実装されていないのには理由があります。簡単に言うと、サンドボックス化は、サンドボックスエンフォーサとサンドボックス内でアプリを正しく機能させる必要のある開発者の両方にとって適切な解決策であり、汎用のOSセキュリティが通常機能していないため、互換性がありません。多くのレガシーコード。
Linuxおよび同様のOSでサンドボックス化する初期のアプローチ chroot
jails がよく使用されますが、それらはまだオプションです(正しく理解することは困難ですが)。ただし、現在、他にも構成可能で脆弱性の低いオプションがあります。 Docker のようなシステムを使用したプロセスの「コンテナー化」により、プロセスをシステムの他の部分から分離するのが比較的簡単になりますが、Docker自体は、あなたが説明するユースケース用に特別に設計されていません。それまたはそのテクノロジーをユーザーの用途に適合させることができる場合があります。
他のOSについては...
jail
コマンドを使用)をサポートします。これはおそらく、サンドボックステクニックでLinuxを使用するのに最も類似しており、実際にほとんどのLinuxソフトウェアを実行し、同じハードウェアの多くをサポートします。