Я хочу создать драйвер минифильтра для прозрачного перенаправления дискового ввода-вывода, но у меня возникают проблемы с началом работы - PullRequest
15 голосов
/ 20 августа 2011

Проект, над которым я сейчас работаю, требует реализации механизма копирования-на-м / м, который будет использоваться для перенаправления дискового ввода-вывода аналогично Deep Freeze или Sandboxie в Windows XP. Если бы я мог, я бы также хотел иметь возможность «монтировать» измененные файлы пользователя, подобно тому, как VirtualCloneDrive имитирует жесткие диски и прозрачно монтирует на них ISO-образы.

Насколько я понимаю, такие программы используют драйверы минифильтров для перенаправления запросов ввода-вывода. Стандартный процесс копирует любые измененные данные во вторичное местоположение, а затем считывает / изменяет это хранилище для последующего доступа к этим данным; так что я думаю, что понимаю, что мне нужно делать там. Когда дело доходит до симуляции привода CD / DVD и монтирования образа на нем, я полностью теряюсь.

Я искал в Интернете (Google, MSDN, The Code Project и т. Д.) И в книгах, таких как Разработка драйверов с помощью Windows Driver Foundation и Внутренние компоненты файловой системы Windows NT: Руководство разработчика , но поиск конкретной информации и примеров (по мониторингу, перехвату и перенаправлению запросов и созданию устройств обратной связи) оказывается трудным. Я все еще довольно плохо знаком с технологиями, поэтому, возможно, у меня возникают проблемы с поиском леса за деревьями.

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

Редактировать: я нашел этот вопрос , который кажется полезным ресурсом (хотя не для моего конкретного случая использования), поэтому я связал его здесь, чтобы добавить к любым предстоящим ответам.

Некоторые уточнения:

Я пытаюсь создать программу, которая позволит пользователям устанавливать и использовать приложения без административных привилегий. Программа будет работать, сохраняя любые изменения файловой системы / реестра в отдельной области хранения (например, файл на жестком диске или в сетевом хранилище), а затем позволяет на лету интегрировать их в любой рабочий стол, на котором выполняется хост-программа. , Перенесите рабочий стол на USB-перо, подключите его, и ваши настройки будут применены.

Чтобы перенаправить ввод / вывод, я мог бы:

  1. Исправление процесса 'Таблица адресов импорта (IAT) для вставки настроенного кода на уровне приложения.
  2. Напишите драйвер фильтра пользовательского режима для изменения запросов на лету.
  3. Для улучшенной (любой, вообще-то, на самом деле) безопасности, реализуйте драйвер режима ядра для исправления таблиц дескрипторов системной службы (SSDT) ​​аналогично программному обеспечению AV.

У каждого из этих подходов есть свои плюсы и минусы. Например, третий подход намного сложнее, чем первый. Он обеспечивает большую безопасность, но даже тогда он может быть побежден (теоретические атаки были примерно с '96, практические атаки с '07.)

Я изначально рассматривал конкретные функции безопасности (в отличие от перенаправления ввода-вывода, аналогичного совместимости WoW64 настройкам); но с тех пор, как я начал это рассматривать, я вспомнил, что вы не можете вечно защищать пользователя от самого себя, и что независимо от того, сколько я потратил усилий на защиту хост-системы от злонамеренного процесса или глупого пользователя, его можно победить (или Скорее всего, я совершу ошибку.) Я также решил не изобретать диски с песочницей и антивирусом и просто сосредоточиться на создании некоторых полезных функций. Философия «инструмент должен делать одну работу и делать это хорошо» победил.

В двух словах все, что я хочу сделать, это реализовать функциональность, аналогичную снимкам виртуальной машины, и перенаправить изменения в мою собственную область хранения. Приведенная ниже диаграмма немного устарела, но, возможно, лучше сообщить о моих намерениях, чем я сейчас: -)

Early application design

1 Ответ

6 голосов
/ 26 августа 2011

В WDK есть все необходимые примеры для минифильтров под samples/filesys/minifilter, они хорошо документированы, но немного запутаны в деталях.Однако, как упомянуто в комментариях, это требует привилегий администратора, чтобы использовать б / у, как и любая форма исправлений или перехватов (см. SeDebugPrivilege)

...