Сейчас на форуме: jinoweb, bartolomeo, rmn (+5 невидимых) |
eXeL@B —› Программирование —› Перехват запуска процессов с правами администратора |
<< . 1 . 2 . |
Посл.ответ | Сообщение |
|
Создано: 01 сентября 2017 11:38 · Личное сообщение · #1 Всем привет! Хочу перехватить запуск процессов из-под проводника с админскими правами. Перехват решил сначала проверить в ольке. На обычном запуске по двойному щелчку запуск перехватывается нормально - срабатывает бряк на CreateProcess. Но вот странное дело, при запуске через ПКМ->С правами администратора не срабатывает бряк ни на CreateProcess, ни на CreateProcessAsUser, CreateProcessWithLogonW и CreateProcessWithTokenW. Бряки на CreateProcessInternal(A|W), на NtCreateProcess и NtCreateUserProcess также не срабатывает. Как же тогда запускается процесс из проводника? ----- IZ.RU |
|
Создано: 02 сентября 2017 07:10 · Поправил: ClockMan · Личное сообщение · #2 Alchemistry пишет: это драйвер с PsSetCreateProcessNotifyRoutine(Ex) Если антивирус разрешит а то могут и прбить на подходе ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. | Сообщение посчитали полезным: DenCoder |
|
Создано: 02 сентября 2017 09:52 · Личное сообщение · #3 ClockMan Денкодер наверняка пишет добропорядочный софт и наверняка если он будет писать какие-то драйвера у него есть тестовый сертификат и режим с отключенной проверкой подписи? Не говоря уже об отсутствии аверов. Наверняка, но скорее всего нет. Убогие аверы это проблемы кучки криптовщиков с их унылым говном, что вьются вокруг клекра и его самого, вон он с ними воюет, если что у него спрашивайте апходы для виндоус хп. |
|
Создано: 02 сентября 2017 12:27 · Поправил: difexacaw · Личное сообщение · #4 Авер может отслеживать стандартные механизмы инжекта, но не OP. Если какое то переполнение привело к выполнению OP-последовательности, то авер это не детектит и не может. Не смотря на то, что данные загружаются в приложение и выполняются без какого либо его открытия. PsNotify это для инжекта как вы говорите уровня XP, тупо процесс открыл и записал. ----- vx |
|
Создано: 02 сентября 2017 15:16 · Личное сообщение · #5 VT-x пишет: VOLKOFF тьфу параша, ваше ЭТО я дажен читать не собираюсь. Зря ты так, прочитал статейку, кое-какие тонкости узнал и освежил память. Возникла своеобразная идея(не успел прочитать все ответы, может кто уже и излагал подобное), как всё-таки перехватывать создание произвольного процесса, IFEO задействуется, но только для подгрузки верифера в consent.exe, который запускается при запуске процессов с повышенными правами. Наш верифер перехватывает CreateProcessAsUserW и собственно, создание процесса перехвачено. Добавлено спустя 2 минуты Интересно, что подмена родительского процесса уже давно есть, а я как-то проглядел ----- IZ.RU |
|
Создано: 02 сентября 2017 15:22 · Личное сообщение · #6 |
|
Создано: 02 сентября 2017 15:27 · Поправил: DenCoder · Личное сообщение · #7 difexacaw пишет: Получается что тс забыл одну функцию из 3-х Я лишь её забыл упомянуть в списке Добавлено спустя 3 минуты kunix пишет: почему в ProcessMonitor создание процессе выглядело как будто из explorer? Магия имперсонации в системном сервисе? Подмена родителя. В структуре STARTUPINFOEX есть lpAttributeList, в котором можно указать атрибут PROC_THREAD_ATTRIBUTE_PARENT_PROCESS и все мониторы(за исключением может каких-то) будут показывать родителя не реального, а сделавшего запрос на повышение прав. ----- IZ.RU |
|
Создано: 02 сентября 2017 15:31 · Личное сообщение · #8 |
|
Создано: 02 сентября 2017 15:33 · Поправил: DenCoder · Личное сообщение · #9 difexacaw пишет: то логический вывод один - пропущен сервис и lpc тут не причём. Поправлю, что по логике стоило проверить, стоит ли бряк на сервисе, но это ещё не исключает lpc до результата проверки и возможных коррекций. ) Добавлено спустя 4 минуты kunix пишет: А со стеком что? Из какого процесса Process Monitor взял стек? Ну это уже интереснее. Я думаю пока так - consent.exe после получения подтверждения на запуск, изменяет в контексте запросившего треда ESP и дописывает стек, заменяя своим. Добавлено спустя 8 минут Alchemistry пишет: Денкодер наверняка пишет добропорядочный софт Добропорядочный - для отслеживания действий сотрудников Добавлено спустя 25 минут С ALPC было бы интересней разобраться. Но чувствую, что сбор существующих данных + исследования протокола на основе анализа кода затянутся на месяца 3-4, которых пока нет. А ALPC имеет интересные возможности... Добавлено спустя 1 час 17 минут DenCoder пишет: Я думаю пока так - consent.exe после получения подтверждения на запуск, изменяет в контексте запросившего треда ESP и дописывает стек, заменяя своим. Поправочка: Оказалось всё же, CreateProcessAsUser запускает svchost, запустивший consent.exe. Значит всеми изменениями в контексте и памяти процесса, запросившего запуск и сделанного родителем, занимается тогда именно svchost. Но пока не подтвердил Добавлено спустя 2 часа 52 минуты Alchemistry пишет: все остальное будет работать через жопу, ну и видимо писаться также учитывая кто ТС :D Эти слова, скорее тебя не красят, чем меня. Промолчу... ----- IZ.RU |
|
Создано: 02 сентября 2017 19:03 · Поправил: difexacaw · Личное сообщение · #10 DenCoder Я не помню что бы можно было изменить ID родителя. Если это так, то это весьма выгодно для малварки, таки шикарная возможность, так как именно парент и есть ключ к детекту ранпе. Эта инфа не должна изменяться. Тогда в чём проблема, взять км отладчик и посмотреть кто стартует процесс. Или за пять минут собрать юм логгер и ребутнуться, пусть выводит по стартапу лог. > после получения подтверждения на запуск, изменяет в контексте запросившего треда ESP Это ось делать не может в принципе, это инжект. Добавлено спустя 9 минут DenCoder Кстате есть спец логгер родителей, но он запускается при спец опции при загрузке ос. FLG_MAINTAIN_OBJECT_TYPELIST. Наверняка это инфу никто не удалит и она доступна из юм, так что я бы так сделал. Менеджер обектов будет сохранять родителя. ----- vx |
|
Создано: 02 сентября 2017 20:14 · Поправил: DenCoder · Личное сообщение · #11 difexacaw пишет: Я не помню что бы можно было изменить ID родителя. Начиная с висты, в STARTUPINFOEX есть указатель на список аттрибутов. Атрибут PROC_THREAD_ATTRIBUTE_PARENT_PROCESS, устанавливаемый функцией difexacaw пишет: Тогда в чём проблема, взять км отладчик и посмотреть кто стартует процесс Уже нет проблемы, олькой обхошёлся. ) При запуске процесса с админскими правами, explorer посылает по ALPC, что в принципе есть локальный RPC, запрос в службу AppInfo (его dll - AppInfo.dll, с хорошими символами). Опуская подробности RPC, дальше внутри svchost в этой dll, если AiCheckLUA() возвратило ERROR_SUCCESS, и был там получен правильный TokenHandle, вызывается AiLaunchProcess(), в котором и устанавливается хендл процесса-родителя, а также, в зависимости от условий, в атрибут PROC_THREAD_ATTRIBUTE_EXTENDED_FLAGS заносится либо 0, либо 2. В AiCheckLUA() запускается consent.exe, который и выводит окно UAC. Так что варианта 2 отследить - либо подгрузиться в нужный svchost, либо в consent, куда передаётся информация о запускаемом файле. Добавлено спустя 12 минут difexacaw пишет: Это ось делать не может в принципе, это инжект. Да, в AiLaunchProcess() от вызова CreateProcessAsUserW до ResumeThread не заметил ничего подобного...Видимо, колбэк, установленный PsSetCreateProcessNotifyRoutine() определяет правильно стек, но колбэк срабатывает уже после установки ядром родителя. Добавлено спустя 16 минут Но если б так можно было каждому, то гора уязвимостей была б в винде. Вся заморочка в привилегиях и в манипуляциях с токеном. Добавлено спустя 58 минут Другое не менее интересно - в explorer должно бы быть создание процесса через ShellExecuteEx(). Но этого не происходит. Получается, как-то более нативно реализовано? Ещё один момент. В случаях запуска специальным образом созданных exe-шек (regedit.exe, например), ПКМ не нужна, чтоб UAC вылез. И запуск процесса в таких случаях легко отлавливается через CreateProcess(), и тогда, видимо, либо ntdll, либо ядро уже общается с AppInfo. ----- IZ.RU | Сообщение посчитали полезным: difexacaw |
|
Создано: 02 сентября 2017 21:13 · Поправил: difexacaw · Личное сообщение · #12 |
|
Создано: 02 сентября 2017 21:48 · Поправил: DenCoder · Личное сообщение · #13 difexacaw пишет: А с тем фгагом что думаете ? PROC_THREAD_ATTRIBUTE_EXTENDED_FLAGS ? Это ядро надо смотреть Добавлено спустя 1 минуту difexacaw пишет: Вся суть вопроса в наследовании PID. По наследованию сказано: Code:
Хендлы созданных объектов процесс и трэд дублируются в запрашивающий процесс по адресу, который был передан через ALPC. Вот где PID'ы их передаются, не увидел пока. Добавлено спустя 8 минут Видимо, нативная реализация берёт их из хэндлов. ----- IZ.RU |
|
Создано: 03 сентября 2017 02:31 · Личное сообщение · #14 |
|
Создано: 03 сентября 2017 05:50 · Личное сообщение · #15 |
|
Создано: 03 сентября 2017 08:36 · Личное сообщение · #16 |
|
Создано: 03 сентября 2017 22:34 · Поправил: VT-x · Личное сообщение · #17 |
|
Создано: 03 сентября 2017 23:00 · Личное сообщение · #18 DenCoder Загрузочные опции, это маркеры в реестре, которые запускают множество отладочных механизмов при старте ос. По дефолту они сброшены, а установка их желательна только при наличии отладчика, так как иначе ось может пасть на останове в ядре. Маркер который я выше привёл заставляет менеджер обьектов вести подробный лог - для каждого обьекта в системе сохраняется PID родителя. Тогда по описателю может быть найден адрес обьекта, а по адресу обьекта найден родитель. Примерный кодес, только его нужно немного отладить. 72c8_04.09.2017_EXELAB.rU.tgz - ob.rar ----- vx | Сообщение посчитали полезным: DenCoder |
|
Создано: 05 сентября 2017 13:23 · Личное сообщение · #19 |
<< . 1 . 2 . |
eXeL@B —› Программирование —› Перехват запуска процессов с правами администратора |