web-dev-qa-db-ja.com

Active Directoryで実際に「ディレクトリ変更の複製」が付与する権限は何ですか?

Active Directoryへのディレクトリの変更の複製にサービスIDを付与する必要があります。サービスIDが誤ってActive Directoryにデータを書き込んだり、誰かがサービスIDを悪用してActive Directoryデータを変更したりする可能性があることを懸念しています。

誰かが「ディレクトリの変更を複製する」の一部にどんな権利があるか知っていますか?

6
Jim

http://support.Microsoft.com/kb/303972

注いずれかの方法を使用して、フォレスト内の各ドメインにディレクトリ変更のレプリケート権限を設定すると、Active Directoryフォレスト内のドメイン内のオブジェクトを検出できるようになります。ただし、接続されたディレクトリの検出を有効にしても、他の操作を実行できることを意味するものではありません。

管理者以外のアカウントを使用してActive Directory内でオブジェクトを作成、変更、および削除するには、必要に応じて追加のアクセス許可を追加する必要がある場合があります。たとえば、Microsoftメタディレクトリサービス(MMS)が組織単位(OU)またはコンテナーに新しいユーザーオブジェクトを作成する場合、ディレクトリの変更のレプリケートアクセス許可がないため、使用されているアカウントには、すべての子オブジェクトの作成アクセス許可を明示的に付与する必要があります。オブジェクトの作成を可能にするのに十分です。

同様に、オブジェクトの削除には、すべての子オブジェクトの削除権限が必要です。

問題のオブジェクトに割り当てられている特定のセキュリティ設定、および継承が重要かどうかによっては、属性フローなどの他の操作に制限がある可能性があります。

2
mfinni

既存の答えは私の好奇心を満たしませんでした、そして私は人々が私のディレクトリから必要以上のものを得ることを望んでいませんでした。そこで、もう少し掘り下げました。

ここに主な情報:

http://support.Microsoft.com/kb/891995

内訳:

プログラムのデータベースをAD(sharepoint/FIMなど)と同期させる場合は、最後のクエリ以降に何が変更されたかをADに問い合わせる方法が2つあります。

"DirSync"コントロール(LDAPプロトコル拡張)[〜#〜]または[〜#〜]を使用して、ちょっとゲットーしてuSNChangedポーリングを使用できますが、そこに制限があります。

「DirSyncコントロール検索は、オブジェクトに設定されている権限に関係なく、Active Directoryオブジェクトに加えられたすべての変更を返します。」トゥームストーンオブジェクトも返します。

したがって、DirSync LDAPコントロールを使用するには、「ディレクトリの変更をレプリケートする」か、ドメイン管理者である必要があります。

私が収集できたことから、恐ろしいのは、標準のアクセス許可に関係なく、ディレクトリパーティション内のほぼすべての読み取りことができることです。それらは何も変更できません

ただし、ディレクトリに感覚的な属性がある場合があります。

DirSyncコントロール拡張機能の詳細はこちら:

https://msdn.Microsoft.com/en-us/library/ms677626(v = vs.85).aspx

真のテスト:DirSyncコントロールを使用してADに接続する

そして、ここにあなたがあなた自身のために見つけるための真の方法があります。この男は男です。自分で確認したい場合は、このPowerShellの例を適用して、権限を付与したユーザーとして実行し、ユーザーオブジェクト(またはその他)に対してクエリを実行します。

http://dloder.blogspot.com/2012/01/powershell-dirsync-sample.html

Sharepointアカウントを確認して、何が得られるかを確認しました。許可を与える前に、DirSyncコントロールを使用しようとすると、アクセス拒否の例外が発生しました。

私がやったら、ユーザーアカウントのほとんどすべてを取り戻しました。

ユーザークエリで返された注目すべきセキュリティ関連の属性は、昇格されたアクセス許可がないと通常は表示できないと確信しています。

  • ユーザーアカウント制御
  • ユーザーパラメータ
  • msexchuseraccountcontrol
  • pwdlastset
  • unicodePwd(空白。ハッシュされたドメインpwは返されません)
  • ロックアウト時間
  • アカウントの有効期限
  • unixuserpassword(YIKES。これを使用している場合-it[〜#〜] is [〜#〜]表示されますがハッシュ化されています。偏執狂の場合やUNIXパスワード同期のサービスを使用している場合は、こちらをお読みください。)

また、bitlocker回復パスワードが添付されているコンピューターアカウントをチェックアウトしましたが、返された結果にはその属性はありませんでした。

環境にServices for Unixがあり、pwを同期したことがある場合は、ここにデータが残っている可能性があります。長い間使用されてきたユーザーの1人が、これを自分のアカウントに設定しました。このpwをクラックすると、バリエーションを試すだけで現在のパスワードにつながる可能性があります。

これは環境から削除されたため、新しいユーザーにはここにデータがありませんでした。

8
Matt

実際、「ディレクトリの変更の複製」権限はDCPROMO権限を付与しません。また、この権限を使用して、ユーザーのパスワードのハッシュ値を取り戻すこともできません。

ユーザーのパスワードハッシュにアクセスするには、「ディレクトリの変更の複製All」を付与する必要があります。詳細については https://social.technet.Microsoft.com/Forums/windowsserver/en-US/cc72be66-30c4-420e-8de3-9085858037bc/difference-between-replicating-directory-changes-replicating- d

2
Martin Rublik

この権利の最大の乱用リスク(IMO)は、DCPROMOを偽装するために使用できることです。このアクセス許可を使用して、ハッシュされたパスワードの値を取り戻すことができるようです。これは、あらゆる種類の攻撃からほんの少しの距離です。

Dsinternals.comでのディレクトリの変更の複製権限のいくつかの誤用を示す本当に良い例があります:

https://www.dsinternals.com/en/retrieving-active-directory-passwords-remotely/

0
ClarkMichaelA
0
karim

誰かに役立つ場合は、参照されているスクリプトを書き直して、現在のマシンが存在するドメイン以外の別のドメインをクエリします。

Add-Type -AssemblyName System.DirectoryServices.Protocols

#defaults
$RootDSE = [ADSI]"LDAP://RootDSE"
$dcHostName = $RootDSE.dnsHostName
$distinguishedName = $RootDSE.defaultNamingContext

#or use the lines below for another DC on another domain
$dcHostName = "dc1.contoso.local"
$distinguishedName = (Get-ADDomain "contoso.local").DistinguishedName

$LDAPConnection = New-Object System.DirectoryServices.Protocols.LDAPConnection($dcHostName) 
$Request = New-Object System.DirectoryServices.Protocols.SearchRequest($distinguishedName, "(objectclass=*)", "Subtree", $null) 
$DirSyncRC = New-Object System.DirectoryServices.Protocols.DirSyncRequestControl($Cookie, [System.DirectoryServices.Protocols.DirectorySynchronizationOptions]::IncrementalValues, [System.Int32]::MaxValue) 
$Request.Controls.Add($DirSyncRC) | Out-Null 

$MoreData = $true

while ($MoreData) {

    $Response = $LDAPConnection.SendRequest($Request)

    $Response.Entries | ForEach-Object { 
        write-Host $_.distinguishedName 
    }

    ForEach ($Control in $Response.Controls) { 
        If ($Control.GetType().Name -eq "DirSyncResponseControl") { 
            $Cookie = $Control.Cookie 
            $MoreData = $Control.MoreData 
        } 
    } 
    $DirSyncRC.Cookie = $Cookie 
}
0
Hilton Giesenow