Здравствуйте, Andrew.W Worobow, Вы писали:
AWW>Простите, вы про что? Я никаким, простите боком не отпираюсь ибо нет повода... Вы опять похоже хотите выдать желаемое за действительное, процитируете мои слова, где, я говорил, что-то про "файлы"? Я опять, уже похоже третий раз повторяю — "всё делается через безопасность... И этого механизма вполне достаточно... А если не удобно, то надо делать спец. тутлузу".
Хорошо, если вы настаиваете, поставим вопрос шире: возможно ли использовать модель безопасности Windows для организации замкнутости программной среды в общем случае?
AWW>Странный, вы всё-таки какой-то, зачем мне приписывать то чего я не говорил, и даже могу сказать больше... Мне это даже во сне не могло приснится! Файлы. Это вы все время с файлами боретесь, вместо того чтобы, один раз и до конца разобраться с моделью безопасности WINDOWS.
Вот давайте вместе и разберемся.
SS>>Пожалуйста, объясните мне: для каких типов объектов, кроме файловых, нужно установить атрибуты доступа, чтобы контролировать процедуру запуска процесса? Я просто не в курсе, потому и написал про NTFS.
AWW>Я вообще ничего не понял, вы простите на грубом слове несёте какой то детский лепет — Что такое "контролировать процедуру запуска процесса" Вы простите про что? Я вот уже почти 15 лет как занимаюсь системным программированием и не знал, что есть какая-то ОСОБАЯ процедура (Наверное в ядре ) которая "запускает" процессы.
Вместо того, чтоб ответить на вопрос по существу вы прицепились к слову. Несерьезно.
Мы ведь не обсуждаем вопросы процедурного программирования, но находимся в русле технической дискуссии о более общих проблемах, как-то: обсуждение механизмов защиты и способов их применения для организации замкнутости программной среды. Теперь поясню какое значение я вкладываю в термин "процедура" в предложенном контексте. Процедура — последовательность действий, необходимых к исполению для достижения какого-либо результата. Так понятно? Ну собственно, можно заглянуть в любой толковый словарь.
SS>>А, понял! Точно, надо установить запрет исполнения устройства. Блин, только вот не пойму какого. Подскажите, а?
AWW>Хотите можете явно указать "запрет", но я думаю что и просто "не разрешить чтение" будет вполне достаточно.
Для того чтобы запретить/разрешить исполнение, вполне достаточно манипуляций с атрибутом EXECUTE. Это, если хотите, необходимое и достаточное условие.
AWW>А что касается "какого" конкретно устройства, ну итдипенс...
Для какого конкретно устройства нужно настроить соответствующие атрибуты доступа, в случае необходимости блокировать запуск процессов со съемного USB-диска? Не торопитесь отвечать на этот вопрос, ниже я покажу, что это в принципе невозможно.
AWW>Ну могу только повторить — в windows, всё построено на объектах, объекты это ВСЁ и файлы и потоки и секции... Да всё, за редким-редким исключением... И как такового нет "Встроенный механизм разграничения доступа к файлам" есть к объектам...
Тут надо понимать, что есть пространство имен диспетчера обектов (device objetcs, driver objects, sections etc.), и дополнительные пространства имен: файловой системы, реестра, еще чего-нибудь. Так вот безопасностью рулит тот, кто пространство имен организует. В случае файлов — файловая система, в случае реестра — диспетчер конфигурации и т.п. Таким образом, при открытии файла диспетчер объектов не участвует в определении разрешенных прав доступа к объекту. Поэтому я сознательно опускаю в рассуждениях механизм разграничения доступа, реализованный в недрах диспетчера объектов. Расставьте любые атрибуты доступа на устройство, предствляющее том файловой системы, или физическое устройство диска, ассоциированное с устройством тома через VPB, — эти атрибуты будут просто игнорироваться при открытии файла на томе.
Поэтому установка атрибутов на объекты устройств не может повлиять на процедуру запуска процессов. Теперь понятно, почему я все время аппелирую к файлам?
AWW>Вы вообще в какой области специализируетесь? Что никогда не слышали про WinObj?
Кстати, я пользуюсь WinObjEx, она удобней — рекомендую.
SS>>Да, можно разграничить для уже присутствующих в системе файловых объектов, но не для вновь появляющихся в следствие монтирования новых томов.
AWW>Опять какой-то детский сад — да легко! Ну ура, и не раз уже делалось...
Не верю. Можно вас попросить описать метод настройки "бесопасности", как вы выражаетесь, с тем, чтобы на впоследствии примонтированном USB-диске доступ к файлам был соответствующим образом разграничен. Для полноты ощущений представим, что файловая система на USB-диске FAT32.
SS>>Основная проблема состоит в том, что вы не можете назначить атрибуты доступа тем объектам, которые еще не присутствуют в системе.
AWW>Да откуда же такая уверенность, что "не можете"... Вы что-нибудь про наследование слышали... Все тома монтируются на каких-то устройствах, так просто "ТОМОВ" не бывает...
Наконец-то мы добрались до корня ваших заблуждений. С точки зрения системы безопасности диспетчера объектов — том, это объект, для которого разграничивается доступ. Диспетчер объектов не делает никаких предположений о содержимом тома и, тем более, атрибутах доступа к сущностям, расположенным на томе. Все, что внутри тома, отдается на откуп файловой системе, которая этот том монтирует.
SS>>Если бы все было, как вы говорите, зачем MS ввела в Windows XP политику ограниченного использования программ, о которой я уже писал выше? Они, наверное, забыли у вас спросить, как реализовать замкнутость программной среды уже существующими на тот момент средствами?
AWW>Не знаю, это бизнес... Захотели сделали, а почему 1000 и одна причина может быть для этого...
AWW>А вообще, это что аргумент в пользу невозможности? Странный однако...
Какой-никакой, а аргумент. Хочется все-таки дождаться аргументов и вашей стороны.
AWW>PS:
AWW> Да кстати, процесс можно и вообще без исполняемого файла создать... Да вообще без файла... И все будет прекрасненько работать... И для этого даже админских прав не надо... Прямо из памяти...
Это как, заклинаниями? Опустим технические нюансы, которые, насколько я знаю, вам просто не позволят это сделать. Даже если представить, что вы умеете это делать, точнее вы написали эксплоит, который умеет плодить такие процессы, то в условиях корректно настроенной замкнутости программной среду, вы просто не сможете запустить свой эксплоит.
И, если вы все-таки будете продолжать упорствовать в своем намерении запустить такой фейковый процесс, то значит и ваша хваленая "безопаснось", на которую вы, судя по всему молитесь, не всемогуща?
SS>Хорошо, если вы настаиваете, поставим вопрос шире: возможно ли использовать модель безопасности Windows для организации замкнутости программной среды в общем случае?
Уточняю: политика ограниченного использования программ, появившаяся Windows XP, в расчет не принимается, исходя из условий оригинальной задачи. Ищем решение для всех NT-based OS
Здравствуйте, Andrew.W Worobow, Вы писали:
AWW> Да кстати, процесс можно и вообще без исполняемого файла создать... Да вообще без файла... И все будет прекрасненько работать... И для этого даже админских прав не надо... Прямо из памяти...
С нетерпением жду развития темы. И про процесс из пустого места и вообще про безопасность...
Здравствуйте, IID, Вы писали:
IID>Демагогия. Сергей задал конкретный вопрос, а вы ему гнете пальцы про 15 лет
Знаете. я думаю, что тибетские шаманы оценят конференцию нейро-хирургов вообще как сборише шарлотанов...
AWW>> Да кстати, процесс можно и вообще без исполняемого файла создать...
IID>чудеса да и только Создайте, а мы всем форумом внимательно понаблюдаем. Или опять сказано не подумав ?
Чудак-человек это наверное для вас чудеса... Конечно если вам и под досом больше 600Кб не удавалось получить то вполне может быть...
"Не допускается проявление грубого или неуважительного отношения к другим участникам форума. Оскорблять и обзывать собеседника, ставить под сомнение его профессиональную квалификацию, придираться к его нику, указывать на орфографические и синтаксические ошибки и т. д. запрещается."
Предлагаю не ставить под сомнение профессионализм ув. AWW, дабы не нарушить правила, а просто обратиться к ув. модераторам с нижайшей просьбой забанить участника за нарушение правил форума. IMHO Андрей вместо того, чтобы серьезно участвовать в конференции просто прикалывается и намерено провоцирует участников на нарушения правил.
Здравствуйте, Andrew.W Worobow, Вы писали:
SS>>Пожалуйста, объясните мне: для каких типов объектов, кроме файловых, нужно установить атрибуты доступа, чтобы контролировать процедуру запуска процесса? Я просто не в курсе, потому и написал про NTFS.
AWW>Я вообще ничего не понял, вы простите на грубом слове несёте какой то детский лепет — Что такое "контролировать процедуру запуска процесса" Вы простите про что?
SS>>Да, можно разграничить для уже присутствующих в системе файловых объектов, но не для вновь появляющихся в следствие монтирования новых томов.
AWW>Опять какой-то детский сад — да легко! Ну ура, и не раз уже делалось...
убедительная просьба или разъяснять свою позицию до уровня детского сада (т.е. с примерами для детсадовцев и ссылками) или прекратить нарушать пункт правил выше — модератор
... << RSDN@Home 1.2.0 alpha rev. 655>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Здравствуйте, Andrew.W Worobow, Вы писали:
IID>>Демагогия. Сергей задал конкретный вопрос, а вы ему гнете пальцы про 15 лет AWW> Знаете. я думаю, что тибетские шаманы оценят конференцию нейро-хирургов вообще как сборише шарлотанов... AWW> Да кстати, процесс можно и вообще без исполняемого файла создать... Да вообще без файла... И все будет прекрасненько работать... И для этого даже админских прав не надо... Прямо из памяти...
Андрей мне кажется я понимаю куда ты клонишь — но по-моему уже пора перестать трактовать про шаманов и провоцировать форум, а написать что именно имелось ввиду и какие там ограничения (а они есть).
IID>>чудеса да и только Создайте, а мы всем форумом внимательно понаблюдаем. Или опять сказано не подумав ? AWW> Чудак-человек это наверное для вас чудеса... Конечно если вам и под досом больше 600Кб не удавалось получить то вполне может быть...
по всем формальным признакам стоит выписать небольшой бан в профилактических целях, но мне не хочется лишать одну из сторон права защитить свою позицию. Посему предлагаю либо прекратить флуд про детсад и шаманов либо обсудить "имеющееся уже много лет решение" нормально — без эмоций и взаимных подколок. В противном случае дискуссия будет порезана и большей частью уедет в мусор как не имеющая смысла — модератор
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Здравствуйте, Sergey Storozhevykh, Вы писали:
SS>Для того, чтобы удовлетворить условиям вашего ТЗ, достаточно перехватить операцию открытия исполняемого файла. Т.е. предлагается контролировать процедуру открытия файлов на исполнение (FILE_EXECUTE). Соответственно, корректно это решается с помощью (мини)фильтра файловой системы. Можно, конечно, и ZwCreateFile перехватить, но этот вариант обладает уязвимостью (если делать в лоб).
насколько я помню, перехват в классическом (НТ4+) фильтре IRP_MJ_CREATE с целью контролировать FILE_EXECUTE приведет к следующей проблеме: невозможно отличить когда файл, скажем executable PE Image, имеющий право быть запущенным в т.ч. — просто открывается для чтения\MMF доступа или когда его реально хотят открыть с целью запуска
лучше уж сразу смотреть за созданием process' backed section и соотв. наводить контроль в этом месте — ZwCreateSection
... << RSDN@Home 1.2.0 alpha rev. 655>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Здравствуйте, Valery A. Boronin, Вы писали:
VAB>лучше уж сразу смотреть за созданием process' backed section и соотв. наводить контроль в этом месте — ZwCreateSection
каким образом "смотреть" ? пропатчив SDT ? тогда будут проблемы с поддержкой x64 платформ,
может быть в варианте с фильтром файловой системы можно использовать какую-то эвристику для определения того, что это именно CreateProcess
Здравствуйте, Ivan, Вы писали:
VAB>>лучше уж сразу смотреть за созданием process' backed section и соотв. наводить контроль в этом месте — ZwCreateSection I>каким образом "смотреть" ? пропатчив SDT ? тогда будут проблемы с поддержкой x64 платформ,
про 64 бита в ветке не было требования пока, хотя согласен — там делается иными способами
I>может быть в варианте с фильтром файловой системы можно использовать какую-то эвристику для определения того, что это именно CreateProcess
может быть. Согласен, вариантов решения может быть много, просто предложенный выше один из самых быстрых в реализации + собственно замечание было вызвано оригинальным текстом Сергея про решение на отлов FILE_EXECUTE в момент открытия и не более.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Здравствуйте, IID, Вы писали:
VAB>>лучше уж сразу смотреть за созданием process' backed section и соотв. наводить контроль в этом месте — ZwCreateSection
IID>а еще проще смотреть за ZwResumeThread, хоть это и хуки, которые вы нам несоветовали
по разным причинам может быть не проще. Кстати ZwCreateSection — естественно тоже хуки, кототорых я по-прежнему не советую
если есть официальные пути решения, т.е. без серьезной на то причины. А причина вроде невозможности отловить нечто необходимое другим (легальным) способом, согласитесь, может тянуть на серьезную, не так ли?
именно об этом случае и говорится — см. когда хуки оправданны — пункт 3.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
VAB>А причина вроде невозможности отловить нечто необходимое другим (легальным) способом, согласитесь, может тянуть на серьезную, не так ли?
Валера, на самом деле есть совершенно легальный путь, причем начиная с 2000'ых... Вот только народ постоянно путает security и safety... А разница между ними как между замком с контролькой и навороченным банковским... А по сути, все эти "блокировки запуска" не более чем защита от дурака...
Вот если уж кому надо, но только имейте ввиду, это не безопасность!
создайте в разделе \\Registry\\MACHINE\\System\\CurrentControlSet\\Control\\Session Manager\\AppCertDlls
ключ с именем AppSecDll типа REG_EXPAND_SZ, куда положите, что-то типа %SystemRoot%\system32\<ваша>.dll... На самом деле их там может быть много, имейте это ввиду.
В этой вашей dll'ке должна быть точка входа CreateProcessNotify ...
либо APPCERT_IMAGE_OK_TO_RUN = 1
либо APPCERT_CREATION_ALLOWED = 2 или APPCERT_CREATION_DENIED = 3
при вызове с APPCERT_IMAGE_OK_TO_RUN, вас как бы спрашивают "этот имедж ОК или нет"
Если вас программа устаривает то верните STATUS_SUCCESS, не устаривает верните STATUS_UNSUCCESSFUL...
при вызове с APPCERT_CREATION_ALLOWED или APPCERT_CREATION_DENIED, вас уведомляют об результатах голосования...
То есть — если APPCERT_CREATION_ALLOWED то процесс с этим именем будет образован, ну и если APPCERT_CREATION_DENIED то соответсвенно нет.
Даже если вы вернули APPCERT_IMAGE_OK_TO_RUN, а другая после вас загруженая такая же dll на этот образ вернет APPCERT_CREATION_DENIED, то будет действовать последний резьюм. Ну и наоборот.
Здравствуйте, Valery A. Boronin, Вы писали:
VAB>насколько я помню, перехват в классическом (НТ4+) фильтре IRP_MJ_CREATE с целью контролировать FILE_EXECUTE приведет к следующей проблеме: невозможно отличить когда файл, скажем executable PE Image, имеющий право быть запущенным в т.ч. — просто открывается для чтения\MMF доступа или когда его реально хотят открыть с целью запуска
Скорее всего вы имеете в виду проблему с LoadLibraryEx(LOAD_LIBRARY_AS_DATAFILE). Это API некорректно устанавливает атрибут исполнения в DesiredAccess при открытии файла, вследствие чего возможны ложные срабатывания. Это заметно напрягает, например, когда Explorer при отображении содержимого каталога запрашивает иконки из ресурсов бинарников.
А так, корректно написанная программа должна указывать FILE_EXECUTE только если она действительно хочет исполнить файл, FILE_READ — когда читать.
Здравствуйте, Andrew.W Worobow, Вы писали:
AWW>создайте в разделе \\Registry\\MACHINE\\System\\CurrentControlSet\\Control\\Session Manager\\AppCertDlls
AWW>ключ с именем AppSecDll типа REG_EXPAND_SZ, куда положите, что-то типа %SystemRoot%\system32\<ваша>.dll... На самом деле их там может быть много, имейте это ввиду.
AWW>В этой вашей dll'ке должна быть точка входа CreateProcessNotify ...
Интересно. Пожалуй, это самый простой сбособ получить требуюмую функциональность. По крайне мере, проще, чем писать файловый фильтр . Но, как и в случае фильтра, требуется разрабатывать свой модуль, реализующий защитный механизм. Так что полностью встроенными средствами, по-видимому, никак?
AWW>NTSTATUS CreateProcessNotify ( LPCWSTR lpApplicationName, ULONG Reason );
Ну остается только добавить, что соглашение о вызовах — STDCALL.