Пособие для начинающего вардрайвера
Итак, ты решил приобщиться к армии вардрайверов и стать еще одним воином беспроводных сетей. Чтобы ты не начинал с нуля и не заморачивался вопросами "что взять, где взять", мы подготовили подробную инструкцию для начинающего вардрайвера.
Железо
Ясно, что без ноутбука не обойтись. Тут единственное требование - время автономной работы, оно должно быть максимальным. Самые долгоиграющие ноуты - построенные на платформе Intel Centrino. И Linux, и FreeBSD полностью поддерживают эту технологию, так что очень рекомендуется изучить мануалы и настроить свою ось на энергосберегающий режим (для контроля соответствующих параметров можно использовать cpurfeqd в Linux и powerd во FreeBSD). В условиях активной работы правильно настроенный ноут может прожить автономно до трех-четырех часов. Очень приветствуется запасной комплект аккумуляторов. Впрочем, никто не мешает тебе приобрести адаптер для подключения ноутбука к автомобильному прикуривателю

. Что же касается встроенной беспроводной карты, то она устроит лишь самого непритязательного вардрайвера, и вот почему. Во-первых, Linux и FreeBSD начали полноценно поддерживать Centrino'вские карты (ipw2100 и ipw2200) сравнительно недавно. Во-вторых, встроенная в ноутбук антенна, безусловно, сможет улавливать определенное количество пакетов, но любая, даже самая захудалая внешняя антенна даст эффект на несколько порядков лучше. Не стоит и говорить о том, что можно вести речь о реальном подключении к AP встроенными средствами лишь при непосредственной близости к точке доступа, а это убивает саму суть вардрайвинга. Соответственно, нужно покупать хорошую беспроводную PCMCIA-карту с разъемом под внешнюю антенну и саму антенну. Или даже две.
Беспроводные карты и вардрайвинг
Что же имеется в виду, когда говорят о "подходящей для вардрайвинга" карте? В первую очередь, поддержка операционной системой специального режима Monitor. Как известно, беспроводное устройство может работать штатно в двух режимах: BSS (Basic Service Set) aka Infrastructure - клиент подключен к Сети с использованием точки доступа (как правило, беспроводные сети строятся именно по такому принципу); и IBSS (Independent Basic Service Set) aka ad-hoc - клиент подключен без использования точки доступа (связь "точка-точка", например, когда необходимо связать по сети два ноутбука, чтобы обменяться файлами). Соответственно, драйвер устройства обязан, как минимум, поддерживать два режима конфигурации. Но ни один из них не годится для прослушивания эфира. Простой перевод интерфейса в promisc mode ничего не даст: карта будет ловить все пакеты, но предназначенные лишь для той сети, на которую она настроена.
Как же находить сами сети? Для этого существует режим монитора (Monitor mode), при котором карта не ассоциируется ни с какой сетью и ловит все доступные ей "пролетающие мимо" фреймы. Поддержка драйвером этого режима в Linux/BSD во многом определяется открытостью спецификаций на карту. К примеру, проблем с Monitor'ом не имеют карты на чипсете Prism-II/Prsim-2.5/Prism-3, Orinoco, Atheros, Ralink. Intel же не торопится открывать спецификации (драйверы под Linux пишет группа разработчиков, подписавшая с компанией NDA, Non-Disclosure Agreement, и получившая документацию на карту на условиях неразглашения; драйвер под BSD пишется на основе Linux'ового, а также методом reverce ingeneering), поэтому до недавнего времени были проблемы с поддержкой этой картой Monitor mode и, соответственно, с поддержкой ее специализированным софтом вроде Kismet'а. Помимо подходящего чипсета, рекомендуется выбирать карту и по наличию стандартного разъема для подключения внешней антенны. Антенны и вардрайвинг
Не секрет, что чем мощнее антенна, тем сильнее сигнал. Для вардрайвера эта прописная истина принимает решающее значение: используя слабую антенну (например встроенную в ноутбук), можно ловить сигнал и даже перехватывать некоторые пакеты, но мощностей может не хватить для подключения к сети. Чтобы не стать жертвой типичной ситуации "вижу полно сетей, но ни к одной не могу подключиться", опытные вардрайверы приобретают внешние антенны, подключаемые к беспроводным картам через стандартный разъем. Антенны бывают самые разные: от небольшой пирамидки в 15-20 сантиметров до огромной полутораметровой трубы. Все они делятся на две категории: ненаправленные (omnidirectional) и направленные (directional). Первый тип - это, по сути, то же, что и встроенные в ноутбук или PCMCIA-карту, только мощнее. Насколько мощнее, определяется конкретной антенной. Очевидно, что чем мощнее антенна, тем больше точек доступа вардрайвер обнаружит при одном и том же перемещении. Отыскав "вкусную" точку, он меняет антенну на направленную, которая, как пушка, "стреляет" узким направленным лучом на большие расстояния. Откалибровав антенну в пространстве так, чтобы направление на AP было как можно более точным, вардрайвер получает идеальный сигнал и может добраться даже до слабых офисных "пипирок", стоящих в глубине комнаты.
Но что делать, если антенны нет? Во-первых, можно попробовать собрать ее из подручных средств (скажем из банки от чипсов, пример сборки такой cantenna'ы/can antenna'ы можно посмотреть здесь: www.cruftbox.com/cruft/docs/cantenna.html) - в устройстве антенны нет ничего хитрого. Во-вторых, стоит вызвать из спячки смекалку и тактику: если антенна не идет к вардрайверу, он идет к антенне. Я имею в виду довольно типичную схему, в которой два соседних здания, например расположенные через дорогу, соединены одной беспроводной сетью. Как правило, для такой схемы по обеим сторонам ставится по узконаправленной антенне, и, окажись ты посередине, даже с самой захудалой встроенной антенной связь будет отличной.
Софт
Подобрав подходящее железо, экипируемся необходимым софтом. Софта категории wireless tools довольно много, достаточно заглянуть на www.networkintrusion.co.uk/wireless.htm, чтобы убедиться в этом. Но, как правило, вардрайвер обходится двумя-тремя любимыми утилитами. Для *nix-систем это, конечно же, kismet, aircrack и ethereal. Для начала точку доступа нужно обнаружить. Именно это, но и не только, призван делать Kismet (www.kismetwireless.net) - пассивный беспроводной сканер для 802.11a/b/g-сетей. Продуманность архитектуры (сервер запускается на одной машине, клиенты с графическим интерфейсом запускаются со сколь угодно многих машин и соединяются с сервером, выводя полученную им информацию) и исключительная функциональность обеспечили этой программулине популярность: Kismet умеет получать исчерпывающую информацию об AP, такую как тип сети, наличие шифрования, производитель AP, SSID, определять скрытые сети (в которых отключен Broadcast SSID) и точки доступа, сконфигурированные максимально небезопасно (по умолчанию); Kismet легко интегрируется с другим софтом, например IDS Snort или GPS-навигатором. Наконец, эта софтина пишет отличные логи и поддерживает множество беспроводных карт.
Установку Kismet для твоего любимого дистрибутива Linux или BSD рассматривать не буду, на самый крайний случай все способны набрать магическое ./configure && make && make install. Но до установки задайся таким животрепещущим вопросом, как драйверы беспроводной карты. В случае с BSD все предельно просто: либо карта поддерживается базовой системой, либо нет

