Шрифт:
Интервал:
Закладка:
После запуска службы перед вами появится окно Проводника, в адресной строке которого нужно быстро ввести команду %systemroot%system32lusrmgr.msc (лучше просто поместить команду в буфер обмена перед выполнением данного шага взлома).
ПРИМЕЧАНИЕ
Естественно, вы можете ввести и другие команды, например команду %system root%system32cmd.exe, чтобы открыть окно командного процессора с правами системы (или учетной записи, от имени которой запускалась сторонняя служба).
Вы спросите, почему нужно вводить быстро? Все дело в том, что файл Проводника, которым вы заменили файл службы, не предназначен для запуска в качестве службы. Это значит, что он не ответит на запросы оснастки services.msc (хотя, как видите, это не мешает системе запустить файл оболочки). А если служба не отвечает на запросы, то через некоторое время система автоматически завершит такую службу.
Вот и все, теперь перед вами должна отобразиться соответствующая оснастка, которая будет запущена от имени системы (или учетной записи, от которой запускалась изменяемая вами служба). После отображения данной оснастки закройте окно Проводника. Конечно, система может и сама его закрыть по истечении времени ожидания ответа от службы, но лучше все-таки этого не ждать.
Как видите (рис. 14.2), система завершает не отвечающую службу, но не завершает другие процессы, порожденные завершенной службой, поэтому теперь вы можете спокойно редактировать группу, к которой принадлежит ваша учетная запись, либо создавать новую учетную запись администратора.
Рис. 14.2. Система завершила не отвечающую службу, но не завершила другие процессы, порожденные ею, поэтому у вас теперь есть оснастка с правами системы
Системная учетная запись
Как можно заметить из приведенного выше способа взлома, стандартной системной учетной записью можно воспользоваться для получения прав администратора. Это происходит потому, что такая запись имеет в чем-то даже больше прав, чем учетная запись администратора, и, как правило, администраторы компьютера не ограничивают учетную запись системы (а в основном просто не замечают угрозы этой записи). При рассмотрении групповых политик вы узнали, что настройки интерфейса Internet Explorer также записываются в ветвь реестра от имени учетной записи системы (от имени процесса WINLOGON.EXE). Это тоже довольно сложно понять. Если групповые политики может редактировать только администратор, то почему необходимо использовать процесс WINLOGON.EXE? Здесь также, кстати, скрывается возможность взлома — получение прав администратора или изменение любых элементов реестра и файловой системы компьютера с помощью процесса WINLOGON.EXE, запущенного от имени системы. Все дело в возможности импортирования настроек конфигурации браузера, программ на вкладке Программы или настроек ограничений в INF-файлах каталога %systemroot%system32GroupPolicyUserMicrosoftIEAKBRANDING с помощью элемента групповой политики Настройка Internet Explorer. Ведь если добавить в данные INF-файлы свои действия, например редактирование ветвей реестра или добавление/удаление объектов файловой системы, то при следующем доступе к политике Настройка Internet Explorer все добавленные вами строки будут выполнены от имени системы.
Единственным, что по умолчанию делает невозможным выполнение данного метода взлома, является запрет на работу с консолью Групповая политика, а также редактирование импортируемых INF-файлов для пользователей с учетными записями, отличными от группы Администраторы. Именно поэтому категорически запрещено изменять настройки доступа к каталогу %systemroot%system32GroupPolicyUser и его содержимому. Хотя и это только вершина айсберга, ведь неизвестно, как процесс WINLOGON.EXE создает INF-файлы. Может быть, можно подобрать такое значение параметра реестра (который он записывает в INF-файл), которое будет вызывать неправильную запись в INF-файл значения параметра реестра? Например, чтобы на основе значения параметра реестра в INF-файле создавалось не только значение этого параметра, но и новая строка, выполняющая произвольный код? Например, после некоторых экспериментов получилось создать в INF-файле «мусор», то есть произвольный текст после значения параметра, который не обрабатывается. А можно ли как-нибудь записать в одну строчку INF-файла две команды? Или указать в значении параметра реестра какой-либо специальный символ (ведь реестр поддерживает Unicode), который при обработке процессом WINLOGON.EXE или INF-файлом будет интерпретироваться как переход на другую строку? Надеюсь, программисты Microsoft могут с уверенностью ответить отрицательно на все эти вопросы, иначе перед нами очередной потенциальный способ выполнения любых операций с реестром и файловой системой Windows XP от имени системы. Причем этим способом смогут воспользоваться представители не только группы Опытные пользователи, но и группы Пользователи.
Другим интересным вопросом является озвучивание системных событий. Как оказывается, озвучивание события также выполняется процессом WINLOGON.EXE. При этом путь к музыкальному файлу для озвучивания события хранится в ветви реестра, доступной для редактирования любым пользователям. Здесь также возникают вопросы. А нельзя ли вместо озвучивания музыкального файла выполнить какой-нибудь произвольный код? Или вместе с музыкальным файлом? Или, например, указать путь к ярлыку музыкального файла, а этот ярлык, в свою очередь, будет ссылаться на музыкальный файл, доступ к которому вам как пользователю был запрещен. Да здесь, собственно, и ярлык не нужен, как оказывается, так можно прослушать даже тот файл, доступ к которому вам был полностью запрещен, но вы точно знаете, где этот файл находится. Как это сделать? Все музыкальные файлы для озвучивания событий описаны в ветви реестра HKEY_CURRENT_USERAppEventsSchemesApps. Например, параметр (По умолчанию) ветви реестра HKEY_CURRENT_USERAppEventsSchemesApps.DefaultSystemHand. Current определяет путь к файлу, который будет проигрываться процессом WINLOGON.EXE при возникновении критической ошибки. Другими словами, вы можете указать здесь путь к любому музыкальному файлу, а потом, например, просто ввести в диалоге Запуск программы любую строку, не ассоциированную с программой, например символ b. Скорее всего, система не найдет программы с названием b. exe, а значит, произойдет событие критической ошибки и будет воспроизведен необходимый вам файл.
Конечно, прослушивать запрещенные файлы смешно (если только на них не записана конфиденциальная информация), но что, если поискать системную службу, которая откроет для вас любой файл? Или, например, запишет свои данные в файл, путь к которому вы укажете? Например, в файл, доступ к которому вам запрещен, но который вы хотите повредить.
Именно по приведенным выше причинам я и опасаюсь программ и служб, запущенных от имени системы. Ведь даже сама Microsoft говорит о том, что нужно использовать как можно меньше учетных записей с административными правами, но почему-то забывает о системной учетной записи, которая также имеет административные права. А ведь сейчас каждая мало-мальски нужная служба, установленная на компьютере, хочет работать с правами системы, даже если эти права ей совершенно не нужны. При этом неизвестно, насколько эта служба устойчива к взлому. А по теории вероятности, чем больше в системе таких служб, тем больше шансов на взлом такой системы.
Интересна также сама необходимость учетной записи системы с полными правами. Например, зачем службам такие возможности, как изменение ACL объектов или создание учетных записей администраторов? Зачем тому же WINLOGON.EXE такие возможности? Намного безопасней будет создать несколько ограниченных учетных записей системы, выполняющих только определенные задачи, которые могут понадобиться той или иной службе.
Глава 15
INF-файлы
Хотелось бы в этой главе описать некоторые возможности INF-файлов. Здесь не будет полностью рассмотрен язык INF-файлов и способы написания на нем сценариев, но тем не менее попробуем понять, как с помощью INF-файлов можно выполнять копирование и удаление файлов, создание и удаление параметров реестра, а также рассмотрим некоторые интересные возможности INF-файлов.
Основные сведения
INF-файлы предназначены для описания начального процесса установки новой программы или оборудования. Каждый INF-файл должен начинаться с заголовка. Этот заголовок определяет версию INF-файла, а также версию операционной системы, для которой этот INF-файл написан. От версии информационного файла (INF-файла) зависят те возможности, которые он поддерживает. Существует две версии INF-файлов — обычные и расширенные. В главе 1 уже рассматривались способы вызова обычных и расширенных INF-файлов. При этом расширенные INF-файлы поддерживают следующие новые возможности (это не все возможности, только основные): выполнение различных программ до или после выполнения INF-файла, архивирование изменяемых значений параметров реестра, а также вывод сообщений перед выполнением INF-файлов или после него.
- Изучаем Windows Vista. Начали! - Дмитрий Донцов - Программное обеспечение
- Windows Vista - Виталий Леонтьев - Программное обеспечение
- Windows Vista - Сергей Вавилов - Программное обеспечение
- Операционная система UNIX - Андрей Робачевский - Программное обеспечение
- Основы программирования в Linux - Нейл Мэтью - Программное обеспечение
- Photoshop CS2 и цифровая фотография (Самоучитель). Главы 1-9 - Солоницын Юрий - Программное обеспечение