← Назад к вопросам

Что такое Man-in-the-Middle?

1.7 Middle🔥 131 комментариев
#Сетевое взаимодействие

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое атака «Man-in-the-Middle» (MitM)?

Man-in-the-Middle (MitM) — это тип кибератаки, при котором злоумышленник тайно перехватывает и, возможно, изменяет обмен данными между двумя сторонами, которые считают, что общаются напрямую друг с другом. В контексте Android-разработки понимание таких атак критически важно для обеспечения безопасности мобильных приложений, особенно при передаче конфиденциальных данных (логины, платежная информация, персональные данные).

Как работает MitM-атака?

Атака обычно состоит из трёх этапов:

  1. Перехват трафика: Злоумышленник внедряется в канал связи (например, через небезопасную Wi-Fi-сеть, поддельный DNS или ARP-спуфинг).
  2. Расшифровка или подмена данных: Если трафик не защищён, атакующий может читать и модифицировать его.
  3. Пересылка данных: Изменённые или просто перехваченные данные отправляются получателю, чтобы скрыть своё присутствие.

Пример сценария в Android-приложении:

// Небезопасный HTTP-запрос — уязвим для MitM
val request = Request.Builder()
    .url("http://api.example.com/login") // HTTP без шифрования
    .post(formBody)
    .build()

// Безопасный HTTPS-запрос с правильной настройкой
val request = Request.Builder()
    .url("https://api.example.com/login") // HTTPS с SSL/TLS
    .post(formBody)
    .build()

Основные риски для Android-приложений

  • Кража учетных данных: Перехват логинов, токенов, сессионных куки.
  • Подмена данных: Изменение содержимого ответов API (например, подмена суммы перевода).
  • Внедрение вредоносного кода: Модификация загружаемых APK или ресурсов.
  • Нарушение конфиденциальности: Доступ к персональным сообщениям, фото, геолокации.

Методы защиты в Android

1. Обязательное использование HTTPS с правильной настройкой

Все сетевые запросы должны использовать TLS/SSL. Настройте Network Security Configuration:

<!-- res/xml/network_security_config.xml -->
<network-security-config>
    <domain-config>
        <domain includeSubdomains="true">api.example.com</domain>
        <pin-set>
            <pin digest="SHA-256">BASE64_ЗАЩИЩЕННЫЙ_ОТПЕЧАТОК_СЕРТИФИКАТА</pin>
        </pin-set>
    </domain-config>
</network-security-config>
<!-- AndroidManifest.xml -->
<application
    android:networkSecurityConfig="@xml/network_security_config"
    ... >

2. Certificate Pinning (Закрепление сертификатов)

Привязка к конкретным сертификатам предотвращает использование поддельных сертификатов.

3. Проверка сертификатов на стороне клиента

Отключать проверку сертификатов только для отладки:

// НЕДОПУСТИМО в production!
val unsafeOkHttpClient = OkHttpClient.Builder()
    .hostnameVerifier { _, _ -> true } // ОПАСНО!
    .build()

4. Защита от сниффинга трафика

В AndroidManifest.xml:

<application
    android:usesCleartextTraffic="false"
    ... >

5. Использование современных протоколов и шифров

Настройка TLS 1.2/1.3 и отказ от устаревших протоколов.

Дополнительные меры безопасности

  • Двухфакторная аутентификация для критических операций.
  • Шифрование данных на устройстве перед отправкой.
  • Регулярное обновление криптографических библиотек.
  • Защита от отладки и реверс-инжиниринга (обфускация, анти-отладка).

Тестирование на уязвимости

Разработчики должны:

  1. Использовать инструменты типа Burp Suite, Charles Proxy для тестирования.
  2. Проверять приложение в средах с перехватом трафика.
  3. Автоматизировать security-тестирование в CI/CD.

Заключение

MitM-атаки остаются серьёзной угрозой для мобильных приложений. Ответственный Android-разработчик обязан реализовывать многоуровневую защиту: от принудительного HTTPS и закрепления сертификатов до защиты данных на устройстве. Безопасность — это не фича, а фундаментальное требование, особенно в эпоху повышенной конфиденциальности пользовательских данных и ужесточения регуляторных требований (GDPR, CCPA). Регулярный security-аудит и следование best practices должны быть неотъемлемой частью процесса разработки.