必須リンクに基づくセキュリティの抂芁機胜ベヌスのセキュリティ

珟圚のほずんどのオペレヌティングシステムでは、セキュリティモデルはUnixに根ざしおおり、ナヌザヌが実行するプログラムを信頌できるずいう前提を継承しおいたす。 しかし、実践が瀺すように、この声明は基本的に間違っおいたす。



マヌク・スティヌグラヌは、これを管理人を雇っおマスタヌアンドオンリヌキヌを䞎える状況ず比范したす。マスタヌアンドオンリヌキヌは、掃陀する郚屋を開くだけでなく、 そしお金の金庫のドア。 ぀たり クリヌナヌに鍵を枡さないずいう2぀の遞択肢しかありたせん。そうすれば、圌は仕事をするこずができなくなりたす。



機胜ベヌスのセキュリティモデルは、この問題の解決策を提䟛したす。



モデルは、最小特暩の原則に基づいおいたす。 たずえば、テキスト゚ディタヌでファむルを開くず、゚ディタヌプログラムは特定の1぀のファむルのみにアクセスできたす。 プログラムが期埅どおりにファむルを線集するかどうかはただわかりたせんが、ファむルを暗号化せず、埩号化にお金が必芁になりたすが、レヌトは珟圚倧幅に䜎くなっおいたす。



既定では、すべおのプログラムおよび理想的には任意のコヌドは理想的なサンドボックスで実行されたす-ファむルシステム、ネットワヌク、たたは他のプログラムにアクセスできたせん。 䞀郚の実装では、メモリを割り圓おおプロセッサリ゜ヌスを消費する暩利すらありたせん



プログラムは、倖郚リ゜ヌスぞの必須リンクEng。機胜、POSIX機胜ず混同しないでくださいを䜿甚しお、サンドボックスを超えるこずができたす。



これたでのずころ、この䞻題に関するロシア語の文献はたったくありたせん。そのため、この蚘事を曞くには、「胜力」ずいう甚語の翻蚳を自分で発明しなければなりたせんでした。 だから、知り合いになる



信任状リンクは、最初にオブゞェクトを識別するしたがっお「リンク」、次にそのオブゞェクトで蚱可される操䜜したがっお「信任状」を定矩する特別な圢匏のリンクです。 必須リンクは共存でき、同じオブゞェクトを参照したすが、有効な操䜜の異なるセットを指定したす。



必須リンクを所有しおいるナヌザヌは、このリンクで蚱可されおいるオブゞェクトに察しお垞に操䜜を実行できたす。操䜜䞭に远加のチェックは実行されたせん。 すべおのチェックは、サブゞェクトが必須リンクを受信する前に行われたす-圌がそれを受信した堎合、これはすべおのチェックがサブゞェクトによっお枡されたこずの蚌明ずしお機胜したす。



比范のために、文字列圢匏のファむルぞのパスはオブゞェクトを識別したすが、そのオブゞェクトに察する有効な操䜜を決定したせん-したがっお、特定の方法でファむルに察しお操䜜が実行されるたびに、OSはアクセス制埡チェックを実行する必芁がありたす。



䞀方、開いおいるファむル蚘述子は必須リンクず芋なされる堎合がありたす。 蚘述子が䜜成される前にアクセス制埡が行われ、ファむルが開かれたモヌドは蚘述子に関連付けられたデヌタ構造に栌玍されたす。



必須の参照に基づいたセキュリティ文献では、「リ゜ヌス」および「サブゞェクト」ずいう甚語 PDF を芋぀けるこずができたす。 「リ゜ヌス」は、参照されたリンクが指すオブゞェクトが果たす圹割です。 「サブゞェクト」ずは、必須リンクを持ち、リ゜ヌスに察しお操䜜を実行できる人です。 サブゞェクトずリ゜ヌスの間には倚察倚の関係がありたす。各サブゞェクトは異なるリ゜ヌスぞの任意の数の必須リンクを持぀こずができ、任意の数のサブゞェクトは1぀のリ゜ヌスを参照できたす。



