Re[4]: Сказка о циничном ученом, простреленных ногах разрабо
От: Lloyd Россия  
Дата: 31.10.08 11:19
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Смотрим на листбокс и обнаруживаем там нечто интересное


А теперь то же самое — для WPF-приложения
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re[12]: Сказка о циничном ученом, простреленных ногах разраб
От: Pavel Dvorkin Россия  
Дата: 31.10.08 11:21
Оценка:
Здравствуйте, vayerx, Вы писали:

V>случается, редко, конечно, но все же встречается крохотная часть кода, посвещенная непосредственно предметной области. вы же не будете утверждать, что весь софт пишется исключительно для веба или "около веба"? примеры с калькулятором кажутся неубедительными и по их поводу я уже говорил выше.


Утверждать они не будут, но они перенсят принципы, хорошие для веба, на все остальное ПО и упорно пытаются их выдать за фундаментальные принципы. Может, сознательно, а скорее подсознательно. Их так учили
With best regards
Pavel Dvorkin
Re[13]: Сказка о циничном ученом, простреленных ногах разраб
От: prVovik Россия  
Дата: 31.10.08 11:28
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Утверждать они не будут, но они перенсят принципы, хорошие для веба, на все остальное ПО и упорно пытаются их выдать за фундаментальные принципы. Может, сознательно, а скорее подсознательно. Их так учили


Давно игровые приставки стали вебом?
лэт ми спик фром май харт
Re[7]: Сказка о циничном ученом, простреленных ногах разрабо
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 31.10.08 11:38
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>Здравствуйте, gandjustas, Вы писали:


E>>>Код сборки до запуска лежит на диске? Может ли он может быть изменен на диске и последующим исправлением всех контрольных сумм и пр.?

G>>Если имеет strong name, то нет. Разве что у злоумышленника будет доступ к ключу, которым подписали исходную сборку.

KV>Если бы... http://www.codeproject.com/KB/security/StrongNameRemove20.aspx

Только ссылки на такую сборку поломаются. Также есть CAS, с помощью которого можно запретить действия для неподписанных сборок.
Re[6]: Сказка о циничном ученом, простреленных ногах разрабо
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 31.10.08 11:39
Оценка:
Здравствуйте, Sinclair, Вы писали:

E>>Код сборки до запуска лежит на диске? Может ли он может быть изменен на диске и последующим исправлением всех контрольных сумм и пр.?

S>Кода сборки до запуска не существует. На диске лежит промежуточный код; при его компиляции происходит верификация, которая гарантирует отсутствие таких вещей, как исполнение "неожиданного" кода.

"Неожиданный" код -- это какой?

Например, кто-то написал на C# код, который с помощью .NET Framework передает по HTTP какую-то информацию на удаленный хост. Затем получил для этого кода IL, внедрил его в какую-нибудь сборку с подделкой всех реквизитов сборки. Что позволит не верифицировать этот код?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[6]: security и safety - разные вещи!
От: Pavel Dvorkin Россия  
Дата: 31.10.08 12:05
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Pavel Dvorkin, Вы писали:


S>Вот, к примеру, singularity. Там в принципе невозможна ни модификация кода, ни исполнение данных.


В принципе ? Даже если будет написан некий продукт, который перепишет загрузочный сектор, загрузит себя, захватит контроль над защищенным режимом и запустит ее из под себя ? Ну вроде SoftIce для 9x, который и загружал Windows. Технически — да, очень сложно, может, практически нереализуемо, но в принципе ?
With best regards
Pavel Dvorkin
Re[7]: P.S.
От: Pavel Dvorkin Россия  
Дата: 31.10.08 12:12
Оценка:
А скорее всего такой продукт существует. У авторов этой singularity. Им-то как-то ее отлаживать надо ? . Управляемый код в ней управляется другим управляемым кодом, ладно, а тот в свою очередь ? В конечном счете должен же быть неуправляемый код — процессор-то пока неуправляемый!

А может, пора управляемые процессоры делать ? Только вот кто ими управлять будет ?
With best regards
Pavel Dvorkin
Re[13]: Сказка о циничном ученом, простреленных ногах разраб
От: vayerx  
Дата: 31.10.08 12:14
Оценка:
Здравствуйте, prVovik, Вы писали:

V>Казалось бы, "железный" софт, с внешним миром контактирует по минимуму, это вам не веб-сервер какой, ан вот оно как вышло.

V>P.S.: Если кто-то найдёт в моем сообщении призыв писать софт для Xbox на .NET'e, пусть сходит к офтальмологу.

и что с того? теперь обжегшись на молоке дуть на воду? ради чего бронировать все подряд?
Re[5]: Сказка о циничном ученом, простреленных ногах разрабо
От: Pavel Dvorkin Россия  
Дата: 31.10.08 12:21
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>Смотрим на листбокс и обнаруживаем там нечто интересное


L>А теперь то же самое — для WPF-приложения


То же самое — не получится, окна там нет. Но можно другое.

Делаем WPF приложение. Ничего не меняем. Заголовок окна "Window1".

Программа на С++


int _tmain(int argc, _TCHAR* argv[])
{
    HWND hFormWnd = FindWindow(NULL, L"Window1");
    SetWindowText(hFormWnd,L"What's matter with my caption ?");
    return 0;
}
With best regards
Pavel Dvorkin
Re[8]: P.S.
От: Sinclair Россия https://github.com/evilguest/
Дата: 31.10.08 12:32
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>А скорее всего такой продукт существует. У авторов этой singularity. Им-то как-то ее отлаживать надо ? . Управляемый код в ней управляется другим управляемым кодом, ладно, а тот в свою очередь ? В конечном счете должен же быть неуправляемый код — процессор-то пока неуправляемый!

Достаточно подробное описание архитектуры сингулярити в этом форуме уже было. Совершенно нетрудно найти и соответствующую статью, в которой подробно написано, какой объем кода ядра верифицируется вручную.
"Нуправляемый в конечном счете" код получается из управляемого, после верификации и компиляции.
PD>А может, пора управляемые процессоры делать ? Только вот кто ими управлять будет ?
Как раз наоборот: практика показала, что управляемые процессоры катастрофически неэффективны. Сингулярити показывает офигительный отрыв в производительности от линуксов и винды на том же железе, как раз за счет отказа от тех фич процессора, которые относятся к "управляемости".
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: Сказка о циничном ученом, простреленных ногах разрабо
От: _DAle_ Беларусь  
Дата: 31.10.08 12:36
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>Ну слава Всевышнему, хоть один уловил истинную тему этого текста. Я уж думал, мне тут плясать и петь песни придется, чтобы обратить внимание на эту проблему.


KV>Ок, зайдем издалека: что именно НАДО разработчикам-не-ламерам? Чтобы написанный ими код работал в соответствии с поставленной задачей?


Я другую "сказку" расскажу немного не в тему. Пару лет назад в С# стандартная сортировка валилась (вырождалась в квадратичную) примитивной пирамидой (1,2,...,n,...,2,1). И все приложения, позволяющие относительно большой пользовательский ввод (импорт таблицы, например) с последующей возможностью сортировки очень просто уходили в ночь. Это, конечно, не сильно большая проблема, но о ней, похоже, тоже мало кто когда-нибудь задумывается.
Re[7]: Сказка о циничном ученом, простреленных ногах разрабо
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 31.10.08 12:38
Оценка:
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, Sinclair, Вы писали:


E>>>Код сборки до запуска лежит на диске? Может ли он может быть изменен на диске и последующим исправлением всех контрольных сумм и пр.?

S>>Кода сборки до запуска не существует. На диске лежит промежуточный код; при его компиляции происходит верификация, которая гарантирует отсутствие таких вещей, как исполнение "неожиданного" кода.

E>"Неожиданный" код -- это какой?


E>Например, кто-то написал на C# код, который с помощью .NET Framework передает по HTTP какую-то информацию на удаленный хост. Затем получил для этого кода IL, внедрил его в какую-нибудь сборку с подделкой всех реквизитов сборки. Что позволит не верифицировать этот код?


