> Что такое MITM (man-in-the-middle) атака и как с ней бороться (Go)
Уровень: junior · Роль: backend · Категория: Технические вопросы
Компании: Юрент
Стек: Go
> Пример ответа
Короткий ответ
MITM (man-in-the-middle) - атака, при которой злоумышленник незаметно встраивается между двумя сторонами, перехватывая и модифицируя их трафик. Основные методы защиты: шифрование (TLS), аутентификация сторон, проверка сертификатов и использование защищённых протоколов. Для backend-разработчика на Go это означает обязательный HTTPS, валидацию сертификатов и отказ от доверия к незашифрованным соединениям.
Подробное объяснение
MITM-атака работает так: клиент думает, что общается с сервером, а сервер - с клиентом, но на самом деле весь трафик проходит через атакующего. Атакующий может:
- перехватывать данные (логины, пароли, токены);
- модифицировать запросы и ответы;
- подменять содержимое (например, инжектить вредоносный код).
Классические сценарии: поддельные Wi-Fi точки, ARP-spoofing в локальной сети, DNS-spoofing, подмена сертификатов.
Основная защита - TLS (HTTPS). Но важно понимать: просто наличие TLS не гарантирует безопасность, если клиент не проверяет сертификат или доверяет поддельному CA. Поэтому ключевые меры:
- обязательный HTTPS на всех эндпоинтах;
- строгая валидация сертификатов на клиенте;
- certificate pinning для критичных мобильных приложений;
- HSTS (HTTP Strict Transport Security) на сервере;
- отказ от HTTP-редиректов без шифрования;
- использование mTLS для server-to-server коммуникаций.
Для backend-разработчика важно также защищать внутренние сервисы: если микросервисы общаются по HTTP внутри сети, это тоже зона риска. Рекомендуется mTLS или хотя бы шифрование на транспортном уровне.
На практике
В Go стандартная библиотека net/http уже поддерживает TLS. Основные практические шаги:
- Настроить TLS-терминацию на сервере (или за reverse proxy).
- На клиенте (если ваш сервис ходит во внешние API) - использовать
http.Clientс корректной конфигурацией TLS. - Не отключать проверку сертификатов (даже в dev-окружении).
- Для внутренних сервисов - использовать mTLS с собственным CA.
- Добавить HSTS-заголовок на всех HTTPS-ответах.
Пример настройки HTTP-клиента с проверкой сертификатов:
GOclient := &http.Client{Transport: &http.Transport{TLSClientConfig: &tls.Config{MinVersion: tls.VersionTLS12,// InsecureSkipVerify должен быть false (по умолчанию)},},}
Для mTLS на сервере:
GOtlsConfig := &tls.Config{ClientAuth: tls.RequireAndVerifyClientCert,ClientCAs: clientCAs, // пул сертификатов доверенных клиентовMinVersion: tls.VersionTLS12,}server := &http.Server{Addr: ":8443",TLSConfig: tlsConfig,}
Как отвечать на собеседовании
Начни с короткого определения, затем опиши механизм атаки. Обязательно упомяни, что основная защита - TLS, но подчеркни, что валидация сертификатов критична. Если спросят про Go - расскажи про crypto/tls, http.Server, mTLS. Хорошо показать понимание, что MITM возможен даже при HTTPS, если клиент доверяет поддельному сертификату. Можно упомянуть HSTS и certificate pinning как дополнительные меры.
Что проверяет интервьюер
- понимание базовых принципов сетевой безопасности;
- знание, как работает TLS и почему он защищает от MITM;
- осознание, что шифрование без аутентификации не решает проблему;
- практические навыки настройки TLS в Go;
- понимание угроз для backend-сервисов (внутренние коммуникации).
Типичные ошибки
- утверждение, что HTTPS полностью исключает MITM (неверно - если сертификат не проверяется);
- предложение использовать только шифрование без аутентификации;
- игнорирование внутреннего трафика между сервисами;
- совет отключить проверку сертификатов для удобства разработки;
- незнание разницы между TLS и SSL;
- отсутствие упоминания HSTS или certificate pinning как дополнительных мер.
> Похожие задачи по backend
Может ли приложение работать в нескольких процессах?
Что такое дженерики в Go и зачем они нужны
Расскажите про опыт оптимизации
Напиши SQL запрос для вывода суммы продаж по каждому пользователю, учитывая, что у пользователя может не быть продаж
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью