Как антивирус Windows подключается к процессу доступа к файлам? - PullRequest
26 голосов
/ 07 октября 2009

Субъект говорит все это. Обычный антивирус должен перехватывать все обращения к файлам, сканировать файлы, а затем опционально запрещать доступ к файлу (возможно, даже отображая подсказку для пользователя). Как это можно сделать?

Мне известен метод, называемый перехват API, но это действительно грязный недокументированный взлом - и поэтому он не очень надежен. Что такое «официальный» способ сделать это?

В качестве альтернативы мне было бы интересно перехватить загрузку исполняемых модулей (.DLL, .EXE и т. Д.), А не только произвольное чтение файла.

Ответы [ 6 ]

29 голосов
/ 07 октября 2009

В последних версиях Windows (по крайней мере, XP и более поздних версий) существует понятие «фильтры», которое можно просмотреть с помощью MS Filter Manager (fltmc.exe из командной строки)

Это обеспечивает низкоуровневую ловушку ввода-вывода, к которой AV-программы могут получить доступ и автоматически зарегистрировать для передачи всех запросов ввода-вывода в файловую систему. Это комплект, для которого вы можете получить драйверы для разработки собственных фильтров.

http://www.microsoft.com/whdc/driver/filterdrv/default.mspx является отправной точкой для получения подробной информации.

10 голосов
/ 19 июня 2012

Как вы уже отметили, перехват является ключом к тому, что делает стандартное программное обеспечение AV с защитой в реальном времени.

Вы можете взглянуть на (широко обсуждаемый) winpooch, который уже использует API Hooking, но есть некоторые серьезные недостатки в этом программном обеспечении. Sourceforge из Winpooch

Существует также статья о Codeproject по перехвату API, предоставляющая некоторую библиотеку делать зацепку "в три слоя". Dll Injection довольно сложно, как вы можете образ. CodeProject: EasyHook, переосмысление API Hooking

Поскольку вас, вероятно, интересуют антивирусные стратегии, я также предлагаю взгляд на ClamAV или WinClam, который является открытым исходным кодом (под GPL) ClamAV для Windows

Но я не имею ни малейшего понятия, как сделать перехват API с C #, я должен признать. В C / C ++ это (довольно) просто ...

ДОБАВИТЬ НА Возможно, вас заинтересуют источники FileMon, широко известного FileSystem Monitor, который когда-то был SysInternals, а теперь Microsoft: Он использует Driver-Filter API от Microsoft, который по крайней мере известен как хрупкий.

Ссылку можно найти здесь на форуме Sysinternals

6 голосов
/ 07 октября 2009

Через Драйвер фильтра файловой системы с. Однако реализация таких драйверов довольно сложна и «хрупка».

4 голосов
/ 19 июня 2012

Доступ к файлам контролируется с помощью драйвера фильтра файловой системы , который работает в режиме ядра. Драйверы фильтров могут быть не просто уведомлены о работе файловой системы, но и изменять данные, передаваемые через фильтры, или отклонять запросы файловой системы.

Вы можете создать минифильтр самостоятельно, но обслуживание и поддержка кода в режиме ядра могут быть нетривиальными, особенно без опыта разработки в режиме ядра. Одна из проблем - конфликты между различными фильтрами.

Наша компания предлагает CallbackFilter продукт, который предоставляет готовый к использованию драйвер и позволяет писать бизнес-логику, связанную с фильтрацией, в пользовательском режиме.

3 голосов
/ 19 июня 2012

Как правило, эти продукты перехватывают функции, чтобы получить РУЧКУ для процесса, такого как OpenProcess или NtOpenProcess. Они также подключают функции CreateRemoteThread и распределение памяти в удаленном процессе: VirtualAlloc и VirtualProcect. Некоторые AV также перехватывают функцию SetWindowsHookEx для обнаружения глобальных перехватов, чтобы избежать регистрации ключей.

Подключая эти API, они могут управлять тем, какие модули (или библиотеки DLL) могут получать доступ к удаленным процессам, и разрешать доступ только тем из них, которые пользователь знает.

Вы можете использовать HookShark, чтобы увидеть, какие функции пользовательского режима перехватываются каждым AV-продуктом.

Для создания собственных пользовательских хуков вы можете использовать библиотеку обходов, но вам необходимо разработать агент для запуска ваших внутренних хуков, а затем связаться с агентским сервером. Вы также можете использовать Deviare API Hook , который является фреймворком, который собирает весь сложный персонал, чтобы вы могли кодировать свои хуки в своем собственном процессе, используя любой язык программирования.

3 голосов
/ 19 июня 2012

Вы можете прочитать о обходной библиотеке от Microsoft и попробовать ее бесплатно - она ​​позволяет вам писать хуки пользовательского режима на c #. Вам не нужно узнавать о драйверах:]

Однако - для ловушек режима ядра - вам нужно знать c и поиграться с DDK - по крайней мере, afaik: [

И большинство современных антивирусных программ перехватывают довольно много вызовов - API реестра, API потоков и процессов - и не только API файловой системы. Снова - афаик.

edit: Есть также несколько руткитов с открытым исходным кодом - гуглите их и посмотрите, как они выполняют свои перехватчики, я думаю, это будет обучающим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...