Помещение пользователя в группу Power Users (Опытные пользователи) —
стандартный подход системных администраторов во многих организациях. Такая
политика устраняет все неприятности работы человека под простым пользователем,
но в то же время не дает ему администраторских привилегий и возможности что-либо
испортить. Опытные пользователи могут устанавливать некоторые программы,
изменять время, работать с ActiveX компонентами,
настраивать принтеры — делать многое из того, что обычный пользователь не может.
Однако насколько такая система действительно безопасна? Совсем не безопасна, даже сама Microsoft

признает
, что Опытный пользователь может без труда получить все привилегии.
Каким образом компания естественно не описывает, но это мы и рассмотрим в данной статье.

Прежде чем перейдем к описанию зададим направления поиска. В отсутствии
прямых уязвимостей (типа переполнения буфера) повышение своего статуса возможно
выполнением произвольного кода в контексте более привилегированного аккаунта.
Такими являются Administrators и Local System, от них в частности запускается
ряд служб. Следовательно, если Опытный пользователь сможет изменить файл,
исполняемый одним из этих аккаунтов, например сконфигурировать его на загрузку
нашей DLL или добавить exe-шник
в автоматический запуск этого аккакнту, то мы получим полный доступ к
компьютеру.

Для начала определим к каким файлам имеет доступ Опытный пользователь. Можно
использовать брутфорс — заходить в каждую директорию и смотреть свои права,
однако это довольно непрактично :). Можно использовать встроенную утилиту cacls, но Security Descriptor Description Language
понимать не просто, а для разбора результатов надо писать скрипт. Соответственно,
для моих нужд была написана утилита
AccessChk
ей передается имя аккаунта или группы и путь файловой системы, реестра или
сервиса и она выдает, какие эффективные права имеет аккакунт на этот объект. Для
простоты восприятия прога пишет W в случае если
разрешено модифицирование, R — когда чтение.

Вооружившись инструментом начнем исследование Windows XP SP2.

Найдем объекты в системном каталоге:

accesschk –ws “power users” c:\windows

Это покажет нам все файлы и директории на которые мы имеем права записи.
Очевидно, что в большинство директорий мы можем писать, это корневой каталог
Windows, Windows\System32, Windows\Downloaded Program
Files, однако записью в эти директории прав не поднять. Несмотря на то, что
система дает писать в эти директории, права на изменение системных файлов,
содержащихся в них, предоставлены только пользователям Административной группы и Local System. Исключения — файлы шрифтов, логи, файлы
помощи, картинки и клипы, файлы инсталляции, но изменение этих файлов опять же
желанного успеха нам не принесет. Легким бы путем стало изменение драйверов в
Windows\System32\Drivers, но и этого, естественно, Microsoft
не дает.

В списке доступных был обнаружен ряд dll и
exe файлов, так что я стал исследовать их на возможные
уязвимости. Большинство — интерактивные утилиты или программы, доступны для запуска и под
ограниченными правами. Однако интерес вызвало появление в списке удивительного
файла — ntoskrnl.exe:

Да, Опытный пользователь может заменить ядро операционной системы! Правда,
через 5 секунд после модификации система Windows File Protection (WFP) заменит
его на находящийся в бекапе Windows\System32\Dllcache. Прав на запись в этот
каталог уже нет, так что подменить файл там не получится. Но обойти
WFP все-таки можно! Достаточно написать простую
программу которая заменит файл, сбросит модифицированные данные на диск и тут
же перезагрузит систему, не дав WFP заменить его. Я
попробовал и выяснил — данная фишка работает.

Однако это не дает нам ответа на вопрос как же повысить свою должность в
Windows? Ответ прост — можно использовать дизассемблер
для поиска функции проверки привилегий —

SeSinglePrivilegeCheck
, пропатчить ее так, что бы она всегда возвращала
True. Это будет означать, что пользователь всегда
имеет те привилегии, о которых запрашивает. Таким образом мы получим права на
загрузку драйверов, получение прав владельца, создание токена, с помощью этих
функция можно легко получить админские права. Стоит отметить, что 64-битная
Windows XP препятствует внесению изменений в ядро при помощи системы

PatchGuard
, но к счастью такие системы пока мало распространены.

Замена Ntoksrnl.exe не единственный путь к успеху. Одна из
dll — Schedsvc.dll — так же может быть изменена и она запускается как сервис от имени
Local System. Она нужная для работы шедулера, но ведь
Windows легко может обойтись и без него, не правда ли?
Ну а мы можем заменить dll-ку своей, которая добавляет
нас в группу Администраторов. Конечно, WPF и тут
заменит файл на оригинальный, но как это обойти я уже писал выше.

Итак, два направления уже есть, продолжим наше исследование дальше. Обратим
внимание на директорию Program Files, там такая же ситуация как и в случае
с каталогом Windows — Опытный пользователь может
писать в большинство директорий, однако изменять файлы нельзя, есть несколько
утилит типа Media Player, которые можно запускать.
Но и тут есть файлы, которые запускаются от Local System,
но тем не менее подлежат модификации обычным пользователем — например недавно установленный мной…
Microsoft Windows Defender Beta 2. Заменив его мы получим прямую возможность
записи себя любимого в Админы, тем более что его заменять обратно на оригинал никто не
будет.

Дальше просканируем реестр на потенциальные уязвимости:

accesschk –swk “power users” hklm

Доступ к HKLM\System естественно закрыт, однако открыт, например, HKLM\Software\Microsoft\
Windows\CurrentVersion\Run — это дает нам возможность прописать наш файл в
автозагрузку для всех пользователей, но это не особо хорошо в нашей ситуации,
так как требует захода пользователя с администраторскими привилегиями (если вы
типичный офисный зомби — вызов админа и его заход можно легко симулировать 🙂 ).
Опытный пользователь по умолчанию имеет возможность писать в несистемные ветви
HKLM\Software, однако тут, как и в случае с поиском в Program
Files, надо искать сторонние приложений, которые исполняются с
повышенными привилегиями. В моем случае таких не оказалось.

Ну и остались службы Windows. Программа проверяла
флаги SERVICE_CHANGE_CONFIG и WRITE_DAC — в первом случае пользователь может прописать
свою программу на старт службы, во втором — дать сам себе право
SERVICE_CHANGE_CONFIG. У меня единственной уязвимой службой стала:

Программа
PsService
показала под кем исполняется сервис:

Следовательно, Опытный пользователь может изменить путь на собственный,
перезапустить систему и наслаждаться свободой.

Возможны и другие уязвимые службы. По умолчанию Windows
не дает право записи на службы сторонних производителей, однако они сами
могут прописать себе расширенные права, которые позволят нам поднять привилегии.
Например, уязвимость в моей 64-битной Windows XP позволяет расширить свои
полномочия не только Опытному пользователю, но даже и самом простому:

Ну вот, собственно и все. Мы показали как легко Опытному пользователю
получить Администраторские привилегии. Так что не стоит особо доверять такому
методу ограничения прав — решительно настроенному и знающему человеку это легко
обойти.

Оставить мнение

Check Also

Конкурс хаков: пишем на PowerShell скрипт, который уведомляет о днях рождения пользователей Active Directory

В компаниях часто встречается задача уведомлять сотрудников о приближающихся днях рождения…