安全手順では、セキュリティ上の欠陥の可能性にバグを減らすために特権を最小限に抑える必要があります。この資料では、特権モジュール、権限と特権を効果的な時間に付与最小限にするための権限を最小限に抑える方法について説明します。
第だけでなく、また、FreeBSDの刑務所()などの比較的新しいメカニズムを説明いくつかのメカニズムの伝統的なUNIXの特権クラスの説明は、Linuxセキュリティモジュール(Linuxセキュリティモジュール、LSM)フレームワーク、およびセキュリティが強化されたLinuxの(SELinux)は。
2003年3月3日、インターネットセキュリティシステムズは、Sendmailに深刻な脆弱性に警告した。メッセージ転送エージェント(メール転送エージェント、MTAを介してすべての電子メール)を転送するために、Sendmailは最も人気のあるMTAがいるので、この警告は多くの組織が世界中の影響を受けます。問題は、通常の設定によると、慎重に電子メールメッセージの"から"、""または"cc"がフィールドに設定され、送信者が(ルート)のいずれかのマシンSendmailを実行しているコントロールを完全なことができます。もっと真剣に、一般的なファイアウォールはマシンの内部でそのような攻撃に対して保護されません。
この抜け穴の直接の原因は、Sendmailがセキュリティ上の欠陥の検出を持っているため、バッファオーバーフローが発生することができます。頻繁にシングル"setuidされたルートとしてインストールしかし、ファクタで重要な役割は、Sendmailのは"プログラムは、システム上でそれを実行にフルコントロールのアクセス許可を持つ。すべての人々、システム全体の攻撃者が直接制御できるようにすることができますでこれは、Sendmailの欠陥。
この設計は必要ですか?いいえ、; Wietse VenemaのPostfixはそれはMTAの一致することが一般的です。 Sendmailのと同様に、Postfixは、しかし、注文の権限を最小限に抑えるための安全は多くのテストを行います、Postfixはモジュールのセットとして設計された。結果は、Postfixは一般的にSendmailのプログラムよりも安全と考えられる。この資料では、権限を最小限に抑える方法について説明します、あなたのプログラムに同じ考え方を適用することができます。
最小特権の基礎
手続きの実用的なアプリケーションでは、欠点があります。私たちは本当にそれがしたいが、本当にそれがあります。複雑なニーズに、スケジュールの圧力や環境の変化は実用的なので、完璧なプロセスである可能性は低いです。人々でさえ、複雑で高度な技術を正式に正しい手順を証明するために渡されたが、そこに欠陥がされます。はなぜ?1つの理由の検証では、仮定の数を実行する必要が頻繁にこれらの仮定はまったく正しいことです。いずれにせよ、さまざまな理由で、手順のほとんどは厳格なテストをされていなかった。また、今日もない欠陥が(そう)、変化の将来のメンテナンス、または変更環境の欠陥を導入する可能性が高いです。したがって、実用的な問題に対処する、我々は、我々のプログラムの欠陥にもかかわらず、いくつかの方法のセキュリティの手順を開発する必要があります。
これらの欠点にもかかわらず、セキュリティプログラムが最も重要な方法は、特権を最小限に抑えることです。特権は誰もが行うことができますことはできません。 "root"ユーザは、他のユーザーまたは権限のグループのメンバを持つクラスのUNIXシステムでは、特権の最も一般的なタイプです。一部のシステムでは、許可の読み取り、または特定のファイルへの書き込み権限を許可します。しかし、いずれにせよ、権限を最小限に抑える:
プログラムの一部だけが特権を必要とする許可と権限
その部分だけは絶対に特定の権限を付与する必要がある
効果的な時間の権限や効果的に絶対的な最小時間に制限することができます
実際には、目標、絶対ではない。お使いのオペレーティングシステムまたは仮想マシンなどの組織(の基礎)は、より厳格な欠陥を導入しようとするの完成に至るこれらの、またはこれらは非常に複雑になる可能性があります厳密な完成容易ではないの厳しい完了することができる。しかし、近づいて、これらの目標は、欠陥の可能性からセキュリティレベルが低いにつながる。欠陥がセキュリティ上の問題にも低くなる可能性が率いるセキュリティ上の問題があった場合でも。あなたはそのプログラムのほんの一部は、特定の権限を持つようにできるかどうかそして、あなたは攻撃に耐えることができる部分を確保するために余分な時間の多くを使用できます。このアイデアは新しいものです。Saltzerとシュレーダーの優れた1975本稿では、明示的に最小特権の原則として安全性の原則を議論(参考文献を参照)。いくつかのアイデアは時代を超越した、このような特権を最小限に抑えるようです。
次の3つのセクションでは、順番に、どのようにそのクラスのUNIXシステムを実現するなど、これらの目標を説明します。その後、私たちは、NSAのセキュリティ強化のLinux(SELinux)は討論を含めいくつかの特別なメカニズム利用で、FreeBSDやLinuxを説明します。
最小特権モジュール
前述したように、プログラムのみの特権の一部にのみ特権適用されます。つまり、あなたのプログラムを設計するときに、別の部分に分割処理するために、特定の権限のニーズだけ小さく、独立した部分を作ることです。
別の部分が実行される必要がある場合、そのUNIXベースのシステムプロセス(いないスレッド)を使用します。スレッドは、共有のセキュリティ権限を、問題のスレッドは他のすべてのスレッドのプロセスを妨げることがあります。他のプログラムでの準備の特権の部分は、それが攻撃されてとして:1日になります!確認だけのものは、特権の一部を行うにはできるだけ少なく、限られた機能は以下に使用される可能性が高いということです。
一般的なアプローチは非常に限られた機能を作成することがsetuidまたはsetgid)コマンドラインツールなどの特定の権限を(しています。 UNIXのpasswdコマンドの例であり、特定の特権のコマンドラインツールのパスワードを(rootにsetuid)を変更するためですが、それは行うことができますパスワードを変更します。だから、実際の変更を行うためのGUIツールのさまざまな要求することができますpasswdを使います。可能であれば、完全にsetuidまたはsetgidプログラムを作成しないようにしようとすると、それは難しいことは、本当にすべての入力を保護するためです。ただし、場合によっては、その必要に応じて、可能な限り処理するためにはsetuid / setgidプログラムを作成する必要が最も制限最小。
他の多くの方法があります。たとえば、あなたが"プロセスの小さな"サーバー(サーバー)の特別な権限を持つことができます。サーバーができる唯一の特定の要求だけ、その要求は、要求を発行する許可されて確認した。もう1つの一般的なアプローチは、プログラムの権限を使用して起動すると、プログラムがしてほとんどの作業を行うことで、プロセス2番目のプロセスのすべての権限を放棄する派生。
どのようにこれらのモジュールは互いに通信注意してください。それは秘密のプロセスには良い方法の間でデータを送信しないので、多くのUNIXベースのシステムでは、コマンド行の値と環境が他のユーザーが見ることができます。パイプラインは、主務できるが、慎重に)2つの端/レスポンスプロトコル主務できる単純な要求を更新することができますデッドロック(避けるために。
最小特権が付与さ
いる場合のみ、権限プロシージャを - かに付与するここで停止必要を確認します。 UNIXの主な方法は、特権を得るためにそれらは、ユーザーまたはグループとして実行する。通常、プロセスは、ユーザとグループとしては、"setuidされた"実行するか、"使用するsetgidの"プログラムは、プログラムのユーザーまたはグループの権限を持ってされます。
悲しいことに、あるプログラムにいくつかの非自発的な方法"をrootにsetuid"UNIXベースのシステム開発者の権限です。彼らは手続きの詳細なアカウントを行っていないため、開発者は、自分たちが"簡単になるために何かを作る"明確な必要性に特別な権限だと思います。不具合はすぐにセキュリティ惨事になることができますので、これらのプログラムのほとんどは、クラスのUNIXシステムでは、ほぼすべてを行うには、行われるため、この問題は、です。
しないという理由だけで、簡単なタスクを完了するために可能なすべての権限を与える必要があります。手順は、彼らが必要な特権を与えられるべきである。することができます場合は、それらを実行するため、setuidの使用する - setgidの権限未満はsetgidをする。を作成し、特定のユーザーとグループ()は、ルートを使用しないとそれらを使用するお客様のニーズに応じて。それらは、ルート実行可能ファイルによって中古ルートのみで記述するためには、他の人がそれらを変更できないように。ファイルのアクセス許可は非常に厳しい設定 - 絶対に必要でない場合は、誰もが読むことができる、またはファイルを書き込み、させてください、これらの特定のユーザーおよびグループを使用します。可能なすべてのこれらのゲームの説明の例"トップ10"標準的な方法の得点があります。多くの手順は、"setgidのゲーム"は、唯一のゲームプログラムは、"トップ10"を見ると、ドキュメントのマスターグループに格納されて得点を変更することができますようにゲーム(とているだけでこのグループに書き込むことができます)。場合でも、攻撃者が攻撃し、ゲームプログラムを入力、すべての彼は、ドキュメントのスコアを変更はないかと思うことができます。いずれにせよ、ゲーム開発者が自分のプログラムを悪意のあるスコアファイルを防ぐために記述する必要があります。
chrootは()システムコールに便利なツール - は残念なことに、いくつかの使用が困難です。このプロセスビューのファイルシステムの"root"は、このシステムコールは、コンテンツを参照してプロセスを変更します。あなたはそれを使用する場合 - 、それが役に立つかもしれません - いくつかの時間をかけて準備ができて、それを十分に活用するためにする。正確なアプリケーションは、プラットフォームとアプリケーションの特性に依存するため複雑です慎重に準備する必要があります"新しいルート"。は、rootに、chroot()呼び出し、あなたはすぐにchroot環境から非ルート(rootユーザのステータスを変更する必要がので、もしそれが有効にされる必要があります場合は、)権限を解除する必要があります。また、chrootはネットワークへのアクセスは変更されません。これはシステムコールのことができ、すべての時にはそれを考慮する必要がありますが努力も準備行う。
限られた資源資源のプロセスを含む両方のストレージリソースが含まれてしばしば忘れられがちなツールです。サービス攻撃のこれらの制限の拒否は、特に便利です:
ストレージのためには、各ユーザまたはグループごとにマウントされたファイルシステムまたは番号格納域のクォータを(制限ファイルの)設定できます。 GNU / Linuxのシステムでは、(1)、quotactlにもかかわらず、UNIXシステムのクラスのほとんどを使用することはできません割当制度を含む(2)とquotaon(この機能は8)に深い理解しかし、クォータを参照してください。 GNU / Linuxと他の多くのシステムでは、あなたが"ハード"の限界を超え(決して)と"ソフト"の限界(一時的な過剰することができます)を設定することができます。
プロセスは、次のような多くの制限を設定することができます開いているファイルの数は、プロセスの数、およびように。この機能は、実際には標準(1台のUNIX仕様(のような単一のUNIX仕様))、それらすべてのクラスのUNIXシステムはほぼユビキタスで、理解することの一部はgetrlimit(2)参照、でsetrlimit(2)及び、getrusage(さ2)、sysconf(3)とulimit(1)。プロセスは、"現在の行を"超えることはできませんが、それらはすべての方法を現在の"キャップに上昇すると制限することができます。"残念ながら、異常的な問題では、混乱する可能性があります。 "現在の行は"また、"ソフト"の境界、制限、また、"ハード"の境界として知られている。このように、あなたは異常な状況になると、プロセスはソフト(現在の)制限のプロセスの限界を超えることはできません - あなたは、ソフトクォータの制限を超えることができます。私はこの法律において"ソフト"および"no混乱をハード")ので、そこにあるはずこの法律において"現在の行"と"キャップ"(使用しないで使用してプロセスを制限するために提案する。
最小化時の特権
しかし、場合にのみ特権を提供するために必要な - 瞬間を与えていない。
可能な限り、あなたの即時の必要性、特権をクリックし、永久に放棄に関係なく使用します。いったんは完全にし、それ以外は特権を使用することはできません攻撃を放棄している。たとえば、個々のroot権限の必要性は、起動することが(たとえば、手順をrootにsetuidルートを通じて)とし、以下の特権を持つユーザーで実行するために切り替えます。これは、Apache Webサーバーなど、インターネットサーバーの数()メソッドを使用します。クラスのUNIXシステムで任意のプログラムが0到1024のTCP / IPポートを開くことがありません。あなたは、root権限が必要です。権限は不要した後、しかし、ほとんどのサーバーは、ポートのみの起動時間を開くには、必要があります。 1つの方法は、rootとして実行するために、できるだけ早く特権ポートを必要と開いて、次に完全にプロセスを含むroot権限を削除します(任意の特権グループ)に属します。他のすべての継承された権限を削除しようとして、たとえば、できるだけ早くシャットダウンしてファイルを開こうとする特定の権限が必要です。
あなたは永久に権限を与えることができない場合は、することができます特権の少なくとも一時的に削除をできるだけ頻繁に。攻撃者はプログラムを制御できるため、場合、これは恒久的に権限を削除するよりは、攻撃者は、再度有効にすることができます特権と、それを使用します。それにもかかわらず、それが何の価値がある。
多くの攻撃時だけがプログラムの外、いくつかのことを行うプログラムの権限が成功するために(たとえば、有効になって、シンボリックリンクの異常とハードリンクを作成すること)の手順を欺くの権限を持って。プログラムは通常、このプログラムをより困難にされるのを活用したい、攻撃者がその権限を有効にしていない場合。
比較的新しいメカニズム
これまでのところ、我々は実際にはほとんどすべてのオペレーティングシステムに適用すると、原則を議論し、19世紀に、70年代以降、ほぼすべてのUNIXシステムのクラスの従来のメカニズムに似ています。つまり、彼らは役に立たないわけではない、そして時間のテストは、単純な自分の利点があります。しかし、UNIXシステムのいくつかの比較的新しいクラスは、最小特権メカニズムをサポートするために増加している、それは知っている価値がある。それは時の試練のメカニズムを見つけるのは簡単ですが、しかし、情報がまだ知られていないため、比較的新しいメカニズム。そこで、ここで私はいくつかの貴重なメカニズムを選択:FreeBSDのjailを()について説明しますは、Linuxセキュリティモジュール(LSM)フレームワークとセキュリティが強化されたLinuxの(SELinux)は。
FreeBSDの刑務所()
chrootは()システムコール、前述のように多くの問題があります。たとえば、それが難しい使用を修正する場合、rootユーザーはまだから学ぶことができますが、それはネットワークアクセスを制御しません。 FreeBSDの開発者は新しいシステムコールを、これらの問題を解決するために追加することを決めた、新しいシステムは刑務所()が呼び出さを呼び出します。この呼び出しは、chrootが()に似ていますが、より使用して効率的に使いやすくしてください。刑務所では、すべての要求は(もrootの)、刑務所に限定され、刑務所のプロセスで唯一の他のプロセスと通信することができますし、システム刑務所に典型的なの方法をrootユーザをブロックしようと。刑務所には、独自のアドレスとして、他のアドレスを使用することはできません特定のIPアドレスが割り当てられます。
刑務所()呼び出しはFreeBSDのは、その有用性を制限するに固有です。ただし、すべてのOSSは/ FSは)カーネル(クロス受粉の影響との間のクロスオーバーがたくさんある。例えば、Linuxのセキュリティフレームワークを使用して刑務所のLinuxバージョン用に開発されています。また、FreeBSDは5プロジェクトTrustedBSDから柔軟なMACフレーム()、モジュールSELinuxのと同様の基本的な機能を含む追加されました。すべては、将来的に驚くことはありませんこのような状況の詳細を表示します。
Linuxセキュリティモジュール(LSM)
2001 Linuxカーネルサミットでは、Linus Torvaldsは問題があります。セキュリティ強化のLinux(SELinux)は、プロジェクトを含むさまざまなセキュリティ上のプロジェクトの数は、彼を求めて、Linuxカーネルへのセキュリティメソッドを追加します。この問題は、これらのさまざまな方法はしばしば互換性です。 Torvalds氏は簡単にどちらが最善かを決定することですので、彼は一緒に一般的なLinuxのセキュリティフレームワークを作成するこれらのプロジェクトを要請した。したがって、管理者は、彼らには、セキュリティを任意の特別なインストール方法を与えることができます。 Torvalds氏、いくつかの議論の後、Crispin Cowan氏は、グループ共通のセキュリティフレームワークを作成するために設定します。このフレームワークは、Linuxセキュリティモジュール(LSM)フレームワークという名前ですが、今標準のLinuxカーネルの一部(カーネルのバージョン2.6など)です。
概念的には、LSMはフレームワークは、特に簡単です。 Linuxカーネルは、まだそのルーチンの安全検査を行っている、例えば、あなたがファイルを書き込む場合は、まだへの書き込みアクセスする必要があるの。
ただし、必要に応じてLinuxカーネルは、アクセスがどうかがチェックされるべき決定するために - "本"を実施するためのセキュリティモジュールを要求するが - を決定できるようになりますかどうか許可アクション。この方法では、管理者は、単に彼がセキュリティモジュールを使用し、他のLinuxカーネルと同じモジュールを挿入したい選択できます。その後、セキュリティモジュールがどのような許可されて決定されます。
LSMはフレームワークは、それはセキュリティポリシーのさまざまな種類を実現できる柔軟な設計。実際には、さまざまなプロジェクトの数が一緒に実際の作業の十分な有能なLSMはフレームワークを確保するため。例については、ときに内部オブジェクトが作成されるか、それらの操作が中断される可能性がありますので、時の呼び出しの数にLSMは - しない削除さが、セキュリティモジュールに重要なデータを追跡することができます。そのLSMのフレームワークは、ターゲット分岐のすべての重要な異常を見逃すことがないように、さまざまな分析ツールの数を使用します。その結果、プロジェクトよりも多くの人が難しいと思うし、その成功は難しいウォンであることを示す。
LSMは、基本的な設計上の決定を理解する必要がありますした。基本的には、LSMはフレームワークは、ほとんどすべての支店のために設計された限定的な例外、(権威信頼できない)です。ブランチは、信頼性の異常絶対最終決定を下す:例外は枝、要求が許可されるべきである場合、それは無条件に許可されます。一方、唯一の他の制限の異常枝の信頼性を高めることができます、それは新しい権利を付与することはできません。理論的には、すべての枝が信頼異常LSMはしている場合、LSMはフレームワークより柔軟になります。 1つは()例外分岐可能な信頼と呼ばれる - がためだけは、POSIX正規の容量をサポートしなければならなかった。ただし、文字はすべての異常枝を行うことができます、それはLinuxカーネルに必要な、多くの根本的な変化は、変更が受け入れられるように許可されていないという。
多くの人がいる場合に異常枝のほとんどは、ほんのわずかな欠陥が災害になる信じることができる恐れ、および例外分岐は、限られた手段のユーザーが(いずれにせよ、オリジナルのUNIXのアクセス許可がまだ動作不思議ではないことです聞かせて) 。 LSMはフレームワークので、メソッドを制限したい開発者は、その開発者はフレームワーク内で動作できると確信しほとんど。
他の制限を理解するためのLSMのフレームワークも重要です。 LSMはフレームワークは、アクセス制御、監査およびその他のセキュリティ問題をサポートするようにされていませんです。彼らはすべてを見ることができないため、LSMはすべての要求やその結果を記録しない場合は、モジュール自体。理由の1つは、カーネルが要求を拒否LSMのモジュールを呼び出すことができないので、この拒否問題になる監査したい場合はなぜですか?。また、パフォーマンス上の理由のために、いくつかのネットワーク異常とLSMのデータフィールドの提案枝のカーネルのスレッドによって使用されません。それが、この場合、"ラベル"ネットワークのデータストリーム(サポートするために十分ではないネットワークへのアクセス数を制御することができます、別のデータパケットは)別のセキュリティラベルをオペレーティングシステムによって処理さている。これらの制限は不適切な、一般的な考え方の基本原則と矛盾している。LSMはフレームワークは、1日の希望これらの制限を取り除くために拡張されました。
これらの制限であってもそれにもかかわらず、LSMはフレームワークを追加することはまだ非常に便利です権限を制限する。基本的なLSMはフレームワークからターゲットにTorvalds氏が実装されて:"私は別のセキュリティグループの間の闘争のように私はそれが間接的には、アウト、この闘争の私を聞かせて、その市場は、決定に苦労することを望んでの戦略と達成するために適用される究極の。"
Linuxを制限したい場合には、あなたのプログラムの権限を付与すると、完全に独自のセキュリティモジュールを作成することができます。あなたはそうする必要があります実際の外部制約を使用する場合 - 幸いにもこれが可能です。しかし、これは非常に重要です。いずれにせよ、あなたはまだカーネルのコードを記述する必要があります。可能であれば、あなたは、既存のLinuxのセキュリティモジュールを使用する最良のではなく、独自のセキュリティモジュールを作成してください。いくつかの可能LSMのモジュールは、しかし、セキュリティが強化されたLinuxの(SELinux)は最も成熟した1つのLinuxのセキュリティモジュールなので、私たちはこのモジュールを調べてみましょうです。
セキュリティ強化のLinux(SELinux)は歴史
少し歴史はあなたが理解するのに役立ちますセキュリティ強化のLinux(SELinux)は - 、それ自体が楽しいの歴史です。米国家安全保障局(国家安全保障局、NSA)が長い、ほとんどのオペレーティングシステムでは、限られた容量のセキュリティと懸念されています。結局のところ、それらの1つは、米国防総省が無限の攻撃に直面してセキュリティを維持するためにコンピュータを使用することを確認することです。 NSAは、WindowsおよびほとんどのUNIXおよびLinuxシステムを含むオペレーティングシステムのセキュリティメカニズムのほとんどは、唯一の"選択的アクセス制御(随意アクセス制御)"(DAC)のメカニズムを実現見つかりました。 DACシステムは、ユーザのIDと文書でオブジェクトプログラム行うことができますの所有者を決定するためにプログラムを実行することです。ため、DACは、それ自体脆弱性や悪意のあるプログラムNSAは、これが深刻な問題である、保護の障害が発生したと思うされます。代わりに、NSAは長い間、オペレーティングシステムはまた、"強制アクセス制御(強制アクセス制御をサポートすることができます)"機構(MAC)期待されている。
のMACメカニズムは、システム管理者は、システム全体のセキュリティのpolicies定義することが、この戦略は、userの役割は、programの信頼と期待される使用などas他の要因に基づいてすることができることは、プログラムは、プログラムをlimitするデータの種類を、などを使用willできますどのような物事を行うには。ユーザーは簡単には"秘密のことができます後に小規模な例では、MACを(秘密)"にデータ"非(未分類)"データ機密。しかし、MACは、実際にはこれ以上多くを行うことができます。
NSAは長年のオペレーティングシステムは、プロバイダと、されているが、MACの統合の最大の市場シェアプロバイダの多く来るのは興味がないです。 MACは通常また、"別の製品"ではなく、従来の製品として使用することは統合もプロバイダ。古いMACは、十分な柔軟性ではない曇りだ。
MACおよびより柔軟かつ簡単にしようとNSAは電力のためのオペレーティングシステムに含まれる。彼らはマッハのオペレーティングシステムを使用し、彼らのアイデアのプロトタイプを開発し、後の作業を主導拡大"オペレーティングシステムフルーク"の。
しかし、人々は、これらのアイデアは"本当の"オペレーティングシステムを、すべてのこれらの小さな"おもちゃクラス"の研究プロジェクトに基づいているため、適用できる説得することは困難です。非常にプロトタイプ外の実際のアプリケーションでどのように動作するようにこれらのアイデアを試してみることができるいくつかの。 NSAは、これらのアイデアを追加するタイトルのプロバイダを納得させることができず、NSAは権利はない独自のオペレーティングシステムを変更する必要があった。これは新しい問題ではない。年前に、DARPAは、独自のオペレーティングシステムを強制的にしようと、研究者は、オペレーティングシステムのWindowsを使用するが、多くの問題が発生した(下記参照を参照してください)。
そのため、NSAは思考全体を振り返って来たのは明らかだ:おもちゃを使用して、オープンソースのオペレーティングシステムではなく、その(1)、(2)それが仕事(特定を介して動作することを示す、セキュリティのアイデアを実装するすべてのソースコード)です。彼らは支配的な市場を、オープンソースのカーネル(Linux)を選んだは自分たちの考え"セキュリティが強化されたLinux"の(SELinux)は実現。当然のことながら、NSAの研究者のためにそれらのおもちゃで扱うことができる対処することはできません実際のシステム(Linux)を使用します。たとえば、Linuxベースのシステムのほとんどすべての部分が動的にリンクされているので、("エントリポイントでそれらにアクセスする"との綿密な分析の手順を実行する方法についていくつかの研究をしなければならなかった""ドキュメントのアクセス許可を実行するより情報)。これは、はるかに効果的な方法です。以前の人より多くを使用するよりも、SELinuxのプロトタイプを使用している人。
SELinuxは動作するように
そこで、SELinuxはSELinuxのメソッドは、実際非常に一般的?のために働く。各ファイルシステムオブジェクトなどの各オブジェクトの重要なコア、および各プロセスは彼らの"セキュリティコンテキスト(セキュリティコンテキスト)"に相関している。セキュリティコンテキストは、軍事安全保障のレベルに基づいてすることができます(もし機密しないと、機密性の高い機密性)、ユーザロール、上のアプリケーション(これは、Webサーバーベースの独自のセキュリティコンテキストを持つことがベース)、または多くのother要素。ときは、別のプログラムを実行すると、プロセスはセキュリティコンテキストを変更できます。も、手順に応じて、場合でも、ユーザーはすべてのプロシージャで始まる特定のプログラムを異なるセキュリティコンテキストで実行することができますそれを呼び出します。
その後、システム管理者は権限がセキュリティコンテキストを作成するために付与さを指定できますが"セキュリティポリシー(セキュリティポリシー)"。システムコール時に、SELinuxのかどうかを必要なすべての権限が付与されているかを確認する - とれていない場合に発生します、それは要求を拒否した。
たとえば、ファイルを作成し、現在のプロセスのセキュリティコンテキストは、"検索(検索のセキュリティコンテキストの親ディレクトリに)"、および"add_name"権限でなければならず、それは()"を作成する(のセキュリティコンテキストでファイルを作成する必要が)"権限を作成します。同様に、ファイルシステムとそのファイルのセキュリティコンテキストの権限が必要"(関連)"(したがって、たとえば関連、"機密性の高い"文書を書くことができません"ディスク"には自信)。また、ソケット、ネットワークインタフェース、ホストおよびネットワークアクセス制御のポートです。場合はそれらの人は、その要求はSELinuxで許可されるすべての許可された権限ですのセキュリティポリシー。それ以外の場合、それらは禁止されます。あなたが一歩一歩すべてのこれらのチェックでそれを行う場合は遅くなりますが、そこに長年の研究に基づいて、多くの最適化プログラム()は非常に迅速に確認しています。
検査では通常のUNIXのアクセス許可ビットクラスのシステムから独立していた。SELinuxのシステムでは、入力する必要が両方の標準的なUNIXのアクセス許可を、そこにSELinuxのアクセス許可は何かをする。しかし、SELinuxのチェックは、クラスの伝統的なUNIXのアクセス許可の多くを行うことができますを達成することは困難です。
SELinuxを使用して、簡単にファイルを書き込むに特定のプログラムのみと特定のWebサーバーのコンテキストでのみrunできますを作成することができます。さらに興味深いのは、攻撃者がWebサーバーを獲得する場合、rootになりますが、攻撃者がシステム全体の制御を与えられません - 良いセキュリティポリシーである場合。
は難しいされています:SELinuxのために効果的には、SELinuxのセキュリティポリシーの実装の背後に十分な理由を持っている必要があります。ほとんどのユーザーは、初期の戦略を変更する実用的な簡単にする必要があります。数年前、私は、SELinuxを体験して始めた。その時、初期の戦略はまだ熟していないが、多くの問題があります。たとえば、当時の私は初期のサンプルポリシーは、システムが)最後に私がパッチを、この問題に対処するために提出ハードウェアクロックを更新(許可していませんが前。初期のセキュリティポリシーの設計製品カテゴリに似て良い、NSAは、ビジネスコミュニティで行うには、期待してこれを行うにしております。 Red Hatは、Debianの開発者の数は、Gentooなど、基本的なSELinuxのフレームワークを使用している最初のセキュリティポリシーが作成されている、ユーザーはすぐに使用を開始するようにします。実際、Red Hatは、その動作のすべてのユーザーの両方にFedora CoreのSELinuxの、計画とセキュリティポリシーを変更するいくつかの一般的なオプションを選択することができます非専門ユーザを有効にするシンプルなツールを提供します。が可能なのGentoo SELinuxのLiveCDをされます。最小化、これらのグループは、簡単に権限を処理するために、多くのコードなしになる。
ここでは、元の位置にあります。 SELinuxの場合にのみ、プログラムの実行は、その能力(プロセスの一部ではないのプロセスを制御する安全な通信を可能にする)が発生します。したがって、完全にSELinuxの可能性を悪用するには、アプリケーションのプロセスと手順を分解する必要が独立して、わずかのコンポーネントが特権を与えられる - 状況は、セキュリティ手順を開発どのようZaimoあなたSELinuxをそれは正確です。ツールのようなSELinuxが良いと権限を与え、制御するので、より強力な防御を作成するが、あなたはまだ小さいコンポーネントに人を再生を制御できるようにあなたのprogramを分割する必要なのことができます最大の効果。
結論
最小セキュリティ上の問題は、特権の最も重要な防衛である。欠陥が不可避であるように、大幅に欠陥の可能性を低減したいがセキュリティ上の問題につながる。しかし、少なくとも1つのセキュリティプログラムは、コードの一部の安全性に関連する必要がありますので、他のすべての権限の費用を最小限に抑えることができません。場合でもいくつかこれらのセキュリティの部分の後に関与するか、人々を正しいする必要があります最小限に抑えます。右側には、一般的な間違いを避けるために必要があります。