Имеется драйвер шифрованного диска, который вешает диск на определённый "девайс" по вызову DeviceIoControl. Затем диск ставится на определённый drive-letter, через DefineDosDevice(..., "\\DosDevices\\symLinkName") в контексте пользователя и всё OK. Но проблема в том, что DefineDosDevice с данными параметрами можно вызывать неоднократно и из под разных пользователей, и теоретически диск (пока он драйвером поддерживается) виден кому угодно на данной машине. Получается непроятная история с безопасностью. Что я делаю неправильно и откуда копать?
Заранее благодарен
Здравствуйте, vsop, Вы писали:
V>Что я делаю неправильно и откуда копать?
Если нужна безопасность на уровне файлов — создавать на томе файловую структуру NTFS. Если нужен контроль доступа на уровне устройства целиком — присвоить ему дескриптор защиты.
ЕМ>Если нужна безопасность на уровне файлов — создавать на томе файловую структуру NTFS. Если нужен контроль доступа на уровне устройства целиком — присвоить ему дескриптор защиты.
NTFS — это понятно. Хотелось бы что-то поумнее (в том числе защиту от администратора, насколько возможно), типа дескриптора защиты. Только вот пытался я права доступа менять в WinObj на instance драйвера, не помогает — драйвером то заведует система. То есть удаление или блокировка (deny access) пользователя не помогает — на обоих, symbolic link и driver object, DDD это не мешает. По крайней мере на моём компе.
V>Имеется драйвер шифрованного диска, который вешает диск на определённый "девайс" по вызову DeviceIoControl. Затем диск ставится на определённый drive-letter, через DefineDosDevice(..., "\\DosDevices\\symLinkName") в контексте пользователя и всё OK. Но проблема в том, что DefineDosDevice с данными параметрами можно вызывать неоднократно и из под разных пользователей, и теоретически диск (пока он драйвером поддерживается) виден кому угодно на данной машине. Получается непроятная история с безопасностью. Что я делаю неправильно и откуда копать?
DefineDosDevice определяет букву диска per user session. То есть другим юзерам диск виден не будет.
И вообще это не есть проблема безопасности — DefineDosDevice определяет лишь симлинку ктому жесткого диска. Пользователь ведь может открыть том напрямую — ntdll!NtOpenFile("\harddrivevolume или чета в етом роде" и безо всяких досовских букв диска.
Как много веселых ребят, и все делают велосипед...
Здравствуйте, vsop, Вы писали:
V>Только вот пытался я права доступа менять в WinObj на instance драйвера, не помогает — драйвером то заведует система. То есть удаление или блокировка (deny access) пользователя не помогает — на обоих, symbolic link и driver object, DDD это не мешает.
Объект драйвера-то здесь при чем? Дескриптор нужно цеплять к Device Object, и желательно — до завершения инициализации.
ЕМ>>Если нужна безопасность на уровне файлов — создавать на томе файловую структуру NTFS. Если нужен контроль доступа на уровне устройства целиком — присвоить ему дескриптор защиты.
V>NTFS — это понятно. Хотелось бы что-то поумнее (в том числе защиту от администратора, насколько возможно), типа дескриптора защиты. Только вот пытался я права доступа менять в WinObj на instance драйвера, не помогает — драйвером то заведует система. То есть удаление или блокировка (deny access) пользователя не помогает — на обоих, symbolic link и driver object, DDD это не мешает. По крайней мере на моём компе.
Посмотрите в исходниках последнего WinCDEmu (поиск по ApplyDACL).