Выделенное обеспечить достаточно сложно.
Re[7]: security и safety - разные вещи!
От: Sinclair Россия https://github.com/evilguest/
Дата: 31.10.08 12:39
Оценка: +1 :)
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>В принципе ?
Да, в принципе.
PD>Даже если будет написан некий продукт, который перепишет загрузочный сектор, загрузит себя, захватит контроль над защищенным режимом и запустит ее из под себя ?
Ничего не получится. В том смысле, что код, который захочет что-то записать в загрузочный сектор, должен это будет сделать при помощи обращения к коду ОС.

Естественно, при этом будет произведена проверка привилегий. Стороннему коду получить привилегию на модификацию загрузочного сектора случайным образом невозможно.
Исполнить себя в контексте чужого процесса тоже нельзя — в принципе. Поэтому система всегда знает, что за код исполняется, откуда он такой взялся, и что ему можно, а что нельзя.
Выдать привилегии этому коду сможет только администратор, и только через стандартные средства.

В неуправляемой среде такой контроль невозможен: слишком низкая гранулярность безопасности. Вот простой пример: пишем ActiveX для использования в веб-странице. Естественно, експлорер оборудован дурацкой троекратной спрашивалкой: сначала нужно согласиться поставить, потом согласиться использовать, потом ткнуть в активикс чтобы согласиться активировать.
Всех это, естественно, парит. Ок, берем и пишем в инсталлере тривиальный код, который правит реестр так, как будто "пользователь уже всё активировал". Делов-то!
Ну вроде SoftIce для 9x, который и загружал Windows. Технически — да, очень сложно, может, практически нереализуемо, но в принципе ?
Как раз технически это очень несложно и практически реализуемо. К сожалению, принцип не даст такую штуку сделать.

Естественно, принцип можно обойти путем извлечения диска из компьютера и ручной замены загрузочного сектора. Но, к примеру, сделать то же самое через интернет в принципе не выйдет.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[7]: Сказка о циничном ученом, простреленных ногах разрабо
От: Sinclair Россия https://github.com/evilguest/
Дата: 31.10.08 12:44
Оценка:
Здравствуйте, eao197, Вы писали:
E>Например, кто-то написал на C# код, который с помощью .NET Framework передает по HTTP какую-то информацию на удаленный хост. Затем получил для этого кода IL, внедрил его в какую-нибудь сборку с подделкой всех реквизитов сборки. Что позволит не верифицировать этот код?
Верификация ничего не говорит о "злонамеренности" кода. Верификация ганартирует, что написанный на дотнете код, который работает со строкой, принятой по сети, невозможно обманом заставить проинтерпретировать содержимое этой строки как инструкции процессора и выполнить их.

То есть верификация позволяет спастись от кода, который маскируется под данные. Есть детерминированное количество способов получить указатель для косвенного вызова, и ни один из них не позволяет передать управление "в воздух".

А вот для решения приведенной тобой проблемы работает Code Access Security. Грубо говоря, мало сгенерировать такую сборку, нужно убедить систему ее исполнить.
Подпись майкрософт ты под ней зафорджить не сможешь; в низком уровне Trust у тебя такой код просто не сможет выполниться, ему скажут "нет прав отправлять информацию на удаленный хост". Всё.
В неуправляемом коде аналог CAS получить крайне сложно, потому что там есть богатые возможности по маскировке происхождения кода. Грубо говоря, любая DLL, загруженная в процесс, выполняется под правами этого процесса. Упс.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: Сказка о циничном ученом, простреленных ногах разрабо
От: hattab  
Дата: 31.10.08 12:55
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Кода сборки до запуска не существует. На диске лежит промежуточный код; при его компиляции происходит верификация, которая гарантирует отсутствие таких вещей, как исполнение "неожиданного" кода.


А как же native images от ngen?
Re[8]: security и safety - разные вещи!
От: vayerx  
Дата: 31.10.08 12:57
Оценка:
Здравствуйте, Sinclair, Вы писали:


PD>>Даже если будет написан некий продукт, который перепишет загрузочный сектор, загрузит себя, захватит контроль над защищенным режимом и запустит ее из под себя ?

S>Ничего не получится. В том смысле, что код, который захочет что-то записать в загрузочный сектор, должен это будет сделать при помощи обращения к коду ОС.

загрузка с зараженного cd/dvd/usb-disk в наше время маловероятна. сетевая загрузка с зараженного компьютера — уже чуть более.
а если подменяется дистрибутив? тогда код установки будет выполнен с правами рута.
Re[7]: Сказка о циничном ученом, простреленных ногах разрабо
От: Sinclair Россия https://github.com/evilguest/
Дата: 31.10.08 12:58
Оценка:
Здравствуйте, hattab, Вы писали:
S>>Кода сборки до запуска не существует. На диске лежит промежуточный код; при его компиляции происходит верификация, которая гарантирует отсутствие таких вещей, как исполнение "неожиданного" кода.
H>А как же native images от ngen?
Если честно, то я не в курсе, чем именно они защищены от подделки. Но есть мнение, что перед использованием пронгененых сборок рантайм проверяет реквизиты сборки в GAC.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[9]: P.S.
От: Pavel Dvorkin Россия  
Дата: 31.10.08 13:06
Оценка: -1
Здравствуйте, Sinclair, Вы писали:

S>Достаточно подробное описание архитектуры сингулярити в этом форуме уже было. Совершенно нетрудно найти и соответствующую статью, в которой подробно написано, какой объем кода ядра верифицируется вручную.


Неважно какой именно, ты же о принципе говорил.
With best regards
Pavel Dvorkin
Re[8]: Сказка о циничном ученом, простреленных ногах разрабо
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 31.10.08 13:11
Оценка: +1
Здравствуйте, Sinclair, Вы писали:

S>Верификация ничего не говорит о "злонамеренности" кода. Верификация ганартирует, что написанный на дотнете код, который работает со строкой, принятой по сети, невозможно обманом заставить проинтерпретировать содержимое этой строки как инструкции процессора и выполнить их.


Как я понимаю, уверенность в этом уже была скомпромитирована.

S>А вот для решения приведенной тобой проблемы работает Code Access Security. Грубо говоря, мало сгенерировать такую сборку, нужно убедить систему ее исполнить.

S>Подпись майкрософт ты под ней зафорджить не сможешь; в низком уровне Trust у тебя такой код просто не сможет выполниться, ему скажут "нет прав отправлять информацию на удаленный хост". Всё.

Насколько я понимаю, права назначаются людьми. Которые могут ошибаться. Если уж люди не меняют пароли на учетную запись администратора, то появится либо возможность переназначить права определенным сборкам, либо в самой сборке потребовать права так, чтобы их было достаточно для выполнения нужных действий.

Достаточно вспомнить, что вирус Морриса забирался на удаленные машины через дырочку в скомпилированной в отладочной версии sendmail -- через эту дыру на удаленной машине запускался потоковый текстовый редактор, в него загонялся исходный текст головной программы вируса, после чего этот текст транслировался в исполнимый файл. Так что, если есть какая-то человеческая ошибка при конфигурировании системы, ей обязательно воспользуются.

S>В неуправляемом коде аналог CAS получить крайне сложно, потому что там есть богатые возможности по маскировке происхождения кода. Грубо говоря, любая DLL, загруженная в процесс, выполняется под правами этого процесса. Упс.


Да ладно, история вирусов под MS-DOS прекрасно показывает, что вирусы могут жить внутри exe-ников, даже не увеличивая их размер. Так что не обязательно подменять DLL, вредоносный код можно внедрить прямо в EXE, если есть доступ к файловой системе.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[8]: Сказка о циничном ученом, простреленных ногах разрабо
От: hattab  
Дата: 31.10.08 13:14
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>>>Кода сборки до запуска не существует. На диске лежит промежуточный код; при его компиляции происходит верификация, которая гарантирует отсутствие таких вещей, как исполнение "неожиданного" кода.

H>>А как же native images от ngen?
S>Если честно, то я не в курсе, чем именно они защищены от подделки. Но есть мнение, что перед использованием пронгененых сборок рантайм проверяет реквизиты сборки в GAC.

Мне стало интересно. Редактором FAR'а открыл сборку C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\PaintDotNet.SystemL#\7aeec1a31a19054398c9ab08460a0780\PaintDotNet.SystemLayer.ni.dll и от балды поменял один байт. После чего запустил Paint.NET, который открылся, как ни в чем не бывало (эту сборку он загрузил, я посмотрел ProcessExplorer'ом)
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.