Сейчас на форуме: jinoweb, bartolomeo, rmn (+5 невидимых)

 eXeL@B —› Программирование —› Перехват запуска процессов с правами администратора
<< . 1 . 2 .
Посл.ответ Сообщение


Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 01 сентября 2017 11:38
· Личное сообщение · #1

Всем привет!

Хочу перехватить запуск процессов из-под проводника с админскими правами. Перехват решил сначала проверить в ольке. На обычном запуске по двойному щелчку запуск перехватывается нормально - срабатывает бряк на CreateProcess. Но вот странное дело, при запуске через ПКМ->С правами администратора не срабатывает бряк ни на CreateProcess, ни на CreateProcessAsUser, CreateProcessWithLogonW и CreateProcessWithTokenW. Бряки на CreateProcessInternal(A|W), на NtCreateProcess и NtCreateUserProcess также не срабатывает. Как же тогда запускается процесс из проводника?

-----
IZ.RU





Ранг: 568.2 (!), 465thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 02 сентября 2017 07:10 · Поправил: ClockMan
· Личное сообщение · #2

Alchemistry пишет:
это драйвер с PsSetCreateProcessNotifyRoutine(Ex)

Если антивирус разрешит а то могут и прбить на подходе

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.


| Сообщение посчитали полезным: DenCoder

Ранг: 145.8 (ветеран), 191thx
Активность: 0.140.36
Статус: Участник

Создано: 02 сентября 2017 09:52
· Личное сообщение · #3

ClockMan
Денкодер наверняка пишет добропорядочный софт и наверняка если он будет писать какие-то драйвера у него есть тестовый сертификат и режим с отключенной проверкой подписи? Не говоря уже об отсутствии аверов. Наверняка, но скорее всего нет. Убогие аверы это проблемы кучки криптовщиков с их унылым говном, что вьются вокруг клекра и его самого, вон он с ними воюет, если что у него спрашивайте апходы для виндоус хп.




Ранг: 338.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 02 сентября 2017 12:27 · Поправил: difexacaw
· Личное сообщение · #4

Авер может отслеживать стандартные механизмы инжекта, но не OP. Если какое то переполнение привело к выполнению OP-последовательности, то авер это не детектит и не может. Не смотря на то, что данные загружаются в приложение и выполняются без какого либо его открытия.

PsNotify это для инжекта как вы говорите уровня XP, тупо процесс открыл и записал.

-----
vx





Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 02 сентября 2017 15:16
· Личное сообщение · #5

VT-x пишет:
VOLKOFF
тьфу параша, ваше ЭТО я дажен читать не собираюсь.

Зря ты так, прочитал статейку, кое-какие тонкости узнал и освежил память. Возникла своеобразная идея(не успел прочитать все ответы, может кто уже и излагал подобное), как всё-таки перехватывать создание произвольного процесса, IFEO задействуется, но только для подгрузки верифера в consent.exe, который запускается при запуске процессов с повышенными правами. Наш верифер перехватывает CreateProcessAsUserW и собственно, создание процесса перехвачено.

Добавлено спустя 2 минуты
Интересно, что подмена родительского процесса уже давно есть, а я как-то проглядел

-----
IZ.RU




Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 02 сентября 2017 15:22
· Личное сообщение · #6

DenCoder, так я таки не понял, почему в ProcessMonitor создание процессе выглядело как будто из explorer? Магия имперсонации в системном сервисе?




Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 02 сентября 2017 15:27 · Поправил: DenCoder
· Личное сообщение · #7

difexacaw пишет:
Получается что тс забыл одну функцию из 3-х

Я лишь её забыл упомянуть в списке

Добавлено спустя 3 минуты
kunix пишет:
почему в ProcessMonitor создание процессе выглядело как будто из explorer? Магия имперсонации в системном сервисе?

Подмена родителя. В структуре STARTUPINFOEX есть lpAttributeList, в котором можно указать атрибут PROC_THREAD_ATTRIBUTE_PARENT_PROCESS и все мониторы(за исключением может каких-то) будут показывать родителя не реального, а сделавшего запрос на повышение прав.

-----
IZ.RU




Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 02 сентября 2017 15:31
· Личное сообщение · #8

А со стеком что? Из какого процесса Process Monitor взял стек?




Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 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





Ранг: 338.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 02 сентября 2017 19:03 · Поправил: difexacaw
· Личное сообщение · #10

DenCoder

Я не помню что бы можно было изменить ID родителя. Если это так, то это весьма выгодно для малварки, таки шикарная возможность, так как именно парент и есть ключ к детекту ранпе. Эта инфа не должна изменяться.

Тогда в чём проблема, взять км отладчик и посмотреть кто стартует процесс. Или за пять минут собрать юм логгер и ребутнуться, пусть выводит по стартапу лог.