. В случае же Linux, как правило, вменяемый драйвер пишет сторонняя группа разработчиков. Например, для Intel'овских карт существуют проекты http://ipw2100.sourceforge.net и http://ipw2200.sourceforge.net, для карт на чипсете Atheros - проект MADWi-Fi (http://madWi-Fi.sourceforge.net) и т.д. Словом, до начала "беспроводных работ" вардрайверу необходимо найти подходящий драйвер, следуя указаниям на сайте соответствующего проекта. Кроме того, для управления параметрами карты под Linux потребуется пакет wireless-tools, тогда как в BSD все делается той же утилитой ifconfig, как и для обычных интерфейсов.
После установки Kismet'а следует провести минимальные настройки. Правим kismet.conf:
suiduser=toxa
Не рекомендуется пускать Kismet c привилегиями суперпользователя. При запуске от рута он инициализирует интерфейс и понижает привилегии до указанного пользователя. Как правило, здесь указывают имя пользователя, который будет запускать Kismet. В моем случае это toxa.
source=radiotap_bsd_b,wi0,prismsource
Эта запись формата "драйвер_карты, имя_интерфейса,имя" указывает сканеру загружать соответствующие драйверы для данной карты и в дальнейшем оперировать этим под определенным именем. Так как основная платформа разработки Kismet - Linux, то в случае с этой осью типом карты может быть prism2, orinoco, atheros или любой другой поддерживаемый драйвер. Под BSD это не работает, но существует универсальный "метавраппер" под названием Radiotap. В указанном случает Kismet как раз запущен на FreeBSD, потому указан драйвер radiotap_bsd_b, имя интерфейса - wi0 (в Linux, естественно, будет eth0/eth1/etc), и все это названо prismsource. Нужно заметить, что поддержка radiotap появилась лишь в –current-версиях FreeBSD/NetBSD и впервые - в OpenBSD 3.7, так что в случае использования какого-либо релиза из ветки 5.х могут быть проблемы. Про устаревшую серию 4.х я вообще молчу

