Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
mitmengine — Инструмент обнаружения MITM (чудовище-посредник). Используется для создания MALCOLM: | Kitploit
Инструменты/GitHubGitHub/cloudflare/mitmengine
Оборонительные ИнструментыСетевая безопасностьРазведка угрозРеагирование на ИнцидентыArchived
GitHubcloudflare/mitmengine

mitmengine

Инструмент обнаружения MITM (чудовище-посредник). Используется для создания MALCOLM:

Репозиторий
813682 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Сайт

MITMEngine

Build Status

УВЕДОМЛЕНИЕ ОБ УСТАРЕВАНИИ: Данное программное обеспечение больше не поддерживается.

Цель этого проекта — обеспечить точное обнаружение перехвата HTTPS и надёжное формирование отпечатков TLS. Проект основан на The Security Impact of HTTPS Interception и начинался как порт на Go их скриптов обработки и отпечатков.

Дополнительный контекст о MITMEngine доступен в этой статье в блоге Cloudflare. Быстрые ссылки:

  • Сигнатуры и отпечатки: основные определения
  • Методология обнаружения MITM
  • API
  • Пример использования
  • Сборка и тестирование
  • Как внести вклад
  • Утилита mergeDB

Требования

  • Go
  • Wireshark 3.0.0 (wireshark -v для проверки)

Документация

Подробная документация находится вместе с кодом (сначала скопируйте пакет в $(GOPATH)/src/github.com/cloudflare/mitmengine).

root@kitploit:~
godoc -http=:6060

http://localhost:6060/pkg/github.com/cloudflare/mitmengine

Сигнатура и отпечатки

В этом проекте отпечатки сопоставляются с конкретными экземплярами объекта, в то время как сигнатуры могут представлять несколько объектов. Мы используем эту конвенцию, потому что отпечаток обычно является неотъемлемым свойством объекта, а сигнатуру можно выбрать. Аналогично, реальный запрос клиента, полученный сервером, будет иметь отпечаток, тогда как программное обеспечение, генерирующее запрос, может выбрать свою собственную сигнатуру (например, выбирая, какие наборы шифров оно поддерживает).

Запрос клиента

Отпечаток запроса клиента выводится из запроса клиента к серверу и содержит как особенности TLS, так и HTTP. Сигнатура запроса клиента представляет все возможные отпечатки, которые может сгенерировать программное обеспечение. Цель состоит в том, чтобы сделать каждую сигнатуру достаточно специфичной, чтобы она могла однозначно идентифицировать часть программного обеспечения.

User Agent

Сигнатура User Agent представляет собой набор User Agent'ов, генерируемых браузером. Сигнатура User Agent для браузера допускает диапазон версий браузера и позволяет указывать имя ОС, платформу ОС, диапазон версий ОС и тип устройства для создания более детализированных сигнатур.

Браузер

Сигнатура браузера содержит как сигнатуру User Agent, так и сигнатуру запроса клиента. Это позволяет сигнатуре представлять все возможные отпечатки, генерируемые, например, Chrome 31-38 на Windows 10.

MITM

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

Методология обнаружения MITM

Мы считаем HTTPS-соединение перехваченным, когда существует несоответствие между ожидаемой сигнатурой запроса клиента, соответствующей браузеру, идентифицированному по User Agent, и фактическим отпечатком запроса клиента.

Ложные срабатывания

Если сигнатура неточна или устарела для данного клиентского программного обеспечения, возможно, что сигнатура ложно пометит соединение как перехваченное.

Ложные пропуски

Если прокси тесно имитирует запрос клиента, мы можем не ожидать обнаружения несоответствия. Если сигнатуры браузера слишком широки, мы также не сможем обнаружить перехват.

Эталонные отпечатки

Эталонные отпечатки браузера и MITM-программного обеспечения, используемые в MALCOLM, можно найти в reference_fingerprints/mitmengine/. Этот набор отпечатков представляет собой комбинацию того, что извлечено из TLS Client Hello pcaps в reference_fingerprints/pcaps/, а также 500 лучших пар User Agent + TLS Client Hello, наблюдаемых в сети Cloudflare и помеченных высокой степенью доверия (то есть трафик, соответствующий активности людей и дружественных ботов).

В идеале мы не должны полагаться на эталонные отпечатки, взятые из сети Cloudflare; вместо этого у нас должен быть полный набор pcaps для построения нашего набора эталонных TLS Client Hello. Заинтересованы в помощи по расширению набора данных? Узнайте, как вы можете внести вклад!

API

Сначала пользователь должен создать структуру mitmengine.Config для передачи в mitmengine.NewProcessor. Структура mitmengine.Config может указывать имена файлов, содержащих отпечатки браузеров, отпечатки MITM и заголовки MITM. Альтернативно, она может также указывать файл конфигурации для чтения вышеупомянутых файлов из любого другого источника; сейчас MITMEngine поддерживает чтение этих файлов из баз данных, совместимых с Amazon S3 (включая Amazon S3 и Ceph). Дополнительные средства чтения файлов для баз данных (которые мы называем "загрузчиками") могут быть определены в пакете loaders, и пока новые загрузчики реализуют интерфейс Loader, они должны работать с остальной частью MITMEngine "из коробки".

Предполагаемая точка входа в пакет MITMEngine — это функция Processor.Check, которая принимает User Agent и отпечаток запроса клиента и возвращает отчёт об обнаружении MITM. В будущем будут добавлены дополнительные функции API, например, для добавления новых сигнатур в работающий процесс.