> после получения подтверждения на запуск, изменяет в контексте запросившего треда ESP

Это ось делать не может в принципе, это инжект.

Добавлено спустя 9 минут
DenCoder

Кстате есть спец логгер родителей, но он запускается при спец опции при загрузке ос. FLG_MAINTAIN_OBJECT_TYPELIST. Наверняка это инфу никто не удалит и она доступна из юм, так что я бы так сделал. Менеджер обектов будет сохранять родителя.

-----
vx





Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 02 сентября 2017 20:14 · Поправил: DenCoder
· Личное сообщение · #11

difexacaw пишет:
Я не помню что бы можно было изменить ID родителя.

Начиная с висты, в STARTUPINFOEX есть указатель на список аттрибутов. Атрибут PROC_THREAD_ATTRIBUTE_PARENT_PROCESS, устанавливаемый функцией UpdateProcThreadAttribute, подменяет родителя.

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


Ранг: 338.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 02 сентября 2017 21:13 · Поправил: difexacaw
· Личное сообщение · #12

DenCoder

А с тем фгагом что думаете ?

Отладка это конечно гуд, но только если нет штатных и простых средств. Вся суть вопроса в наследовании PID.

-----
vx





Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 02 сентября 2017 21:48 · Поправил: DenCoder
· Личное сообщение · #13

difexacaw пишет:
А с тем фгагом что думаете ?

PROC_THREAD_ATTRIBUTE_EXTENDED_FLAGS ? Это ядро надо смотреть

Добавлено спустя 1 минуту
difexacaw пишет:
Вся суть вопроса в наследовании PID.

По наследованию сказано:
Code:
  1. PROC_THREAD_ATTRIBUTE_PARENT_PROCESS
  2. The lpValue parameter is a pointer to a handle to a process to use instead of the calling process as the parent for the process being created. The process to use must have the PROCESS_CREATE_PROCESS access right.
  3. Attributes inherited from the specified process include handles, the device map, processor affinity, priority, quotas, the process token, and job object. (Note that some attributes such as the debug port will come from the creating process, not the process specified by this handle.)


Хендлы созданных объектов процесс и трэд дублируются в запрашивающий процесс по адресу, который был передан через ALPC. Вот где PID'ы их передаются, не увидел пока.

Добавлено спустя 8 минут
Видимо, нативная реализация берёт их из хэндлов.

-----
IZ.RU




Ранг: 16.3 (новичок), 2thx
Активность: 0.030
Статус: Участник

Создано: 03 сентября 2017 02:31
· Личное сообщение · #14

АРЧИ ЗАКРЫВАЙ




Ранг: 338.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 03 сентября 2017 05:50
· Личное сообщение · #15

DenCoder

Я имел ввиду флаг в GF, тогда можно получить родителя каждого обьекта в системе.

-----
vx





Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 03 сентября 2017 08:36
· Личное сообщение · #16

VT-x пишет:
АРЧИ ЗАКРЫВАЙ

1) Тема не исчерпана. Затем - 2) ты не тс!

Добавлено спустя 7 минут
difexacaw пишет:
Я имел ввиду флаг в GF

Поясни, что такое GF? Я не понял

-----
IZ.RU




Ранг: 16.3 (новичок), 2thx
Активность: 0.030
Статус: Участник

Создано: 03 сентября 2017 22:34 · Поправил: VT-x
· Личное сообщение · #17

>Поясни, что такое GF? Я не понял
-- мда уж глобал флаги, а вообще все это чушь перехватывать создание процесса на его начальном этапе, когда маппинг осуществляется можно только через дров




Ранг: 338.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 03 сентября 2017 23:00
· Личное сообщение · #18

DenCoder

Загрузочные опции, это маркеры в реестре, которые запускают множество отладочных механизмов при старте ос. По дефолту они сброшены, а установка их желательна только при наличии отладчика, так как иначе ось может пасть на останове в ядре.
Маркер который я выше привёл заставляет менеджер обьектов вести подробный лог - для каждого обьекта в системе сохраняется PID родителя. Тогда по описателю может быть найден адрес обьекта, а по адресу обьекта найден родитель.

Примерный кодес, только его нужно немного отладить.

72c8_04.09.2017_EXELAB.rU.tgz - ob.rar

-----
vx


| Сообщение посчитали полезным: DenCoder


Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 05 сентября 2017 13:23
· Личное сообщение · #19

VT-x пишет:
а вообще все это чушь перехватывать создание процесса на его начальном этапе

В рамках задачи цель достигается. Другими словами - через дрова цель на оправдает средства.

-----
IZ.RU



<< . 1 . 2 .
 eXeL@B —› Программирование —› Перехват запуска процессов с правами администратора
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати