Блокировать запуск процесса

Discussion in 'WASM.NT.KERNEL' started by GVL, Oct 22, 2008.

  1. GVL

    GVL New Member

    Blog Posts:
    0
    Joined:
    Oct 9, 2008
    Messages:
    7
    Доброго времени суток.
    У меня задача - разрешить запускаться "разрешенным" приложениям и блокировать "запрещенные".
    На данный момент я пробовал вот так:
    простейший драйвер, который перехватывает сервис NtCreateSection и возвращает ошибку в случае создания секции для "запрещенного" приложения. Приложение не запускается, однако система отображает сообщение - например: "notepad is not a valid win32 app..."

    Вопрос в следующем:
    1. Есть ли другие способы блокировки запуска процессов из драйвера, так чтобы сообщение об ошибке не возникало?
    2. Если без сообщения об ошибки не получиться, то как блокировать собственно это сообщение?
     
  2. rpy3uH

    rpy3uH New Member

    Blog Posts:
    0
    Joined:
    Sep 14, 2006
    Messages:
    503
    Можно, например, перехватывать функцию NtCreateProcess и возвращать ошибку типа STATUS_ACCESS_DENIED, и сообщение будет выводиться соответствующее. Проще и лучше, и я думаю врядли кто будет создавать процесс вручную, обходя NtCreateProcess.
     
  3. blast

    blast New Member

    Blog Posts:
    0
    Joined:
    Mar 8, 2008
    Messages:
    170
    Из юзермода? Оо это как? может вы с потоком перепутали?) или имеете ввиду NtCreateProcessEx?))
     
  4. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    Joined:
    Nov 24, 2006
    Messages:
    5,582
    Как это создать процесс вручную минуя NtCreateProcess ? :lol: из юзермода

    а поток как это создать вручную минуя NtCreateThread? :lol:
     
  5. nester7

    nester7 New Member

    Blog Posts:
    0
    Joined:
    Dec 5, 2003
    Messages:
    720
    Location:
    Russia
    Software Restriction Policy?
     
  6. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    Great
    Сказал ведь Blast, NtCreateProcessEx, к ней и сводится kernel32!CreateProcessInternal() и ост.
    [NtCreateProcess сводится к NtCreateProcessEx]
     
  7. blast

    blast New Member

    Blog Posts:
    0
    Joined:
    Mar 8, 2008
    Messages:
    170
    туплю )
     
  8. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    Joined:
    Nov 24, 2006
    Messages:
    5,582
    Clerk
    разница то? похукать 1 или похукать 2 функции
     
  9. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    Great
    У тебя вопрос был как создать без NtCreateProcess, не пойму причём число хуканых функций. Лан, шучу :)))
     
  10. AntiFreeze

    AntiFreeze Дмитрий

    Blog Posts:
    0
    Joined:
    Jun 26, 2008
    Messages:
    65
    GVL, я сталкивался с проблемой, когда при перехвате NtCreateSection выдаёшь что-то типа STATUS_ACCESS_DENIED. Винда ругается в красном окошке, мол файл не валидный и т.п. Если очень хочется хукать именно создание секции, то надо делать приблизительно так:
    Code (Text):
    1. NTSTATUS NtCreateSection_HOOKED (OUT PHANDLE  SectionHandle,
    2.                               IN ACCESS_MASK  DesiredAccess,
    3.                        IN POBJECT_ATTRIBUTES  ObjectAttributes OPTIONAL,
    4.                            IN PLARGE_INTEGER  MaximumSize OPTIONAL,
    5.                                     IN ULONG  SectionPageProtection,
    6.                                     IN ULONG  AllocationAttributes,
    7.                                    IN HANDLE  FileHandle OPTIONAL)
    8. {
    9. ...
    10. if (Access_Denied(..))
    11. {
    12.     SectionHandle = NULL;
    13.     return STATUS_SUCCESS;
    14. }
    15. ...
    16. }
     
  11. GVL

    GVL New Member

    Blog Posts:
    0
    Joined:
    Oct 9, 2008
    Messages:
    7
    Тотлько все проверил. Результаты следующие:

    Вернуть STATUS_ACCESS_DENIED из NtCreateProcess(Ex) не получается, так как не понятно для какого экзешника создается процесс (у меня всегда ObjectAttributes == NULL).

    Действительно, если вернуть STATUS_ACCESS_DENIED из NtCreateSection то все равно светиться ошибка "... is not valid win32 app...".

    Если сделать так как предлагает AntiFreeze то тогда светиться ошибка: "Handle is invalid".
    2AntiFreeze: мне все равно что хукать, лишь бы работало так как мне нужно.

    Вобщем, все равно как-то этот мессадж нужно давить. Пока что идея такая: попробовать перехватить NtUserGetDCEx и вернуть NULL. Пошел смотреть что получиться...
     
  12. lev

    lev New Member

    Blog Posts:
    0
    Joined:
    Oct 25, 2006
    Messages:
    16
    PsSetCreateProcessNotifyRoutine(CreateProcessNotifyRoutine,FALSE);
    далее когда вызовется ваша функция
    ZwOpenProcess(&hProcess,PROCESS_ALL_ACCESS,&oa,&clientId)
    ObReferenceObjectByHandle(hProcess,0,NULL,UserMode,&eprocess,NULL);
    KeStackAttachProcess(eprocess,&ApcState);
    далее читаем полное имя процесса и если нам не нравится например то откуда он запущен или с какими параметрами то ZwTerminateProcess(hProcess,0); и нафик.
    И ненадо мудрить не скакими перехватами.
     
  13. AntiFreeze

    AntiFreeze Дмитрий

    Blog Posts:
    0
    Joined:
    Jun 26, 2008
    Messages:
    65
    Перехватывать NtUserGetDCEx для этой задачи, ну.. совсем через одно место. ИМХО.

    Просто тут NtCreateSection не совсем годится - винда всё равно будет ругаться. Я поборол вышеописанным методом создание "побочных секций" в уже загруженном модуле.

    В конце-концов хукни NtCreateThread, если с NtCreateProcess(Ex) не получается.
     
  14. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    AntiFreeze
    ыы
    )))
    lev
    Нотификаторов может не хватить :)
    GVL
    Стену видишь ?)
    Находим указатель на секцию, хэндл которой передаётся, извлекаем полное имя модуля.
    All
    Ручки кривые)
     
  15. roman_pro

    roman_pro New Member

    Blog Posts:
    0
    Joined:
    Feb 9, 2007
    Messages:
    291
    http://www.rsdn.ru/Forum/message/2308423.flat.1.aspx
     
  16. GVL

    GVL New Member

    Blog Posts:
    0
    Joined:
    Oct 9, 2008
    Messages:
    7
    2lev - спасибо, это как раз то решение которое мне нужно, и оно меня вполне устраивает, не смотря на огранничения. Только что проверил - все работает!

    Ну а поповоду NtUserGetDCEx - не смейтесь :) - я новичок в программировании на уровне ринг0.
    Всем спапсибо.
     
  17. GVL

    GVL New Member

    Blog Posts:
    0
    Joined:
    Oct 9, 2008
    Messages:
    7
    Привет всем, тема снова актуальна. Вот решение которое отлично работало больше года:
    После очередного виндового апдейта метод ZwTerminateProcess стабильно светит месаджбкс, что мол ошибка - файл не валидный или доступа нет. Пробовал метод NtTerminateProcess - этот возвращает ошибку ACCESS_DENIDED.
    Возможно ли еще решение с блокровкой запуска процесса без всяких месаджей об ошибках?
     
  18. x64

    x64 New Member

    Blog Posts:
    0
    Joined:
    Jul 29, 2008
    Messages:
    1,370
    Location:
    Россия
    Тебе именно в драйвере? Есть рабочее решение в режиме пользователя. В ядре только начиная с Vista SP1 можно нормально это сделать. Ну если сильно надо именно в ядре, ok, расскажу, но ты подумай всё таки.
     
  19. reader323

    reader323 New Member

    Blog Posts:
    0
    Joined:
    Jul 8, 2009
    Messages:
    134
    Поделитесь идеями, x64 всем интересно :)
     
  20. spa

    spa Active Member

    Blog Posts:
    0
    Joined:
    Mar 9, 2005
    Messages:
    2,240
    Почему бы не поведать оба решения )