[skip]
IO>Проходил мимо, случайно заметил.. Лучше позно, чем никогда.. Может кто поиском пользуется.
IO>Для NT ряда — PsSetCreateProcessNotifyRoutine — можно поставить на уровне ядра...
Ограниченый ресурс.
IO>Есть еще один, не совсем очевидный способ — драйвер-фильтр файловой системы и отслеживание IRP_MJ_CREATE с последующим анализом currentIrpStack->Parameters.Create.SecurityContext->DesiredAccess на предмет наличия флажка FILE_EXECUTE.
Не могу связать наличие этого флага и запуск процесса — совсем. Причем здесь то, что данные могут читаться использую файл подкачки, я так и не понял.
[skip]
Если уж спустимся в ядро — тогда перехват Zw(Nt)CreateSection и проверка флага SEC_IMAGE. Даст как раз то — что нам нужно. Вернее — опять в переди паравоза и как следствие будут излишние данные.
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
Привет!
Как узнать, что система хочет запустить новый процесс?
Интересуют все способы, кроме как по таймеру опрашивать список запущенных процессов.
В идеале желательно иметь свой hook/callback который кто-то будет дергать с именем запускаемого процесса как параметр.
Подойдут и решения, основанные на драйверах, но тогда нужно решение для 9х и для НТ!
И в довесок, любой ли процесс можно терминировать или тормознуть(terminate) на время (suspend\resume process) из своего процесса?
Какие тут ограничения?
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Здравствуйте, Ihor Osovyak, Вы писали:
IO>Проходил мимо, случайно заметил.. Лучше позно, чем никогда.. Может кто поиском пользуется.
Да, давно это было... время идет Поиском наверняка кто-то пользуется )
IO>Для NT ряда — PsSetCreateProcessNotifyRoutine — можно поставить на уровне ядра...
Спасибо, за нафталиновую тему, проблема с тех пор была изучена и решения действительно уже известны
и другие.
IO>Есть еще один, не совсем очевидный способ — драйвер-фильтр файловой системы и отслеживание IRP_MJ_CREATE с последующим анализом currentIrpStack->Parameters.Create.SecurityContext->DesiredAccess на предмет наличия флажка FILE_EXECUTE. Преимущество этого способа по сравнению с вариантом на основании PsSetCreateProcessNotifyRoutine — то, что мы получаем нотификацию "до того" и есть возможность отменить запуск процесса, а также то, что мы получаем нотификацию не только об "откритии" основного файла, а и нотификацию об отображении всех подгружаемых длл для соотв. процесса.
тут Злость уже замечание внес, +1
... << RSDN@Home 1.1.4 beta 3 rev. 223>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Здравствуйте Valery Boronin, Вы писали:
VB>Привет! VB>Как узнать, что система хочет запустить новый процесс? VB>Интересуют все способы, кроме как по таймеру опрашивать список запущенных процессов. VB>В идеале желательно иметь свой hook/callback который кто-то будет дергать с именем запускаемого процесса как параметр. VB>Подойдут и решения, основанные на драйверах, но тогда нужно решение для 9х и для НТ!
VB>И в довесок, любой ли процесс можно терминировать или тормознуть(terminate) на время (suspend\resume process) из своего процесса? VB>Какие тут ограничения?
Мне кажется можно попробовать написать dll, перехватывающую вызовы CreateProcess и внедрить ее во все запущеные процессы. В том числе и explorer.
Ну а там уж простор для воображения. Как внедрять и перехватывать — подробно описано у Рихтера.
да, конечно, этот вариант с хуками мной уже рассматривался, более того, в принципе я уже нашел такое решение...
но там есть свои подводные камушки, может быть даже не в случае ловли CreateProcess...
еще нашел вариант с драйверами, можно найти ссылку на этом сайте http://rsdn.ru/qna/?baseserv/hookapi.xml
так что похоже вопрос решен
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Здравствуйте, Valery Boronin, Вы писали:
VB>да, конечно, этот вариант с хуками мной уже рассматривался, более того, в принципе я уже нашел такое решение... VB>но там есть свои подводные камушки, может быть даже не в случае ловли CreateProcess... VB>еще нашел вариант с драйверами, можно найти ссылку на этом сайте VB>http://rsdn.ru/qna/?baseserv/hookapi.xml VB>так что похоже вопрос решен
Проходил мимо, случайно заметил.. Лучше позно, чем никогда.. Может кто поиском пользуется.
Для NT ряда — PsSetCreateProcessNotifyRoutine — можно поставить на уровне ядра...
Есть еще один, не совсем очевидный способ — драйвер-фильтр файловой системы и отслеживание IRP_MJ_CREATE с последующим анализом currentIrpStack->Parameters.Create.SecurityContext->DesiredAccess на предмет наличия флажка FILE_EXECUTE. Преимущество этого способа по сравнению с вариантом на основании PsSetCreateProcessNotifyRoutine — то, что мы получаем нотификацию "до того" и есть возможность отменить запуск процесса, а также то, что мы получаем нотификацию не только об "откритии" основного файла, а и нотификацию об отображении всех подгружаемых длл для соотв. процесса.
IO>>Есть еще один, не совсем очевидный способ — драйвер-фильтр файловой системы и отслеживание IRP_MJ_CREATE с последующим анализом currentIrpStack->Parameters.Create.SecurityContext->DesiredAccess на предмет наличия флажка FILE_EXECUTE.
З>Не могу связать наличие этого флага и запуск процесса — совсем. Причем здесь то, что данные могут читаться использую файл подкачки, я так и не понял.
При том, что образ бинарника отображается на память процесса — механизм MMP, который всегда сопровождается установкой соотв. флага. Конечно, немного не совсем прямое решение, да и будут случаи "фальшстартов" — но во вногих практических случаев это приемлимо.
З>[skip]
З>Если уж спустимся в ядро — тогда перехват Zw(Nt)CreateSection и проверка флага SEC_IMAGE. Даст как раз то — что нам нужно. Вернее — опять в переди паравоза и как следствие будут излишние данные.
Спасибо за наводку. Посмотрю. Хотя, предчувствую, что этот вариант не дает возможность перехвачивать подгрузку DLL..
Здравствуйте, Ihor Osovyak, Вы писали:
IO>Спасибо за наводку. Посмотрю. Хотя, предчувствую, что этот вариант не дает возможность перехвачивать подгрузку DLL..
Не пробовал, но имхо даёт. Это перехват того же MMF, только на этапе создания секции, а не на этапе чтения файла.