Какие методы защиты от анализа сетевого трафика вы применяли в iOS-приложениях?

«Какие методы защиты от анализа сетевого трафика вы применяли в iOS-приложениях?» — вопрос из категории Сети, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для защиты от MITM-атак и анализа трафика применялся комплексный подход:

  1. Обязательное использование HTTPS с Certificate Pinning

    • Фиксация ожидаемого сертификата или его публичного ключа в коде приложения.
    • Пример реализации делегата для URLSession:
      class PinningDelegate: NSObject, URLSessionDelegate {
      func urlSession(_ session: URLSession,
                      didReceive challenge: URLAuthenticationChallenge,
                      completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
          guard let serverTrust = challenge.protectionSpace.serverTrust,
                let certificate = SecTrustGetCertificateAtIndex(serverTrust, 0) else {
              completionHandler(.cancelAuthenticationChallenge, nil)
              return
          }
          // Сравнение с локально сохраненным ключом/сертификатом
          // ...
      }
      }
  2. Шифрование чувствительных данных на стороне клиента перед отправкой (например, с помощью AES) для защиты даже при компрометации TLS.

  3. Настройка App Transport Security (ATS) в Info.plist для полного запрета незашифрованных HTTP-соединений.

  4. Дополнительные меры для критичных API:

    • Подпись запросов с использованием секретного ключа и временной метки.
    • Использование одноразовых токенов (nonce) для защиты от повторного воспроизведения запросов (replay-атак).
    • Отключение поддержки прокси в конфигурации URLSession для предотвращения перехвата трафика через локальные прокси.