Содержание статьи
KARMA, Karma Attacks Radioed Machines Automatically, — это рекурсивный акроним, расшифровывающийся примерно как «Karma атакует радиоустройства автоматически». И слово «автоматически» имеет тут ключевой смысл.
info
Эта статья — часть серии публикаций о практических приемах взлома и атак с использованием подручных устройств, которые можно собрать дома. В этих материалах мы раскрываем простые способы получения несанкционированного доступа к защищенной информации и показываем, как ее оградить от подобных атак. Предыдущая статья серии: «Брут на ходу. Атакуем беспроводные сети простым и эффективным способом».
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
При атаках на Wi-Fi злоумышленники чаще всего обращают внимание на точки доступа. Их атаковать куда проще, ведь они почти всегда неподвижны и их хорошо слышно благодаря многочисленным beacon-пакетам, в которых они анонсируют себя. Да и компрометация точки доступа имеет вполне понятные перспективы.
Другое дело — клиентские устройства. Что они могут дать хакеру? Эти устройства менее заметны, ведь они не шлют в радиоэфир пакеты столь же активно. Тем не менее клиентские устройства можно отыскать повсюду — это и ноутбуки, и телефоны, и IP-камеры, и куча разнообразных embedded-девайсов. И Karma — это, пожалуй, лучшая атака, которую можно применить на клиентские устройства самого широкого спектра. Такая атака сложнее в реализации, зато ее эксплуатация открывает широкий простор для творчества.
Теория
Все атаки на клиентов — как пользователей, так и их устройства — реализуются через RoqueAP (мошеннические точки доступа). Они так или иначе используют факт доверия к вредоносной беспроводной сети. Поскольку именно клиентская сторона инициирует подключение, то без доверия тут не обойтись. При этом доверие необязательно может исходить от пользователя, доверять может и само устройство. И Karma как раз нацелена на то, чтобы вынудить то или иное устройство подключиться по Wi-Fi, причем автоматически, без привлечения его владельца.
Karma — это подмножество RoqueAP-атак, наряду с атаками Evil Twin. Но не стоит путать эти два метода. Evil Twin — наиболее широко известная атака на клиентов, по сути представляющая собой беспроводной фишинг, то есть социальную атаку, требующую участия пользователя. В то время как Karma — это атака исключительно на само клиентское устройство, причем атака автоматическая, она не требует участия пользователя. Неважно, работает жертва в данный момент с устройством или нет, разблокировано оно или заблокировано, находится оно в руках или в кармане, — все может быть атаковано с помощью Karma.
Причина
Если верить источникам, эта атака возможна благодаря двум особенностям поведения клиентских устройств:
- трансляция в радиоэфир так называемого списка предпочтительных сетей (Preffered Network List, PNL), содержащего имена известных клиенту беспроводных сетей, к которым ранее он уже подключался;
- автоматическое подключение к таким сетям.
В различных описаниях Karma главным образом акцент делается на первом пункте — разглашении PNL, однако существуют атаки и на устройства, не транслирующие этот список. И на мой взгляд, куда более важен второй пункт — автоматическое подключение.
Не подключенные к сети клиентские устройства не столь «разговорчивы», как точки доступа, однако периодически они шлют в радиоэфир probe-пакеты, содержащие PNL — те самые сети, к которым они могут подключиться без участия пользователя.
Красным на рисунке отмечены клиенты с включенным Wi-Fi, но не подключенные ни к одной сети. Именно эти устройства являются главной целью для Karma.
Имена, содержащиеся в probe-запросах сетей, могут быть старыми и выведенными из эксплуатации (corp_old), тем не менее они по‑прежнему сохранены на клиентах. Также клиенты могут помнить домашние (home) или гостевые (hotel) сети, которые в текущем расположении отсутствуют.
Для настройки различных устройств, например IP-камер, администраторы могли использовать тестовые сети, которые остались в памяти устройств.
И ко всем этим сетям клиенты по‑прежнему готовы подключиться автоматически, без участия пользователя. Таким образом, злоумышленник может атаковать клиентские устройства даже вдали от используемых ими сетей, что делает такую атаку невидимой.
Реализация
Реализация атаки заключается в том, что атакующий слушает содержащие PNL пакеты и поднимает запрашиваемую беспроводную сеть в надежде, что клиент выполнит к ней подключение.
Технически атаку Karma можно реализовать двумя способами:
- На каждый probe-запрос клиента запускается полноценная беспроводная сеть с запрашиваемым именем.
- На каждый probe-запрос клиента отправляется только probe-ответ (иногда еще beacon-пакет), при этом новая сеть уже не перезапускается каждый раз.
Первый способ достаточно простой. Он требует наличия mon-интерфейса для отслеживания probe-запросов и WLAN-интерфейса для запуска точки доступа. Далее точка доступа уже сама отправляет probe-ответы и beacon, которые могут привлечь того или иного клиента. Такую атаку можно выполнить, используя самое обычное ПО: tcpdump, hostapd и dnsmasq.
Но у этого способа есть недостатки:
- требуются два интерфейса;
- единовременно запускается только одна беспроводная сеть, что делает невозможным в это же время пробовать другие имена сетей.
Второй способ более рациональный. Чтобы клиент подключился к точке доступа, ее необязательно перезапускать каждый раз — требуется лишь на probe-запрос клиента отправить соответствующий probe-ответ. Некоторым клиентам может потребоваться еще отправка соответствующих beacon-пакетов. Возможность посылать клиентам произвольные probe- и beacon-пакеты реализована в немного пропатченной версии hostapd-mana. Более того, для приема и передачи probe-, а также beacon-пакетов не нужен режим monitor, все реализуется на стандартном режиме сетевой карты.
Сообщить клиенту о наличии точки доступа можно двумя способами:
- Probe-ответ — таргетированный ответ на probe-запрос клиента.
- Beacon — широковещательный анонс беспроводной сети.
Обычно точки доступа реализуют анонс своего присутствия, рассылая широковещательные beacon-пакеты, которые слышат все беспроводные клиенты в округе. Но для экономии вычислительных мощностей клиентов придуман альтернативный режим поиска. Он заключается в том, что клиент теперь отправляет широковещательный probe-запрос с именем интересующей его сети и уже точки доступа должны среагировать на него probe-ответом.
Возможность подключить клиент только по probe-ответу имеет достаточно интересную особенность — о наличии точки доступа узнает только один клиент. Это делает атаку Karma, использующую лишь probe-запросы, бесшумной.
Но не все клиентские устройства поддерживают такой режим работы, поэтому им нужен еще и классический beacon-пакет. Атака с использованием beacon более шумная, так как о наличии сети в этом случае станет известно всем клиентам (Loud Karma).
Практика
Перейдем от теории к практике и попробуем воспользоваться Karma. Узнать об интересующих клиента именах сетей можно двумя способами.
Утечка PNL
Если точки доступа выдают свое присутствие beacon-пакетами, то клиенты — probe-запросами. Посмотреть, какие PNL содержатся в этих самых запросах, мы можем с помощью разных утилит — airodump-ng, hcxdumptool или даже tcpdump:
wifi/roque_ap/karma/PNL.sh
#!/bin/bashsudo tcpdump -i mon0 -e -nn 2> /dev/null | grep Probe | sed -rn 's/.* ([^\s]+) signal .*SA:(.+) Probe Request .*\(([^\)]+)\).*/\1 \2 \3/p'
Мы увидим, что многие устройства действительно отправляют непустой PNL.
Этот метод эффективен и позволяет сразу же перейти к атаке на устройство через запуск беспроводной сети с соответствующим именем. Но использование probe-запросов для определения имен беспроводных сетей не позволяет узнать тип запрашиваемой клиентом сети. В идеале атакующий должен запустить одновременно сразу три беспроводные сети с идентичным именем (OPN, WPA и EAP).
Known beacons
Не все устройства на деле отправляют probe-запросы, содержащие список сетей. Устройства, отправляющие пустой PNL, считаются как бы неуязвимыми к Karma. Однако их способность к автоматическому подключению по‑прежнему может представлять интерес для хакера. А это значит, что к Karma уязвимы куда больше устройств, чем принято считать. Мы не знаем, к каким сетям подключался клиент, но что, если мы угадаем?
Имея список наиболее часто встречающихся имен беспроводных сетей, мы можем просто перебрать их, отправляя beacon-пакеты до тех пор, пока клиентское устройство не подключится к нам.
Единственный публичный инструмент, способный выполнять атаку known beacons на все три типа сетей, — это hostapd-eaphammer. Эта модифицированная реализация hostapd умеет среди прочего отправлять произвольные beacon-пакеты по списку. Используем следующий интерактивный скрипт для перебора beacons по словарю с указанием типа сети:
wifi/roque_ap/karma/known_beacons.sh
#!/bin/bash[[ $# -ge 1 ]] && essids="$1" || read -p 'essids file: ' essids
[[ $# -ge 2 ]] && type="$2" || read -p 'type (opn/wpa/eap): ' typeIFACE='wlan1'sudo ifconfig $IFACE up
case "$type" in 'opn'|'OPN') cp hostapd-eaphammer-known_beacons-opn.conf /tmp/hostapd-eaphammer.conf;; 'wpa'|'WPA') cp hostapd-eaphammer-known_beacons-wpa.conf /tmp/hostapd-eaphammer.conf;; 'eap'|'EAP') cp hostapd-eaphammer-known_beacons-eap.conf /tmp/hostapd-eaphammer.conf;;esacsed -i "s/interface=.*/interface=$IFACE/g" /tmp/hostapd-eaphammer.conf
sed -i "s|known_ssids_file=.*|known_ssids_file=$essids|g" /tmp/hostapd-eaphammer.conf
sudo hostapd-eaphammer -x /tmp/hostapd-eaphammer.conf -d | grep 'GENERATING RESPONSE:'
Запускаем и видим, что неприступный на первый взгляд заблокированный ноутбук с Windows готов к нам подключиться.
А после его подключения мы можем выполнить любые атаки и, например, вытянуть хеш пользователя.
Для экспериментов с known beacons я написал простую Python-реализацию с помощью scapy.
Атаки
В Wikipedia сказано, что Karma нацелена на открытые сети, но на деле ничто не мешает применить атаку и к закрытым сетям. В зависимости от типа поднимаемой нами сети возможны три сценария:
- OPN — поднятие открытой сети, прием трафика устройства, сетевые атаки на устройство;
- WPA — захват сохраненного пароля в виде half-handshake, брутфорс, переход к сценарию с OPN;
- EAP — прием учетных данных.
В общем, матрица возможных с Karma атак достаточно обширна.
Однако все публичные инструменты, умеющие выполнять атаку Karma, не делают ничего после подключения клиента. При реализации такой атаки некорректно проводить черту после подключения устройства, ведь в этот момент хакер может применить некоторые приемы, специфичные только в этом случае. Да и самое интересное начинается после подключения клиента. Но обо всем по порядку.
Karma-OPN
Атака Karma через открытые сети позволяет получить сетевой канал взаимодействия с клиентом. А учитывая, что атакующий в отношении клиента находится в позиции шлюза, то есть он пересылает трафик клиента, на него могут быть направлены многочисленные атаки — от простых сетевых до MITM. Также в момент подключения клиента с помощью особых настроек сети, задаваемых посредством DHCP, становится возможным заставить клиента пустить сетевой трафик других интерфейсов через атакующего, достигая эффекта сверх-MITM. Теперь немного подробнее.
Attack OPN → Overlap
Часто подключаемые к открытой сети устройства будут либо с несконфигурированными настройками, либо с уже истекшим сроком аренды IP-адреса. Как известно, дефолтным для сетевых интерфейсов является запрос настроек по DHCP. Тот факт, что клиентское устройство попросит у нас параметры нашей сети, позволяет применить достаточно хитрый и опасный прием. Вместо стандартной маски 0.
(default, на все адреса) мы можем выразить то же самое через две маски 0.
, которые в совокупности образуют тот же дефолтный маршрут:
0.0.0.0/0 via 10.10.0.1 <- исходный дефолтный маршрут, все пакеты изначально идут по нему
0.0.0.0/1 via 1.0.0.1 <- новый маршрут, перекрывающий первые 50% IPv4-сетей
128.0.0.0/1 via 1.0.0.1 <- второй маршрут, перекрывающий вторые 50% IPv4-сетей (маска короче, и такие маршруты окажутся приоритетнее)
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»