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

Какие знаешь сетевые атаки?

1.7 Middle🔥 152 комментариев
#Работа с сетью

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

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

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

Распространенные сетевые атаки

В контексте разработки iOS-приложений понимание сетевых атик критически важно для создания защищенных клиент-серверных взаимодействий. Хотя iOS предоставляет мощные встроенные механизмы безопасности (такие как App Transport Security (ATS)), разработчик должен осознавать угрозы, чтобы правильно проектировать сетевой слой приложения.

1. Man-in-the-Middle (MITM) - Атака "человек посередине"

Это одна из самых опасных атак, при которой злоумышленник перехватывает, а иногда и модифицирует обмен данными между клиентом (iOS-приложением) и сервером.

Пример уязвимости в коде:

// ОПАСНО: Отключение проверки сертификата (никогда так не делайте!)
let session = URLSession(configuration: .default, delegate: UnsafeDelegate(), delegateQueue: nil)

class UnsafeDelegate: NSObject, URLSessionDelegate {
    func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
        // Критическая уязвимость - принимаем любой сертификат
        completionHandler(.useCredential, URLCredential(trust: challenge.protectionSpace.serverTrust!))
    }
}

Защита:

  • Всегда используйте HTTPS с правильной конфигурацией ATS
  • Реализуйте certificate pinning для критически важных доменов
  • Никогда не отключайте проверку сертификатов в production-сборках

2. DNS Spoofing/Poisoning - Подмена DNS

Атакующий манипулирует DNS-запросами, перенаправляя приложение на фиктивный сервер.

Меры противодействия:

  • Использование DNS-over-HTTPS (DoH) или DNS-over-TLS (DoT)
  • Реализация собственного резолвинга DNS с валидацией
  • Certificate pinning как дополнительный уровень защиты

3. Replay Attack - Атака повторного воспроизведения

Злоумышленник перехватывает и повторно отправляет валидные сетевые запросы.

Пример защиты:

struct SecureRequest: Encodable {
    let data: String
    let timestamp: Int64 // Текущее время
    let nonce: String // Уникальное значение для каждого запроса
    let signature: String // HMAC подпись
    
    static func createRequest(data: String, secretKey: String) -> SecureRequest {
        let timestamp = Int64(Date().timeIntervalSince1970 * 1000)
        let nonce = UUID().uuidString
        let message = "\(data)\(timestamp)\(nonce)"
        let signature = HMAC.sign(message: message, key: secretKey)
        
        return SecureRequest(
            data: data,
            timestamp: timestamp,
            nonce: nonce,
            signature: signature
        )
    }
}

4. Packet Sniffing - Прослушивание сетевого трафика

Пассивный перехват данных, передаваемых по сети.

Защитные меры:

  • Обязательное использование TLS 1.3+ для всех соединений
  • Шифрование чувствительных данных перед отправкой
  • Регулярная ротация ключей шифрования

5. Session Hijacking - Угоны сессий

Перехват и использование активных сессионных токенов.

Стратегии защиты в iOS:

class SecureSessionManager {
    private let keychain = KeychainWrapper.standard
    
    func configureSession() {
        // Используем короткоживущие access tokens
        let accessToken = fetchAccessToken()
        let refreshToken = keychain.string(forKey: "refreshToken")
        
        // Автоматический refresh токенов перед истечением срока
        setupTokenRefreshTimer()
        
        // Защита токенов в Keychain с атрибутом kSecAttrAccessibleWhenUnlockedThisDeviceOnly
        keychain.set(refreshToken, forKey: "refreshToken", withAccessibility: .whenUnlockedThisDeviceOnly)
    }
    
    private func setupTokenRefreshTimer() {
        // Реализация автоматического обновления токенов
    }
}

6. Denial of Service (DoS/DDoS) - Отказ в обслуживании

Перегрузка сервера большим количеством запросов.

Меры на стороне клиента:

  • Реализация экспоненциальной backoff-стратегии для повторов
  • Кэширование ответов для снижения нагрузки
  • Валидация данных перед отправкой на сервер

7. SSL/TLS Stripping - Понижение уровня шифрования

Принуждение клиента к использованию незащищенного HTTP вместо HTTPS.

Профилактика в iOS:

// В Info.plist необходимо настроить ATS
/*
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <false/>
    <key>NSExceptionDomains</key>
    <dict>
        <!-- Только для конкретных доменов с обоснованием -->
    </dict>
</dict>
*/

8. Injection Attacks - Инъекционные атаки

Внедрение вредоносного кода или команд через сетевые запросы.

Пример безопасного подхода:

// Безопасная обработка пользовательского ввода
func searchProducts(query: String) {
    // Валидация входных данных
    guard !query.containsPotentialInjection() else {
        return
    }
    
    // Использование параметризованных запросов
    var components = URLComponents(string: "https://api.example.com/search")
    components?.queryItems = [
        URLQueryItem(name: "q", value: query.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)),
        URLQueryItem(name: "limit", value: "20")
    ]
    
    // Отправка запроса
}

Практические рекомендации для iOS-разработчиков:

  1. Обязательное использование ATS с минимальными исключениями
  2. Реализация certificate pinning для доменов с критически важными данными
  3. Регулярное обновление сетевых библиотек (Alamofire, URLSession) для получения исправлений уязвимостей
  4. Аудит всех сетевых зависимостей на предмет известных уязвимостей
  5. Шифрование чувствительных данных на устройстве перед передачей
  6. Валидация всех входящих данных от сервера
  7. Использование аппаратных ключей (Secure Enclave) для хранения криптографических ключей
  8. Регулярное тестирование безопасности с помощью инструментов вроде OWASP ZAP или Burp Suite

Понимание этих атак позволяет iOS-разработчику создавать приложения, которые не только функциональны, но и устойчивы к современным сетевым угрозам. Безопасность должна быть интегрирована в процесс разработки с самого начала, а не добавляться в качестве запоздалой мысли.