Обознался MAC-адресом!
Николай Ткаченко,
Многие уверены, что обезопасить компьютер от вторжения можно только при помощи средств операционной системы. Это не совсем так. Ведь сетевые пакеты, прежде чем попасть на ваш ПК, проходят через различные устройства.
В локальной сети взаимное распознавание компьютеров происходит по нескольким признакам. Причиной тому — длительная эволюция сетевых технологий и протоколов. Впрочем, на сегодня TCP/IP, будучи наиболее гибким и универсальным протоколом сетевых коммуникаций, практически вытеснил своих конкурентов (NetBEUI, IPX).
Одним из преимуществ TCP/IP является инкапсуляция: собственно, сам IP-пакет, как матрешка, состоит из нескольких частей, вложенных друг в друга. Это позволяет передавать по сети всевозможные данные, не заботясь о том, чтобы сетевые устройства были знакомы с их форматом. В месте назначения такая матрешка раскрывается — и приложение извлекает оттуда предназначенные для него данные.
Такая архитектура пакета, хотя и является весьма эффективной, таит определенную угрозу безопасности. Чтобы разобраться с этим вопросом подробнее, рассмотрим, как происходит опознавание одного ПК другим.
По имени
В сетях Windows каждый компьютер имеет уникальное имя — "smb name" или "nebios name", которое вы задаете самостоятельно вместе с именем группы. Доступ к ресурсам сети Windows происходит согласно их именам. А как происходит привязка сетевого имени компьютера к IP-адресу его сетевой карты? При загрузке ОС происходит регистрация компьютера: Microsoft придумала для этого специальный протокол, согласно которому в сетевом сегменте есть компьютер, который хранит таблицу имен ресурсов в сети. Называется такой хост "главным браузером сети". Каждый компьютер обращается к такому браузеру и говорит: "Я компьютер VASYA. Мой адрес 192.168.0.43". При случайном совпадении имен или адресов опреационная система автоматически оключит сетевые функции на неправильно сконфигурированном ПК.
По IP-адресу
На более низком уровне (вспомним "матрешку") адресация ресурсов будет производиться по IP-адресу.
Имя компьютера — слишком общее понятие, не дающее возможности задействовать все функции транспортного протокола. Например, IP-адресация позвляет использовать маршрутизацию пакетов из одной сети в другую или использовать средства фильтрации (брандмауэр). Как происходит определение IP-адреса компьютера по его имени, вы уже знаете. А если уже приходилось инсталлировать Windows, то знаете также, что адрес сетевой карты можно ввести либо вручную, либо с помощью автоматических средств. Однако IP-адрес — это еще не последний уровень сетевой адресации.
По физическому адресу сетевой карты
Каждая сетевая карта маркируется уникальным в пределах сети MAC-адресом — 12-значным шестнадцатеричным числом. Прежде чем отправить пакет в локальную сеть, драйвер сетевой карты определяет по IP-адресу точки назначения физический адрес сетевой карты компьютера адресата и помечает пакет этим MAC-адресом. С другой стороны сети сетевая карта, получившая пакет со своим MAC-адресом, принимает его и пропускает по цепочке: драйвер — операционная система — приложение.
Каким образом можно узнать MAC-адрес по адресу IP? Для этого тоже существует соответствующий протокол — ARP (Adress Resolution Protocol). Работает он по методу широковещательной рассылки. Когда нужно узнать физический адрес сетевой карты, инициируется посылка пакета с запросом: "А какой MAC-адрес у ресурса с адресом 192.168.0.xxx?". Соответствующий этому адресу компьютер вернет ответ с запрашиваемым физическим адресом. Далее определенное таким образом соотношение "IP-адрес — MAC-адрес" будет занесено в ARP-таблицу сетевой карты, и последующий широковещательный запрос будет уже не нужен.
Защита IP-адресов
Как видите, идентификация происходит во многом на доверительной основе. Вначале определяется соответствие сетевого имени и IP-адреса. На этом этапе возможно мошенничество: компьютер злоумышленника может зарегистрироваться под чужим именем, а может и просто ввести ПК, инциирующий запрос smb-имени, в заблуждение, отослав ему свой адрес.
В результате множество сетевых соединений будет установлено с подложным компьютером.
Такая атака носит название "человек в середине". Она становится возможной в результате подлога IP-адреса, а ее смысл в том, что между общающимися по сети компьютерами вклинивается — незаметно для обоих — хост хакера. Если вы собираетесь обезопасить свою сеть от взлома, то на первом этапе должно стоять обеспечение правильного соответствия Windows-имен и сетевых адресов.
Вообще, система стандартов описывает четыре типа сетевых узлов по типу разрешения адресов. Узлы "b" и "m" используют для этого широковещательные рассылки, а потому составляют потенциальную угрозу безопасности. Другие узлы — "p" и "h" — используют защищенные механизмы для определения адресов. Эти механизмы включают обращение к серверу WINS и использование файла LMHOSTS. Тип узла данного компьютера можно проверить в ключе реестра Hkey_Local_Machine\System\CurrentControlSet\Services\
VxD\MSTCP\NodeType: 1 — b-узел; 2 — p-узел; 4 — m-узел; 8 — h-узел.
Лучший способ избежать проблем с подменой IP-адресов — завести в сети сервер Windows-имен. В таком случае компьютер-клиент будет регистрировать свое имя на таком сервере — и все другие ПК не будут пользоваться широковещательным запросом, а станут обращаться напрямую к серверу и получать у него нужную информацию. На рисунке ниже показано, как настроить свой компьютер на работу с сервером имен.
К сожалению, если сервер WINS не может помочь определенному хосту в процессе разрешения имен, то последний задействует широковещательный опрос, прежде чем извлечь данные из файла LMHOSTS. Следующая выгода, которую получит ваша сеть, это уменьшение числа циркулирующих в ней неэффективных пакетов.
Еще один способ избежать проблем с разрешением имен — использовать в сети DNS-сервер и избавиться от клиентов Win9x. В системах Windows 2000/XP можно задействовать сервер интернет-имен для именования хостов в сети. Правда, в этом случае можно столкнуться с другой проблемой — "штормом udp-екетов".
Такая атака основана на невозможности проверить правильность возвращенного сервером DNS ответа. Так что с точки зрения безопасности предпочтительнее использовать WINS.
Адреса сетевых карт под угрозой
Мы говорили, что на самом нижнем уровне адресации лежит физический адрес сетевой карты. Беда в том, что в то время, когда драйвер сетевой карты попытается определить MAC-адрес сетевого устройства, чтобы подписать пакет, будут задействованы доверительные отношения. А именно: ARP-протокол.
Можно ли методами, аналогичными тем, которые используют "p"- и "h"-узлы, сделать работу протокола ARP безопасной? Ответ отрицательный. На сегодняшний момент нет даже попыток создать что-то наподобие сервера MAC-адресов. С другой стороны, существуют еще кое-какие (более хлопотные, чем использование централизированного механизма) способы повышения безопасности сети. Главные возможности заложены в системной утилите arp, которая поставляется с ОС Windows. С помощью этой утилиты можно жестко задать таблицу ARP-адресов. То есть системный администратор может написать скрипт (вроде того, что приведен ниже), чтобы компьютер хакера не смог в результате широковещательного запроса прислать свой MAC-адрес для другого IP-адреса:
rem очищаем всю таблицу
arp -d *
rem жестко задаем mac-адреса
arp -s 192.168.0.1 00-aa-bb-cc-dd-e1
...
arp -s 192.168.0.9 00-aa-bb-cc-dd-e9
К сожалению, такой скрипт нужно будет прописать на каждом хосте. А если в каком-нибудь компьютере вы поменяете сетевую карточку или ее IP-адрес, придется произвести соответствующие изменения на всех компьютерах сети. Согласны ли вы платить такую цену за безопасность? Кстати, это еще не все...
Липовые физические адреса
В самом начале развития локальных сетей была предпринята попытка создать уникальную идентификацию сетевых устройств по их аппаратному (MAC) коду. Каждый производитель имел свой диапазон таких адресов и следил, чтобы сетевые устройства с одинаковым аппартным адресом в одной локальной сети не встречались.
Казалось бы, при такой системе физический адрес является достаточно надежным признаком идентификации устройства в сети. Но это не так. В архитектуре компьютеров IBM любая аппаратная переменная выглядит как ячейка памяти, которая может быть подменена программно. Так можно поменять и MAC-адрес своей сетевой карты. Некоторые драйверы позволяют сделать это, просто задав соответствующее значение в диалоге; для других случаев следует задействовать программные инструменты взломщика.
Впрочем, вывод остается тем же: даже если вам удалось обеспечить адекватное определение соответсвий "имя ресурса — его IP-адрес — физический адрес", у хакера все равно остается еще один козырь. Причем с точки зрения системы подмена MAC-адреса является самой опасной — ведь это, можно сказать, паспорт сетевого устройства, его уникальный идентификатор. У ОС нет возможности проверить правильность того или иного MAC-адреса, в отличие от правильности имени ресурса или его IP-адреса.
Что же предпринять?
Коммутатор как основа сетевой безопасности
Мы пришли к выводу, что обеспечить безопасность сети одними только программными методами невозможно. Основой, базисом, на который будут опираться средства защиты ОС, должно стать сетевое оборудование.
Сегодня в подавляющем числе случаев локальные сети строятся с использованием коммутаторов (switch). Это устройство имеет ряд полезных свойств, которые делают локальную сеть более эффективной и безопасной. Во-первых, коммутатор отсылает сетевые пакеты по принципу "точка-точка" — то есть они не попадают в общий цикл, где могут быть проанализированы хакером. Во-вторых, у него имеется собственная таблица ARP — таблица физических и IP-адресов. Заполняется она автоматически: как только компьютер включается, он регистрируется в сети — и коммутатор использует данную информацию для формирования таблицы.
Что это дает? Предположим, компьютеру нужно узнать физический адрес ресурса с IP 192.168.0.1. Он формирует соответствующий широковещательный запрос и отсылает его в сеть.
Коммутатор перехватывает запрос и, используя свою таблицу, отсылает его одному лишь компьютеру с адресом 192.168.0.5. Хост хакера остается на голодном пайке. Таким образом коммутатор, пресекая широковещательные рассылки, значительно увеличивает надежность сетевых соединений.
А как быть с MAC-адресами? Действительно, у взломщика остается возможность подмены этого идентификатора. И тут самое время заметить, что коммутаторы бывают управляемыми и не управляемыми. Именно последние приобрели — благодаря своей цене — широкое распространение. Все данные, относящиеся к сетевым адресам, не управляемыми коммутаторами заполняются автоматически. Кроме того, эти свитчи не располагают методами контроля MAC-адресов.
Так что, если необходимо обеспечить безопасность на самом высоком уровне, следует остановить свой выбор на управляемом коммутаторе. Помимо прочего, такое устройство позволяет привязать MAC-адрес сетвой карты к определенному порту коммутатора. Например, можно указать, что сетевая карта с адресом 00-a0-00-00-00-e1 подключена к пятому порту. А это связывает руки взломщику — ведь пакеты, отправляемые на определенный физический адрес, будут доставлены нужному компьютеру. При такой схеме принцип безопасности сети выглядит так: с помощью WINS обеспечиваем правильное разрешение IP-адреса по имени ресурса, коммутатор (управляемый и не управляемый) обеспечивает определение MAC-адреса по его IP, и, наконец, управляемый коммутатор привязывает соответствующий MAC-адрес к нужному компьютеру.
Если говорить об устройствах популярных производителей сетевого оборудования, то можно предложить, скажем, 24-портовые коммутаторы третьего уровня Planet WGS3-2620 или WGS3-404. А у D-Link функциями контроля MAC-адресов располагает DES-2108 на восемь Ethernet-портов.
Теперь хотя бы понятно, за что мы платим деньги, когда покупаем сетевое оборудование. Ведь дело, оказывается, не только в количестве портов и надежности их работы. Не менее важную для администратора роль играют также средства контроля и безопасности.
Конечно, лучшим из способов обеспечения конфиденциальности документов является шифрование. Но для сетевых приложений такод подход зачастую не применим. Еще один выход — шифрование трафика посредством IP Sec. Неплохой способ, однако он требует дополнительного переоснащения компьютеров. И даже при исользовании шифрования пакетов вам нужно будет использовать соответствующий коммутатор — хотя бы для того, чтобы быть уверенным в правильности доставки пакетов.
Команда nbtstat — интрумент сетевого администратора
Системному администратору достаточно регулярно приходится ломать голову над той или иной проблемой в сети. А между тем Windows поставляется с несколькими утилитами, которые позволяют на первом этапе локализовать причину неполадок.
Вот пример: нет доступа к сетевому ресурсу \\HAD\SHARE. Узнаем вначале, зарегестрировано ли имя \\СOMPUTER в сети. Делаем это при помощи команды nbtstat -a HAD. Если удается обнаружить это имя, мы получаем необходимую информацию об узле. Если имя компьютера в сети определяется, то дальше командой net view \\had можно узнать список ресурсов, раскрытых для сети, а также выяснить, возможен ли доступ к ним.