Показать сообщение отдельно
Старый 09.01.2005, 01:24   #1
Пользователь
 
Аватар для SEARCHER
 
Регистрация: 02.08.2004
Адрес: iNTERNET
Сообщений: 141
Репутация: 220
Exclamation Ручное удаление аккаунта Администратора в Windows NT/2k/XP/2k3

Все нижеследующее – это статья, которую я написал некоторое время назад после тестирования и исследований с помощью VMware. Это позволило получить ответы на некоторые имевшиеся у меня вопросы и стало полезным, по крайней мере, в одном случае: Я разместил статью на своем сайте и получил определенное количество хитов от Google по вариациям «hack administrator XP».
Перед тем, как начать, я обязан отметить, что редактирование реестра Windows в подавляющем большинстве случаев вещь небезопасная и шаги, описанные в статье – откровенный риск. Microsoft точно не поможет вам, если вы полезете в реестр, даже если вы будете руководствоваться одной из статей их базы знаний. Если вы его (реестр) испоганите, то у вас есть все шансы привести систему в полностью неработоспособное состояние (мне ли этого не знать – добрая часть моих попыток закончилась именно так). Даже если вы воспроизведете все шаги абсолютно точно, все равно остается риск получить испорченную систему после удаления всех администраторских аккаунтов. Вначале прочитайте всю статью целиком, а затем, если вы все еще в этом заинтересованы, попробуйте поработать с тестовой машиной до тех пор, пока не убедитесь, что точно поняли, что и зачем вы делаете. Дальше решайте сами. Поймите, пожалуйста, что это не эксплойт для получения больших привилегий или что-то в этом роде. За исключением одного варианта, о котором я расскажу в конце статьи, для проведения необходимых действий вы уже должны иметь права администратора.
Но перед тем, как перейти к делу - еще одно длинное вступление
Несколько лет назад я оказался в ситуации, когда возникла проблема с действительно хорошо защищенной машиной – где требования безопасности стоят выше других возможностей (как, например, возможность постоянного доступа к машине и тому подобное). Заключалась она в том, что было необходимо удалить или отключить встроенный в NT аккаунт Администратора. Это проблема, поскольку NT не предоставляет какого-либо штатного способа сотворить такую вещь.
Я провел довольно много времени, работая с SAM (Security Accounts Manager – кусок базы данных реестра Windows, содержащий информацию, касающуюся безопасности пользователей) и в результате понял, как он контролирует доступ к своим группам. Я использовал этот подход, так как NT назначает привилегии не индивидуально, а основываясь на членстве в группе (именно так: если вы создадите новый пользовательский аккаунт и поместите его в локальную группу Администраторов, он будет так же эффективен, как и встроенный администраторский аккаунт).
Исходя из этих соображений, я решил, что простейший способ достичь своей цели – это не пытаться удалить аккаунт Администратора, а просто убрать его из локальной группы Администраторов, тем самым, лишив его привилегий. Вооруженный пониманием того, как NT управляет группами в SAM, я удалил встроенный администраторский аккаунт из группы Администраторов.
Вуаля! Я получил встроенный аккаунт Администратора, который теперь даже не мог залогиниться на сервер/рабочую станцию/куда либо еще. По сути, он не входил ни в одну группу и таким образом не имел совершенно никаких прав, что даже меньше, чем возможности Guest.

пояснение проблем и технических деталей

Убедитесь, что сервис планирования задач (Task Scheduler) запущен под LocalSystem-аккаунтом и что он может взаимодействовать с Рабочим столом. Затем откройте консоль (cmd) и дайте команду:

at <некоторая_точка_в_ближайшем_будущем> /interactive cmd

