Фильтрация траффика в Ring0. Что изменилось?

Тема в разделе "WASM.NT.KERNEL", создана пользователем deLight, 31 мар 2009.

  1. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    Cтоит задача фильтрации нешифрованного HTTP-траффика.
    Реализовал вариант для user-mode с LSP, фильтрую по хосту из заголовка, что и требовалось. Теперь по многим загадочным причинам заказчик хочет ту же функциональность, но в виде драйвера.

    Опыта в Ring0 недостаточно чтобы понять что лучше использовать, но насколько смог увидеть картину - варианты для фильтрации траффика: хук в NDIS-драйвере, TDI-фильтр, использование IP filter driver. Информации куча, примеры из DDK есть, все вроде хорошо.
    Но как быть с системами >= WinVista?? в MSDN инфа о том что стек был полностью изменен по сравнению с предыдущими версиями. Т.е. вариант - это использование WFP (Windows Filtering Platform), но как добиться универсального решения?? Фильтрация нужна в XP и Vista. Возможно вообще? В какую сторону копать?

    thx.
     
  2. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    Если нужно смотреть пакеты, то придётся работать на уровне NDIS в ядре:

    NDIS intermediate driver будет работать и на XP и на Vista. Одно "но" - куча странностей когда добавляешь/убираешь адаптеры и протоколы.

    Вариант для Vista - NDIS light weight filter driver - похож на NDIS IM, вычещенный API, простая установка.

    Это из документированного. Хуки - отдельная история...
     
  3. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    deLight
    тебе надо парсить хттп, так что ндис не годится, там IP-датаграммы уже порезаны на кадры
    если тебе не надо модифаить само тело датаграмм - то однозначто фильтердрв
    если надо модифить - тогда тди на ХП и что-то-там-новое на висте

    кроме лсп из юзер-мода есть еще iphlpapi.lib - интересная штучка но парсить хттп вроде не умеет :)
     
  4. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    хехе

    тут подсказывают - через ндис тоже можно извратиться
    заворачиваешь весь тсп-80-трафик в туннель на этот же комп в кастомный протокол
    в юзер-моде открываешь сокет на этот протокол, разворачиваешь из туннеля, парсишь
    потом запихиваешь в тсп-80, с пометкой где-нибудь в хедерах "already scanned"
    о как! think different %)
     
  5. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    think different %)
    интересно, но отменить ради этого think simple будет не так хорошо )

    Вариант для Vista - NDIS light weight filter driver - похож на NDIS IM
    посмотрел вот инфу в DDK по ихнему семплу passthru.
    NDIS IM driver, работает XP,Vista,etc. Пропускает через себя весь трафф.
    т.е. получается think simple? %)
    тогда остается проблема с фрагментацией? может кто-то подсказать, есть ли возможность ее решить? как я понимаю мне не нужно восстанавливать весь поток, достаточно всегда иметь два соседних пакета, чтобы по маске найти "Host: xxxxxxxxxx" (т.е. худший случай - в этом месте хидер разделяется по пакетам). если решить нельзя, что думать....

    z0mailbox
    если надо модифить - тогда тди на ХП и что-то-там-новое на висте
    видимо на каркасе passthru лучше чем отдельно две реализации под XP и Висту.
    я все верно понял? очень не помешает мнение того кто скажет точно так или нет. иначе только потеря кучи времени впустую ради того чтобы понять как все плохо ))
    заранее спс тем кто поможет советом.
     
  6. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    TDI-фильтры поддерживаются на всех системах начиная от Windows XP и заканчивая Windows 7.
     
  7. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    deLight, passthru это ndis IM. Я же упоминал ndis filter driver.

    Про фрагментацию - если ты пишешь что-то firewall-образное с манипуляциями адресов, то на уровне NDIS надо смотреть TCP заголовки и отслеживать соединения. Т.е. всё упирается в идентификацию соединений по sport, saddr, dport, daddr. Ессно, ещё надо смотреть TCP флаги: SYN, ACK, RST. Никакой (де)фрагментации тут не надо.

    Ну а если ты хочешь просто разрешать/запрещать соединения по даблице адресов/портов, то тебе нужен TDI filter.
     
  8. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    у меня в продукте на каркасе passthru работает от 2000 до висты включительно. ндис 5.0 кстати
    это раз

    теперь насчет фрагментации
    1) отправление пакетов с этой машины
    IP датаграмма имеет максимальный размер 65535 байтов - это на входе в TCPIP.SYS (т.н. TDI-level)
    на выходе из TCPIP.SYS (т.н. NDIS-level) максимальный размер пакета определяется из вызова
    MiniportQueryInformation нижележащему минипорту с OID == OID_GEN_MAXIMUM_FRAME_SIZE
    при отсутствии NDIS intermediate на эту кверю ответит NIC, например езернет
    обычные езернеты отвечают - 1514 байтов
    то есть TCPIP.SYS порежет твою датаграмму так чтобы куски не превышали 1500 байтов (езернет хедер = 14 байтов)
    и поэтому парсить HTTP-тело в NDIS тебе не удастся

    2) получение пакетов на эту машину - все то же самое
    в NDIS-е ты получаешь фрагменты IP-datagram, чтобы парсить HTTP-тело на приеме надо сесть выше TCPIP.SYS
     
  9. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    x64
    TDI-фильтры поддерживаются на всех системах начиная от Windows XP и заканчивая Windows 7.

    из help'a WDK:
    z0mailbox, s0larian, x64
    остановился на ndis im (на каркасе passthru)
    спасибо за помощь
     
  10. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    TDI-фильтры поддерживаются на всех системах начиная от Windows XP и заканчивая Windows 7. По факту.