Как антивирус Windows подключается к процессу доступа к файлу?
Тема говорит все. Обычный антивирус должен перехватывать все обращения к файлам, сканировать файлы, а затем опционально отказывать в доступе к файлу (возможно, даже отображая приглашение пользователю). Как это можно сделать?
Мне известен метод, называемый API-подключением, но этот действительно грязный недокументированный взлом - и, как таковой, не очень надежный. Какой "официальный" способ сделать это?
В качестве альтернативы мне было бы интересно перехватить загрузку исполняемых модулей (.DLL,.EXE и т.д.), а не только произвольные чтения файлов.
Ответы
Ответ 1
В последних версиях окон (по крайней мере, XP) существует концепция "фильтры", которую можно просмотреть с помощью MS Filter Manager (fltmc.exe из командной строки)
Это обеспечивает крючок ввода-вывода низкого уровня, который AV-программы могут получать и автоматически регистрировать для передачи всех запросов ввода-вывода в файловую систему. Это комплект, в котором вы можете получить драйверы для разработки собственных фильтров.
http://www.microsoft.com/whdc/driver/filterdrv/default.mspx является отправным местом для получения подробной информации.
Ответ 2
Как вы уже отметили, перехват - это ключ к тому, что готовит программное обеспечение AV с защитой "в реальном времени".
Вы могли бы взглянуть на (широко обсуждаемый) winpooch, который уже выполняет API Hooking,
но в этом программном обеспечении есть некоторые серьезные недостатки. Sourceforge of Winpooch
Существует также статья о Codeproject при подключении API, предоставляющая некоторую библиотеку
сделать крючок "в трех слоях". Dll Injection - это несколько сложно, так как вы можете
образ. CodeProject: EasyHook, переосмысление API Hooking
Поскольку вы, вероятно, интересуетесь антивирусными стратегиями, я также предлагаю
посмотрите на ClamAV или WinClam, который является openource (под GPL) ClamAV для Windows
Но у меня нет понятия, как подключиться к API с помощью С#, я должен признать.
В C/С++ это (довольно) легко...
ДОБАВИТЬ
Вас могут заинтересовать источники FileMon, широко известного Файлового Монитора, который был однажды SysInternals и теперь Microsoft:
Он использует API-интерфейс Driver-Filter от Microsoft, который по меньшей мере известен как хрупкий.
Ссылка может быть найдена здесь на форуме Sysinternals
Ответ 3
Через Драйвер фильтра файловой системы. Однако внедрение таких драйверов довольно сложно и "хрупко".
Ответ 4
Контроль доступа к файлам осуществляется с помощью драйвера фильтра файловой системы, который работает в режиме ядра. Фильтрующие драйверы могут быть не только уведомлены о действиях файловой системы, но и изменяют данные, передаваемые через фильтры, или отклоняют запросы файловой системы.
Вы можете создать минифильтр самостоятельно, но обслуживание и поддержка вашего кода в режиме ядра могут быть нетривиальными, особенно без использования режима ядра. Одной из проблем является конфликт между различными фильтрами.
Наша компания предлагает продукт CallbackFilter, который предоставляет готовый к использованию драйвер и позволяет писать бизнес-логику, связанную с фильтрацией, у пользователя Режим.
Ответ 5
В общем, эти продукты перехватывают функции, чтобы получить РУЧКУ для процесса, такого как OpenProcess или NtOpenProcess. Они также перехватывают функции CreateRemoteThread и распределение памяти в удаленном процессе: VirtualAlloc и VirtualProcect.
Некоторые AV-устройства также подключают функцию SetWindowsHookEx для обнаружения глобальных перехватчиков, чтобы избежать блокировки ключевых слов.
Подхватывая эти API, они могут контролировать, какие модули (или dll) могут обращаться к удаленным процессам и разрешать только те, которые пользователь знает, что они делают.
Вы можете использовать HookShark, чтобы узнать, какие функции пользовательского режима перехватываются каждым AV-продуктом.
Чтобы сделать свои собственные пользовательские перехватчики, вы можете использовать библиотеку обходных файлов, но вам нужно разработать агент для запуска ваших крючков в процессе, а затем связаться с сервером-агентом.
Вы также можете использовать Deviare API Hook, который является основой, которая делает весь сложный персонал, чтобы вы могли кодировать свои крючки в своем собственном процессе с использованием любого языка программирования.
Ответ 6
Вы можете прочитать библиотеку обходных файлов с помощью microsoft и попробовать ее бесплатно - это позволяет вам писать переходы пользовательского режима в С#. Вам не нужно узнавать о драйверах:]
Однако - для крючков режима ядра - вам нужно знать c и играть с DDK - atleast afaik: [
И самое современное антивирусное программное обеспечение перехватывает довольно много вызовов - реестр apis, thread и process apis и т.д. - а не только файловая система api. Опять - афайк.
edit: Есть также несколько руткитов с открытым исходным кодом - google и посмотреть, как они выполняют свою работу, это будет образовательный, я думаю.