Это запустит cmd.exe в контексте безопасности аккаунта LocalSystem. Это очень привлекательно, так как процессы LocalSystem в Windows работают в ring0, или пространстве ядра. Используйте это для запуска regedit.exe (так проще отслеживать происходящее, чем при использовании regedt32.exe). Найдите ключ HKLMSAMSAMDomainsBuiltinAliases00000220.
Там содержится единственное значение типа REG_BINARY, помеченное как C. Войдите в режим редактирования (кстати говоря, каждый номер в ссылках Aliases относится к одной из локальных групп системы, 00000220 – это локальная группа Администраторов). В строке 0028 пятый байт данных (каждая строка должна содержать восемь байт данных в hex) представляет собой простую контрольную сумму, в которой записано (в hex) сколько байт данных в конце записи содержат SID’ы пользователей (скоро я объясню подробнее).
Когда вы добавляете и удаляете пользователей обычным способом, система добавляет или убирает 28-байтовый блок данных в конце бинарной записи в этом ключе. Таким образом, содержащиеся в этих байтах данные всегда будут произведением 28, что в hex будет выглядеть как 1C, 38, 54 и так далее (или 00, если в группе Администраторов никого нет ;-).
В строке 0030 первый байт данных содержит количество находящихся в данный момент в группе пользователей. Или, говоря другими словами, если вы разделите число, представленное в пятом байте строки 0028 на 28 (десятичное), вы получите число пользователей в группе и это число должно быть в первом байте строки 0030. Я уверен, что вы уловили суть, но для закрепления дам несколько примеров:
Если в локальной группе Администраторов один пользователь, тогда пятый байт строки 0028 должен содержать 1C, а первый байт строки 0030 должен быть 01.
Если в локальной группе Администраторов пять человек, тогда пятый байт строки 0028 должен быть 8C, и первый байт строки 0030 должен содержать 05.
В итоге, в конце бинарных данных (возможно от пятого байта строки 0168) находится начало записи SID’ов (Security Identifiers) всех членов группы (там находятся 28-байтные блоки данных, которые добавляются и удаляются, когда добавляются и удаляются пользователи – и это два первых элемента, на которые я ссылался). Они все начинаются с 12-байтного блока данных, который выглядит как:

01 05 00 00 00 00 00 05 15 00 00 00

за которым следует 16 байт данных, в которых записан актуальный уникальный SID. Получение SID тривиально, есть куча разных способов. Я буду иметь дело только с аккаунтами локальной машины (поскольку они-то мне и интересны). Для того чтобы найти SID аккаунта на локальной машине, прокрутите до HKLMSAMSAMDomainsAccountUsers. Там находятся нумерованные ключи, содержащие данные о каждом локальном пользователе. Ключ встроенного администраторского аккаунта – 000001F4. Вы можете получить перекрестную ссылку на то, какие номера к которым аккаунтам относятся, обратившись к HKLMSAMSAMDomainsAccountUsersNames<вставьте_здесь_ имя_пользователя >. Значение по умолчанию в этом ключе будет 0x<что-нибудь>. И это есть номер ключа в HKLMSAMSAMDomainsAccountUsers, который содержит сведения о них и SID.
Другими словами, чтобы найти SID локального Администратора, идите к HKLMSAMSAMDomainsAccountUsersNamesAdministrator, значение по умолчанию в этом ключе – 0x1f4, следовательно, ключ, содержащий данные о встроенном Администраторе находятся в HKLMSAMSAMDomainsAccountUsers000001F4.
Как только вы нашли правильный ключ для пользователя, которого вы хотите добавить/удалить, сделайте двойной щелчок на значении REG_BINARY, обозначенном как V и прокрутите данные примерно до середины. После небольшой тренировки вы сможете отловить последовательность:

01 05 00 00 00 00 00 05 15 00 00 00

После нее следуют 16 байт данных, содержащих уникальный SID.
Наконец, используем всю эту информацию для осуществления «хака».
Для добавления пользователя: вы можете просто скопировать и вставить все 28 байт данных SID’а пользователя в конец значения C в HKLMSAMSAMDomainsBuiltinAliases00000220. Затем поправьте контрольную сумму и значение счетчика (в строках 0028 и 0030) с 28 (+1C в hex) и 1 соответственно, и вы добавили пользователя в группу Администраторов.
Для удаления пользователя (даже встроенного Администратора): просто вырежьте 28 байт данных, которые относятся к пользователю в конце значения C в HKLMSAMSAMDomainsBuiltinAliases00000220. Затем поправьте контрольную сумму и значение счетчика (в строках 0028 и 0030) с 28 (+1C в hex) и 1 соответственно, и вы удалили пользователя из группы Администраторов.
__________________
SEARCHER вне форума
 
Вверх
 
Время генерации страницы 0.08447 секунды с 9 запросами