. Пример записи под Linux для карточек на чипсете Orinoco: source=orinoco,eth1,orincosource. enablesources=prismsource
Эта запись активизирует вышеописанную конфигурацию. Так, если используются разные карты, можно указать сколько угодно записей вида source и включать их по мере необходимости. Более подробную информацию о настройке Kismet смотри в http://kismetwireless.net/documentation.shtml.
После конфигурирования остается только перейти в каталог, в который доступна запись пользователю, указанному в директиве suiduser, и запустить Kismet:
# kismet
Запустится сервер, который по умолчанию слушает 127.0.0.1:2501, а затем и клиент, который тут же подсоединится к серверу. Клиент имеет удобный ncurses-based интерфейс, что правильно: в целях экономии заряда батарейки вардрайвер не станет запускать X-сервер на своем ноутбуке. Обнаруженные AP тут же высвечиваются со всей необходимой информацией (имя и тип сети, наличие шифрования, канал, количество пойманных пакетов, IP-диапазон). Kismet имеет отличный встроенный help, и не имеет смысла пересказывать его.
Но "обнаружить сеть" не всегда означает "легко получить доступ к ней". Помимо "желтых" (означающих, согласно цветовому кодированию в Kismet'е по умолчанию, сеть без шифрования) или даже "красных" сеток (AP с настройками по умолчанию), вардрайвер встречает и "зеленые" - те самые, где WEP=Yes. Но это его не останавливает: тут на сцену выходит вторая любимая игрушка вардрайвера - aircrack.
Как известно, в протоколе WEP существуют фундаментальные уязвимости, и вскоре после их обнаружения появилось множество утилит, взламывающих ключ на основе анализа перехваченных пакетов. В месте с методами взлома совершенствовались и утилиты, и последнее их поколение - набор aircrack (www.cr0.net:8040/code/network/aircrack), в который входят утилиты airodump, aireplay, aircrack и airdecap. Помимо непосредственного взлома WEP-ключа, они умеют внедрять в беспроводную сеть злонамеренные пакеты и расшифровывать зашифрованный трафик. Но нас сейчас интересует только взлом ключа. Как известно, это лишь дело времени, так как достаточно лишь поймать необходимое количество пакетов. Первоначально такие утилиты, как dwepdump, airsnort, airopeek, требовали до нескольких гигабайт трафика. Но aircrack'у нужно существенно меньше - около 500 тыс. пакетов для взлома 128-битного ключа (несколько часов в хорошо загруженной сети). Накопить их можно утилитой airodump из пакета aircrack. К сожалению, она работает только под Linux. Но aircrack'у подходят и дампы, например Kismet'a.
Ловим пакеты на четвертом канале и пишем дамп в outfile:
# airodump eth1 outifle 4.
А затем натравливаем на него aircrack:
$ aircrack outfile
Дополнительные опции расписаны на сайте утилиты. Если собрано достаточное количество пакетов, то через некоторое время (от минуты до получаса) aircrack радостно сообщит: "KEY FOUND!" Наконец, уже после внедрения в сеть, вардрайверу необходимо получить удобное средство анализа перехватываемых пакетов. В качестве такого снифера можно посоветовать Ethereal - мощную утилиту, способную сортировать трафик по прикладным протоколам и выдирать вкусные пакеты с авторизационными данными.
Весь мир на ладони
Типичный вардрайвер путешествует на автомобиле по местам, потенциально богатым на точки доступа, - промышленные районы, центр города, улицы с офисными зданиями. Мы в Питере, проехавшись со слабенькой антенной по нескольким крупным проспектам, нашли около двухсот AP. Но как запомнить, где и какая сеть встретилась? Куда возвращаться, чтобы накопить пакеты? И тут на помощь приходит GPS.
Помимо функций обнаружения и анализа беспроводных сетей, Kismet обладает возможностью взаимодействия со стандартным *nix-демоном для работы с GPS - gpsd (http://gpsd.sourceforge.net). Для последующей визуализации сетей на карте в состав Kismet'а включена утилита gpsmap. К возможностям этой программки относятся такие вещи, как отображение маршрута, примерной зоны покрытия сети, мест перехвата пакетов, легенд сети. Во время работы Kismet с gpsd в файлы net.xml и gps.xml записываются все данные об обнаруженных сетях, например SSID, вендор точки доступа, доступность сети в настоящее время, наличие шифрования, а также координаты найденных точек доступа и прочие географические и топографические параметры, необходимые для дальнейшей визуализации сетей.
Для корректной работы gpsmap необходимы карты местности, которые можно скачать с публичных источников. В данный момент gpsmap может использовать карты с NullMap, MapBlast, MapPoint, TerraServer, Tiger, Earthamap, Terraserver Topo. Мы рекомендуем использовать либо карты с Earthamap (что и рекомендуется по умолчанию), либо с TerraServer, которая представляет собой не векторное изображение, а фотографию со спутника наподобие известного Google maps (http://maps.google.com).
Что же нужно, чтобы увидеть работу gpsmap воочию? Допустим, вардрайвер уже прокатился по городу, поймал множество сеток, они отобразились в логах, а теперь ему хочется посмотреть, где располагались точки доступа с привязкой к конкретной карте. Тогда он запускает:
$ gpsmap -S 4 --metric GPS_лог
Флаг -S определяет, откуда gpsmap попытается стянуть карту местности. Возможны следующие варианты: -1 = отсутствие карты (правда, не совсем ясно, зачем в этом случае тогда мы все это затеваем); 0 = Map- blast; 1 = MapPoint(broken); 2 = Terraserver; 3 = Tiger Census; 4 = Earthamap; 5 = Terraserver Topographic. Разработчиками рекомендован пункт 4. Флаг --metric обозначает, что gpsmap попытается стянуть карты в метрической системе, так как по умолчанию в нем используется измерение в милях. Также к интересным возможностям gpsmap относятся отслеживание на карте маршрута (опция --draw-track), отображение цветом силы сигнала передающего AP (--draw-power-zoom), указание SSID-сети (--draw-legend) и еще куча разных возможностей по настройке внешнего вида итоговой карты. Как защититься?
До сих пор стандарт безопасности беспроводных сетей 802.11i не получил широкого распространения. Так что и по сей день проверенным средством остается шифрование всего трафика на уровне протокола. Принудительное использование ipsec защитит сеть от посторонних посетителей и сохранит конфиденциальность передаваемой информации. Менее надежный вариант, который, правда, затруднит проникновение в сеть, - использование фильтрации клиентов на точке доступа по жесткой привязке MAC-IP.
В общем, защититься можно, методы уже разработаны. О некоторых из них читай в этом же номере в еще одной статье моего авторства.
Что такое хотспот?
Хотспот (англ. hotspot) - публичная точка доступа в интернет, например в кафе или ресторане, пользование ей предоставляется бесплатно (как бонус к кофе с пирожным) или как платная дополнительная услуга. Как правило, информация о присутствии в помещении беспроводной сети афишируется самим заведением, и потому особого интереса для вардрайверов не представляет.
Что такое GPS?
GPS - global positioning system, система глобального позиционирования. Применяется для очень точного позиционирования на местности при помощи специального устройства (GPS-модуля), который синхронизируется со специальным GPS-спутником, возвращающим на землю твои координаты. Таким образом, их постоянное обновление позволит гаджету, например, построить маршрут и высветить его на карте. Или показать на карте района все точки доступа и зоны покрытия сетей, пойманных во время сеанса вардрайвинга.
Как работают Wi-Fi-сканеры?
Типичный сканер (stumbler) переводит карту в monitor mode и начинает прыгать по каналам (channel hopping) в надежде обнаружить на каком-нибудь канале точку доступа. Поймав сигнал, сканер ловит в первую очередь специфические а) беспроводные фреймы (аутентификационные, информационные), на основе их анализа делает вывод о типе сети, наличии в ней WEP-шифрования, SSID, производителе AP и т.д.; и б) фреймы данных, на основе которых сканер судит об адресации в сети и клиентах.
Большинство сканеров работают в полностью пассивном режиме (ловят пакеты и ничего более), но некоторые, с целью получения большей информации о сети, могут производить и активное обнаружение, обмениваясь с AP пакетами.
Что такое "скрытая сеть"?
Существует специальный тип управляющих фреймов – так называемые beacon frames. В них содержится вся информация о сети: SSID, номер канала, на котором слушает AP, и т.п. Эти фреймы призваны сообщать клиентам, что сеть жива и все хорошо. Но, помимо клиентов сети, рядом могут оказаться и злоумышленники, а выкладывать всю информацию для кого попало небезопасно. Как известно, для того чтобы подключиться к сети, нужно, как минимум, знать ее идентификатор (SSID). По этой причине многие производители точек доступа включили в свои продукты возможность его исключения из beacon-фреймов (то есть disable Broadcast SSID). Это полумера, и ее легко обойти: как только легитимный клиент соединяется с точкой, SSID все равно передается, таков дизайн протокола, и аутентификационный фрейм также легко перехватить. Так что "демаскировка" скрытой сети - лишь дело времени.