Пример использования

Пример использования API приведён ниже. Более полное приложение доступно в cmd/demo/main.go и может быть собрано выполнением make bin/demo.

root@kitploit:~
rawUa := "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36"
requestFingerprintString := "303:dada,1301,1302,1303,c02b,c02f,c02c,c030,cca9,cca8,c013,c014,9c,9d,2f,35,a:aaaa,0,17,ff01,a,b,23,10,5,d,12,33,2d,2b,1b,dada,15:9a9a,1d,17,18:0::"
uaFingerprintString := "1:72.0.3626:2:3:10.14.3:1:"
requestFingerprint, _ := fp.NewRequestFingerprint(requestFingerprintString)
uaFingerprint, _ := fp.NewUAFingerprint(uaFingerprintString)
report := mitmProcessor.Check(uaFingerprint, rawUa, requestFingerprint)

TLS requestFingerprintString имеет следующий формат:

root@kitploit:~
<tls_version>:<cipher_suites>:<extension_names>:<curves>:<ec_point_fmts>:<http_headers>:<quirks>

uaFingerprint имеет следующий формат:

root@kitploit:~
# <browser_name>:<browser_version>:<os_platform>:<os_name>:<os_version>:<device_type>:<quirks>

Пример разбора User Agent'ов в формат uaFingerprint находится в файле cmd/demo/main.go.

Сборка и тестирование

Чтобы использовать MITMEngine, не забудьте подтянуть его зависимости. Вероятно, вам захочется запустить логику vendoring или gomod перед запуском тестов на MITMEngine.

Для тестирования выполните make test, а для просмотра покрытия кода — make cover.

Как внести вклад

Поскольку отпечатки браузеров и MITM быстро устаревают, мы активно ищем способы обновления репозитория отпечатков новыми образцами.

Предоставляя образец отпечатка ("Образец"), вы (от своего имени или от имени организации, которую вы представляете или которая спонсирует вас (если таковая имеется)) предоставляете Cloudflare, Inc. и её дочерним и аффилированным компаниям бессрочную, безотзывную, неисключительную, освобождённую от роялти, всемирную лицензию на все права интеллектуальной собственности на Образец: (1) копировать, публиковать, отображать и распространять Образец; и (2) создавать производные работы, основанные на Образце или являющиеся его частью.

Чтобы внести образцы отпечатков, пожалуйста, выполните следующие шаги:

Создание образца отпечатка

(протестировано на macOS Mojave 10.14.3)

Создайте сертификат RSA сервера и пару ключей:

root@kitploit:~
openssl req -new -x509 -sha256 -out server.crt -nodes -keyout server.pem -subj /CN=localhost

Запустите сервер на порту 4433:

root@kitploit:~
openssl s_server -www -cipher AES256-SHA -key server.pem -cert server.crt

Запустите захват TShark для расшифровки HTTP-заголовков (TShark >= 3.0.0):

root@kitploit:~
tshark -i loopback -o tls.keys_list:"127.0.0.1,4433,http,server.pem" -Tjson -e http.request.line -Y http > header.json

Запустите захват TShark для TLS Client Hello:

root@kitploit:~
tshark -i loopback -f "tcp port 4433" -w handshake.pcap

Посетите https://localhost:4433 с TLS-клиента, который вы хотите снять отпечаток. Например,

root@kitploit:~
echo -e "GET /test HTTP/1.1\r\nHost:example.com\r\n\r\n" | openssl s_client -connect localhost:4433

Отправка pull request

  • Создайте образец отпечатка (header.json, handshake.pcap), как описано выше, и поместите его в каталог reference_fingerprints/pcaps/<desc>, где <desc> — уникальное и описательное имя.

  • Добавьте строку в reference_fingerprints/fingerprint_metadata.jsonl со следующими полями. Распознанные варианты для полей os, device, platform и browser — это те, что определены в пакете uasurfer. Распознанные варианты для mitm_fingerprint.type перечислены ниже. Примеры смотрите в reference_fingerprints/fingerprint_metadata.jsonl; любые неизвестные поля можно оставить пустыми или пропустить.

    { "desc": "", "comment": "", "handshake_pcap": "", "header_json": "<(optional) path to file containing the client HTTP request", "ua_fingerprint": {"raw_ua": "", "os": "<WindowsPhone|Windows|MacOSX|iOS|Android|...>", "os_version": "..", "device": "<Windows|Mac|Linux|...>", "platform": "<Computer|Tablet|Phone|...>", "browser": "<Chrome|IE|Safari|Firefox|...>", "browser_version": ".."}, "mitm_fingerprint": { "name": "", "type": "<Antivirus|FakeBrowser|Malware|Parental|Proxy>" }}

Другие PR и запросы функций приветствуются!

Утилита mergeDB

mergeDB (в cmd/mergedb) — это утилита для объединения похожих отпечатков TLS ClientHello для нескольких близких версий браузеров или MITM-программного обеспечения. Используйте mergeDB для консолидации больших списков отпечатков User Agent / Client Hello:

root@kitploit:~
go run cmd/mergedb/main.go

По умолчанию mergeDB работает с отпечатками из каталога reference_fingerprints/mitmengine.

Скачать инструмент
  • Отправьте pull request с указанными изменениями.