Здесь описан протокол Mitigator Challenge Response (MCR) для разработчиков внешних систем. Контрмера MCR описана во встроенной справке.
Mitigator Challenge Response (MCR) — протокол для прохождения проверки на Mitigator´а одним приложением, чтобы открыть доступ для других, например, игровой лаунчер проходит проверку, а пропускается трафик игр.
Клиентом назывется программа, которая проходит проверку (например, игровой лаунчер). Программа, ради трафика которой проходится MCR (например, игра) в протоколе не участвует.
Параметры протокола:
key
: от 8 и более произвольных байтов. Настраивается
в политике защиты, одинаков для всех клиентов, проходящих MCR в этой
политике.Протокол:
Клиент устанавливает TCP-соединение на защищаемый IP и любой порт.
Клиент отправляет запрос на испытание (request).
Mitigator отвечает сообщением с cookie
(challenge).
Клиент формирует hash = crc32(cookie + key, 0)
,
где “+” означает конкатенацию, 0 — начальное значение для CRC32
(Castagnoli), и отправляет его в сообщении-ответе (response).
Mitigator проверяет hash
и закрывает соединение с помощью RST,
если он верен. При неверном хэше ответа нет.
Mitigator игнорирует неизвестные и неправильно оформленные сообщения.
Формат сообщений:
Request
+-----+-----+-----+-----+-----+-----+-----+-----+-----
| 'M' | 'C' | 'R' | 'H' | '3' | '1' | '1' | '0' | 0...
+-----+-----+-----+-----+-----+-----+-----+-----+-----
TCP payload должен быть добит нулевыми байтами до длины 400. (Большая длина уменьшает количество пакетов, которые может отправлять атакующий и которое придется обрабатывать.)
Challenge
+-----+-----+-----+-----+-----+-----+-----+-----+
| 'M' | 'C' | 'R' | 'C' | cookie (opaque) |
+-----+-----+-----+-----+-----+-----+-----+-----+
Response
+-----+-----+-----+-----+-----+-----+-----+-----+-----
| 'M' | 'C' | 'R' | 'R' | hash (big endian) | 0...
+-----+-----+-----+-----+-----+-----+-----+-----+-----
TCP payload должен быть добит нулевыми байтами до длины 400.
Для тестирования можно применять mcr.py
(скачать). Ключ можно
задавать «как есть» (--key_raw secretkey) или в виде hex-строки
(
–key_hex 7365637265746b6579`).
Имитатор Mitigator´а (на единственном порту):
python3 mcr.py --host 127.0.0.1 --port 1234 --key_raw secretkey server
Правильный клиент (может проходить проверку на скрипте или на Mitigator´е):
python3 mcr.py --host 127.0.0.1 --port 1234 --key_raw secretkey client