Forth http://fforum.winglion.ru/ |
|
Размышления о защищенной виртуальной машине. http://fforum.winglion.ru/viewtopic.php?f=16&t=1277 |
Страница 1 из 3 |
Автор: | mOleg [ Вс май 04, 2008 22:57 ] |
Заголовок сообщения: | Размышления о защищенной виртуальной машине. |
Классическим для форта до недавних пор считалась ФВМ основанная на косвенном шитом коде (ITC). Напомню, что в основе ITC лежит следующий механизм:
напомню, что IP - указатель интерпретации, за более полным разбором различных типов шитого кода сюда. Косвенный шитый код притягателен тем, что позволяет полностью абстрагироваться от типа используемого процессора, а так же, при неком старании возможно создание переносимого между разными платформами кода (конечно, в разумных пределах). Но, тем не менее такой код не изолирует виртуальную машину полностью, и позволяет при необходимости обращаться к ассемблерному коду напрямую, что с точки зрения защищенной ВМ очень плохо. Для ломания такой ВМ достаточно в поле параметров очередного слова разместить ассемблерный код, а в поле кода записать ссылку на него. В принципе, возможна ситуация, когда ассемблерный код будет находиться в отдельном защищенном от записи сегменте, но и этот подход не идеален и применим не ко всем процессорам. да, NEXT для ITC выглядит следующим образом: Код: MOV addr , [IP] где, addr - временный регистр для хранения адреса, IP - указатель интерпретации
ADD IP , # CELL JMP [addr] |
Автор: | mOleg [ Вс май 04, 2008 23:52 ] |
Заголовок сообщения: | |
Итак, появилась идея создания полностью защищенного типа ФВМ, основанного на новом типе ШК (на основе TTC). Для того, чтобы избежать проблем ITC, а так же отвязаться от привязки к плотности размещения(размера) ассемблерного кода ВМ создается индексная таблица: Код: 0 \ формат ассоциативной таблицы CELL -- off_codebase \ указатель на блок памяти содержащих PFA CELL -- off_vmcode \ указатель на поле CFA CELL -- off_wlink \ указатель на поле LFA CELL -- off_codelimit \ предельный размер блока памяти CONSTANT /entry USER-VALUE ^Index \ указатель на начало таблицы USER-VALUE ^iHere \ указатель на первый свободный элемент таблицы \ по номеру записи получить адрес внутри таблицы : index> ( u --> addr ) /entry * ^Index + ; Таблица состоит из 4-х полей, содержащих ссылки на различные поля слова: off_wlink - это ссылка на словарную структуру слова, поля LFA, NFA и в принципе может остуствовать off_codelimit - определяет размер слова off_vmcode - ссылка на ассемблерный текст ФВМ, находящися за пределами доступа пользовательского процесса off_codebase - собственно указывает на начало кода у такой схемы следующие преимущества:
NEXT для такого типа ШК будет несколько более сложным: Код: MOV index, [IP] ADD IP , # CELL MOV addr, [index*16+i_table+off_codebase] MOV temp, [index*16+i_table+off_vmcode] JMP temp в принципе, возможно при такой организации в таблице хранить код типа: Код: MOV addr, # pfa
JMP # code |
Автор: | вопрос [ Пн май 05, 2008 00:29 ] |
Заголовок сообщения: | |
В каком случае срабатывает эта защищённость? Для запущенной программы или от програмиста, который кодирует на форте тоже? Это своего рода "модель" форта. На С это были бы 4 массива из которых один с указателями на функции (слова-примитивы), остальные - индексы для первого в разной последовательности ? ИМХО - да, тема полезная |
Автор: | mOleg [ Пн май 05, 2008 00:38 ] |
Заголовок сообщения: | |
вопрос писал(а): В каком случае срабатывает эта защищённость? так же как в яве. Изоляция адресного пространства процесса от других процессов (у каждого процесса может быть своя таблица) - это основная защита. Но при этом защита получается сквозной, то есть, нет необходимости в шлюзах, дорогостоящем переключении задач (хотя интерпретатор ШК таки скушатет много времени). вопрос писал(а): Это своего рода "модель" форта. не форта, а ФВМ (виртуальной форт машины). вопрос писал(а): На С это были бы 4 массива из которых один с указателями на функции (слова-примитивы), остальные - индексы для первого в разной последовательности ?
тут много вариантов, но лучше один массив с записями длиной до 16 байт (для интеля) |
Автор: | in4 [ Пн май 05, 2008 00:38 ] |
Заголовок сообщения: | |
mOleg писал(а): off_vmcode - ссылка на ассемблерный текст ФВМ, находящися за пределами доступа пользовательского процесса
off_codebase - собственно указывает на начало код Нельзя давать ВМ доступ к тем вещам, измение которых позволит получить доступ к местам вне системы. Например, изменение смещения может позволить пропустить команды... Лучшая возможность ограничить доступ - использовать не адрес, а индекс в таблице разрешенных точек входа. Тогда действительно будет ограничение доступа. Параметры системных вызовов нужно проверять отдельно. |
Автор: | mOleg [ Пн май 05, 2008 00:43 ] |
Заголовок сообщения: | |
in4 писал(а): Нельзя давать ВМ доступ к тем вещам, измение которых позволит получить доступ к местам вне системы. Например, изменение смещения может позволить пропустить команды... Таблица находится вне адресного пространства процесса, добавление слов в список производится по запросу к ядру. in4 писал(а): Лучшая возможность ограничить доступ - использовать не адрес, а индекс в таблице разрешенных точек входа. Не получится, по крайней мере я себе этого не представляю. Где-то всеравно придется иметь дело с реальными адресами. Опять же, прямого доступа у процесса к индексной таблице быть не должно. in4 писал(а): Параметры системных вызовов нужно проверять отдельно.
это вопрос более высокого уровня. |
Автор: | mOleg [ Пн май 05, 2008 00:48 ] |
Заголовок сообщения: | |
вообще, в простейшем виде можно представить однозадачную форт-систему, ядро которой защищено от единственного пользовательского процесса (то есть отсутствует переключение задач). пространство кода ядра, "интимные данные ядра", таблица ссылок При этом код пользовательского процесса может быть переносим на бинарном уровне, если фиксируются ссылки в таблице. |
Автор: | Mihail [ Пн май 05, 2008 11:49 ] |
Заголовок сообщения: | |
Я не въезжаю в назначение этой ВМ. И какое отношение она имеет к ФортОС ? mOleg писал(а): Для ломания такой ВМ достаточно в поле параметров очередного слова разместить ассемблерный код, а в поле кода записать ссылку на него.
Зачем изолировать ВМ полностью. И кому и зачем понадобится ломать эту ВМ. Защищенная ВМ, мною давно реализована. Доступна через инет telnet://d14-435-04.rtc.ru:3333 Сейчас я бы сделал на базе http://devbiol.zoo.uwo.ca/~kvt/relf-0.2.zip Чем твоя ВМ лучше этой? |
Автор: | garbler [ Пн май 05, 2008 18:54 ] |
Заголовок сообщения: | |
как в этой схеме представимы литералы? имхо, это не раскрыто. строки, адреса, числовые константы..... ? |
Автор: | вопрос [ Пн май 05, 2008 20:47 ] |
Заголовок сообщения: | |
Mihail писал(а): Я не въезжаю в назначение этой ВМ. И какое отношение она имеет к ФортОС ? Если делать ОС на основе ФВМ, то вопрос о защищённости возникает сам собою. И безо всякой ОС тоже может возникнуть. Mihail писал(а): Защищенная ВМ, мною давно реализована. Тем, что вынесена на обсуждение. И, видимо тем, что проста для понимания.
Чем твоя ВМ лучше этой? На самом деле, как судить, что лучше из 2 идей, если представлена только одна? На обсуждение вынесен принцип а не реализация, ИМХО - реализацию тоже интересно рассмотреть. Как реализована Защищенная ВМ Mihail'а? |
Автор: | mOleg [ Пн май 05, 2008 22:06 ] |
Заголовок сообщения: | |
Mihail писал(а): Я не въезжаю в назначение этой ВМ. И какое отношение она имеет к ФортОС ? разнесение полей CFA & PFA позволяет реализовать неубиваемую замкнутую в пределах выделенной памяти виртуальную машину с очень дешовым переключением между процессом и ядром, а так же легко переносимую между разными типами процессоров. Так что отношение к ОС прямое. И еще, сейчас не будет выглядеть серьезной ни одна заявленная ОС без качественной защиты процессов от злоумышленника. Mihail писал(а): Зачем изолировать ВМ полностью. И кому и зачем понадобится ломать эту ВМ. ну не знаю, вирусописателей в мире нет, например. Mihail писал(а): Защищенная ВМ, мною давно реализована. описание в студию, пожалуйста. Mihail писал(а): Сейчас я бы сделал на базе http://devbiol.zoo.uwo.ca/~kvt/relf-0.2.zip в чем ее преимущества? Mihail писал(а): Чем твоя ВМ лучше этой?
моя ВМ получается полностью изолированной от реального процессора. к тому же элементарно решается проблема с подкачкой кода из свопа, защитой данных от выполнения. |
Автор: | mOleg [ Пн май 05, 2008 22:16 ] |
Заголовок сообщения: | |
garbler писал(а): как в этой схеме представимы литералы? имхо, это не раскрыто.
строки, адреса, числовые константы..... ? да, пока не раскрыто, но чего непонятного-то. Механизмы похожие на ITC. адреса представлены двумя числами (вчера еще думал, что это плохо, сегодня, что хорошо) одно из чисел - индекс блока, второе - смещение внутри него. Хорошо это потому, что портируемо между разными разрядностями данных и адресов, то есть методика будет одинаковой и для 16-битных, и для 32-битных, и для 64 битных процов и для других разрядностей. числовые константы скорее всего правильно представлять литералами. а вообще все в процессе |
Автор: | in4 [ Пн май 05, 2008 23:42 ] |
Заголовок сообщения: | |
mOleg писал(а): адреса представлены двумя числами (вчера еще думал, что это плохо, сегодня, что хорошо)
одно из чисел - индекс блока, второе - смещение внутри него. при переходе с одной разрядности на другую все равно будут несовместимости А раз они все равно будут, зачем увеличивать сложность и вводить пару сегмент:смещение. Даже на x86 стараются перейти на плоскую модель... |
Автор: | mOleg [ Пн май 05, 2008 23:50 ] |
Заголовок сообщения: | |
in4 писал(а): при переходе с одной разрядности на другую все равно будут несовместимости не обязательно. in4 писал(а): А раз они все равно будут, зачем увеличивать сложность и вводить пару сегмент:смещение.
скорее селектор:смещение сложность тут не то, чтобы увеличивается, зато преимуществ много, тот же контроль переполнения автоматический можно получить, полная отвязка от реальных физических адресов, отсутствие необходимости заморачиваться с достаточно сложной организацией виртуальной машины 86проца, тем более, что не все процы поддерживают аналогичную работу с памятью. Плоская память не на столько удобна, как какжется. У сегментной модели есть свои преимущества. |
Автор: | вопрос [ Вт май 06, 2008 00:03 ] |
Заголовок сообщения: | |
mOleg писал(а): Mihail писал(а): Вот именно
Защищенная ВМ, мною давно реализована. описание в студию, пожалуйста. |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |