Как "отсеять" csrss процессы?

Тема в разделе "WASM.NT.KERNEL", создана пользователем T800, 30 янв 2010.

  1. T800

    T800 Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    293
    Адрес:
    Moscow
    Есть задачка по получению (pid) всех подлинных процессов csrss (в ring0).

    В статье Ms-Rem'а http://wasm.ru/article.php?article=dumping предлагается вариант поиска по наличию именованного объекта (LPC порт "*\Windows\ApiPort") у процесса. Это катит для WinXP.
    На Win7 конечно надо искать по ALPC порт "*\Windows\ApiPort". Но вот на висте такой способ ваще не катит (чёт не видно там вообще открытых ApiPort).
    Да и этот способ отсеивания зёрен от плевел не совсем красив.

    Есть какой нито универсальный и более правильный способ?
     
  2. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    А чем не подходит путь к исполняемому файлу в качестве признака? Берём секцию процесса, берём файловый объект оттуда, собираем полный путь и сравниваем с эталонным. Вполне надёжно.
     
  3. T800

    T800 Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    293
    Адрес:
    Moscow
    Да полагаю так и придётся делать.
    Хотя всё равно считаю не совсем надёжным этот метод.
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    по родителю?
     
  5. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Сделай сбор информации о процессах с самого начала запуска ядра, включая:

    1. Информацию о потоке/процессе-родителе.
    2. Информацию о расположении исполняемого файла-образа.

    Надёжность стремится к 100%. Не думаю, что сможешь сделать что-либо более эффективное.
     
  6. 0x6b65

    0x6b65 Забанен

    Публикаций:
    0
    Регистрация:
    8 окт 2009
    Сообщения:
    92
    А куда они там делись-то? Просто теперь они имеют имя: "\Sessions\xxx\Windows\ApiPort", где xxx - номер сессии пользователя. Но способ, соглашусь, "топорный". "Кто ищет, тот..." (с). Может чем поможет информация о том, что, например, на xp-2003 в ядре присутствует не экспортируемый символ PEPROCESS ExpDefaultErrorPortProcess, который и содержит указатель на _EPROCESS csrss'а.

    Может всю задачу можно решить по-другому? В чем основная цель подобных изысканий?
     
  7. J0E

    J0E New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2008
    Сообщения:
    621
    Адрес:
    Panama
    Потому что кто то запустит процесс на базе легального файл, а код подсунет свой.

    Вопрос следует задать более конкретно, присоединяюсь к предыдущему оратору )
     
  8. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Решается проверкой родителя, я отписал уже выше.

    Да, уточнить бы не помешало.
     
  9. J0E

    J0E New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2008
    Сообщения:
    621
    Адрес:
    Panama
    Ой, забыл "из правильного родителя" между запустит и процесс )
     
  10. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    При правильной организации работы, когда недоверенные приложения запускаются исключительно из-под пользовательского аккаунта, такой проблемы возникнуть не должно. Ну а если из-за под админа всё... Этак мы сейчас договоримся до реализации полноценной проактивной защиты. Пока непонятно, надо ли это.
     
  11. T800

    T800 Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    293
    Адрес:
    Moscow
    А для чего я в первом посте звёздочки рисовал? Ну не нашёл я на своей висте сп1 упоминание о ApiPort.

    Ну я же не антивирус делаю. Мой дров запускают по требованию. И в этот момент нужно найти эти системные процесы.

    Полагаю к этому то всё и стремится. Но на данном этапе просто надо разрешить этим процессам всё (ну как писал Ms-Rem в выше упомянутой статье про фимку).

    Т.е. пробежавшись по всему списку EPROCESS можно найти эти процессы?
    И я так понимаю мне нужно будет для каждого билда найти смещения ExpDefaultErrorPortProcess.
     
  12. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Ни чем тебе этот указатель не поможет, так ты найдёшь только один из возможных процессов CSR, а их по одной штуке в каждом сеансе висит.
     
  13. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    T800
    Win32 вызывает найтив для коннекта(CsrClientConnectToServer()) на этот порт при инициализации процесса. CsrpConnectToServer() - в нтдлл эта функа создаёт соеденение, апипорт имеется по любому. Может быть иного формата префикс.