Здравствуйте, WolfHound, Вы писали:
WH>Ты вобще чего под "обычными" понимаешь? WH>Тут под этим стовом имелись в виду "нативные" приложения.
Я под "обычными" понимаю то, что мы привыкли назвать "пользовательским приложением" в классической ОС — т.е. приложение, возможности которого ограничены аппаратной защитой, встроенной в процессор.
DOO>>Т.е. один фиг есть разделение на привилегированные приложения и не очень. WH>Оно есть вобще во всех системах которые претендуют на жизнь. WH>Разница в том как эти привилегии раздаются и проверяются.
Разговор здесь начался с того, что в управляемой среде можно отказаться от аппаратной защиты и переключений контекста. А сейчас приходим к тому, что один фиг — режим ядра будет. Переключение контекста тоже будет, возможно реже.
Здравствуйте, DOOM, Вы писали:
DOO>Я под "обычными" понимаю то, что мы привыкли назвать "пользовательским приложением" в классической ОС — т.е. приложение, возможности которого ограничены аппаратной защитой, встроенной в процессор.
Такие нафиг не нужны.
Разве что только легаси но это совершенно отдельная история.
DOO>Разговор здесь начался с того, что в управляемой среде можно отказаться от аппаратной защиты и переключений контекста. А сейчас приходим к тому, что один фиг — режим ядра будет.
Нет не будет.
Откуда ты это вобще взял?
DOO>Переключение контекста тоже будет, возможно реже.
Только если на 32х битной системе нужно будет больше 4 гигов памяти.
На 64х битах вобще никаких переключений не будет.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, Sinclair, Вы писали:
S>Откуда вообще берутся объекты FileStream? Понятно, что кто-то их создает.
Драйвер файловой системы.
S>Понятно, что по логике для недоверенного кода единственная возможность получить FileStream — это вызвать диалог открытия файла, который сам по себе реализован в доверенном коде и обязательно спросит у пользователя подтверждения. S>Непонятно, каким образом конструктор FileStream в одном случае вернет объект, а в другом — выкинет PermissionException. В случае CAS это делается путем проверки Execution Stack. Каким образом система типов поможет этого добиться?
В отсутствие глобального состояния единственный способ получить какойто внешний объект это обратится к сервису имен. Типа как в сингулярити.
Сервисы имен можно выстраивать в цепочку.
И в каждом звене можно делать любые проверки.
Добавлять и удалять целые куски пространства имен.
Таким образом у нас есть некий общисистемный севис имен. Прямой доступ к нему имеют очень не многие.
Потом для каждого юзера заводим свой сервис имен который ссылается на общисистемный сервис имен и производит фильтрацию.
Для каждого приложения свой сервис имен который ссылается на сервис имен юзера от имени которого работает приложение.
Приложение внутри себя может создать еще более урезанный сервис имен.
Итд.
S>Каким образом система типов поможет мне добиться изменения поведения системы после того, как администратор руками выдал доверие некоторому коду?
Просто меняем поведение фильтров.
S>Каким образом система типов поможет мне добиться устранения избыточных проверок в коде после того, как администратор руками выдал ему доверие?
Пару десятков тактов при открытии файла экономим? Ты уверен что это вобще имеет смысл рассматривать?
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, Sinclair, Вы писали:
S>>Откуда вообще берутся объекты FileStream? Понятно, что кто-то их создает. WH>Драйвер файловой системы.
Ну, в терминах flat model никаких "драйверов" нет — все работают в одном и том же кольце. Кстати, запрет обращаться к HAL тоже должен быть как-то реализован.
WH>В отсутствие глобального состояния единственный способ получить какойто внешний объект это обратится к сервису имен.
Да-да, чем тебе CreateFile не сервис имен? WH>Типа как в сингулярити. WH>Сервисы имен можно выстраивать в цепочку. WH>И в каждом звене можно делать любые проверки. WH>Добавлять и удалять целые куски пространства имен.
Это не имеет отношения к вопросу. Вот тебе реалистичная задачка: приложение может открыть файл autoexec.bat, но только если пользователь сам выбрал его через File Open Dialog. Напрямую оно открыть его не может.
Это означает, что разные фрагменты кода имеют доступ к разным "сервисам имен". Даже несмотря на то, что исполняются в контексте одного и того же процесса.
WH>Таким образом у нас есть некий общисистемный севис имен. Прямой доступ к нему имеют очень не многие.
Каким образом определяется, кто имеет, а кто не имеет? Как это описать в системе типов? WH>Потом для каждого юзера заводим свой сервис имен который ссылается на общисистемный сервис имен и производит фильтрацию.
На основании чего он производит фильтрацию? Как это описать в системе типов? WH>Для каждого приложения свой сервис имен который ссылается на сервис имен юзера от имени которого работает приложение. WH>Приложение внутри себя может создать еще более урезанный сервис имен. WH>Итд.
WH>Просто меняем поведение фильтров.
Как это описать в системе типов?
На всякий случай поясню, что в дотнете система фильтров называется CAS, и именно ее ты критиковал здесь
. S>>Каким образом система типов поможет мне добиться устранения избыточных проверок в коде после того, как администратор руками выдал ему доверие? WH>Пару десятков тактов при открытии файла экономим?
Пару десятков тысяч тактов в случае более-менее сложных фильтров. WH>Ты уверен что это вобще имеет смысл рассматривать?
Конечно. Не все защищаемые ресурсы нас такие крупноблочные.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
DOO>>Разговор здесь начался с того, что в управляемой среде можно отказаться от аппаратной защиты и переключений контекста. А сейчас приходим к тому, что один фиг — режим ядра будет. WH>Нет не будет. WH>Откуда ты это вобще взял?
Есть же более привилегированный HAL — сам же выше написал. А как ты отличишь HAL от менее привилегированной программы, если не будет строго разделения на режим ОС и пользовательский? Ну и не надо забывать, что управляемость управляемостью, а исполняться-то все будет в неуправляемой аппаратной среде.
Здравствуйте, DOOM, Вы писали:
DOO>Есть же более привилегированный HAL — сам же выше написал. А как ты отличишь HAL от менее привилегированной программы, если не будет строго разделения на режим ОС и пользовательский? Ну и не надо забывать, что управляемость управляемостью, а исполняться-то все будет в неуправляемой аппаратной среде.
Неуправляемая аппаратная среда — это сильно. Что ты этим хотел сказать?
Здравствуйте, _d_m_, Вы писали:
___>Здравствуйте, DOOM, Вы писали:
DOO>>Есть же более привилегированный HAL — сам же выше написал. А как ты отличишь HAL от менее привилегированной программы, если не будет строго разделения на режим ОС и пользовательский? Ну и не надо забывать, что управляемость управляемостью, а исполняться-то все будет в неуправляемой аппаратной среде.
___>Неуправляемая аппаратная среда — это сильно. Что ты этим хотел сказать?
А то, что после всех JIT'ов и ngen'ов твоя программа это набор машинных кодов. И если отключена аппаратная защита, то начинается настоящий DOS: все могут все. И в порт написать, и в любую ячейку памяти и вообще все, что угодно делать. Поэтому любой обход JIT'а, любыми способами приведет к тому, что программа захватит всю систему целиком. Значит надо понимать, кто имеет право на привилегированную работу, а кто нет. HAL имеет такое право, другие программы — нет.
Здравствуйте, Sinclair, Вы писали:
S>Ну, в терминах flat model никаких "драйверов" нет — все работают в одном и том же кольце.
A device driver, or software driver, is a computer program allowing higher-level computer programs to interact with a device.
S>Кстати, запрет обращаться к HAL тоже должен быть как-то реализован.
Нет ссылки на HAL нет обращения к HAL.
Все просто.
WH>>В отсутствие глобального состояния единственный способ получить какойто внешний объект это обратится к сервису имен. S>Да-да, чем тебе CreateFile не сервис имен?
Он имеет все проблемы синглетонов.
Хрен проконтролируешь.
Хрен наложишь ограничения.
...
S>Это не имеет отношения к вопросу. Вот тебе реалистичная задачка: приложение может открыть файл autoexec.bat, но только если пользователь сам выбрал его через File Open Dialog. Напрямую оно открыть его не может.
Идет в сервис имен.
Просит сервис открытия файла.
... S>Это означает, что разные фрагменты кода имеют доступ к разным "сервисам имен".
И что такого? S>Даже несмотря на то, что исполняются в контексте одного и того же процесса.
Процессы в управляемой ОС дешевле фиберов в венде. Со всеми вытекающими.
S>Каким образом определяется, кто имеет, а кто не имеет? Как это описать в системе типов?
Если нет глобальных данных мы можем это реализовать.
Есть не можем. И как следствие приходится наворачивать костыли типа CAS.
Вот причем тут система типов.
S>Пару десятков тысяч тактов в случае более-менее сложных фильтров. Это для CAS. Тут все сильно проще и эффективней.
S>Конечно. Не все защищаемые ресурсы нас такие крупноблочные.
Например?
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, DOOM, Вы писали:
DOO>Есть же более привилегированный HAL — сам же выше написал.
Где?
Цитату приведи.
DOO>А как ты отличишь HAL от менее привилегированной программы, если не будет строго разделения на режим ОС и пользовательский?
А надо?
DOO>Ну и не надо забывать, что управляемость управляемостью, а исполняться-то все будет в неуправляемой аппаратной среде.
И?
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, DOOM, Вы писали:
DOO>А то, что после всех JIT'ов и ngen'ов твоя программа это набор машинных кодов. И если отключена аппаратная защита, то начинается настоящий DOS: все могут все.
Не могут.
Система типов не пропустит.
DOO>И в порт написать, и в любую ячейку памяти и вообще все, что угодно делать.
Как?
DOO>Поэтому любой обход JIT'а, любыми способами приведет к тому, что программа захватит всю систему целиком.
Как?
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
S>>Каким образом определяется, кто имеет, а кто не имеет? Как это описать в системе типов? WH>Если нет глобальных данных мы можем это реализовать. WH>Есть не можем. И как следствие приходится наворачивать костыли типа CAS. WH>Вот причем тут система типов.
Всё понятно. В общем, будем иметь тот же CAS, построенный на другой основе. На всякий случай напомню, что CAS — это Code Access Security, общий термин, применяемый для описания любой системы, где политика доступа определяется не только свойствами субъекта (пользователя) и объекта (ресурса), но так же и свойствами кода, который выполняет доступ к объекту от имени и по поручению субъекта.
Под это определение попадают также и предлагаемые тобой фильтры — поскольку они применяются не на уровне пользователя, а на уровне, скажем, приложения.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Всё понятно. В общем, будем иметь тот же CAS, построенный на другой основе. На всякий случай напомню, что CAS — это Code Access Security, общий термин, применяемый для описания любой системы, где политика доступа определяется не только свойствами субъекта (пользователя) и объекта (ресурса), но так же и свойствами кода, который выполняет доступ к объекту от имени и по поручению субъекта.
Вот только все ссылки по этому термину идут на конкретный костыль имени мелкософт.
Не считая совсем оффтопичных.
S>Под это определение попадают также и предлагаемые тобой фильтры — поскольку они применяются не на уровне пользователя, а на уровне, скажем, приложения.
Мои фильтры гораздо точнее попадают под capability-based_security
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, DOOM, Вы писали:
DOO>>А то, что после всех JIT'ов и ngen'ов твоя программа это набор машинных кодов. И если отключена аппаратная защита, то начинается настоящий DOS: все могут все. WH>Не могут. WH>Система типов не пропустит.
Какая система типов после компиляции программы и заточки ее под платформу — т.е. когда уже есть конкретно набор машинных кодов и все?
DOO>>И в порт написать, и в любую ячейку памяти и вообще все, что угодно делать. WH>Как?
mov, in, out вот как...
DOO>>Поэтому любой обход JIT'а, любыми способами приведет к тому, что программа захватит всю систему целиком. WH>Как?
Если она обойдет JIT — ну не знаю как, модифицировав свой закэшированный образ на диске или еще как... Ведь HAL умеет общаться к диску напрямую, но при этом ты говоришь, что ему не надо быть каким-то особым процессом.
Здравствуйте, DOOM, Вы писали:
DOO>Какая система типов после компиляции программы и заточки ее под платформу — т.е. когда уже есть конкретно набор машинных кодов и все?
Такая.
Код скомпилирован так что никто ничего кроме того что явно разрешено не может.
Это тебе не С/С++ где всем все можно.
DOO>mov, in, out вот как...
А откуда они возьмутся?
DOO>Если она обойдет JIT — ну не знаю как, модифицировав свой закэшированный образ на диске или еще как...
Кто?
HAL? Написанный и сертифицированный разработчиком ОС.
Драйвер винта? Написанный и сертифицированный разработчиком ОС. При этом не имеющий представления о том что там за ФС.
Драйвер ФС? Написанный и сертифицированный разработчиком ОС. Более того он уже не знает на какой аппаратной платформе он работает. Он не знает что там внизу x86 или альфа. Дравер винта скорей всего тоже. Я так гдубоко не забирался.
Так же драйвер ФС не знает что там за блочное устройство. Ему до лампочки что это. Винт, аппаратный рейд, софтовый рейд, кусок памяти который прикинулся блочным устройством,...
DOO>Ведь HAL умеет общаться к диску напрямую, но при этом ты говоришь, что ему не надо быть каким-то особым процессом.
Что в твоем понимании "особый процесс"?
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Кто? WH>HAL? Написанный и сертифицированный разработчиком ОС. WH>Драйвер винта? Написанный и сертифицированный разработчиком ОС.
Это уже оптимистично.
WH>При этом не имеющий представления о том что там за ФС.
А это не важно.
WH>Драйвер ФС? Написанный и сертифицированный разработчиком ОС.
Это тоже очень оптимистично.
DOO>>Ведь HAL умеет общаться к диску напрямую, но при этом ты говоришь, что ему не надо быть каким-то особым процессом. WH>Что в твоем понимании "особый процесс"?
Процесс, имеющий, например, возможность прямого доступа к устройствам или памяти — HAL его имеет.
Здравствуйте, DOOM, Вы писали:
WH>>Драйвер винта? Написанный и сертифицированный разработчиком ОС. DOO>Это уже оптимистично.
Да ладно.
Такие вещи пишут либо разработчики ОС. Либо разработчики железа, а разработчики ОС это дело сертифицируют.
Ни те ни другие не будут вставлять закладки.
WH>>При этом не имеющий представления о том что там за ФС. DOO>А это не важно.
Ну да. EXT3, Reiser4 и NTFS ну совсем не различаются.
WH>>Драйвер ФС? Написанный и сертифицированный разработчиком ОС. DOO>Это тоже очень оптимистично.
Ну если юзер сумел запустить свою ОС на ФС которую не сертифицировал производитель ОС то он наверное знает что делает и доверяет разработчикам этой ФС.
В любом случае если вклиниться на этот уровень в абсолютно любой ОС можно сделать с этой ОС все что угодно не смотря на любой тип защиты в том числе аппаратный.
DOO>Процесс, имеющий, например, возможность прямого доступа к устройствам или памяти — HAL его имеет.
Ну да. В HAL есть код который это может.
В других частях системы такого кода нет.
И прорватся они к нему не могут благодоря системе типов.
Ну не получат они ссылку на HAL.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, DOOM, Вы писали:
WH>>>Драйвер винта? Написанный и сертифицированный разработчиком ОС. DOO>>Это уже оптимистично. WH>Да ладно. WH>Такие вещи пишут либо разработчики ОС. Либо разработчики железа, а разработчики ОС это дело сертифицируют. WH>Ни те ни другие не будут вставлять закладки.
Зачем закладки? Достаточно какой-нибудь ошибки.
WH>>>При этом не имеющий представления о том что там за ФС. DOO>>А это не важно. WH>Ну да. EXT3, Reiser4 и NTFS ну совсем не различаются.
Это здесь при чем?
WH>И прорватся они к нему не могут благодоря системе типов. WH>Ну не получат они ссылку на HAL.
Ну допустим он ее не получит через какие-то стандартные функции, а где гарантия, что он туда не залезет обходными путями? Через тоже переполнение массива? Где гарантия, что он не сможет вызвать невидимый ему сервис каким-то альтернативным образом?
Тут появляется много вопросов на уровне реализации — на том уровне, где уже управляемостью и не пахнет.
Здравствуйте, DOOM, Вы писали:
DOO>Зачем закладки? Достаточно какой-нибудь ошибки.
Еще раз: Ошибка или закладка в этом месте будет фатальна для АБСОЛЮТНО ЛЮБОЙ ОС.
WH>>Ну да. EXT3, Reiser4 и NTFS ну совсем не различаются. DOO>Это здесь при чем?
При том что драйверу винта нужно еще знать что там за ФС чтобы что-то в ней поправить.
Да и система комманд процессора понадобится.
И еще много чего.
Такую кучу кода очень трудно не заметить.
DOO>Ну допустим он ее не получит через какие-то стандартные функции, а где гарантия, что он туда не залезет обходными путями?
Какими?
Тут capability-based security она теоритически не пробиваема.
Те не дали тебе ручку и не видать тебе доступа.
DOO>Через тоже переполнение массива?
В управляемом коде их нет.
Вобще.
Доказано.
DOO>Где гарантия, что он не сможет вызвать невидимый ему сервис каким-то альтернативным образом?
Каким?
DOO>Тут появляется много вопросов на уровне реализации — на том уровне, где уже управляемостью и не пахнет.
Ты не понимаешь.
Она везьде.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
DOO>>Через тоже переполнение массива? WH>В управляемом коде их нет. WH>Вобще. WH>Доказано.
Угу. Только вот выше было обсуждение, что не все так просто — либо арифметику урезать, либо каждый раз перед обращением проверку делать, что не очень-то хорошо скажется на производительности.
DOO>>Тут появляется много вопросов на уровне реализации — на том уровне, где уже управляемостью и не пахнет. WH>Ты не понимаешь. WH>Она везьде.
Да как это везде! Опять же выше уже говорили, что никто не собирается делать ОС, в которой все будет JIT'ится — будут уже готовые бинарники, т.е. всё — управляемость кончилась. Теперь вся надежда только на контроль целостности бинаря. В конце-концов, даже если JIT'ятся, то будет какой-то кэш для ускорения работы — тогда просто объект атаки (защиты) сужается до этого кэша.
Ну не верю я, что при таких условиях можно все сделать и нигде ничего не пропустить или ошибиться.
Здравствуйте, DOOM, Вы писали:
DOO>Угу. Только вот выше было обсуждение, что не все так просто — либо арифметику урезать, либо каждый раз перед обращением проверку делать, что не очень-то хорошо скажется на производительности.
Там так же сказано что большая часть этих проверок легко устранается оптимизатором.
DOO>Да как это везде!
Так!
DOO>Опять же выше уже говорили, что никто не собирается делать ОС, в которой все будет JIT'ится — будут уже готовые бинарники, т.е. всё — управляемость кончилась.
Эти готовые бинарники компилятся все тем же компилятором из того же байткода со всеми проверками.
В бинарном виде они поставляются только из-за того что что-то должно выполняться ибо байткод сам себя на произвольном процессоре не запустит. Ему bootstrap нужен.
DOO>Теперь вся надежда только на контроль целостности бинаря.
Ну иди сломай цифровую подпись.
Особенно если она параноидальная:
Те берем N хешей на разных принципах.
M ассиметричных шифраторов на разных принципах.
И все! Можно скомпромитировать N — 1 хешей и M — 1 шифраторов. Но подпись будет держаться.
При N == M == 2 мы уже получаем не ломаемую на практике подпись.
DOO>В конце-концов, даже если JIT'ятся, то будет какой-то кэш для ускорения работы — тогда просто объект атаки (защиты) сужается до этого кэша.
А что будет с линухом если вирь ему ядро подменит?
DOO>Ну не верю я, что при таких условиях можно все сделать и нигде ничего не пропустить или ошибиться.
Это не вопрос веры.
Это вопрос доказательств.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн