2011-05-31

Абсолютная защита

Я как-то давно уже писал заметки из серии "что бы хотелось", с сожалением упоминая безвременно почивший Эльбрус. Такой уж я динозавр, что Алголы и Эльбрусы засели в моем сознании наряду с теоремой Пифагора и законами Ньютона, в самых основах моего понимания предмета. Так вот, чтобы сделать защищенную операционную систему, в которой ничего нельзя сделать, кроме того что требуется, надо чтобы на каждом уровне можно было сделать только то, что требуется и ничего больше. As simple as that.

Проблема современных систем и их API-ев в том, что код, получив управление, может сделать всё, что угодно. Его ограничивают пользовательскими правами доступа, но это есть пережиток времен больших многопользовательских ЭВМ. В эпоху персональных компьютеров, не говоря уж о телефонах, предметом недоверия является не столько пользователь, сколько, например, источник выполняемого кода. Но даже если мы полностью запретим выполнять незнакомый код, никуда не деться от багов, которые позволяют внедрить код в систему. Или от ошибок или даже злого умысла автора программ.

Взять, например Notepad. Что мы хотим от редактора? Чтобы программа могла прочитать файл, который мы выбрали, потом позволяла редактировать его в окне с использованием мыши и клавиатуры, а потом позволяла записать текст в этот или другой файл по нашему выбору. В такой постановке вопроса программа выглядит безопасной. На самом деле код программы может делать все, что угодно, особенно если, например, "админ правит конфиги", выполняя программу с правами, требующимися для записи в системные файлы. Программа может лазить в сеть, модифицировать системные файлы, устанавливать кейлогеры и делать снимки экрана. Она даже может внедрить в систему драйвер и внедрить свой код во все процессы. Для всего этого система предоставляет программе соответствующие функции! Ибо "вдруг понадобится"?

Если мы хотим, чтобы всего этого Notepad сделать не мог, надо просто не дать ему возможности это сделать. Дайте ему API, который может только прочитать и записать один файл, рисовать в одном окне, иметь доступ к клавиатуре и мыши в этом окне И ВСЁ! И никакой вирус не сможет ничего сделать, кроме как поменять ваш текст перед сохранением. Конечно, если "админ правит конфиги", остается разгул для фантазии, но, тем не менее, возможности ограничиваются существенно.

В Эльбрусовской идеологии не было возможности преобразовать число в указатель. И тем более в указатель на интерфейс. Если вам дали указатель на интерфейс, можно с ним работать. Не дали - возможности нет НИКАКОЙ. Все просто. В современных компьютерах такая защита возможна только через границу ядра, потому вместо указателя нам нужен handle выданный ядром. Если есть у программы handle позволяющий читать один данный файл, она сможет читать этот файл. Фактически вместо API, который позволяет делать всё, нам нужны множество таких handle-ов, позволяющих делать лишь заранее предусмотренные действия с ограниченным набором объектов. Например, это может быть работа в заданном окне, или работа с файлами некоего каталога, или чтения некоего ключа реестра или какие либо иные конкретные действия.

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

Интересно, что подобная концепция приведет к некоему перераспределению кода по нескольким процессам с разными правами. Например, главное окно приложения, хотя бы и невидимое должен создавать не процесс программы, а родительский процесс. А диалог с выбором файла должен быть отдельным процессом с другими правами, вероятно частью Shell. Фактически, независимый программный компонент должен быть процессом. Или каким-нибудь легковесным процессом, типа потока с отдельным адресным пространством.

Чем больше думаю, тем больше мне эта идея нравится. Она ведет к существенно более простой, как ни странно, и защищенной системе. Что-то похожее есть в идее sandbox-ов, которые используются, например, в браузере Chrome, но хотелось бы, чтобы так работали все приложения.

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

2011-05-12

Хромики

Амазон готовится продавать хромобуки (chromebooks). Предлагаю назвать их "Хромики".

Как я понял, дата-план на 100Mb в месяц уже включен в стоимость. Остальные параметры не поражают: Атом, 16Gb SSD.

Лично я бы вместо них взял второй iPad, хотя для сценариев, связанных с работой с текстом, такая штука будет удобнее. И флаш в ней есть и акробат. Идеальная машинка для библиотек, школ или всяких приемных, где надо что-нибудь заполнить. Кстати, давно пора писать учебный софт на HTML5+javascript.

2011-05-08

Пара часов

В выходные заехали в канадский Ванкувер. Ненадолго, всего на пару часов.
Обратите внимание, уличные часы - паровые.

2011-05-05

Камин

Мы редко зажигаем камин. Как источник тепла, он малоэффективен. Но иногда возникает желание посидеть, посмотреть на огонь, медленно-медленно поцеживая бокал некрепкого вина. Я очень люблю смотреть на огонь. И запах костра я тоже люблю. У меня все самые счастливые воспоминания связаны с лесом, с костром, с рекой.

А ещё у камина приятно перечитывать рассказы про Шерлока Холмса. Как-то раз, когда после шторма пропало электричество, мы так сидели вместе у камина и я читал рассказ вслух. Дочка до сих пор вспоминает с ностальгией.

P.S. Огонь разводил я сам, а фото делал Игорь.

2011-05-04

Снова о Chrome OS

Ходят слухи, что Гугл будет распространять компьютеры с Chrome OS через подписку, с помесячной оплатой, включая 3G Интернет, что-то типа 10-20 баксов в месяц. Причем это включает и hardware upgrade. Имеет смысл, в принципе. Единственно, функциональность пока не выходит за рамки традиционной работы с браузером: почта, блоги, фейсбук, книжки, флаш-игры. А загрузить фотки с аппарата, посмотреть видео в самолете, не говоря уж о "попрограммировать", пока не очень получается. Но за 10-20 баксов в месяц, если это включает плату за интернет, то почему бы и нет?

Blog-Grid

Для эксперимента сделал альбомную форму архива блога. Мне кажется, неплохо получилось.