Реализация атаки "злоумышленник в середине" (пример CNG)
В примере защищенного обмена данными с шифрованием CNG демонстрируется атака "злоумышленник в середине", при которой третья сторона (Мэллори) оказывается между двумя взаимодействующими сторонами (Алисой и Бобом).
В примере CNG для обеспечения межпроцессного взаимодействия используются именованные каналы.Алиса всегда выступает в роли сервера именованного канала, а Боб — в качестве клиента.Мэллори выступает в роли клиента с Алисой (т. е. он выдает себя за Боба) и сервера с Бобом (т. е. он выдает себя за Алису).Такая ситуация называется подменой и является классическим примером атаки "злоумышленник в середине".
Подробные сведения об этом сценарии см. в разделе Пошаговое описание процесса обмена ключами и сообщениями (пример CNG).
В примере CNG под "олицетворением" понимается ситуация, когда Мэллори выдает себя за Боба или Алису.Однако у слова "олицетворение" есть и специальное значение применительно к именованным каналам, описанное в документации к методу NamedPipeServerStream.RunAsClient(PipeStreamImpersonationWorker).
Цифровые подписи
Цифровые подписи часто используются для защиты от атак "злоумышленник в середине".Обычно ключи подписей предоставляются и поддерживаются инфраструктурой открытого ключа.Инфраструктура открытого ключа редко размещается на локальном компьютере.Чаще всего она поддерживается администраторами, группой обеспечения безопасности или центром сертификации.Описание использования такой инфраструктуры выходит за рамки настоящего примера.Вместо этого в примере показано, как использовать классы CNG для создания локальных ключей цифровой подписи.
Точки вставки
Для атаки "злоумышленник в середине" необходимо, чтобы в цепочке передачи сигнала была точка вставки.Обычно она возникает, если нарушается безопасность физического оборудования, которое обрабатывает сообщения.Например, можно перекоммутировать провода или взломать телекоммуникационные серверы, чтобы перенастроить их электронику.Однако более вероятно изменение настройки программного обеспечения, которое поддерживает работу сети.Например, можно переназначить или перенаправить порты, а точку вставки можно организовать в приложении для обмена данными.
Маленькая лазейка
Если файл открыт в режиме записи, он блокируется и не может использоваться другими приложениями.Аналогично, когда канал клиента подключается к серверу канала, канал блокируется клиентом для монопольного использования и остается в таком состоянии до отключения клиента.
Если канал между клиентом и сервером установлен, в него очень сложно проникнуть.Однако в примере CNG Мэллори может с легкостью перехватывать сообщения между Алисой и Бобом и подменять их.Фактически Мэллори не проникает в установившийся канал.Вместо этого он использует небольшую лазейку, которую оставила компания.
Алиса и Боб получили инструкции использовать для обмена информацией об имени закрытого канала канал PublicChannel, а затем воспользоваться закрытым каналом для контактных данных клиентов.Эти инструкции дают Мэллори возможность получить имя закрытого канала и встать между Алисой и Бобом.В следующих двух разделах описано, как это сделать.
Синхронизация
Очень часто успех атаки "злоумышленник в середине" зависит от таких незначительных вещей как синхронизация.В примере CNG показан этот подход.
Мэллори знает, что новое программное обеспечение для обмена мгновенными сообщениями, которое разработала компания, использует именованные каналы.Он также знает, что Алиса и Боб откроют канал с именем PublicChannel.Кроме того, он знает, что Алиса отправит Бобу имя второго канала.Алиса и Боб закроют канал PublicChannel и откроют для обмена информацией о клиентах второй канал.
Чтобы похитить контактные данные клиентов, Мэллори необходимо получить у Алисы имя второго канала и сделать так, чтобы Боб не получил этого имени.Для этого ему достаточно открыть клиентский конец канала PublicChannel раньше Боба.
В исходном коде для такого перехвата используется 200-миллисекундная задержка в операторе System.Threading.Thread.Sleep(200) метода Run Боба.Оператор wait помещен умышленно и сделан заметным, поскольку цель этого примера — продемонстрировать атаку "злоумышленник в середине".В реальной жизни анализировать сценарии обеспечения безопасности гораздо сложнее.Для этого приходится использовать различные программные приложения, протоколы передачи, проверку подлинности в сети, учетные записи пользователей, журналы, разрешения, обучение пользователей, отслеживание трафика и другие методики анализа.
Даже при таких изощренных методиках 200-миллисекундная задержка на сервере может оставаться незамеченной месяцами.Поэтому, того чтобы справиться с проблемой перехвата сообщений, в этом примере пришлось создать пять различных версий решения.
Подмена
Перехватывая имя второго канала (AliceAndBobChannel), Мэллори способен вмешиваться в обмен информацией между Алисой и Бобом и заменять их сообщения друг другу.Вот как он осуществляет такую подмену.
Алиса открывает канал PublicChannel в режиме сервера и ждет подключения Боба.
Мэллори подключается к каналу PublicChannel в режиме клиента и получает от Алисы имя второго канала (AliceAndBobChannel).
Алиса и Мэллори закрывают канал PublicChannel.
Алиса открывает канал AliceAndBobChannel в режиме сервера, и Мэллори подключается к нему в режиме клиента.
Мэллори подключается к Бобу как сервер по каналу PublicChannel, а Боб подключается к этому каналу как клиент.
Мэллори отправляет Бобу имя канала AliceAndBobChannel1 (т. е. он немного изменяет имя).Боб убежден, что получает информацию от Алисы.
Мэллори и Боб отключаются от канала PublicChannel.
Мэллори открывает канал AliceAndBobChannel1, а Боб подключается к этому каналу как клиент.
Мэллори успешно занял позицию между Алисой и Бобом.
Мэллори продолжает выступать в роли клиента для Алисы (по каналу AliceAndBobChannel) и сервера для Боба (по каналу AliceAndBobChannel1).Он может читать, изменять и пересылать любые сообщения.Ни Алиса, ни Боб не знают, что кто-то перехватывает и подменяет их сообщения.
Успешная атака "злоумышленник в середине" очень часто остается незамеченной.Чтобы не быть обнаруженным, Мэллори ведет себя не очень активно и вносит лишь незначительные изменения в контактные данные клиентов.Он не хочет, чтобы его изменения были заметными.
Заключение
Для обнаружения атаки "злоумышленник в середине" требуются время, терпение и очень вдумчивый подход.В этом примере проблема вызвана задержкой в 200 миллисекунд.Пятой доли секунды оказывается достаточно, чтобы поставить под угрозу работу всего отдела продаж.
См. также
Основные понятия
Модель криптографии .NET Framework