web-dev-qa-db-ja.com

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

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

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

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

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

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

簡単にできると直感しています。 AccessChkユーティリティ 3分間続いたので、直接の関係のみがリストされているため、グループ内のユーザーはリストされません。

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

[〜#〜] edit [〜#〜]:XY問題の罠に陥らないという精神で、私が本当にしなければならないことは、サーバーのグループで、IISアプリケーションプールIDとして使用される特定のユーザーアカウントにSeInteractiveLogonRightまたはSeRemoteInteractiveLogonRight特権がないことを確認してください。IIS一部ですが、アカウントを特権と照合する最後のステップは、簡単なチェック方法を見つけるのに苦労しています。また、これは定期的に実行する必要があるため、チェックを自動化したいと思います。

16
Andrew Savinykh

アクセストークンには、権限に関する情報はなく、権限に関する情報のみがあります。

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

  • アプリプールに対応するIISワーカープロセスを見つけます。すべてのプロセスをワーカープロセス名で列挙し、アイデンティティ。複数ある場合は、どれでも使用できます。
  • プロセストークンのTokenPrivilegeではなく、TokenGroup情報クラスでGetTokenInformationを使用します。結果は、IDが属する推移的なグループallを提供します。これは間接的なものでも意味します。
  • これで、これらのグループをループして、各グループで LsaEnumerateAccountRights を呼び出し、情報を照合できます。これはあなたが望むものを与えるでしょう。

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

1
Andrew Savinykh