特定のユーザーが特定の特権を持っていることを確認します


16

ユーザーと特権のペアが与えられた場合、ユーザーがサーバーに対する特権を持っているかどうかを判断する必要があります。私のセットアップでは次のことが当てはまります。

  • サーバーはドメインの一部ですが、ドメインコントローラーではありません
  • インフラストラクチャに信頼関係を持つドメインがいくつかあります
  • ユーザー(ローカル、ドメイン、または別のドメイン)は、グループに直接所属するのではなく、ローカルグループに属する他のグループ(ドメインまたはローカル)にいるというメリットにより、ローカルグループに所属できる場合があります。

最後のポイントのシナリオ例:

  • User1はDomainAのグループTeamAに属します
  • DomaimA \ TeamAはDomainB \ SpecialAccessのメンバーです
  • DomainB \ SpecialAccessはDomainB \ DomainAdminsのメンバーです
  • 最後に、DomainB \ DomainAdminsはローカル管理者グループに属します
  • ローカル管理者グループにはSeRemoteInteractiveLogonRight特権があります

入力DomainA \ User1およびSeRemoteInteractiveLogonRightにある場合、はいまたはいいえの回答に到達する必要があります。そのため、マシンでローカルポリシーを開き、興味のある権利に対してどのグループがリストされているかに注意し、サーバーマネージャーに移動してグループメンバーの内容を確認し、これらのグループのグループのメンバーを確認する必要があります等々。

私はそれが簡単になることができるという直感を持っています。AccessChkユーティリティを見つけたとき、私は本当に興奮しました。それは3分間続き、直接関係をリストするだけであるため、グループ内のユーザーはリストされません。

今、私はユーザーがAccessChkが返すグループのいずれかに属しているかどうかを確認できるように、AccessChkからの結果を何らかの方法で組み合わせることができると推測していますが、それは単一のドメインではなく、それらのいくつかですこれにアプローチする方法がわからない。また、AccessChkの出力はグループとユーザーを区別していないようです。

編集:XY問題トラップに陥らないという精神で、IISアプリケーションプールIDとして使用される特定のユーザーアカウントがサーバーグループでSeInteractiveLogonRightまたはSeRemoteInteractiveLogonRight特権を持たないようにする必要があります。IISの部分には問題はありませんが、特権に対してアカウントをチェックする最後のステップは、簡単なチェック方法を見つけるのに苦労しています。これも定期的に行う必要があるため、チェックを自動化したいと思います。


6
これは、仕事のように聞こえます...ポリシーの結果セット(RSoP)!technet.microsoft.com/en-us/library/cc758010%28v=WS.10%29.aspx
Davidw 14

1
@zespri-私の答えはごみで、削除しました。SeInteractiveLogonRightおよびSeRemoteInteractiveLogonRightのユーザー権利は、「通常の」特権とは異なる方法で処理され、それらのレポートには問題があるようです。あなたのための解決策を思いついたら、別の答えを投稿しますが、今のところは何もありません。
エヴァンアンダーソン14

1
@Davidw-RSoPは、ローカルセキュリティポリシーのデフォルトが出力に反映されないという点で問題があります。そのため、「未構成」エントリは「未構成」として表示され、ローカルセキュリティポリシーによってどのプリンシパルに権利が付与されているかは実際にはわかりません。最後に、グループポリシーからプリンシパルのリストを取得した場合でも、OSの機能を複製するためにグループメンバーシップ(潜在的にクロスドメイン)を展開する必要があります。これは実際、私が予想していたよりもはるかに難しい質問であることが判明しました。
エヴァンアンダーソン14

1
@EvanAndersonまさに!私がどれくらいかかるかを見積もるように頼まれたとき、それは簡単な仕事であるように思われました。そして、数日間グーグルでいろいろなことを試してみましたが...何もありません。現在、私の計画は、TokenPrivileges トークン情報クラスでGetTokenInformationを呼び出す ことです。もちろん、最初にトークン自体を取得する方法を理解する必要があります。このルートは現時点で最も有望なようです。
アンドリューサビニク14

@zespri-NtOpenProcessToken()は、おそらくトークンを取得する最良の方法です。(leeholmes.com/blog/2006/07/21/…を見てください
エヴァンアンダーソン14

回答:


1

アクセストークンには、権限に関する情報のみが含まれ、権限に関する情報のみが含まれます。

あなたがする必要があるのはこれです:

  • アプリプールに対応するIISワーカープロセスを見つけます。すべてのプロセスをワーカープロセス名で列挙し、IDを持つプロセスをフィルター処理することで簡単にできるアプリプールIDを知っているためです。複数ある場合は、どれでも使用できます。
  • プロセストークンのTokenPrivilegeではなく、TokenGroup情報クラスでGetTokenInformationを使用します。その結果、IDが属するすべての推移的グループも提供されます。これは間接的なものでさえも意味します。
  • これで、これらのグループをループし、各グループでLsaEnumerateAccountRightsを呼び出して、情報を照合できます。これにより、必要なものが得られます。

上記は、アカウントIDに対応するプロセス(およびトークン)の存在に依存しています。シナリオでは、これは問題になりません。これが問題となるシナリオでは、Token-Groups計算属性の Active Directoryルックアップを試して使用できますこの記事では、これを実現する方法をいくつか紹介します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.