Теневые форумы изобилуют предложениями о взломе аккаунтов. В большинстве случаев атаки устраивают при помощи фишинга с подделкой страницы авторизации. Однако такой метод неэффективен, если пользователю приходит SMS с проверочным кодом. Я покажу, как пробить двухфакторную аутентификацию, на примере взлома аккаунта Google редактора «Хакера».
 

Экскурс в 2FA

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

Метод 2FA (Two-Factor authentication) был придуман как дополнительный способ подтверждения владельца аккаунта. Он основан на нескольких способах аутентификации:

  • пользователь что-то знает (например, может ответить, какая была девичья фамилия его матери или кличка первого домашнего питомца);
  • пользователь обладает уникальными чертами, которые можно оцифровать и сравнить (биометрическая аутентификация);
  • пользователь имеет девайс с уникальным идентификатором (например, номер мобильного, флешку с ключевым файлом).

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

Самый популярный метод 2FA — третий. Это SMS с проверочными кодами, генерируемыми по технологии OTP. Код приходит каждый раз разный, поэтому угадать его практически невозможно.

Однако чем сложнее преодолеть защиту техническими методами, тем легче бывает это сделать социальной инженерией. Все настолько уверены в надежности 2FA, что используют ее для самых ответственных операций — от авторизации в Google (а это сразу доступ к почте, диску, контактам и всей хранимой в облаке истории) до систем клиент-банк.

При этом возможность обхода такой системы уже показывал австралийский исследователь Шабхэм Шах (Shubham Shah). Правда, его метод был довольно сложен в практической реализации. В нем использовалась авторизация по звонку, а не SMS, а предварительно нужно было узнать номер телефона жертвы и часть учетных данных. PoC был не особо убедительным, но наметил вектор атаки.

 

Modlishka

В начале 2019 года польский исследователь Пётр Душиньский (Piotr Duszyński) выложил в открытом доступе реверс-прокси Modlishka. По его словам, этот инструмент может обойти двухфакторную аутентификацию, что мы сейчас и проверим.

Если сравнить его с тем же SEToolkit (он встроен практически во все популярные дистрибутивы для пентеста), то разница вот в чем: SET клонирует и размещает на локальном сервере страницу авторизации. Там все основано на работе скриптов, которые перехватывают вводимые учетные данные жертвы. Можно, конечно, настроить редирект на оригинальный сайт, но трафик от жертвы до твоего сервера будет незашифрованным. По сути, такого рода программы выступают в роли web-серверов с поддельным (фишинговым) сайтом.

Modlishka действует иначе. Генерируется свой сертификат, которым шифруется соединение от жертвы до нашего сервера (чтобы не палиться). Затем эта машина выступает в роли обратного прокси.

Другими словами, весь трафик идет на оригинальный сайт с инстанцией на нашем сервере. У хакера остаются учетные данные, и захватывается авторизованная сессия жертвы. Классическая MITM-атака, которую предваряет фишинг (нужно как-то заставить жертву установить поддельный сертификат и направить ее на фейковый сайт).

WARNING

Статья написана в образовательных целях. Ни автор, ни редакция не несут ответственности за любой возможный вред, причиненный изложенными здесь материалами.

 

Поднимаем стенд

Давай поднимем сервер с Modlishka внутри локальной машины. Я сделаю это на примере Kali Linux, но принципиальной разницы для других дистрибутивов не будет — разве что слегка изменится путь к исходникам Go.

Вначале ставим Go — на этом языке написан реверс-прокси, и без Go он не скомпилируется.

$ apt-get install golang

Следом указываем путь к директории исходников:

$ export GOPATH='/root/go'

Проверить все можно командой

$ go env

В выводе должен быть указан GOPATH.

Вывод команды
Вывод команды

Затем клонируем ветку с инструментом.

$ go get -u github.com/drk1wi/Modlishka
$ cd /root/go/src/github.com/drk1wi/Modlishka/

Создаем сертификат:

$ openssl genrsa -out secret.key 2048
$ openssl req -x509 -new -nodes -key secret.key -sha256 -days 1024 -out cert.pem

Теперь необходимо перенести содержимое ключа и сертификата в файл plugin/autocert.go и заменить значение двух переменных:

  • const CA_CERT — значение сертификата (файл pem);
  • const CA_CERT_KEY — значение ключа (файл key).
Файл autocert.go после замены сертификата
Файл autocert.go после замены сертификата

Теперь собираем все это дело:

$ make

Занимает компиляция от трех до десяти минут в зависимости от количества вычислительных ресурсов.

Сам запускаемый файл находится в директории dist/ под названием proxy. Для проверки можно запустить с ключом -h — вывод справки.

$ ./dist/proxy -h
Вывод справки программы Modlishka
Вывод справки программы Modlishka

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


Check Also

Береги глаза! Активируем DC Dimming в iPhone Xs, Pixel 3 XL, Xiaomi Mi 9 и других смартфонах

Вырвиглазные мерцающие OLED-дисплеи остались в прошлом! В Xiaomi изобрели способ сделать O…

10 комментариев

  1. Аватар

    Bo0oM

    28.05.2019 at 12:42

    Но есть же evilginx?

  2. Аватар

    s00mbre

    30.05.2019 at 06:07

    Редактор-то сменил хоть пароль после такой свистопляски? 🙂 статья отменная, спасибо!

  3. Аватар

    slinkin

    30.05.2019 at 12:50

    Оххх…такое введение — взломали редактора журнала по безопасности. А на деле (в конце) выясняется что это лишь совместный эксперимент. Редактор зашёл на сомнительный сайт, пропустил бардак в урле, выставил небезопасные настройки браузера для сертификатов, не жмакнул по замку для проверки серта. ИМХО, не надо накидывать интригу туда, где её нет. Это технический сайт, и хочется конструктивного чтива. А так статья, и в принципе обзор инструмента и вектора атаки вполне годный.

    • 8bit

      8bit

      30.05.2019 at 18:56

      Можно зарегистрировать глобальный сертификат, подписанный УЦ, и настройки с сертификатом отпадут сами собой. Останется голый фишинг с обходом 2FA

  4. Андрей Васильков

    Андрей Васильков

    04.07.2019 at 11:55

    С сертификатами становится проще. Вот ещё новость по теме (цитирую https://www.securitylab.ru/news/499757.php):

    «В версии Firefox 68 будет активирована специальная опция, призванная предотвратить обрыв соединения с HTTPS-сайтами. По словам представителей Mozilla, в версии Firefox 68, выход которой запланирован на 9 июля, будет активирована специальная опция в настройках about:config, призванная предотвратить обрыв соединения с HTTPS-сайтами. При активации настройки security.enterprise_roots.enabled __Firefox начнет доверять всем сертификатам, импортированным в хранилище ОС__ «пользователем, администратором или установленной на компьютере программой».

    Данная настройка будет доступна в версиях Firefox для Windows и macOS. Также отмечается, что она будет __активирована по умолчанию__».

Оставить мнение