
HTTP/HTTPS MITM прокси и рекордер.
[Hyperfox][1] — это инструмент аудита безопасности, который проксирует и записывает HTTP- и HTTPS-трафик между двумя точками.
Вы можете установить последнюю версию hyperfox в /usr/local/bin с помощью следующей команды (требуются права администратора):
curl -sL 'https://raw.githubusercontent.com/malfunkt/hyperfox/master/install.sh' | sh
Если вы предпочитаете не брать конфеты из этого фургона, вы также можете загрузить релиз со страницы релизов и установить его вручную.
hyperfox из исходного кодаДля сборки hyperfox из исходного кода вам понадобятся Go и C-компилятор:
Используйте go install для сборки и установки hyperfox:
go install github.com/malfunkt/hyperfox
Hyperfox создает прозрачный HTTP-прокси-сервер и привязывает его к порту 1080/TCP на localhost (-addr 127.0.0.1 -http 1080). Прокси-сервер читает обычные HTTP-запросы и перенаправляет их к целевой точке назначения (заголовок Host используется для определения назначения), когда целевая точка отвечает, Hyperfox перехватывает ответ и пересылает его исходному клиенту.
Все HTTP-коммуникации между источником и назначением перехватываются Hyperfox и записываются в базу данных SQLite, которая создается автоматически. Каждый раз при запуске Hyperfox создается новая база данных (например: hyperfox-00123.db). Вы можете изменить это поведение, явно указав имя базы данных (например: -db traffic-log.db).
Запустите Hyperfox с конфигурацией по умолчанию:
hyperfox
используйте cURL для запроса любой HTTP-страницы, параметр -x указывает cURL использовать hyperfox в качестве прокси:
curl -x http://127.0.0.1:1080 example.com
вы сможете увидеть запись запрошенной страницы в выводе Hyperfox:
127.0.0.1:44254 - - [11/Apr/2020:19:19:48 -0500] "GET http://example.com/ HTTP/1.1" 200 -1
-ui)
Используйте параметр -ui для включения пользовательского интерфейса Hyperfox, который откроется в новом окне браузера:
hyperfox -db records.db -ui
Приведенная выше команда создает веб-сервер, который привязывается к 127.0.0.1:1984. Если вы хотите изменить адрес или порт привязки, используйте флаг -ui-addr:
hyperfox -db records.db -ui -ui-addr 127.0.0.1:3000
Изменение адреса сервера интерфейса особенно полезно, когда Hyperfox работает на удаленном хосте или хосте без графического интерфейса, и вы хотите увидеть интерфейс с другого хоста.
Включение пользовательского интерфейса также включает минимальный REST API (на 127.0.0.1:4891), который используется фронтенд-приложением.
Обратите внимание, что REST API Hyperfox защищен только случайно сгенерированным ключом, который меняется при каждом запуске Hyperfox; в зависимости от вашего сценария использования это может быть неадекватно.
Когда параметр -ui-addr отличается от 127.0.0.1, Hyperfox выведет QR-код, чтобы упростить подключение с мобильных устройств:
hyperfox -db records.db -ui -ui-addr 192.168.1.23:1984
-ca-cert и -ca-key)SSL/TLS-соединения защищены сквозным шифрованием и защищены от подслушивания. Hyperfox не сможет видеть ничего, что происходит между клиентом и защищенным назначением. Это справедливо только до тех пор, пока цепочка доверия остается нетронутой.
Предположим, что клиент доверяет корневому сертификату CA, который известен Hyperfox; если это произойдет, Hyperfox сможет выпускать сертификаты, которым будет доверять клиент.
Примеры таких поддельных корневых файлов CA можно найти здесь:
вы также можете сгенерировать собственный корневой сертификат CA и ключ.
Существует ряд способов установки корневых сертификатов CA в зависимости от вашей операционной системы.
Этот QR-код может пригодиться при установке корневого CA Hyperfox на мобильном устройстве:
Hyperfox root CA certificate
Используйте флаги -ca-cert и -ca-key, чтобы предоставить Hyperfox корневой сертификат CA и ключ, которые вы хотите использовать:
hyperfox -ca-cert rootCA.crt -ca-key rootCA.key
приведенная выше команда создает специальный сервер и привязывает его к 127.0.0.1:10443, этот сервер ожидает поступления SSL/TLS-соединения. Когда поступает новое SSL/TLS-соединение, Hyperfox использует расширение SNI для идентификации целевого сервера имен и создания для него SSL/TLS-сертификата, этот сертификат подписывается предоставленным ключом корневого CA.
Запустите Hyperfox с соответствующими параметрами TLS и -http 443 (порт 443 требует прав администратора).
sudo hyperfox -ca-cert ./ca/rootCA.crt -ca-key ./ca/rootCA.key -https 443
Используйте cURL для выполнения HTTPS-запроса к example.com: опция -resolve указывает cURL пропустить проверку DNS и использовать 127.0.0.1 как законный адрес для example.com, а параметр -k указывает cURL принимать любой TLS-сертификат.
curl -k -resolve example.com:443:127.0.0.1 https://example.com
вы сможете увидеть запись запрошенной страницы в выводе Hyperfox:
127.0.0.1:36398 - - [11/Apr/2020:19:36:56 -0500] "GET https://example.com/ HTTP/2.0" 200 -1
/etc/hosts на localhostДобавьте хост, который хотите проверить, в файл /etc/hosts:
example.com 127.0.0.1
Запустите Hyperfox с нужными параметрами, только помните, что вы должны использовать порты 80 для HTTP и 443 для HTTPS, и это требует прав администратора. В дополнение к -http и -https используйте параметр -dns с действительным DNS-резолвером:
sudo hyperfox -ui -http 80 -dns 8.8.8.8
это заставит Hyperfox пропустить системный DNS-резолвер и использовать альтернативный (помните, что example.com указывает на 127.0.1).
Теперь используйте cURL и попробуйте перейти к назначению:
curl http://example.com
Hyperfox перехватит запрос и выведет его в свой вывод:
127.0.0.1:41766 - - [11/Apr/2020:19:43:30 -0500] "GET http://example.com/ HTTP/1.1" 200 -1
См. MITM-атака с Hyperfox и arpfox.
Выберите [задачу][2], исправьте ее и отправьте pull request.