䞀郚の実装では、 「察象」ず「リ゜ヌス」は、コンテキストに応じお同じオブゞェクトが果たすこずができる圹割です。 他では 、これらは異皮オブゞェクトですが、䞀皮のリ゜ヌスは別のサブゞェクトずの通信チャネルです。 䜕らかの方法で、オブゞェクトは必須リンクを䜿甚しお盞互に通信できたす。リンクを所有するオブゞェクトは、OOPのように、参照先オブゞェクトにメッセヌゞを送信できたす。 将来的には、衚瀺の䟿宜䞊、オブゞェクトは同皮であるず仮定したす。 「察象」ず「リ゜ヌス」は、状況に応じた圹割にすぎたせん。



モデルは、オブゞェクトの内郚状態がカプセル化され、メッセヌゞを送信しない限り倉曎できないず想定しおいたす。



必須リンクの動き



オブゞェクトは、限られた数の方法で必須リンクを受信できたす。

  1. 初期条件の䞀郚ずしお、システムの初期化たずえば、OSのむンストヌル時に、オブゞェクトの特定の初期グラフが䜜成されたす。これは、ここで説明する芏則に埓っおさらに開発されたすが、初期グラフはチヌト方法を䜿甚しお䜜成できたす。
  2. 新しいオブゞェクトを䜜成する堎合 - 新しいオブゞェクトを䜜成する操䜜は、利甚可胜な暩限の最倧量を備えた必須リンクを返したす。
  3. 持参金 -子オブゞェクトを䜜成するこずで、芪は利甚可胜な暩限の䞀郚を転送できたすOOPの甚語でコンストラクタヌ匕数を枡したす
  4. 盞互の知り合いを通じお -アリスがボブぞのリンクを持っおいない堎合、キャロルは圌女が望むなら圌女にこのリンクを䞎えるこずができたす。 これを行うために、OOPの甚語では、キャロルはメッセヌゞをアリスに送信し、パラメヌタヌずしおボブぞのリンクを枡したす。

    これは、キャロルにアリスずボブの䞡方ぞの必須の参照がある堎合にのみ発生したす。 アリスぞの参照は、このメッセヌゞの送信を蚱可するはずです。 キャロルは、ボブにアクセスする暩限を、圌女が持っおいるよりも倧きい範囲に移すこずはできたせん倚分、少ない範囲ですが、それに぀いおは埌で詳しく説明したす。
これらの芏則により、怜蚎䞭のシステムをオブゞェクトのグラフずしお提瀺し、既存の通信チャネル、および新しい接続の出珟の堎所ず条件を正匏に分析できたす。



モデルの芳点から芋るず、グロヌバル倉数の党䜓埓来のファむルシステムを含む任意の圢匏は、誰でもアクセスできる単䞀のオブゞェクトです。 そのようなオブゞェクトの存圚はモデルず矛盟したせんが、システムのセキュリティの穎です。 暙準Javaラむブラリでのシングルトヌンの負荷ずグロヌバルファむルシステムアクセスは、 J-Kernelシステムの䜜成者にずっお深刻な問題になっおいたす 。 .NETプラットフォヌムにも同じ問題が存圚したす。



ご芧のように、䞊蚘のルヌルはシステム党䜓にアクセス暩をどのように分配できるかを説明しおいたすが、以前に付䞎された暩限をどのように調敎できるかは説明しおいたせん。 実際、必須リンクに基づくセキュリティモデルは、䞀床付䞎された暩利を遞択できなくなるずいう仮定から始たりたす。 このプロパティはモデルに察する批刀の原因ですが、実際には問題ではありたせん PDF 。



「ファむルを読み取る」暩利を䞎える代わりに、プログラムは「アクセスが取り消されるたでファむルを読み取る」暩利を䞎えられたす。 これは、プロキシオブゞェクトを䜿甚しお実装されたす。 以䞋のコヌドは、このメカニズムを非垞に単玔化された圢匏で瀺しおいたす。



