Итак, VisualDDK запустить удалось, надо двигаться дальше. Сразу скажу, я никогда не писал драйверы. Решил попробовать. Пробовать с чего то "попроще" мне попросту не интересно, вобщем изложу суть вопроса. Есть такая замечательна штука, как sandboxie, но эту штуку при ближайшем рассмотрении можно использовать в крайне ограниченых пределах её возможностей. Вобщем идея такая. Допустим есть некий драйвер, которому можно сказать, мол, запусти процесс такой то, и не давай этому процессу никакой возможности взаимодействовать с другими процессами в системе, кроме своих "потомков", даже видеть их, мало того, для этого процесса надо обеспечить "reparsing" файловых операций в виртуальный корень файловой системы (здесь примеров сколько угодно), опять же репарсинг реестра, запрет всех низкоуровневых операций и т.д.. Разумеется, все "потомки" данного процесса должны унаследовать подобное поведение. Вобщем суть в том, чтобы можно было реализовать что то вроде mojo pack или virtuozzo, для начала по минимуму (изолированый от всех "Hello World" ). Вопросы. Я нагуглил кучу всего по поводу файловых минифильтров, хуков и т.д., многое из нагугленного перепробовал, но у меня закралось сомнение. Я не пишу вирус, т.е. мне не нужно обходить защиты, поднимать привилегии, всё это можно сделать штатными методами. Неужели для того, чтобы реализовать описаную выше изоляцию от основной системы прийдётся похукать кучу(если не все) ядерных функций ? Может быть всё, что требуется для этого сосредоточено где то в одном месте ? Я уверен, что многое наивно упускаю в своих начинаниях. Поэтому жду комментариев от всех, кто желает помочь разобраться новичку.
daemon В юзермоде все действия с обьектами выполняются посредством хэндлов. Если нет хэндла или права в дескрипторе безопасности его ограничены, то с обьектом ничего выполнить не удастся. Права доступа можно менять, поэтому это слабая защита. Необходимо блокировать открытие процесса, которое сводится к ObpIncrementHandleCount(), интересная функция. Например DrWeb - он защищает свой процесс, из юзермода к нему доступ не получить. Он устанавливает калбэк на открытие(ObjectType.TypeInfo.OpenProcedure), в котором возвращает STATUS_ACCESS_DENIED, легально и без хака. Для XP это видимо самое простой и надёжный способ. Для доступа из ядра чтото защищать бессмысленно.
Great Что касается песочницы для процесса и его межпроцессного взаимодействия со службами, нужен красивый механизм связывания токена процесса с окружением службы. Иначе процесс кастрированный получится. Это можно сделать только с помощью аналога fork для windows. Но это потянет за собой реализацию полностью изолированных рабочих сред, включая рабочий стол, вплоть до запуска нового экземпляра winlogon. На таком принципе работает разделение в Terminal Services Application Mode, но оно тоже немного кастрированно. Хотя думаю, что те программы, которые привел автор в качестве примера, просто делают запрет на обращение к службам, что эквивалентно запуску из под ограниченной учетки. Так что полного аналога jail на Windows не выйдет - не та архитектура. Да и chroot в Linux не панацея, chroot позволяет подгружать модули ядра, а jail не позволит выполнить очень многие процессы. Вроде бы в 7ке есть какие-то подвижения в архитектуре на основе Intel-VT
вобщем то конечной целью предполагалось именно это, именно потому я и написал в первом посте что для начала требуется реализовать по минимуму изолированый от всех "Hello World". Как раз таки нет, посмотрите mojo pack и virtuozzo. Внутри каждый их контейнер (в mojo pack контейнер всего один) представляет полностью изолированую рабочую среду со своим набором служб, рабочими столами, учётными записями и т.д.