hooking SSDT, порядок выгрузки драйверов

Тема в разделе "WASM.NT.KERNEL", создана пользователем katrus, 15 окт 2007.

  1. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    Столкнулся с интересной пробелемой:
    положим есть два драйвера хукающие некую функцию в SSDT: А (антивирус) и R (rootkit). Драйверы абсолютно независимы один от другого и, в общем случае, даже не знают о существовании "соперника". При установке хуков образуется "цепочка фильтров" функции, причем порядок А и R произволен, т.е., может быть ситуация, что вначале A поставил хук, а R вставил хук перед ним; а может быть и наоборот.

    Проблема возникает если А и R выгружаутся в неправилном порядке (например во время перезагрузки системы). Возникает ситуация когда вектор SSDT указывает в "пустоту" и BSOD неотвратим.

    Есть ли какой нибудь способ решить эту проблему?
     
  2. wertyman

    wertyman Member

    Публикаций:
    0
    Регистрация:
    13 дек 2006
    Сообщения:
    74
    Снять чужие хуки перед тем как ставить свои ? :)
     
  3. wertyman

    wertyman Member

    Публикаций:
    0
    Регистрация:
    13 дек 2006
    Сообщения:
    74
    Ну или как вариант, восстанавливать хуки на выгрузке не на старые адреса, а на оригинальные.. Следовательно не имеет значения, кто после тебя или перед тобой будет снимать хуки, они всегда будут оригинальные
     
  4. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    наверное имелось в виду A0 и A1 :)
     
  5. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    wertyman
    Не всегда работает. Попробуйте сделать такое с Касперким - получаем на экране отсутствие красной и желтой компоненты цвета.
     
  6. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    katrus
    Они же не должны выгружаться при перезагрузке. Да и снимать хуки обычно не входит в практику A, и уже тем более R :)

    =) Вообще при любой манипуляции с хуками стороннего кода надо учитывать его специфику, иногда это не так то просто.
     
  7. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    Mental_Mirror
    То есть можно безопасно предплоложить, что А не имеют привычку выгружать свои драйверы? Другими словами, если R не имплементирует OnUnload - все будет в шоколаде?
     
  8. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    katrus
    Ну это теория, надо тестить все-таки на разных А[0..255]
     
  9. Deyton

    Deyton Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    94
    Если софт не кривой, то он свои драйвера-хукеры не выгружает, вот и все решение проблемы. А насчет порядка расстановки хуков, то есть другое вытекающее обстоятельство, если А хукает те же функции, что и R, то если А ставит свои хуки позже, хуки R нельзя задетектить, поскольку в SSDT будут указатели на обработчики А.
     
  10. Mi256

    Mi256 New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2007
    Сообщения:
    116
    +1
    Если я правильно понял задачу то в системе возможно будут работать одновременно и A и R ещо и независимо. Ну тогда аль руткит грамотно написан то не должен синить екран. Для етого должен ПРЕДУГАДАТЬ наличие А в системе и обязательно установить свои хуки первыми в SSTD и переодически их обновлять дабы к-нибуть хитрый А не сбросил их. Тоесть А никак не должен узнать о наличии R, но R должен заранее предугадать наличия А - сохранять уже существующие адреса.

    Ну если А неправильно выгрузится (не уст. обработчики) - ето лишь по его вине будет синька...

    И ето же касается грамотности выгрузки R - пускай не допустит непредугаданной перезагр. системы и выгрузки себя (на то и хуки) иначе синька очень вероятна.
     
  11. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    На самом деле проблема несколько проще - R не совсем rootkit. Это вполне легальная программа и нет никаких проблем с тем, что антивирус определяет ее. Единственная проблема - reboot приводит к BSOD
     
  12. Mi256

    Mi256 New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2007
    Сообщения:
    116
    А сам R хукает функцыю ребута системы?
    Вероятно система просто без предупреждения выгружает его и он не успевает восстановить нужные адреса обработчиков. Или что то не в порядке с DriverUnload в самом R. Сомневаюсь что тут проблема с антивиром. (если он лицензионный конечно ;) )