Разработка компиляторов

       

Безопасность в .NET


Безопасность является краеугольным камнем .NET. На всех этапах создания и выполнения программ происходят самые различные проверки - от проверки прав на доступ к коду до разрешений на ресурсы. Вот некоторые из типов проверок безопасности:

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

Подлинность кода. Загрузчик классов сохраняет информацию об исходных текстах всех классов, которые были загружены. Таким образом, можно восстановить некоторые атрибуты кода (откуда загружен код, кто является автором и т.п.). Эту информацию можно использовать для дачи прав на запуск.

Разрешения на доступ к ресурсам. Ресурсы обычно ассоциированы с системой. В качестве ресурсов могут выступать файлы, сетевые соединения, право вызова неуправляемых API (unmanaged APIs). Отметим, что права доступа проверяются не только для вызвавшей сборки, но и для всех прочих, находящихся в данный момент в стеке вызовов. Это позволяет предотвратить классическую атаку, в которой неавторизованный компонент получает доступ к ресурсу путем обращения к нему через вызов компоненты с другими правами доступа.

Декларативная безопасность. Данный механизм предоставляет возможность встраивать проверки безопасности прямо в код путем аннотации классов, полей или методов. Проверка может производиться однократно при загрузке или постоянно (скажем, при каждом запуске метода).

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

Безопасность в .NET

  • Другие модели обеспечения безопасности:
    • Модель политик доступа
    • Модель ролей


  • Повышенная важность безопасности при удаленном выполнении
  • Криптографические методы защиты, готовые для встраивания в пользовательские приложения


Упомянем еще два способа обеспечения безопасности и защиты приложений в .NET:

Модель политик доступа. Политики позволяют автоматически присваивать коду определенные привилегии, основываясь на том, откуда были получены исходные тексты данного приложения (понятно, что локальному коду пользователи доверяют больше, чем программам из Интернета). Пользователи могут изменять эти политики.



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

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

Механизмы аутентификации будут пригодны как для идентификации пользователей, так и для идентификации приложений или юридических лиц. Конфиденциальность и целостность будут основаны на криптографических алгоритмах и стандартных сетевых протоколах, таких как SSL или IPSec. Все эти возможности будут доступны как на уровне приложения, так и на уровне передачи данных. Кроме того, .NET предоставляет готовые криптографические библиотеки, которые пригодны не только для использования в системных сервисах, но и в пользовательских приложениях (по информации на данный момент, в .NET будет встроен стандарт RSA).


Содержание раздела