×
Namespaces

Variants
Actions

Data caging (Экранирование данных)

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

Статья
Перевод:
Оригинал: Data caging
Den123
Последнее редактирование: hamishwillee (16 Dec 2011)

Data caging - экранирование данных (модель разделения данных по ячейкам).

Contents

Определение

Партиционирование (разделение) данных позволяет отделить код и данные друг от друга - благодаря этому становится возможным создание простых доверенных путей в рамках платформы. Основная идея заключается в экранировании (отделении, caging) не-TCB процессов в отдельную собственную часть файловой системы, для таких процессов системные файлы становятся невидимыми.

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


Файловая система имеет следующую структуру:

*/sys/

/sys каталог - это ограниченная системная область, не доступная для не TCB-программ. (TCB capability необходимо для модификации содержимого /sys, для чтения достаточно AllFiles capability)

Каталог /sys содержит подкаталог /sys/bin/ в котором находятся все исполняемые приложения (EXE, DLL и т.д.). Так как структура этого каталога плоская, все EXE, DLL и т.д. файлы должны иметь различные имена. ОС не позволяет запустить на выполнение код, расположенный в другом каталоге.


*/private/

Не TCB-программы имеют доступ только к содержимому подкаталога /private/<SID>/, где SID - это уникальный идентификатор системы безопасности, уникальный идентификатор программы. Приложения могут использовать собственный приватный каталог /private/<SID>/ для сохранения .ini, .mbm, .rsc и других данных. Для доступа в чужие приватные директории необходимо AllFiles capability. ПО, которое позволяет создавать и восстанавливать резервные копии данных, обычно имеет доступ в эти каталоги.


*/resource/

Всем не TCB-процессам предоставляется доступ на чтение каталога /resource, он используется для хранения разделяемых, только читаемых ресурсов (при этом "родные" каталоги этих ресурсов остаются неизвестными). Приложения, у которых нет никаких capabilities, имеют доступ на чтение этих файлов.

Наличие TCB capability позволяет модифицировать содержимое \resource. Установщик приложений может добавлять и обновлять файлы в этой папке, но ничего более. Для гарантированной уникальности имен файлов могут использоваться подкаталоги.


Все вышеперечисленные защищенные папки есть на всех фиксированных или съемных дисках. Остальные каталоги (которые можно было использовать раньше) не являются защищенными, поэтому хранить в них конфиденциальные данные недопустимо. Пиктограммы приложений, файлы с изображениями и т.п. обычно хранятся в /resource/.


Все остальные каталоги

Доступ ко всем остальным каталогам неограничен. Их можно использовать для различных целей, например, сохранять в них фотографии, музыку, документы и т.д.


Использование директории импорта

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

Так как эти плагина не представляют интереса для других приложений, логично было бы сохранять их в приватных папках серверных приложений, которые их используют. Однако каким образом при отдельной установке этих плагинов определить, насколько безопасным является их инсталляция в приватные каталоги других приложений ?

Решение - использование концепции каталогов импорта. При установке приложения ему предоставляется возможность записывать файлы в приватные папки других приложений если они находятся в подкаталоге "import" (/private/<process_sid>/import/) и если все указанные вложенные папки существуют.

Пример приватного каталога, в котором хранятся регистрационные файлы сторонних приложений: \private\10003a3f\import\apps.


Использование полиморфных DLL

Доступ в папку \sys\bin для поиска необходимых библиотек более невозможен, если нет необходимых capabilities. Для поиска необходимых библиотек теперь нужно использовать класс TFindLibrary - он производит поиск, сравнивая полное имя библиотеки с заданным шаблоном. После того, как необходимая библиотека будет найдена, нужно использовать метод Handle() для получения дескриптора (find-handle) соответствующего объекта ядра. Дескриптор (handle) полиморфной библиотеки позволяет приложению загружать библиотеку, по окончанию использования закрывать ее, получать указатели на экспортируемые функции. Система может проверит корректность типа используемой библиотеки с помощью проверки уникального идентификатора (UID).


Внутренние сслылки

This page was last modified on 16 December 2011, at 07:24.
72 page views in the last 30 days.
×