- Глава 10
- IPC: основы межпроцессного взаимодействия
- Обзор технологий
- Введение
- Буфер обмена (clipboard)
- Сообщение WM_COPYDATA
- Разделяемая память (shared memory)
- Библиотеки динамической компоновки (DLL)
- Протокол динамического обмена данными (Dynamic Data Exchange, DDE)
- OLE/ActiveX
- Каналы (pipes)
- Сокеты (sockets)
- Почтовые слоты (mailslots)
- Объекты синхронизации
- Microsoft Message Queue (MSMQ)
- Удаленный вызов процедур (Remote Procedure Call, RPC)
- Резюме
Глава 10
Что такое IPC$? Я слышал, что через него возможен удаленный взлом? Нужно ли отключать этот ресурс, если да, то как это сделать?
IPC$, или Inter-Process Communication, представляет собой специальный административный ресурс, предназначенный для создания именованных каналов. Посредством последних компьютеры обмениваются в Сети различной служебной информацией. IPC$ также служит для дистанционного управления сервером (рис. 10.1).
Рис. 10.1. Включение сетевой службы обмена информацией IPC$
Чтобы решить, отключать данный ресурс или нет, необходимо учесть следующее:
¦ если это рабочая станция, которой нужно управлять удаленно, лучше не отключать;
¦ если рабочая станция не требует удаленного администрирования, можно и отключить;
¦ если это сервер, то отключать и вовсе не стоит, так как к нему будет невозможно достучаться по сети.
Отключается IPC$ через CMD командой net share ipc$ /delete (после перезагрузки данный ресурс все равно сам включается, поэтому можно написать соответствующий BAT-файл и поместить его в автозагрузку).
Мой компьютер находится в локальной сети. Необходимо сделать так, чтобы машина предоставляла открытые для общего доступа ресурсы, и вместе с тем так, чтобы скрытые общие ресурсы C$, D$ и др. были недоступны. Как это сделать?
Все, что вам необходимо сделать, – это создать параметр AutoshareWks типа DWORD c нулевым значением в следующем разделе: [HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Services\lanmanserver\parameters].
Что такое спуффинг и как от него защититься?
Фактически, спуффинг – это подмена. В данном случае имеется в виду IP-спуф-финг, то есть подмена IP. Подмена, при которой злонамеренный пользователь, воспользовавшись чужим IP-адресом, находящимся в пределах доверенной зоны IP-адресов, или авторизованным внешним адресом, выдает себя за объект, которому можно доверять. Чаще всего для защиты от IP-спуффинга применяют метод привязки IP-адреса к адресу сетевой карты (MAC-адрес), но и этот способ несовершенен: в настоящее время известны утилиты, подменяющие текущий MAC.
Что такое сниффинг и существуют ли от него конкретные меры защиты?
В простейшем случае под сниффингом подразумевается перехват пакетов по Сети. Более конкретно: сниффер переводит сетевую карту (там, где он установлен) в так называемый «неразборчивый режим», благодаря которому машина злоумышленника захватывает все сетевые пакеты, даже те, которые ей не предназначены. Пример сниффера – Cain & Abel. В качестве защиты при построении локальной сети можно порекомендовать использование свитчей (коммутатор), а не хабов (концентратор), а также использование протоколов, не передающих данные в открытом виде (SSH, SSL, Kerberos). Но и в этом случае возможен перехват пакетов с помощью продвинутых техник (например, ARP Poizoning).
Что такое фишинг и можно ли от него защититься?
Фишинг представляет собой технику обмана посетителей сайта. Суть: посетитель заходит на сайт, очень похожий на оригинал, заполняет графы, требующие ввода конфиденциальной информации (номер кредитной карты, пароль и т. д.). Далее вся эта информация отправляется злоумышленнику, создавшему этот лже-сайт. Инструменты защиты от фишинга можно найти в новейших версиях интернет-обозревателей, а также в антивирусных пакетах и межсетевых экранах. Однако же следует признать, что и по сей день эффективного способа защиты от фишинга не существует. Главный инструмент защиты в данном случае – это бдительность пользователя.
Известно, что многие вирусы подменяют системные файлы своими. Как определить эту подмену?
Чтобы всегда быть в курсе подобных «проделок», необходимо включить функцию уведомления о защите файлов. Делается это путем внесения в реестр по адресу HKEY_ LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Sys-temFileProtection параметра типа DWORD ShowPopups равного 1.
Как в IE очистить запомненные пароли?
В Internet Explorer интегрирована достаточно удобная вещь – автозаполнение и запоминание пароля. Чтобы стереть запомненные пароли, достаточно сделать следующее: в IE зайти в Сервис > Свойства обозревателя > Содержание > Личные данные > Автозаполнение, затем нажать кнопку Очистить пароли.
Каким образом я могу скрыть адреса посещенных сайтов, которые автоматически высвечиваются в адресной строке, когда я ввожу новый адрес?
Подобные следы можно ликвидировать, удалив соответствующие записи реестра по адресу [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\ TypedURLs]. Примечание: здесь же сохраняются и другие следы, такие как история доступа к удаленным дискам C$ , D$ для LAN, история того, что вы набирали в поисковых формах, и т. д.
После проверки «Касперским» выяснилось, что в системе изменена главная загрузочная запись. Что это может быть и как восстановить первоначальное состояние загрузочной записи (рис. 10.2)?
Рис. 10.2. Проверить загрузочные записи?
Скорее всего, измененный загрузчик – последствия boot-вируса, хотя не исключено, что загрузчик изменился и не по причине вирусной инфекции. Восстановить загрузчик можно из консоли восстановления: для этого необходимо загрузиться в Recovery Console и прописать команды fix mbr и fix boot. Загрузиться в Recovery Console можно через загрузочный ХР-диск, выбрав Repair Windows XP instaLLation ® и Recovery ConsoLe ©. Однако восстановление таким образом – не лучший способ. В большинстве случаев загрузчик все же не восстанавливается. Решение подобных проблем под силу лишь специализированному ПО, в качестве яркого примера которого можно привести ADINF32.
Подскажите, где в «Антивирусе Касперского 7.0» прописываются обновления. А то при переустановке системы придется загружать все обновления снова.
Обновления – папка с базами располагается по адресу and Set-tings\All Users\Application Data\Kaspersky Lab\AVP7\Bases.
Какой из браузеров можно считать самым безопасным?
Учитывая результаты многочисленных тестов, можно сказать, что ни один из ныне существующих браузеров не является безопасным на 100 %. Между тем некоторые из продуктов все же можно считать достаточно безопасными. Одним из таких продуктов является Opera.
Ситуация такая: мой компьютер в локальной сети и выход в Интернет у меня через карточку. Лимит старой карточки исчерпан, но ввести новые логин и пароль возможности нет, так как при попытке входа на какой-либо сайт не появляется окно аутентификации с сервером (все настройки прокси-сервера правильные). Как вернуть окно ввода логина и пароля?
Чтобы вновь появилось окно аутентификации, необходимо удалить старый логин и пароль через оснастку Учетные записи пользователей (рис. 10.3) – для этого зайдите в меню Пуск ? Выполнить, введите команду control userpasswords2, в появившемся окне нажмите Дополнительно ? Управление паролями ? Удалить.
При загрузке системы «Антивирус Касперского», который ранее работал без сбоев, почему-то перестал запускаться; при попытке принудительного запуска он тоже сам отключается. Что это может быть и как с этим бороться?
Скорее всего, ваша система инфицирована вирусом, отключающим «Антивирус Касперского». Подобная «зараза», скорее всего, настроена на отключение и других популярных антивирусных продуктов. Выход – загрузиться с чистой среды, например с загрузочного диска (Windows LiveCD). Далее, как вариант, под этой средой проверить систему антивирусом, не требующим установки (такой антивирус может быть запущен с флэшки, как пример – популярный продукт Dr.Web CureIt Сканер (рис. 10.4), который можно скачать с официального сайта Dr.Web).
Рис. 10.3. Управление паролями
Рис. 10.4. Сканер CureIt в действии
Проверил свой жесткий диск «Касперским» и в дистрибутивах Panda Titanium обнаружил самый настоящий вирус! Как быть?
Скорее всего, файл ничем не инфицирован, и поднимать тревогу не стоит. Большинство антивирусных программ время от времени срабатывают при проверке файлов других антивирусов.
Я начинающий системный администратор и хотел бы узнать ваше мнение о том, какую из серверных операционных систем можно считать наиболее надежной и производительной?
Из серверных операционных систем я бы порекомендовал FREE BSD. Сам ее использую уже год. Эта система зарекомендовала себя как самая безопасная, при этом ее производительность также на достаточно высоком уровне.
Мой межсетевой экран постоянно сообщает о пришедших откуда-то пакетах с флагом «syn». Что это значит?
Скорее всего, вашу машину кто-то или что-то (сетевой червь, к примеру) сканирует. Сканирование, как правило, является подготовкой к атаке. Поэтому вам есть над чем задуматься.
IPC: основы межпроцессного взаимодействия
Обзор технологий
Автор: Алекс Jenter
Опубликовано: 10.03.2001
Исправлено: 13.03.2005
Версия текста: 1.0
Введение
Любая операционная система была бы весьма ущербна, если бы замыкала выполняющееся приложение в собственном темном мирке без окон и дверей, без какой-либо возможности сообщить другим программам какую-либо информацию. Если посмотреть внимательно, можно заметить, что далеко не все приложения являются самодостаточными. Очень многим, если не большей части, требуется информация от других приложений, либо они должны эту информацию сообщать. Именно поэтому в операционную систему встраивается множество механизмов, которые обеспечивают т.н. Interproccess Communication (IPC) — то есть межпроцессное взаимодействие.
В историческом плане сначала появилась необходимость в общении процессов, выполняющихся на одном компьютере. В дальнейшем с бурным развитием сетевых технологий все острее стала чувствоваться потребность в средствах для взаимодействия процессов, выполняющихся на разных компьютерах в сети. Особенно трудна такая задача, если это компьютеры на базе разных платформ и/или с разными операционными системами.
Рассмотрим подробнее несколько ключевых примеров, демонстрирующих важность IPC. Вам, возможно это покажется неправдоподобным, но зачатки IPC существовали еще в MS-DOS — и это несмотря на то, что MS-DOS при всем желании трудно назвать многозадачной средой. В самом деле, когда вы в командной строке вводили подобную инструкцию :
происходило следующее: выполнялась команда DIR и ее вывод записывался во временный текстовый файл. После этого содержимое файла подавалось на вход команды MORE. В результате вы получали листинг каталогов, который в случае большого количества каталогов не уезжал мгновенно за экран, а мог скроллироваться с помощью клавиши Enter. Конечно же это очень примитивный IPC, но его наличие показывает, что уже тогда такой механизм был востребован и в какой-то мере реализован.
Примеры использования IPC охватывают гораздо большее количество программ и приложений, чем вы скорее всего думаете. Когда вы выходите в интернет, ваш браузер — одна программа (процесс) — взаимодействует с web-сервером — другой программой (процессом). Эти программы выполняются на разных компьютерах; браузер на вашем, сервер — где-то еще. И вас не волнует, какая ОС установлена на сервере и какая там платформа.
Или, например, вы работаете с удаленной базой данных. Ваше клиентское приложение — это один процесс, на сервере базы данных запущен другой процесс. Процесс на сервере выполняет запросы к БД, поступающие от вашего процесса.
ПРИМЕЧАНИЕ Вообще, для сетевых форм IPC (но не обязательно только для них) очень часто используется концепция «клиент-сервер». Как вы понимаете, «клиент» — это приложение, которому требуются данные, «сервер» — приложение, предоставляющее данные. |
А если брать только взаимодействие программ, выполняющихся на одном компьютере, самым банальным примером будет следующий: текст из вашего текcтового редактора передается в электронную таблицу или программу для верстки. Да-да, наш старый знакомый буфер обмена — это тоже один из механизмов IPC!
И еще можно было бы привести очень много примеров.
Средств, обеспечивающих взаимодействие между процессами, создано достаточно много. Огромное их количество реализовано в Windows 9x, еще больше — в Windows NT/2000. Теперь нужно приличное количество времени, чтобы хотя бы познакомиться со всеми! Замечу, что нет, и наверное в принципе не может быть универсального способа обмена данными, который годился бы на все случаи жизни — все равно в некоторых случаях использование другого способа будет предпочтительнее. Но я надеюсь, что после прочтения этой статьи вы сможете достаточно уверенно ориентироваться в мире IPC и обоснованно выбирать тот или иной метод.
Тот факт, что механизмы IPC работают на уровне операционной системы, положительно сказывается на скорости и надежности программ и программных комплексов, построенных с их использованием. Эффективность приложений соответственно возрастает.
Вообще, правильнее было бы называть эти механизмы «Interthread Communication» — межпотоковое взаимодействие. Если вы помните, выполняются именно потоки, они же и обмениваются данными. Однако, смысл для отдельных механизмов взаимодействия появляется только в том случае, если эти потоки принадлежат разным процессам. Ведь потоки, выполняющиеся в рамках одного процесса, вовсе не нуждаются в дополнительных средствах для общения между собой. Так как они разделяют одно адресное пространство, обмен данными могут обеспечить обычные переменные. Таким образом, IPC становится необходим в том случае, если поток одного процесса должен передать данные потоку другого процесса.
Теперь давайте рассмотрим основные виды IPC и случаи, в которых они используются.
Буфер обмена (clipboard)
Это одна из самых примитивных и хорошо известных форм IPC. Он появился еще в самых ранних версиях Windows. Основная его задача — обеспечивать обмен данными между программами по желанию и под контролем пользователя. Впрочем, вы наверняка сами неплохо знаете, как используется буфер обмена. 😉 Не рекомендуется использовать его для внутренних нужд приложения, и не стоит помещать туда то, что не предназначено для прямого просмотра пользователем.
Сообщение WM_COPYDATA
Стандартное сообщение для передачи участка памяти другому процессу. Работает однонаправленно, принимающий процесс должен расценивать полученные данные как read only. Посылать это сообщение необходимо только с помощью SendMessage, которая (напомню) в отличие от PostMessage ждет завершения операции. Таким образом, посылающий поток «подвисает» на время передачи данных. Вы сами должны решить, насколько это приемлемо для вас. Это не имеет значения для небольших кусков данных, но для больших объемов данных или для real-time приложений этот способ вряд ли подходит.
Разделяемая память (shared memory)
Этот способ взаимодействия реализуется не совсем напрямую, а через технологию File Mapping — отображения файлов на оперативную память. Вкраце, этот механизм позволяет осуществлять доступ к файлу таким образом, как будто это обыкновенный массив, хранящийся в памяти (не загружая файл в память явно). «Побочным эффектом» этой технологии является возможность работать с таким отображенным файлом сразу нескольким процессам. Таким образом, можно создать объект file mapping, но не ассоциировать его с каким-то конкретным файлом. Получаемая область памяти как раз и будет общей между процессами. Работая с этой памятью, потоки обязательно должны согласовывать свои действия с помощью объектов синхронизации.
Библиотеки динамической компоновки (DLL)
Библиотеки динамической компоновки также имеют способность обеспечивать обмен данными между процессами. Когда в рамках DLL объявляется переменная, ее можно сделать разделяемой (shared). Все процессы, обращающиеся к библиотеке, для таких переменных будут использовать одно и то же место в физической памяти. (Здесь также важно не забыть о синхронизации.)
Протокол динамического обмена данными (Dynamic Data Exchange, DDE)
Этот протокол выполняет все основные функции для обмена данными между приложениями. Он очень широко использовался до тех пор, пока для этих целей не стали применять OLE (впоследствии ActiveX). На данный момент DDE используется достаточно редко, в основном для обратной совместимости.
Больше всего этот протокол подходит для задач, не требующих продолжительного взаимодействия с пользователем. Пользователю в некоторых случаях нужно только установить соединение между программами, а обмен данными происходит без его участия. Замечу, что все это в равной степени относится и к технологии OLE/ActiveX.
OLE/ActiveX
Это действительно универсальная технология, и одно из многих ее применений — межпроцессный обмен данными. Хотя cтоит думаю отметить, что OLE как раз для этой цели и создавалась (на смену DDE), и только потом была расширена настолько, что пришлось поменять название ;-). Специально для обмена данными существует интерфейс IDataObject. А для обмена данными по сети используется DCOM, которую под некоторым углом можно рассматривать как объединение ActiveX и RPC.
Каналы (pipes)
Каналы — это очень мощная технология обмена данными. Наверное, именно поэтому в полной мере они поддерживаются только в Windows NT/2000. В общем случае канал можно представить в виде трубы, соединяющей два процесса. Что попадает в трубу на одном конце, мгновенно появляется на другом. Чаще всего каналы используются для передачи непрерывного потока данных.
Каналы делятся на анонимные (anonymous pipes) и именованные (named pipes). Анонимные каналы используются достаточно редко, они просто передают поток вывода одного процесса на поток ввода другого. Именованные каналы передают произвольные данные и могут работать через сеть. (Именованные каналы поддерживаются только в WinNT/2000.)
Сокеты (sockets)
Это очень важная технология, т.к. именно она отвечает за обмен данными в Интернет. Сокеты также часто используются в крупных ЛВС. Взаимодействие происходит через т.н. разъемы-«сокеты», которые представляют собой абстракцию конечных точек коммуникационной линии, соединяющей два приложения. С этими объектами программа и должна работать, например, ждать соединения, посылать данные и т.д. В Windows входит достаточно мощный API для работы с сокетами.
Почтовые слоты (mailslots)
Почтовые слоты — это механизм однонаправленного IPC. Если приложению известно имя слота, оно может помещать туда сообщения, а приложение-хозяин этого слота (приемник) может их оттуда извлекать и соответствующим образом обрабатывать. Основное преимущество этого способа — возможность передавать сообщения по локальной сети сразу нескольким компьютерам за одну операцию. Для этого приложения-приемники создают почтовые слоты с одним и тем же именем. Когда в дальнейшем какое-либо приложение помещает сообщение в этот слот, приложения-приемники получают его одновременно.
Объекты синхронизации
Как ни странно, объекты синхронизации тоже можно отнести к механизмам IPC. Конечно, объем передаваемых данных в данном случае очень невелик 😉 Но именно эти объекты следует использовать, если одному процессу нужно передать другому что-то вроде «я закончил работу» или «я начинаю работать с общей памятью».
Microsoft Message Queue (MSMQ)
Этот протокол действительно оправдывает свое название — он обеспечивает посылку сообщений между приложениями с помощью очереди сообщений. Основное его отличие от стандартной очереди сообщений Windows в том, что он может работать с удаленными процессами и даже с процессами, которые на данный момент недоступны (например, не запущены). Доставка сообщения по адресу гарантируется. Оно ставится в специальную очередь сообщений и находится там до тех пор, пока не появляется возможность его доставить.
Удаленный вызов процедур (Remote Procedure Call, RPC)
Строго говоря, это не совсем технология IPC, а скорее способ значительно расширить возможности других механизмов IPC. С помощью этой технологии общение через сеть становится совешенно прозрачным как для сервера, так и для клиента. Им обоим начинает казаться, что их «собеседник» расположен локально по отношению к ним .
Резюме
Конечно, я перечислил далеко не все способы обмена данными. Если бы это было так, то это было бы не так интересно 😉 За рамками данной статьи остались такие вещи, как глобальная таблица атомов, хуки и некоторые другие технологии, которые с некоторой натяжкой можно признать механизмами IPC. Но главное, как я считаю, сделано: теперь вы знаете, что это за непонятные аббревиатуры и как из всего многообразия методов IPC выбрать наиболее подходящий.