Ответ
Атака "Человек посередине" (Man-in-the-Middle, MITM) — это когда злоумышленник тайно перехватывает и, возможно, изменяет коммуникацию между двумя сторонами, которые считают, что общаются напрямую друг с другом.
Как это выглядит в инфраструктуре:
- Перехват трафика: Атакующий позиционирует себя между клиентом (например, разработчиком) и сервером (например, внутренним API).
- Пример сценария:
- Разработчик в кафе подключается к поддельному Wi-Fi "Free_Cafe", который контролирует атакующий.
- Разработчик пытается зайти на
https://internal.company.com. Его DNS-запрос перехватывается, и ему подсовывается IP-адрес сервера атакующего. - Сервер атакующего представляет поддельный сертификат для
internal.company.com, устанавливает TLS-соединение с разработчиком, а затем самостоятельно устанавливает отдельное TLS-соединение с реальным сервером. - Весь трафик (включая логины и токены) теперь проходит через машину атакующего в расшифрованном виде.
Меры защиты, которые мы внедряем в DevOps:
- Принудительное использование TLS (HTTPS) везде: Конфигурация веб-серверов и балансировщиков с редиректом с HTTP на HTTPS. Использование HSTS-заголовков.
server { listen 80; server_name example.com; return 301 https://$server_name$request_uri; } - Строгая проверка сертификатов: Отключение проверок, подобных
curl -kилиverify=Falseв скриптах, в production-среде. Использование внутренних PKI и доверенных CA. - Certificate Pinning: Для критичных мобильных приложений или клиентов можно "зашить" отпечаток (fingerprint) ожидаемого сертификата сервера.
- Защита на уровне сети:
- VPN (WireGuard, OpenVPN): Для доступа к производственной среде, шифруя весь трафик до точки входа.
- Zero Trust Network Access (ZTNA): Решения, где доступ предоставляется не на основе сетевого периметра, а на основе идентификации пользователя/устройства и контекста.
- Мониторинг и обнаружение: Анализ сетевого трафика на предмет аномалий, таких как неожиданные изменения в TLS-параметрах или появление самоподписанных сертификатов в потоке данных.
Проверка сертификата с помощью OpenSSL (базовый аудит):
# Проверка цепочки и дат действия сертификата удаленного сервера
openssl s_client -connect example.com:443 -servername example.com < /dev/null 2>/dev/null | openssl x509 -noout -dates -issuer -subject
# Проверка отзыва сертификата (OCSP)
openssl s_client -connect example.com:443 -status < /dev/null 2>&1 | grep -A 17 "OCSP response"