Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #72, НОЯБРЬ 2006 г.

битва в канале

ДРОЗДОВ АНДРЕЙ AKA SULVERUS

Спецвыпуск: Хакер, номер #072, стр. 072-028-1


OFFBIT SECURITY TEAM(SULVERUS@MAIL.RU)

ОБЗОР И БЕЗОПАСНОСТЬ АРХИТЕКТУРЫ СИСТЕМЫ КАНАЛОВ В WINDOWS VISTA

В ЭПОХУ WINDOWS XP МНОГИЕ СЕТЕВЫЕ КОММУНИКАЦИИ ОСУЩЕСТВЛЯЛИСЬ ЧЕРЕЗ СОКЕТЫ, КОТОРЫЕ ОСНОВЫВАЛИСЬ НА КАКОМ-ЛИБО ОДНОМ ПРОТОКОЛЕ ПЕРЕДАЧИ ДАННЫХ. СОКЕТЫ РЕШАЛИ И РЕШАЮТ МНОГО ЗАДАЧ И ПО СЕЙ ДЕНЬ, НО ТЕХНОЛОГИИ РАЗВИВАЮТСЯ И НА СМЕНУ СТАРЫМ ПРИХОДЯТ БОЛЕЕ НОВЫЕ

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

[архитектура каналов .NET Remoting.]

Чем принципиально отличается .NET Remoting от привычной технологии сокетов? Во-первых, .NET Remoting основывается не на одном, а на нескольких протоколах сразу (если при создании сокета выбирается одни протокол, например, tcp или udp, только его он и будет юзать). При работе же с .NET Remoting создается набор каналов на каждый протокол, используемый приложением. Через каналы можно передавать любую информацию, будь то текст или файлы, но самым главным нововведением является то, что через каналы можно передавать программный код. Например, Программа 1, находящаяся в домене Приложения А, хочет выполнить какой-то блок кода, которого у нее нет, но он есть у Программы 2, которая находится в домене Приложения Б или вообще на другом компьютере сети.

Раньше докомпиляция кода была нереальной задачей, а теперь можно передавать любые объекты по сети, начиная от простых и заканчивая целыми классами и динамическими сборками. В нашем случае Программа 1 обратится к Программе 2 через Канал А и попросит ее переслать ей нужный объект через Канал Б. Получив объект, программа может работать с ним, выполнять его методы и заполнять его свойства и параметры. В .NET Framework 2.0 реализовано 4 канала: tcp-channel, http-channel, ipc-channel и IChannel. Последний является абстрактным классом и существует для того, чтобы программисты могли создавать каналы на основе других протоколов. Каналы могу взаимозаменяться, благодаря этому значительно повышается безопасность. Для того чтобы приложения не перепутали принцип передачи данных и формат присылаемых данных, существует форматировщик, который также определяет защищенность канала. Форматировщики бывают двух типов: бинарные форматировщики и SOAP-форматировщики. Для того чтобы присоединить форматировщик к каналу, используются провайдеры форматировщика для каждого типа протокола. Одними из самых важных аспектов архитектуры .NET Remoting является прокси-объект и активатор объекта (для них реализованы классы). Прокси-объекты предназначены для удаленного вызова методов из другого домена приложения, и они бывают двух типов: реальные и прозрачные. Реальный прокси находится в удаленном приложении, а прозрачный прокси - в приложении-приемнике и вызывает методы через реальный прокси-объект. Активатор объектов предназначен для получения списка прокси-объектов в программе-донаре и для последующего создания удаленного объекта в программе-приемнике. Также для настройки такого количества объектов реализован специальный класс RemotingConfiguration, имеющий доступ ко всем свойствам объектов. Для работы с технологией .NET Remoting используется пространство имен System.Runtime.Remoting. Естественно, при передаче данных нельзя забывать о безопасности такого соединения. Далее я расскажу, как вторгнуться в удаленный канал и как защитить свое приложение от вторжений в каналы (в пространстве имен System.Runtime.Remoting.Channels есть классы для обеспечения безопасности соединений). Еще одной возможностью .NET Remoting является способность управления временем жизни переданных объектов в удаленное приложение (для этого существует пространство имен System.Runtime.Remoting.Lifetime). После такого мозгового штурма перейдем к примеру, демонстрирующему технологию .NET Remoting.

Содержание  Вперед на стр. 072-028-2