Русский / Russian English / Английский

Сейчас на форуме: DirtySmoke, bernal1 (+1 невидимый пользователь)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

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


Ранг: 324.3 (мудрец)
Статус: Участник

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

Всем привет!

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


Ранг: 563.8 (!)
Статус: Участник
оптимист

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

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

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

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


Ранг: 143.2 (ветеран)
Статус: Участник

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

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


Ранг: 329.3 (мудрец)
Статус: Участник

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

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

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


Ранг: 324.3 (мудрец)
Статус: Участник

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

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

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

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

Ранг: 71.2 (постоянный)
Статус: Участник

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

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


Ранг: 324.3 (мудрец)
Статус: Участник

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

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

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

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

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

Ранг: 71.2 (постоянный)
Статус: Участник

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

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


Ранг: 324.3 (мудрец)
Статус: Участник

Создано: 2 сентября 2017 15:33 · Поправил: DenCoder New!
Цитата · Личное сообщение · #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

Эти слова, скорее тебя не красят, чем меня. Промолчу...


Ранг: 329.3 (мудрец)
Статус: Участник

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

DenCoder

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

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

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

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

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

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


Ранг: 324.3 (мудрец)
Статус: Участник

Создано: 2 сентября 2017 20:14 · Поправил: DenCoder New!
Цитата · Личное сообщение · #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.

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



Ранг: 329.3 (мудрец)
Статус: Участник

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

DenCoder

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

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


Ранг: 324.3 (мудрец)
Статус: Участник

Создано: 2 сентября 2017 21:48 · Поправил: DenCoder New!
Цитата · Личное сообщение · #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 минут
Видимо, нативная реализация берёт их из хэндлов.

Ранг: 16.3 (новичок)
Статус: Участник

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

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


Ранг: 329.3 (мудрец)
Статус: Участник

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

DenCoder

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


Ранг: 324.3 (мудрец)
Статус: Участник

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

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

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

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

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

Ранг: 16.3 (новичок)
Статус: Участник

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

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


Ранг: 329.3 (мудрец)
Статус: Участник

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

DenCoder

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

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

{ Атач доступен только для участников форума } - ob.rar

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



Ранг: 324.3 (мудрец)
Статус: Участник

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

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

В рамках задачи цель достигается. Другими словами - через дрова цель на оправдает средства.
<< . 1 . 2 .
 eXeL@B —› Программирование —› Перехват запуска процессов с правами администратора

Видеокурс ВЗЛОМ