WolfHound wrote: > C>Есть такая замечательная штука — NX-bit. > Как это спасает от изменения адреса возврата?
А куда пихать код эксплоита? Ну динамическую память тоже ставится
NX-bit, а статические буфферы — в сегменте стека (и тоже NX).
В принципе, изредка остается еще ниндзя-трюк jump-to-library, но и от
него можно защититься.
> C>Точно! Мааачить программистов CLR VM! (там это тоже используется). > А где я говорил что CLR идеальна?
Это как раз пример того, что хакерские техники иногда нужны и важны.
Здравствуйте, Cyberax, Вы писали:
C>А тогда пропадут многие преимущества Fully Managed OS, работающей в плоской памяти.
А как плоская память отменяет виртуальную? Вот у меня на машине есть всего гиг физической. В вот адресного пространства за счет этой самой виртуально памяти 4 гига.
C>Ну так по сути драйвера современных ОС — это просто драйвера для "каналов". Но только это не делает их проще.
Ну вот они и будут работать в управляемом коде. В чем проблема то?
C>Подумай, например, как ты будешь реализовывать каналы для показа HDTV-видео или передачи информации в видеокарту из Doom3.
shared memory уже отменили? Читай как в сингулярити передают большие объемы данных через каналы.
>> За тем что как я показал выше писать вторую ОС не нужно. C>Нужно. Например, что произойдет, если одно виртуальное приложение решит запустить другое?
Обратится через специальный канал к ОС или другому процессу. C>А как насчет динамической подгрузки модулей?
А с этим то какая проблема?
C>Сейчас это 99% (если не больше) всех приложений. Чтобы произошел переход на Managed OS это число должно быть близко к 0.
Дело в том что эти приложения просто так реализованы. Большей части из них нитивный код или даже unsafe нафиг не упал.
C>Спрашивается, а нафига кому-то надо с ноля переписывать работающие системы, чтобы в светлом будущем можно было сделать не особо нужную Managed OS?
Совершенно не согласен.
И на то есть два убойных аргумента:
1)Надежность.
2)Независимость от железа.
C>Вот сейчас реально есть IPv6, который уже используется в backbone-сетях Интернета и поддерживается практически во всех OS (плевать, что в некоторых ОСях только через командную строку). Почему все еще не перешли на правильный и красивый IPv6?
Я не в теме.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, Cyberax, Вы писали:
C>А куда пихать код эксплоита? Ну динамическую память тоже ставится NX-bit, а статические буфферы — в сегменте стека (и тоже NX).
Придумают.
C>В принципе, изредка остается еще ниндзя-трюк jump-to-library, но и от него можно защититься.
Ну вот ты уже и придумал.
C>Это как раз пример того, что хакерские техники иногда нужны и важны.
Глубоко в ядре. В реальном коде ниразу нужно небыло.
Кстати, а зачем это в CLR?
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, dimon0981, Вы писали:
D>SMTP — запускать процессы не может, он вообще протокол. А вот SMTP сервер может (это относится к подавляющему большенству распространненых SMTP серверов).
Козе понятно что сервер. Вот только зачем ему запускать другие процессы?
WH>>И что и куда подгрузил червь? D>В первом запросе свою небольшую часть. А после передачи ей управления подгрузил остальную. Они все так делают.
Еще раз как в управляемой ОС где теоритически не может быть всяких там переполнений буфера этот код получит управление?
D>Этой возможностью пользуются все современные оптимизирующие компиляторы во время "агресивной оптимизации".
ЧЕГО? Зачем нужно класть код в стек? Ниразу не видел чтобы оптимизаторы это делали.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>>>И что и куда подгрузил червь? D>>В первом запросе свою небольшую часть. А после передачи ей управления подгрузил остальную. Они все так делают. WH>Еще раз как в управляемой ОС где теоритически не может быть всяких там переполнений буфера этот код получит управление?
Убедил. Давай сюда эту самую управляемую ОС — Singularity . Где ее можно скачать/купить? Надеюсь она обеспечит мне и пользователям моего софта чувство защищенности и массу других обещаемых "вкусностей".
И AlexLion-у, затеявшему эту беседу, тоже посоветуем ею пользоватся вместо strcat-ов и sprintf-ов старых. Убережем его от убогих систем и языков.
Ну... Где ее можно скачать?
Здравствуйте, dimon0981, Вы писали:
D>Убедил. Давай сюда эту самую управляемую ОС — Singularity . Где ее можно скачать/купить? Надеюсь она обеспечит мне и пользователям моего софта чувство защищенности и массу других обещаемых "вкусностей". D>И AlexLion-у, затеявшему эту беседу, тоже посоветуем ею пользоватся вместо strcat-ов и sprintf-ов старых. Убережем его от убогих систем и языков. D>Ну... Где ее можно скачать?
Напиши в Microsoft Research может быть дадут.
И главное учти что у нас тут философия программирования и обсуждаются тут не только и не столько текущее положение дел сколько то куда мы катимся и куда нам катится нужно.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, dimon0981, Вы писали:
D>>Убедил. Давай сюда эту самую управляемую ОС — Singularity . Где ее можно скачать/купить? Надеюсь она обеспечит мне и пользователям моего софта чувство защищенности и массу других обещаемых "вкусностей". D>>И AlexLion-у, затеявшему эту беседу, тоже посоветуем ею пользоватся вместо strcat-ов и sprintf-ов старых. Убережем его от убогих систем и языков. D>>Ну... Где ее можно скачать?
WH>Напиши в Microsoft Research может быть дадут.
Здравствуйте, AlexLion, Вы писали:
AL>Всем привет!
AL>Ситуация тривиальная — есть наша функция, скажем BuildAndInvokeQuery. Эта функция принимает некоторое кол-во параметров и формирует из них строку, которотую отдает другой функции, скажем InvokeQuery. AL>Т.е все происходит где-то так:
AL>
AL>int BuildAndInvokeQuery( ... )
AL>{
#define XXX 1234 /*если C */const std::size_t XXX=1234; //если C++
AL> char szQueryParam[ ХХХ ] = {0};
AL> // здесь идет формирование szQueryParam
/*strnxxx rulez!!!*/
szQueryParam[XXX-1] = 0; /*strnxxx имеют гадкую привычу
//не терминатить строку если упираются в границу */
AL> return InvokeQuery( szQueryParam );
#undef XXX /*если C */
AL>}
AL>
__________
16.There is no cause so right that one cannot find a fool following it.
Здравствуйте, Cyberax, Вы писали:
C>ОС со стабильной работой даже в присутствие _аппаратных_ сбоев уже лет C>30 существуют.
Ага. Эрланг называется. Причем пашет даже под Виндовс.
C>Защита достигается разделением и максимальной изоляцией всего, что C>только разделяется и изолируется. В качестве примера я уже приводил QNX C>- его используют на ядерных электростанциях, а его ядро представляет из C>себя небольшой кусок кода.
QNX не дает надежности. Это ведь ОС реального времени, а не безопасная ОС. Любой кривой указатель введет из строя любое приложение QNX. В этом отношении QNX ни чем не отличаетсяот Виндовс или Линукса.
Апаратная защита адрессного пространства процесса позволяет только лишь упростить выявление ошибок в некоторых случаях.
Сингулярити же гарантирует от ошибок связанных с нарушением типизации. Ее инсталляторы просто не пропустят небезопасный код.
Ну, а в остальном это та самая микроядерная ОС только без оверхэда на межпроцессное взаимодействие. В отличии от QNX в Сингулярити без проблем можно загружать компоненты одного приложения в разные процессы.
C>Так что проблема надежности уже давно решена.
Языком в основном... к сожалению.
C> Остается проблема скорости C> — в этом направлении сейчас тоже активно копают, можно почитать ответы C>Таненбаума Линусу. Возможно, скоро Mac OS X станет первой C>consumer-версией ОС с микроядром.
Еще раз. Микроядерность сама по себе не решает проблему надежности. А вот типобезопасть как класс устраняет ряд трудновыяляемых ошибок и действительно повышает надежность. Правда тоже не устраняет саму проблему.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, WolfHound, Вы писали:
WH>Допустим появились два приложения одно чуть быстрее, ест меньше памяти и иногда падает и второе чуть медленней, ест несколько больше памяти и работает стабильно.
Не, будет по другому. Появилось одно приложение, а конкуренты на С++ пытаются зарелизить свой багодром временами урывая минутку чтобы потрепаться о Ди в этом форуме.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, McSeem2, Вы писали:
MS>Пусть своим бездарям кумарам раджешам запрещают, а я уж сам решу что мне использовать, а что — нет.
Самые лучшие программисты — это те, кто осознают ограниченность своих возможностей. В то же время худшие программисты твердо убеждены в своей непогрешимости и безошибочности. (C)
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>К чему это перечисление? Я имел ввиду, что появляется дополнительное звено между языком высокого уровня и железом. Понятно, что раз появляется, то у него есть какая-то функциональность.
Здравствуйте, Cyberax, Вы писали:
C>Лично в моем проекте такие ошибки не создают ну абсолютно никаких проблем.
И тебе — тоже цитата.
Самые лучшие программисты — это те, кто осознают ограниченность своих возможностей. В то же время худшие программисты твердо убеждены в своей непогрешимости и безошибочности. (С)
Здравствуйте, Дарней, Вы писали:
ГВ>>К чему это перечисление? Я имел ввиду, что появляется дополнительное звено между языком высокого уровня и железом. Понятно, что раз появляется, то у него есть какая-то функциональность. Д>появляется. и что?
Да нет, ничего. Только веселья добавится. Будет N железок и M платформ уровня виртуальной машины + K платформ класса операционных систем. Плюрализм, однако.
<< Под музыку: Inti-Illimani — Vuelvo >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Да нет, ничего. Только веселья добавится. Будет N железок и M платформ уровня виртуальной машины + K платформ класса операционных систем. Плюрализм, однако.
Лезть внутрь тебя никто не заставляет. Уровни абстракции для того и придуманы, чтобы скрывать особенности нижележащих уровней.
Здравствуйте, Дарней, Вы писали:
ГВ>>Да нет, ничего. Только веселья добавится. Будет N железок и M платформ уровня виртуальной машины + K платформ класса операционных систем. Плюрализм, однако.
Д>Лезть внутрь тебя никто не заставляет. Уровни абстракции для того и придуманы, чтобы скрывать особенности нижележащих уровней.
Понимаешь ли, я всего лишь опубликовал своё наблюдение. По сути, это был комментарий к характеристике разработки Singularity, как к "очень верному направлению". А я намекнул, что этих "очень верных" направлений окажется великое множество. Ну, может быть, не великое. Не больше десятка.
<< Под музыку: Inkuyo — San Juanito De Medianoche >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, dimon0981, Вы писали: D>ЭЭэээ... Простите, а как Ваша программа попадет на удаленный компьютер? А если даже и попадет кто ей передаст управление? Ошибки переполнения буфера как раз таки позволяют это сделать. Вот когда научитесь исполнять свой код на удаленном компе тогда и память кушайте и руткиты устанавливайте и все на что фантазии и прав хватит.
Практика показывает, что изолировать машину от внешнего кода можно только в тепличных условиях типа АЭС или МКС. Во всех остальных случаях даже ломать не надо — "сами все предложат и сами все дадут", (с) Булгаков.
Вспомните разговоры об изоляции приложений, которые ходили во времена разработки полуоси (и повторяемые для NT): "теперь вирус невозможен в принципе, потому что одно приложение не может добраться до другого приложения, аппаратная защита, бла-бла-бла"... И что мы имеем теперь? Количество вирусов для изолированной системы давно превысило оное для DOS. А все почему? Да потому, что слишком много общих ресурсов, доступ к которым контролируется со слишком грубой гранулярностью. Оказалось, что не вирусу не нужно гадить в память чужого приложения — достаточно порыться в реестре или на диске. У операционной системы нет возможности контролировать происходящее, потому как для нее все вызовы FileCreate совершенно равнозначны.
Основные пути проникновения вредоносного кода:
— программы, запускающие внешний код:
-- Мэйлеры и браузеры, рискующие делать глупости типа запуска превью для приехавших данных
-- средства автоматизации, исполняющие скрипты VBA
— дыры в программах, которые в общем-то не хотели запускать чужой код, но им переполнили буфер
— развод лохов на запуск аттачментов с вирусами
Что мы имеем? Безопасная ОС в принципе не даст использовать никакие дыры и исполнить код, если ты не собирался этого делать.
Все остальное можно контролировать при помощи CAS, хотя пока нет устоявшейся практики, говорить об этом рано. Дело в том, что люди — реальны, и им зачастую неудобны математически идеальные вещи. Вот вам пример: ни один браузер сейчас не даст джаваскрипту залить на сервер пачку файлов. Единственная дырдочка — это input type=file. Увы, он катастрофически неудобен для массовой заливки, к примеру, фотографий. Поэтому все российские центры цифровой фотопечати предлагают... Скачать и запустить exe, который это обходит. С этого момента безопасность исчезает, и начинается экстремальный секс. Потому что приходится верить, что этот центр не встроил спайвару в аплоадер, что это вообще сайт центра фотопечати, а не хакер в соседнем подъезде, окучивший ближайший DNS сервер, и т.п.
Ладно, изобретем мы CAS. Дальше что? Как мы будем ограничивать права этого выкачанного кода? Заставим пользователя выбирать файлы по одному, через все тот же Open Dialog? Получится та же неудобная хрень. Разрешим выбирать файлы пачкой? А вдруг он заодно потащит с собой мой файл от MS Money? Далее, надо ограничить выход в интернет. Куда? Жестко привязывать к адресу, откуда приехал код? Или дать пользователю возможность выбирать?
В итоге, есть риск, что пользователь, задолбанный вопросами типа "а можно открыть вот этот файл на чтение? А можно мне подключиться к такому-то серверу? А можно я теперь отправлю прочитанные данные на этот сервер?", просто поставит галку "отвали и больше не спрашивай". После чего безопасность вернется к уровню, близкому к эпохе DOS. См. тж. фильм "как украсть миллион" по поводу обхода совершенных техсредств защиты с помощью социальной инженерии.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, WolfHound, Вы писали:
WH>>Допустим появились два приложения одно чуть быстрее, ест меньше памяти и иногда падает и второе чуть медленней, ест несколько больше памяти и работает стабильно.
VD>Не, будет по другому. Появилось одно приложение, а конкуренты на С++ пытаются зарелизить свой багодром временами урывая минутку чтобы потрепаться о Ди в этом форуме.
Нет пока стороники C# тут рекламируют N (они бедняги на C# писать уже не хотят, а на N пока не могут) уже выходит второй релиз программы на C++