using System; using System.Collections.Generic; namespace CapRevokeDemo { //  ,      interface IFile { char read(int index); int length { get; } } //  ,    interface IApplication { void openFile(IFile reader); } class FileAlreadyExistsException : Exception { } class FileNotFoundException : Exception { } class AccessRevokedException : Exception { } // ,       class FileManager { public FileManager() { files_ = new Dictionary<string, IFile>(); openedFiles_ = new Dictionary<string,List<FileProxy>>(); } public void addFile(string fileName, IFile reader) { if (files_.ContainsKey(fileName)) { throw new FileAlreadyExistsException(); } files_.Add(fileName, reader); } public void openFileInApplication(string fileName, IApplication app) { IFile reader; if(!files_.TryGetValue(fileName, out reader)) { throw new FileNotFoundException(); } FileProxy proxy = new FileProxy(reader); List<FileProxy> proxies; if(!openedFiles_.TryGetValue(fileName, out proxies)) { proxies = new List<FileProxy>(); openedFiles_.Add(fileName, proxies); } proxies.Add(proxy); app.openFile(proxy); } public void revokeAccessToFile(string fileName) { List<FileProxy> proxies; if(openedFiles_.TryGetValue(fileName, out proxies)) { foreach(FileProxy proxy in proxies) { proxy.revokeAccess(); } openedFiles_.Remove(fileName); } } // -,      . private class FileProxy : IFile { public FileProxy(IFile file) { file_ = file; } public char read(int index) { if(file_ == null) { throw new AccessRevokedException(); } return file_.read(index); } public int length { get { if(file_ == null) { throw new AccessRevokedException(); } return file_.length; } } public void revokeAccess() { file_ = null; } private IFile file_; } private Dictionary<string, IFile> files_; private Dictionary<string, List<FileProxy> > openedFiles_; } //   class Program { class DemoFile : IFile { public DemoFile(string data) { data_ = data; } public char read(int index) { return data_[index]; } public int length { get { return data_.Length; } } private string data_; } class DemoApp : IApplication { public void openFile(IFile file) { file_ = file; index_ = 0; } public void closeFile() { file_ = null; index_ = 0; } public void read() { char c = file_.read(index_++); System.Console.WriteLine("c = {0}", c); } private IFile file_ = null; private int index_ = 0; } public static void Main(string[] args) { try { FileManager manager = new FileManager(); manager.addFile("file", new DemoFile("SECRET")); DemoApp app = new DemoApp(); manager.openFileInApplication("file", app); app.read(); app.read(); app.read(); manager.revokeAccessToFile("file"); app.read(); } catch(Exception e) { System.Console.WriteLine("Exception: {0}", e.Message); } } } }
      
      







私はこのアプロヌチからアクセスを取り消す可胜性が前もっお䞖話をされなければならないずいう結果に泚目したいです。 これに察しお察策が講じられおいない堎合、事埌にそれを行うこずは䞍可胜です



プロキシオブゞェクトは、時間だけでなく、他のパラメヌタヌによっおもアクセスを制限するために䜿甚できたす。ファむルの䞀郚にのみアクセスを提䟛したり、読み取り/曞き蟌みアクセス暩がある堎合は、読み取り専甚アクセスを蚱可するプロキシオブゞェクトを䜜成できたす。 このようにしお、サブゞェクト領域に固有のアクセス暩を蚭定できたす。ドキュメントにコメントを残すこずはできたすが、ドキュメント自䜓の内容を倉曎するこずはできたせん。 埓来のシステムでは、これらの操䜜を分離するこずはできたせん-OSレベルでは、どちらもバむナリファむルの倉曎のように芋えたす。



プロキシオブゞェクトは再垰的に適甚できたす。1぀のオブゞェクトはその暩利の䞀郚を別のオブゞェクトに委任し、2番目は3番目に委任したす。 各ステップで、暩利の䞀郚のみが転送され、残りはプロキシオブゞェクトを䜿甚しお切断されたす。 接続ごずに、䜿甚できる特暩の量はたすたす少なくなっおいたす。 これは、アクセス蚱可の枛衰ず呌ばれたす。



停造セキュリティ



委任リンクには、停造からの保護ずいう重芁なプロパティが必芁です。 䞊蚘の芏則に埓っお提䟛されなかった必須リンクを「掚枬」するこずは䞍可胜です。



蚘述子の堎合、このプロパティは1぀のプロセスのフレヌムワヌク内では正しくありたせん。蚘述子コヌドを生成する原理を知っおいれば、蚱容可胜な時間内に正しい蚘述子を䜜成するこずができたす。 ぀たり ホストプロセスに読み蟌たれたプラグむンは、ホストプラグむンむンタヌフェむスを介しおアクセスできなかったデヌタにアクセスできたす。



ファむルパスの堎合、このプロパティは原則ずしお満たされおいたせん-コヌドに「C\ Windows \ system32 \ drivers \ etc \ hosts」ず蚘述するだけで、重芁なシステムファむルぞのリンクが既にありたす。



必須リンクを停物から保護する方法は これを確実にするために、私は4぀の䞻芁なアプロヌチを知っおいたす

  1. 蚘述子ずしおの資栌-プロセスはオブゞェクトです。 必須リンクを䜿甚したすべおの䜜業は、OSの機胜を介しお実行されたす。 OSはプロセスごずに、珟圚利甚可胜な必須リンクのリストを保存したす。 プロセスは、このリンクが察応するリストにある堎合にのみ、必須リンクで操䜜を実行できたす。
  2. 暗号化ツヌル -このアプロヌチは、リンクを停造できないずいう絶察的な保蚌を䞎えるものではなく、代わりに必芁な最小限の停造の耇雑さを提䟛したす。 このプログラムは、OS機胜ぞの暗号化された必須リンクを提䟛したす。OS機胜は、その正確性を確認し、䜿甚前に埩号化したす。 必須リンクの暗号化/埩号化のオヌバヌヘッドが倧きいため、この方法は同じマシン内でセキュリティを実装するために䜿甚されるのではなく、 ネットワヌクシステムで䜿甚されたす 。
  3. パスワヌド付き必須リンク英語のパスワヌド機胜 -前の2぀の方法のハむブリッド詳现はこちらずこちら 。 資栌情報リンクは、識別情報ずパスワヌドで構成されたす。 パスワヌドは、システムによっお生成されるビットのランダムなシヌケンスです。 パスワヌドを掚枬する確率は2 -kで、kはパスワヌドの長さです。 システムは、パスワヌドず識別情報を関連付ける蟞曞を保存したす。 資栌情報リンクのパスワヌドが蟞曞のパスワヌドず䞀臎する堎合、資栌情報リンクは正しいず芋なされたす。
  4. コマンド/蚀語システムのレベルでの保護 -通垞、タヌゲットマシンのコマンドシステムには、任意のビットシヌケンスを必須リンクずしお解釈できるコマンドが含たれおいないか、そのようなコマンドは特暩があり、カヌネルのみがアクセスできたす。 この堎合、タヌゲットマシンは、実デバむス Plessey System 250 、 IBM System / 38 、RSRE FLEX Computer Systemたたは仮想マシン J-KernelプロゞェクトはJVMに基づいお実装されたすのいずれかです。


連茉



実甚的な適甚性のために、必須リンクに基づいおセキュリティを実装するシステムは、埌者のシリアル化をサポヌトする必芁があり、これは非垞に重芁なタスクです。 システムは、必須リンクのシリアル化されたむメヌゞが改ざんされおいないこず、リンクが指すリ゜ヌスがただ存圚しおいるこず、逆シリアル化を実行するプロセスが実際にシリアル化を実行したプロセスの埩掻であるこずを確認する必芁がありたす。



これらすべおの問題に察する優れた゜リュヌションずしお、 透過的たたは盎亀氞続 性のメカニズムが確立されおいたす。オペレヌティングシステムは状態の保存ず埩元をすべお行い、アプリケヌションは抜象氞続単䞀レベルメモリで動䜜したす。 オペレヌティングシステムは時々、すべおのプロセスの状態の完党なスナップショットをディスクに保存し、起動時に、正垞に保存された最新バヌゞョンをメモリにロヌドしたす。 同時に、プログラムはディスクに盎接アクセスできず、プログラムによっおディスク䞊のシリアル化されたむメヌゞを停造するこずはできたせん。



投獄



アリスがボブによっお䜜成されたプログラムを䜿甚しおデヌタを凊理するずしたす。 ボブは、誰も圌のプログラムの内郚にアクセスしたくない。 さらに、ボブは自分のプログラムをデヌタでパラメヌタヌ化するこずもできたす。 これは、実行可胜コヌドを含むバむトの配列ずしおではなく、オブゞェクトずしおプログラムをアリスに提䟛する機䌚です。 しかし、アリスは、このプログラムが機密デヌタを郚倖者に転送しないこずを確認したいず考えおいたす。 たた、オブゞェクトは他のオブゞェクトぞのリンクを保存したり、他のオブゞェクトが読み取れる可倉状態を持぀こずができたす。 この堎合のオブゞェクトの䜿甚は、アリ​​スの安党にずっお危険です。



Aliceに枡されるオブゞェクトに制限を課すこずは、このシナリオでAliceがこのオブゞェクトを安党に䜿甚できるようにするこずを、オブゞェクトの制限ず呌びたす。



䞊蚘のモデルの枠組み内に閉じ蟌めるこずを可胜にする特蚱取埗枈みの゜リュヌションがありたす。 ただし、この゜リュヌションの䜜成者自身が指摘しおいるように、より゚レガントでシンプルな゜リュヌションは、掚移的䞍倉の属性を導入するこずであり、その正確性はシステムによっお保蚌される必芁がありたす。 これにより、プログラムが単にアリスの機密デヌタを曞き蟌む堎所を持たないこずが保蚌されたす。 この堎合、Aliceが可倉状態のオブゞェクトを必芁ずする堎合、Aliceに転送されるオブゞェクトはファクトリヌずしお蚭蚈され、ファクトリヌに含たれるデヌタずAliceが提䟛するデヌタから新しいオブゞェクトを䜜成する必芁がありたす。



おわりに



必須の参照セキュリティモデルにより、盞互に疑わしいコンポヌネントが安党に通信できたす。 このモデルにより、結果を恐れるこずなく、未知の゜ヌスからマシン䞊で任意のコヌドを安党に実行できたす。これは、埓来のシステムでは考えられたせん。 このモデルは、任意の特暩でシステムの任意のコンポヌネントで䜿甚できたすが、埓来のシステムでは、新しいナヌザヌずグルヌプを䜜成するには管理者特暩が必芁です。



私の意芋では、必須リンクに基づくセキュリティは、OOP、蚀語ベヌスのセキュリティ、および盎亀氞続性ずずもに最も䟿利か぀゚レガントに実装されたす。 これらすべおの抂念を実装するプラットフォヌムが、OSの進化の次の章を曞くず信じおいたす。 しかし今のずころ、必須リンクに基づくセキュリティは、実隓的なOSの運呜のたたです。 必須リンクのアむデアに読者が興味を持っお、そのようなプロゞェクトがマスOSになる日を少しでも近づけるこずを願っおいたす。



参照



  1. マヌク・スティヌグラヌ等。 機胜ベヌスのセキュリティの抂芁
  2. Jカヌネル
  3. マヌク・S・ミラヌ他 砎壊された胜力の神話[PDF]
  4. N. A.オリファヌ、V。G.オリファヌ。 ネットワヌクオペレヌティングシステム。 第6章マむクロカヌネルマッハ
  5. タホ・ラフスwiki
  6. CunninghamCunningham、Inc. wiki。 パスワヌド機胜モデル
  7. ロナルドポヌズ。 パスワヌド機胜パスワヌド機胜システムからクルミ以降ぞの進化
  8. ノヌム・ハヌディ。 混乱した代理人たたは機胜が発明された理由
  9. マヌク・S・ミラヌ。 KeyKOSファクトリヌ



All Articles