Windowsのアクセス許可に適用される使用時間チェックの問題を緩和するいくつかの方法は何ですか?
例:
単にnotを除いて、最初にエンドユーザーに管理者権限を付与する(明白な解決策)、または特定のエンドユーザーアクションを必要とする他の手段によって、上記のシナリオ(または同様の方法)は何かWindows固有のTOCTTOUの問題)を防ぐことができますか?
Windows(または該当する場合は独自のアプリケーション)を修正します。この例では、Windowsを修正する必要があります。 TOCTOUの脆弱性は、チェックと使用を分離しないことでのみ対処できます。私が見たアプリケーションでのはるかに一般的な例:一時ファイル(はい、人々はまだこれを間違っています)。見たときにファイルが存在しないからといって、それを使用しようとしても存在しないというわけではありません。
この例に固有:Mac OS Xの承認サービスは、ログイン時にユーザーがどのような特権を持っているかをチェックしません。それは、権利を取得できるかどうかを調べます取得時に。適切に設計されたアプリケーションでは、特権コンポーネントが適切な使用時にがあるかどうかを検査するため、TOCTOUの脆弱性のウィンドウは制限されます。それはゼロではありません-権利を取得し、その権利を取り消して、すでに取得したセキュリティコンテキストを特権コンポーネントに渡すことができますが、それには時間制限があります。
それで、あなたはなんとか自分でMicrosoftに就職し、このバグの修正を任されていたとしましょう。ユーザーがログインすると、セッションマネージャーがsecurityContext = GetUserAccountControlsContext();
を実行し、中央データベースからユーザーの権限をコピーすることがわかります(引数の目的でAPIを作成していますが、これはどのように機能するかです)。セッションがそれを参照できるように、ディレクトリサービス。
後で、ユーザー権利を管理するためのコードがIsUserAuthorizedForAction(kMakeUserAdminAction, securityContext);
を呼び出して、自分自身を管理者にするためのUIを有効にする必要があるかどうかを確認します。彼がボタンをクリックすると、MakeUserAdmin(user)
alsoは同じセキュリティコンテキストで同じチェックを呼び出します。
修正は、コンテキストの最初の取得を削除することです。 IsUserAuthorizedForAction(action, context)
のテストを変更して、GetUserAccountControlsContext()
自体を呼び出します。結果はnotでキャッシュされるはずですが、呼び出しのたびに新しく検索される必要があります。これにより、2つの顕著な問題が残ります。
MakeUserAdmin()
が(最新の)セキュリティコンテキストをテストするという事実によって処理されます。実際に必要な権限を取得できない場合は、例外をスローする必要があります。宣言された質問に実際に答えることなく、私はあなたの与えられた例に取り組みたいと思っています。
ユーザーに管理者権限を付与すると、それが完了すると、二度とそれらを取得できなくなります。
あなたが言うように、ユーザーは自分をAdministratorsグループに追加し直すことができます...しかし、実際には、彼が特権を保持している間に、彼が特権を保持していることを確認できる方法は他にもたくさんあります。たとえ完全かつ完全なシステム監査をオンにしたとしても、それを削除するのは難しいでしょう。
たとえば、別のユーザーを作成して、それを管理者に追加できます。
またはアドミニストレーターでパスワードをリセットし、それを有効にします。 (あなたはそれを使わないので、right ??、あなたは決して知らないでしょう...)
または別のグループを作成して非表示にし、管理者のメンバーとして追加します。
または、LOCALSYSTEMとして実行されているWindowsサービスまたはMSTaskなどをセットアップするだけです。
または、ある種のルートキットをインストールします。
もちろん、システム監査は実際には役に立ちません。管理者は一時的にそれを簡単に停止できるからです...
続行することはできますが、私のポイントがすでに証明されているといいのですが... TOC-TOUはではありませんここに問題があります。一時的な管理権限が付与されます(本当に可能です)、またはおそらく一般的に悪意のある管理者(本当に難しい問題)に対処します。
おっしゃったように、エンドユーザーに管理者権限を付与しないでください。彼らがプログラムをインストールできるようにする他のソリューションがあります。
これは、最小特権モデルに従っていないため、メソッドが本質的に安全でない状況の1つです。
Windowsに関する限り、ユーザーがアプリケーションをインストールできるようにするためのより良い方法があります。 Server 2003およびWindows XPでは、グループポリシーソフトウェアインストールポリシーを使用して、ユーザーがホワイトリストからソフトウェアをインストールできるようにすることができます。