ПО выгружающая хеши пользователей домена Windows Server 2003/08
Данное ПО получает доступ при помощи легальных API Microsoft к структуре данных Active Directory.
Контроллер домена 2003/08 для хранения учётных данных пользователей использует встрроенные механизмы, имеющее внутреннее название Jet Blue. До 2005 года данная технология была закрытой и использовалась для хранения состояний различного встроенного ПО Microsoft. Данное решение использовалось Microsoft начиная с версий Windows XP 64bit/Win2K, и продолжает использоваться на данный момент в текущих продуктах Microsoft, таких как Active Directory и Exchange 2000. В конце 2005 года Microsoft приняло решение опубликовать Jet Blue, посчитав что данное решение достаточно полезно для сторонних разработчиков и опубликовала данный продукт под новым брэндом "Extensible Storage Engine". Необходимые, для работы с данным решением(ESE), заголовочные файлы и библиотеки располагаются в Windows Server 2003 SP1 Platform SDK. Весь функционал собран в едином бинарном файле esent.dll и доступен данный интерфейс начиная с Win2K.
ESE – это технология индексированного и последовательного доступа: "indexed and sequential access method" (ISAM). Её основное назначение заключается работа с таблицами при использовании индексной и курсорной навигации (indexed or sequential cursor navigation). Предоставлении механизма хранения в режиме пользователя(UserMode), для управления данными, размещёнными в плоском бинарном файле, доступ к которому осуществляется через Win32 API файловой системы.
Как ранее упоминалось весь функционал сосредоточен в одной DLL (esent.dll), которая загружается в адресное пространство клиентского приложения. Прототипы всех функций/сообщеня о ошибках и т.д. расположены в заголовочном файле (esent.h)
Данные учётных записей храняться в базе NTDS.dit пароли учётных записий захешированны по алгоритму LM/NTLM. Для получения более детальной информации нужно искать более надёжные источники. А требуемая информация DN и т.д. располагается в таблице datatable. В столбце
В с вязи с малыми сроками на реализацию проекта, выбор средств разработки и формирование тестового стенда, производилась по линии наименьшего затрата ресурса (ЧЧ - Человеко Часы).
- В качестве тестовой платформы мы возьмём Windows Server 2008 R2.
- В качестве компилятора будем использовать Mingw-w64. Данный компилятор предполагает использование gcc в среде windows. В отличии от стандартного Mingw, данная ветка предлагает полный доступ к функционалу Win32 API включая поддержку ESE(JetBlue).
Для сборки проекта необходимо запустить консоль MinGW - Ярлык "Run terminal". Данный коммандный файлустановит необходимые переменные окружения для сборки. Далее необходимо пройти в корень проекта и запустить make.bat
Перед началом работы с ESE необходимо произвести её инициализацию, которая происходит в несколько этапов:
- Первичная настройка параметров.
- Создание экземпляра движка.
- Настройка параметров сессии.
- Инициализация созданного экземпляра.
На данном этапе мы производим настройку размера страницы для NTDS.dit это будет 8192(0x2000) байт. Для установки параметров воспользуемся JetSetSystemParametr с параметром JET_paramDatabasePageSize и его значением 0x2000
JetCreateInstance создаёт экземпляр Jet движка
Настроим минимально необходимый набор параметров:
- recovery off
- online defragmentation off
- max temporary table is 7
- setup temporary path Для установки параметров соеденения используем JetSetSystemParameter
И для инициализации движка воспользуемся JetInit. После успешного создания сессии Необходимо подключиться к интересующим нас данным которые храняться в файле NTDS.dit Для этого мы будем использовать функции JetAttachDatabase и JetOpenDatabase.
Для работы с БД NTDS.dit необходимо произвести его подключение и в последствии его открытие. JetAttachDatabase и JetOpenDatabase
Интересующая нас информация храниться в таблице datatable Хеши паролей находятся в колонках "ATTk589914" для NT-Хеша и "ATTk589879" для LM. Имя пользователя в колонке "ATTm590045"
Используемые документы: