Сначала немного теории. MITM — вид атаки, называется «человек посередине» или, реже, «атака посредника». Согласно вики, это метод компрометации канала связи, при котором взломщик, подключившись к каналу между контрагентами, осуществляет вмешательство в протокол передачи, удаляя или искажая информацию. Более простыми словами — это когда злоумышленник перехватывает и подменяет сообщения, которыми обмениваются корреспонденты, причём ни один из последних не догадывается о его присутствии в канале. Атака обычно начинается с прослушивания канала связи и заканчивается тем, что криптоаналитик пытается подменить перехваченное сообщение, извлечь из него полезную информацию, перенаправить его на какой-нибудь внешний ресурс.

Сценарии атаки:

  • Обмен открытыми ключами
    В случае системы с открытым ключом криптоаналитик может перехватить сообщения обмена открытыми ключами между клиентом и сервером и изменить их. Для того, чтобы оставаться незамеченным, криптоаналитик должен перехватывать все сообщения между клиентом и сервером и шифровать и расшифровывать их соответствующими ключами. Такие действия могут показаться слишком сложными для проведения атаки, однако они представляют реальную угрозу для небезопасных сетей (например, интернет и частные беспроводные сети)
  • Внедрение вредоносного кода
    Здесь главным образом применяется для захвата уже авторизованной сессии, выполнения собственных команд на сервере и отправки ложных ответов клиенту. Атака «человек посередине» позволяет криптоаналитику вставлять свой код в электронные письма, SQL-выражения и веб-страницы (то есть позволяет осуществлять SQL-инъекции, HTML/script-инъекции или XSS-атаки), и даже модифицировать загружаемые пользователем бинарные файлы для того, чтобы получить доступ к учетной записи пользователя или изменить поведение программы, загруженной пользователем
  • Понижение стойкости (Downgrade Attack)
    Термином «Downgrade Attack» называют такую атаку, при которой криптоаналитик вынуждает пользователя использовать менее безопасные функции, протоколы, которые всё ещё поддерживаются из соображений совместимости. Такой вид атаки может быть проведён на протоколы SSH, IPsec и PPTP. Для защиты от Downgrade Attack небезопасные протоколы должны быть отключены как минимум на одной стороне; просто поддержки и использования по умолчанию безопасных протоколов недостаточно!
  • SSH V2-to-V1
    Атакующий может попытаться изменить параметры соединения между сервером и клиентом при установлении между ними соединения. Согласно докладу, сделанному на конференции Blackhat Conference Europe 2003, криптоаналитик может «заставить» клиента начать сессию SSH1, вместо SSH2 изменив номер версии «1.99» для SSH-сессии на «1.51», что означает использование SSH V1. Протокол SSH-1 имеет уязвимости, которыми может воспользоваться криптоаналитик.
  • IPsec
    При таком сценарии атаки криптоаналитик вводит свою жертву в заблуждение, заставляя её думать, что IPsec-сессия не может начаться на другом конце (сервере). Это приводит к тому, что сообщения будут пересылаться в явном виде, в случае если хост-машина работает в rollback-режиме.
  • PPTP
    На этапе согласования параметров сессии PPTP атакующий может вынудить жертву использовать менее безопасную PAP-аутентификацию, MSCHAP V1 (то есть «откатиться» с MSCHAP V2 до версии 1), либо не использовать шифрование вообще. Атакующий может вынудить свою жертву повторить этап согласования параметров PPTP-сессии (послать Terminate-Ack-пакет), выкрасть пароль из существующего туннеля и повторить атаку.

Общие положения, думаю, понятны. Так вот, хочу написать об «утилите пейнтестера», а по сути — MITM-фраймворку Intercepter-NG. Функционал внушает уважение, список достаточно увесистый.

Network Scan

Обычно сетевой сканер довольно-таки заурядная вещь, но не в Intercepter. К уже привычной информации об IP и MAC адресах, производителе сетевой карты и операционной системе, добавился вывод имени компьютера. За тот же промежуток времени теперь дополнительно можно узнать Netbios имя или название устройства под управлением iOS. Для резолва последнего используется протокол MDNS, на основе которого работает Apple’овский протокол Bonjour. Все полученные имена теперь сохраняются в кеш-файл и если при последующих сканированиях по какой-либо причине информация об имени хоста не была получена динамически, то она будет взята из кеша. Здесь же можно упомянуть о появлении функции Auto ARP Poison, которая включается в экспертных настройках. В режиме автоматического ARP poison достаточно внести только 1 хост в список целей, а Intercepter будет сам сканировать сеть с определенным интервалом и автоматически добавлять новые цели.

MiTM атака на SSH-2

Атакующий получает данные авторизации пользователя и логирует весь сеанс связи, запуск команд и результат их выполнения. Для этого Intercepter перенаправляет трафик жертвы на свой собственный ssh сервер и в случае успешной авторизации проксирует соединение до оригинального сервера. Если терминальная программа жертвы имела кешированный фингерпринт ключа от удаленного сервера, то в момент авторизации будет выдано предупреждение о его изменении. Это единственный подозрительный момент который возникает при проведении атаки.
К счастью атакующего, далеко не все (даже опытные) люди среагируют на это предупреждение должным образом. Далеко не всегда атакуемый пользователь является администратором ssh сервера, для него смена ключей и предупреждения не имеют никакого значения.

Bruteforce Mode

В этом режиме имеется поддержка TLS для протоколов SMTP и POP3, а так же перебор TELNET авторизации. Теперь при возникновении таймаута, активный тред перезапускается с того же самого места и процесс перебора продолжается. Появился Single Mode, который указывает на то, что каждую новую пару L\P следует проверять с установкой нового соединения, для некоторых протоколов это позволяет увеличить скорость работы. Лог работы сохраняется в brute.txt

Подмена траффика

Особенность этого режима в том, что подменять можно данные только равного размера, не изменяя длину пакетов. Ограничение вовсе не связано с проблемами технической реализации, нет никаких сложностей дробить ethernet фреймы с пересчетом соответствующих tcp полей. Все упирается в прикладные протоколы. Рассмотрим пример с HTTP.

Допустим браузер открывает site.com/file.txt, в котором содержится строка «12345». В ответ на GET запрос сервер вернет HTTP заголовок, в котором будет указана длина передаваемых данных — Content-length: 5. Что будет если мы заменим «12345» на «12356»? Браузер скачает только 5 байт, отбросив добавленную «6», а если мы уменьшим размер данных, заменив «12345» на «1234», браузер получит только 4 байта и будет ждать от сервера еще 1 байт до тех пор, пока соединение не разорвется по таймауту. Именно поэтому сделано данное ограничение на размер. Менять можно как текстовые данные так и бинарные, синтаксис для бинарных паттернов как в Си — «\x01\x02\x03».
Если требуется подмена в HTTP трафике, то в настройках необходимо включить опцию «Disable HTTP gzip encoding».

HSTS Spoofing

Intercepter может обходить HSTS при проведении SSL Strip. Техника обхода относительно простая, но именно в реализации присутствуют определенные сложности, поэтому не стоит ждать каких-то особых результатов. Рассмотрим пример на «Яндекс Почта» с использованием недобраузера Chrome. Если зайти на ya.ru, то в правом верхнем углу будет https ссылка «Войти в почту», с которой SSL Strip легко справляется. Далее откроется форма авторизации, где методом POST передаются данные на passport.yandex.ru. Даже «стрипнув» https авторизация произойдет по SSL, т.к. хост passport.yandex.ru внесен в preloaded список хрома. Для того чтобы все таки перехватить данные нам необходимо заменить имя хоста passport.yandex.ru на какое-то другое, чтобы браузер не обнаружил, что этот ресурс следует посещать строго по безопасному соединению. Для примера можно заменить passport.yandex.ru на pasport.yandex.ru, в этом случае данные будут отправлены в открытом виде на измененное имя домена. Но т.к. такого домена — pasport.yandex.ru не существует, то дополнительно требуется сделать DNS Spoofing, т.е. клиент при резолве pasport.yandex.ru должен получить в ответ оригинальный ip адрес от passport.yandex.ru. Эта процедура автоматизирована и не требует дополнительного вмешательства пользователя при проведении атаки. Единственное, что требуется так это предварительно составить список замен в misc\hsts.txt. По умолчанию там присутствует несколько записей для yandex, gmail, facebook, yahoo. Важно понимать, что данная техника обхода не позволит перехватить сессию или авторизацию если пользователь введет в браузере facebook.com, т.к. браузер сразу откроет безопасную версию сайта. В этом случае атака возможна только если ссылка на facebook.com будет взята с другого ресурса, например при вводе facebook на google.com.
Еще один нюанс, в текущей реализации для проведения DNS Spoofing’а необходимо чтобы DNS сервер находился не в локальной сети, чтобы была возможность видеть dns запросы до шлюза и отвечать на них нужным образом.

Forced Download and JS Inject

При заходе на сайт предлагается скачать заданный атакующим файл, в зависимости от настроек браузера он может самостоятельно скачаться, а пользователь уже выберет, запустить его или нет. Как вы понимаете, в форсированную загрузку можно добавить и .exe файл с произвольным содержимым, причем источником этого файла будет сайт, который в данный момент посещает пользователь. Зная, что цель собирается открыть adobe.com, вы можете выдать flashplayer.exe, и в качестве источника этого файла будет указан adobe.com или один из его субдоменов. После разовой выдачи форсирование отключается, для повторного инжекта нужно снова нажать на соответствующую галку.

JS Inject в явном виде не присутствует среди элементов управления, т.к. по сути это самый обычный http inject, но с одним отличием. При подмене одного файла другим, например картинок .jpg на заданную, происходит именно замена одного содержимого другим. Замена .js скрипта с большой вероятностью может нарушить работу ресурса, поэтому js inject не заменяет один скрипт другим, а дописывает его в существующий, добавляя возможность внедрить дополнительный код, не затрагивая оригинальный.

SSL MiTM

Практически гвоздь программы. Улучшенный алгоритм генерации сертификатов, в них стали добавляться дополнительные dns записи и все сертификаты подписываются единым ключом (misc\server). Это означает, что добавив данный самоподписанный сертификат в список доверенных на компьютере цели, можно будет прослушивать SSL трафик до любого ресурса (где нет SSL Pinning). Функция Cookie Killer теперь работает и для SSL соединений. Появились черные (misc\ssl_bl.txt) и белые списки (misc\ssl_wl.txt). В них можно исключить или напротив жестко указать IP адреса или домены, к которым следует или не следует применять SSL MiTM. При указании extra ssl port больше нет необходимости указывать тип read\write, достаточно указать номер порта. Весь трафик пишется в ssl_log.txt.

Group Policy Hijacking

Очередная киллер-фича в Intercepter-NG. В очередной раз SMB подложил свинью Microsoft, благодаря данной уязвимости примерно за полтора часа можно получить доступ к любому компьютеру в домене (кроме домен-контроллера). В чем же суть: каждые 90 + случайное количество от 0 до 30 минут мембер домена запрашивает групповые политики с DC. Происходит это по SMB, путем открытия сетевого адреса \\DC\SYSVOL\domain.name\Policies\UUID\gpt.ini. Содержимое данного файла следующее:

[General]
Version=12345

Данное число является относительной версией текущих групповых политик. Если с последнего обновления версия не изменилась, то процесс получения групповых политик прекращается, но если версия другая — значит требуется их обновить. На этом этапе клиент запрашивает у домена активные CSE (client-side extensions), к которым относятся различные logon скрипты, задачи для планировщика и так далее. Естественно, атакующий, встав посередине, может подменить одну из задач, которая генерируется контроллером в виде файла. При таком раскладе эксплуатация была бы совсем простой, но все эти CSE по умолчанию отключены и единственное, что можно сделать — модифицировать реестр, ведь при обновлении групповых политик клиент запрашивает еще один файл — GptTmpl.inf, через который можно добавить или удалить запись. Для демонстрации выполнение кода можно воспользоваться хорошо известным методом — AppInit_Dll. Прописать в нужный ключ реестра загрузку своей dll с сетевого пути, после чего вновь созданный процесс в системе выполнял произвольный код. К сожалению, метод годится только в качестве proof of concept, ведь AppInit_Dll по умолчанию отключен уже много лет. Но есть альтернативный путь.
В ключ [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\currentversion\image file execution options] можно прописать отладчик для любого .exe файла. Например, указать, что calc.exe необходимо открывать через c:\path\debuger.exe и как только будет запущен калькулятор — первым делом откроется отладчик, в командной строке которого будет путь до calc’а. Это практически готовое решение, ведь удалось выполнить код без перезагрузки, хоть и при определенных условиях. Но даже этот способ имеет определенные ограничения, а именно — неизбежность участия пользователя в процессе получения доступа, т.е. вместо калькулятора можно было выполнить код через вызов IE или Chrome или любого другого приложения. Зачастую это ограничение становится серьезной проблемой — ведь если атакуемый пользователь не имел административных прав, то даже получив шелл отсутствует возможность удалить ранее добавленный в реестр отладчик, а это значит, что после прекращения атаки или при перезагрузке эксплуатируемое приложение переставало работать, ведь заспуфленный сетевой адрес с debuger.exe больше не существовал.
На помощь спешит эскалация привилегий. После получения групповых политик система их должна применить, для этого вызывается svchost и создает новый процесс taskhost.exe с правами SYSTEM. Встав в качестве отладчика для taskhost.exe можно убить сразу двух зайцев  — не просто получить шелл с правами SYSTEM, но получить его сразу же, без любого ручного вмешательства со стороны пользователя. Атака полностью автоматизирована, можно выбрать разом группу целей и в течение полутора-двух часов получить целый набор активных шелл-сессий с максимальными правами. Для этого даже не обязательно быть самому членом домена. Единственное, что необходимо — включить Network access: Let Everyone permissions apply to anonymous users. При тестировании, чтобы не ждать полтора часа, достаточно с консоли запустить gpupdate. Проверено на патченых Windows 7\8.1 в доменах с серверами 2008R2\2012R2.

FATE

Режим FATE совмещает в себе две функции: FAke siTE и FAke updaTE.

Ключевой целью FAke siTE служит получение авторизационных данных с любого веб ресурса, в обход SSL и других механизмов защиты. Достигается это клонированием страницы авторизации и созданием шаблона, который будет размещаться на встроенном псевдо-веб сервере. По умолчанию в состав Intercepter входит один шаблон для accounts.google.com, т.к. оригинальная страница требует заполнить поочередно поле с логином, а затем с паролем. В данном шаблоне внесены небольшие изменения, чтобы оба поля были активны одновременно. Перед атакой необходимо указать домен, на котором будет размещаться шаблон. После начала атаки, в трафик цели инжектится редирект на выбранный домен и впоследствии Intercepter автоматически будет проводить DNS спуфинг на требуемые адреса. В итоге в браузере откроется выбранная страница авторизации.

Вместо заключения

В список инструментов Intercepter помимо вышеперечисленных входят ARP Poison, Kerberos Downgrade, Cookie Killer и другие. В совокупности все это дает множество векторов атаки, а простой и удобный графический интерфейс еще больше упростит работу с утилитой.

Скачать Intercepter можно на официальном сайте: http://sniff.su/download.html
Еще есть wiki по функционалу Intercepter’а: http://sniff.su/wiki/index.html