Что такое captive portal
С перехватывающим порталом (Captive Portal) вы можете столкнуться в аэропорту, гостинице, кондо, бизнес-центрах, также сейчас некоторые мобильные операторы организуют Wi-Fi точки доступа используя перехватывающие порталы – hotspot с авторизацией на web-интерфейсе.
Если вы не совсем понимаете, о чём идёт речь, то посмотрите на скриншот:
Имеется открытая сеть Wi-Fi, к которой можно подключиться без пароля (точка доступа без шифрования), но при попытке зайти на любой сайт, нас будет перебрасывать на страницу, где нужно ввести учётные данные, сделать оплату, подтвердить номер телефона с помощью СМС или что-то похожее.
Перехватывающий Портал – это альтернативный способ (вместо пароля от сети Wi-Fi) ограничить круг пользователей. Благодаря такому подходу, имеется возможность гибко регулировать доступ к Интернет-сети (например, выдать учётные данные, которые действуют заданный промежуток времени), и мониторить активность конкретного пользователя.
Игнорирование 2FA при восстановлении пароля
Многие сервисы выполняют автоматический вход в аккаунт после завершения процедуры восстановления пароля. Так как доступ к аккаунту предоставляется мгновенно, при входе в аккаунт 2FA может миноваться и полностью игнорироваться.
Impact аналогичного репорта на hackerone, который я прислал недавно:
Если злоумышленник получит доступ к электронной почте жертвы (он может взломать учетную запись с помощью фишинга, brute-force атаки, credentials stuffing и тд), он может обойти 2FA, хотя в этом случае 2FA должен защищать учетную запись. На данный момент для 2FA есть проверка кода Google Authenticator или резервного кода, но не кода из электронного письма, поэтому данный Bypass имеет смысл.
Ограничение скорости потоков с отсутствием блокировки после достижения определенной скорости
Зачастую исследователи безопасности пытаются подобрать код с использованием 5-и или более количества потоков, чтобы быстрее выполнить атаку (в Burp Intruder количество потоков по умолчанию- 5 без задержки). Но иногда система безопасности от перебора или обычный Load Balancer может реагировать только на этот единственный фактор.
Если вы пытаетесь брутфорсить с 5-ю потоками, стоит уменьшить количество до 1-го, а потом до 1-го с задержкой в одну секунду. Ранее мне посчастливилось наблюдать за таким поведением и именно с помощью таких манипуляций произошел успешный подбор кода, что привело к Account Takeover.
Если у 2FA кода нет определенного срока действия, то у нас есть много времени на перебор. Если же срок действия присутствует, то успешность атаки уменьшена, но потенциальная опасность уязвимости все равно присутствует, так как шанс попадания в нужный код все же есть.
Отсутствие Rate-лимита
Алгоритм Rate-лимита используется для проверки возможности пользовательского сеанса (или IP-адреса) быть ограниченым в попытках или скорости, и при каких обстоятельствах это происходит. Если пользователь выполнил слишком много запросов в течение определенного промежутка времени, веб приложение может ответить 429 кодом (много запросов) или применить Rate-лимит, не показав при этом ошибок.
. Манипуляция версиями API
Если вы видите в запросе web приложения что-то вроде /v*/, где * — это цифра, то есть вероятность, что можно переключиться на более старую версию API. В старой версии API может быть слабая защита или таковой может вовсе не быть. Это довольно редкое явление и возникает в том случае, если разработчики забыли удалить старую версию API в production/staging среде.
Генерируемый OTP код не изменяется
Это касается не постоянно изменяющихся кодов как в Google Authenticator, а только статичных, которые приходят в SMS, email или личным сообщением в мессенджере.
Суть данного обхода состоит в том, что постоянно или в течении некоторого времени, например, 5 минут, в SMS отправляется один и тот же OTP код, который в течении всего этого времени является валидным. Так же стоить следить за тем, чтобы не произошел silent rate-limit.
Если 2FA крепится к IP-адресу, то можно попытаться его подменить
Чтобы идентифицировать данный метод, войдите в свой аккаунт с помощью функции запоминания 2FA, потом перейдите в другой браузер или incognito режим текущего браузера и попробуйте войти снова. Если 2FA не запрашивается вовсе, значит произошло крепление 2FA к IP-адресу.
Игнорирование 2FA при входе через соцсеть
К аккаунту пользователя можно прикрепить социальную сеть для быстрого входа в аккаунт и одновременно настроить 2FA. При входе в аккаунт через соцсеть, 2FA может игнорироваться. Если email жертвы будет взломан, то можно будет восстановить пароль к аккаунту соцсети (если она позволяет это сделать) и войти на сервис без ввода 2FA.
Impact одного из репортов:
Rate лимит существует, но его можно обойти
Кейсы, которые раньше приходилось встречать:
Сброс rate-limit-a при обновления кода.
В запросе проверки кода, rate-лимит присутствует, но после задействования функционала повторной отправки кода он сбрасывается и позволяет продолжать брутфорс кода.
Примеры репортов:
Обход 2фа с помощью подстановки части запроса из сессии другого аккаунта
Если для верификации кода в запросе отправляется параметр с определенным значением, попробуйте отправить значение с запроса другого аккаунта.
Например, при отправке OTP-кода проверяется ID формы, ID пользователя или cookie, которое связано с отправкой кода. Если применить данные с параметров аккаунта, на котором нужно обойти code-верификацию (Account 1), на сессию совсем другого аккаунта(Account 2), получим код и введем его на втором аккаунте, то сможем обойти защиту на первом аккаунте. После перезагрузки страницы 2FA должна исчезнуть.
Игнорирование 2FA в случае кроссплатформенности
Имплементации 2FA в мобильной или десктопной версии могут отличаться от web версии приложения. 2FA может быть слабее, чем в web версии или вовсе отсутствовать.
7. При отключении 2FA не запрашивается текущий код.
Если при отключении 2FA не запрашивается дополнительное подтверждение, такое как текущий код с google authenticator приложения, код с email/телефона, то в таком случае имеются определенные риски. При чистом запросе существует вероятность CSRF атаки. Если будет найден вектор обхода CSRF защиты (если она есть)
, то 2FA можно будет отключить. Также может использоваться clickjacking уязвимость, — после пары кликов от ничего не подозревающего пользователя 2FA будет отключена. Подтверждение предыдущего кода добавит дополнительную защиту 2FA, учитывая потенциальные CSRF/XSS/Clickjacking атаки, а также CORS misconfigurations.
Обход rate-лимита путем смены IP адреса
Множество блокировок основаны на ограничении приема запросов с IP, который достиг порога определенного количества попыток при выполнении запроса. Если IP-адрес сменить, то есть возможность обойти это ограничение. Для того, чтобы проверить данный способ, просто смените свой IP с помощью Proxy-сервера/VPN и увидите, зависит ли блокировка от IP.
Способы смены IP:
Так как IP rotate тулза отправляет запросы с помощью AWS IP-адресов, все запросы будут блокироваться, если веб приложение находится за CloudFlare фаерволом.
В данном случае нужно дополнительно обнаружить IP оригинального веб сервера или найти способ, не касающийся AWS IP-адресов.
Обход 2FA с помощью «функционала запомининания»
На многих сайтах, поддерживающих 2FA авторизацию, есть функционал «запомнить меня». Он полезен в том случае, когда пользователь не желает вводить 2FA код при последующих входах в аккаунт. Важно идентифицировать способ, с помощью которого 2FA «запоминается». Это может быть cookie, значение в session/local storage или просто крепление 2FA к IP адресу.
На сайте включена поддержка X-Forwarded-For
Встроенный header X-Forwarded-For может использоваться для смены IP. Если в приложение встроена обработка данного хедера, просто отправьте X-Forwarded-For: desired_IP для подмены IP, чтобы обойти ограничение без использования дополнительных прокси. Каждый раз, когда будет отправлен запрос с X-Forwarded-For, веб-сервер будет думать, что наш IP адрес соответствует значению, переданному через хедер.
Материалы на эту тему:
Improper access control баг на странице ввода 2FA
Иногда страница-диалог для ввода 2FA представлена в виде URL с параметрами. Доступ к такой странице с параметрами в URL с cookies, которые не соответствуют тем, которые использовались при генерации страницы или вообще без cookies, — это не безопасно. Но если разработчики решили принять риски, то нужно пройтись по нескольким важным пунктам:
- истекает ли ссылка для ввода 2FA;
- индексируется ли ссылка в поисковиках.
Игнорирование 2FA при определенных обстоятельствах
При выполнении некоторых действий, которые приводят к автоматическому входу в аккаунту, 2FA может не запрашиваться.
Отсутствие Rate-limit-а в личном кабинете
2FA может внедряться в различные функционалы личного кабинета пользователя для большей безопасности. Это может быть изменение email адреса, пароля, подтверждение изменения кода для осуществления финансовых операций, etc. Наличие rate-limit-a в личном кабинете может отличаться от наличия rate-limit-a в 2FA при входе в аккаунт.
Если разработчики изначально добавили защиту против несанкционированного изменения данных, то данную защиту нужно поддерживать и исправлять все возможные bypass-ы. Если bypass найден, то это расценивается как уязвимость обхода «security feature», которая была имплементирована разработчиками.
Быстрый взлом хот-спота с авторизацией на web-интерфейсе
Мы будем использовать hack-captive-portals – скрипт для взлома любых перехватывающих порталов (Captive Portal), использующий технику спуфинга MAC.
Если у вас Kali Linux, Ubuntu, Linux Mint, Debian или любые их производные, то установите пару пакетов:
sudo apt -y install sipcalc nmap
Как обойти captive portal (перехватывающий портал)
Теперь, когда мы понимаем, на каких принципах основывается работа Captive Portal, очень хорошо видны его слабые места.
Как работает captive portal (перехватывающий портал)
Чтобы понять, почему так легко обойти Перехватывающий Портал, а также увидеть другие способы обхода, нужно понять, как именно работает Captive Portal.
Как можно было уже увидеть – это открытая Точка Доступа, к которой может подключиться кто-угодно. Запомним это – у нас без всяких взломов уже имеется доступ к локальной сети. Если при словосочетании «локальная сеть» вам сразу приходит в голову слово «сниффинг» – то вы правы!
Как сделать сигнал перехватывающего портала (captive portal) доступным для других устройств
Независимо от того, как вы получили доступ (легально или не совсем), можно расшарить ваше Интернет-соединение для нескольких устройств. Можно даже открыть интернет доступ из виртуальной машины реальному компьютеру…
В принципе, я использую метод описанный в статье «Усиление сигнала Wi-Fi».
Само-собой, нам понадобится 2 Wi-Fi адаптера – один подключён к Перехватывающему Порталу, второй – раздаёт Интернет для «своих».
На предыдущем этапе – когда мы взламывали Перехватывающий Портал, вполне возможно, что мы использовали подключение с помощью Network Manager. Мы сократим количество непонятных зависаний и сбережём свои нервы, если будем выполнять последующие действия без использования NetworkManager.
Устанавливаем дополнительные пакеты, если у вас их ещё нет:
Как усилить сигнал wi-fi
Некоторые роутеры имеют функцию повторителя (репетитора) и их можно использовать для усиления слабого сигнала Wi-Fi. Но не всегда имеется под рукой роутер с функцией усиления Wi-Fi сигнала (особенно в поездках), поэтому я рассмотрю немного другой вариант.
Совсем без дополнительного железа обойтись не получится. Но мы будем использовать то, что обычно всегда есть под рукой у пентестера беспроводных сетей:
- компьютер (ноутбук)
- 2 Wi-Fi адаптера
Одна из беспроводных карт должна быть достаточно мощной и чувствительной – внешняя беспроводная карта с усиливающей (а ещё лучше с усиливающей и направленной) антенной, а вторая должна поддерживать режим AP (точки доступа) – но зато ей необязательно быть мощной – достаточно встроенного в ноутбук Wi-Fi адаптера, поскольку её задачей будет раздавать Wi-Fi Интернет в пределах комнаты. В общем, стандартный джентельменский набор аудитора Wi-Fi сетей – ничего особенного – наверное, у каждого из нас всё это уже есть.
Алгоритм следующий: с помощью более мощной Wi-Fi карты мы подключаемся к удалённой точке доступа. С помощью второй Wi-Fi карты мы создаём новую точку доступа, которая использует Интернет-соединение первой. К этой новой точке доступа смогут подключаться наши «слабые» устройства (мобильные телефоны).
Обход авторизации
Все это хорошо, только кого волнует эта неотказуемость, если механизмы аутентификации остаются неприступными? Поэтому идем копать дальше. Напомним, что к этому моменту мы умеем просматривать список всех пользователей ДБО, менять им пароли и, кроме того, отправлять серверу приложений запросы таким образом, что криптосервер считает их корректно подписанными, а сервер приложений использует параметры без подписи.
Обход механизма обеспечения неотказуемости операций
Что ж, сначала мы посвятили немного времени анализу и фингерпринтингу. И вот что мы нашли:
Первый метод обхода captive portal: кража mac и ip адреса
Именно этот метод использует скрипт hack-captive-portals: он перехватывает IP и MAC от кого-либо, кто уже подключён и авторизован в перехватывающем портале.
Принцип работы очень простой – скрипт находит все «живые» хосты в локальной сети и по очереди «примеряет» их MAC и IP – сразу после примерки делается проверка – доступна ли глобальная сеть. Если доступна – скрипт останавливает работу, а мы можем наслаждаться чудесами сети Интернет. Если внешняя сеть недоступна – просто пробуются следующие MAC и IP и т.д.
Очень просто, но при этом ОЧЕНЬ эффективно. Обязательное требование – в локальной сети должен быть кто-нибудь, кто уже авторизовался в Перехватывающем Портале. В принципе, можно выписать несколько рабочих пар MAC-IP и подключаться даже когда «хозяев нет дома», но такие пары могут «протухать» – они могут быть действительны, например, только в течение суток (с момента аутентификации легитимным пользователем, а не с момента, когда мы узнали о них).
Тем не менее, это очень эффективный и самый универсальный метод.
Вы также можете взломать Перехватывающий Портал даже без скрипта: с помощью arp-scan исследуйте локальную сеть Портала, смену MAC делайте как описано в этой статье, а подменять IP можно прямо в графическом интерфейсе Network Manager. В нём же установите DNS сервер 8.8.8.8.
Предисловие
Как известно, существует три основных класса уязвимостей программного обеспечения: уязвимости проектирования, реализации и эксплуатации. Последние достаточно просты с точки зрения исправления, первые же наиболее сложны. При этом уязвимости проектирования не только труднее фиксить, но и наиболее «хлебно» искать с точки зрения исследователя безопасности или хакера, потому что в этом случае можно получить наиболее долгоживущую уязвимость и наибольшее число уязвимых инсталляций.
Если обратиться к истории, то можно увидеть, что банки одними из первых стали использовать гражданскую криптографию — шифрование, электронную цифровую подпись, криптографические протоколы и специализированную аппаратуру. Разработчики систем дистанционного банковского обслуживания (или просто ДБО), таких как онлайн-банки для физических лиц или банк-клиент для юридических лиц, как правило, неплохо знакомы с криптографией и умеют хорошо решать основные задачи в применении к банковским реалиям: обеспечение безопасной передачи данных, обеспечение неотказуемости банковских операций (то есть цифровой аналог собственноручной подписи) и аутентификацию, соответствие требованиям государственных регулирующих органов (регуляторов, в нашем случае — Банка России), защиту морально устаревших систем, которые нельзя оперативно обновить.
Так что если такие системы аккуратно разработаны программистами, которые хорошо знают основы криптографии и умеют их применять, используют признанные алгоритмы с хорошо изученной криптостойкостью, то их сложно сломать, потому что в этом случае придется искать уязвимости, к примеру, в реализации RSA или научиться эффективно факторизовать числа…
А вот и нет. Все так красиво и безопасно только на словах. Даже в военной сфере, авиации и прочих областях разработки ПО, где надежность жизненно важна и где в процессы разработки интегрированы методы формальной верификации, в программах время от времени находят ошибки.
Финансовые приложения существенно менее критичны в плане надежности (от сбоя ДБО, скорее всего, никто не умрет), и формальная верификация — нечастый гость даже в процессах разработки современных финансовых приложений, не говоря уже о старых системах, разработанных лет двадцать назад или еще раньше.
Каждый банк, который хочет предоставлять доступ к финансовым транзакциям через интернет, вынужден выбирать один из двух вариантов реализации:
В первом случае банк получит в готовом виде всю требуемую регуляторами криптографическую обвязку. Второй вариант оставляет решение вопросов, связанных с криптой, в ведении самого банка. И в этом случае на сцену выходят, все в белом (то есть сертифицированные ФСБ), многочисленные криптографические средства и криптопровайдеры, предоставляющие свои услуги.
О втором варианте как раз и пойдет сегодня речь. Мы рассмотрим современные системы дистанционного банковского обслуживания, работающие поверх обычных интернет-соединений (рис. 1). И предложим подход к поиску уязвимостей проектирования в этих финансовых приложениях, на примере клиент-банка одного из крупных европейских банков.
Забегая немного вперед, скажем: по нашему опыту, самая «вкусная» часть таких приложений — специализированный протокол взаимодействия компонентов между собой. Действительно, криптосервер должен передавать серверу приложений результаты проверки ЭЦП из запроса пользователя.
Сервер приложений при этом должен доверять этим результатам, так как сам не использует криптографические примитивы (в этом была вся идея!). Фактически методика взлома такой схемы состоит из обратной инженерии протокола взаимодействия с тем, чтобы понять, как серверу приложений передается результат валидации запроса пользователя, а потом научиться подделывать и передавать эти идентификационные данные.
Предлагаемый подход
Для начала сделаем пару утверждений общего характера на уровне здравого смысла о процессе разработки приложений в банковской сфере и оставим их без доказательства; они помогут нам в поиске уязвимостей проектирования.
Утверждение А: нельзя так просто взять и создать криптографический протокол уровня приложений с нуля.
Когда разработчик пытается изобрести «на коленке» безопасный специализированный протокол с использованием криптографических примитивов без предварительных шагов типа разработки спецификации, формального доказательства свойств протокола, использования безопасного процесса разработки, у него, скорее всего, ничего не выйдет.
Руководство по лечению сертифицированной криптографии в банковских приложениях
Почти каждый хакер или пентестер время от времени сталкивается с нестандартными криптографическими протоколами, которые можно встретить в банковской сфере, в технологических сетях предприятий и так далее. В этой статье мы расскажем о методике исследования и взлома таких систем на примере одного банковского приложения.
Этап 1: получение стабильного подключения к удалённой точке доступа
Необходимо добиться стабильного подключения к точке доступа со слабым сигналом. Для этого перемещайте Wi-Fi адаптер (если он внешний и если длина шнура позволяет) по комнате, а также поворачивайте в разные стороны направленную антенну (если она у вас есть).
Следить за качеством сети можно по индикаторам, а также используя команду ping, либо сервисы проверки скорости Интернет-соединения (например, speedtest.net/ru/run).
Этап 2: усиление беспроводного сигнала в настройках роутера
Это опциональный шаг. Если с помощью программы Router Scan by Stas’M или RouterSploit вам удалось получить доступ в админку роутера, то в настройках беспроводной сети можно изменить уровень сигнала.
Эта настройка может называться TX Power (как на скриншоте ниже, где я установил значение на High), либо как-то по-другому (соотношение производительности и экономии энергии и т.п.).
Для использования любой из упомянутых программ нужно знать IP адрес роутера. Когда вы подключились к точке доступа, в Linux IP роутера можно узнать командой
ip route
Адрес роутера будет после default via, например, 192.168.1.1.
В Windows IP роутера можно узнать командой:
ipconfig
Сделанные «настройки» стоят потраченного на них времени, скорость Wi-Fi соединения когда TX Power был на значении Medium:
Скорость соединения при установке TX Power на High:
Этап 3: подключение к дальней точке доступа, настройка своей точки доступа
Если у вас Windows, то переходите к инструкции «Как в Windows создать точку доступа Wi-Fi (мобильный хот-спот)».
Последующая информация предназначена для пользователей Linux.
Все действия мы будем делать в командной строке – там мы быстрее получим желаемый результат чем если пытаться сделать нужные настройки в Network Manager.
В качестве операционной системы я использую Kali Linux. Действия в других ОС Linux похожи, но вам самостоятельно нужно установить пакеты wpasupplicant и create_ap.
В Kali Linux необходимо установить ряд пакетов, для этого выполните следующие команды:
Заключение
В результате мы достигли возможности отправлять полностью доверенные запросы от имени «зловредного» клиента к серверу банка, как если бы они были сгенерированы легитимным клиентом. Мы полагаем, что подобный подход к анализу систем «сверху вниз» можно использовать практически для любой специализированной криптографической системы, потому что ключевое значение имеет человеческий фактор (в нашем случае это приняло форму неверного представления о современных протоколах уровня приложений, о сложных веб-фреймворках и их внутренней кухне).
В качестве послесловия процитируем слова Ади Шамира из его недавнего выступления на RSA Conference 2022: «Я действительно верю, что значимость криптографии снижается. Даже самые защищенные компьютерные системы в самых физически изолированных местах успешно взламывались в последние пару лет в результате APT (Advanced Persistent Threat, целенаправленная атака на конкретную систему) и других продвинутых атак».