Перейти к содержанию

Небезопасная конфигурация App Transport Security

Критичность: ВЫСОКИЙ
Способ обнаружения: SAST, NETWORK

Описание

Приложение использует небезопасно настроенную конфигурацию сетевого взаимодействия App Transport Security. С выходом iOS 9.0 Apple представил настройку App Transport Security (ATS), как обязательную для всех приложений. ATS конфигурация — это отдельная секция внутри основного Info.plist файла приложения, в котором настраиваются параметры сетевого взаимодействия и имеет следующую структуру:

NSAppTransportSecurity : Dictionary {
    NSAllowsArbitraryLoads : Boolean
    NSAllowsArbitraryLoadsForMedia : Boolean
    NSAllowsArbitraryLoadsInWebContent : Boolean
    NSAllowsLocalNetworking : Boolean
    NSExceptionDomains : Dictionary {
        : Dictionary {
            NSIncludesSubdomains : Boolean
            NSExceptionAllowsInsecureHTTPLoads : Boolean
            NSExceptionMinimumTLSVersion : String
            NSExceptionRequiresForwardSecrecy : Boolean   
            NSRequiresCertificateTransparency : Boolean
        }
    }
}

Некорректная реализация сетевого взаимодействия упрощает атаки Man In The Middle (человек посередине) и понижает безопасность вашего приложения.

Рекомендации

Ниже представлено описание каждого из параметров и показаны риски, которые может повлечь за собой отключение каждого из параметров.

Рекомендациями в данном случае является включение ATS в полном объеме на уровне всего приложения и без исключений для доменов.

Рекомендуемая конфигурация:

<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSAllowsArbitraryLoadsForMedia</key>
<false/>
<key>NSAllowsArbitraryLoadsInWebContent</key>
<false/>
</dict>

Изначально Apple планировала потребовать, чтобы все приложения, представленные в App Store, поддерживали ATS в январе 2017 года, однако они продлили крайний срок, но еще не объявили дату.

NSAllowArbitraryLoads

Ключ NSAllowArbitraryLoads определяет состояние ATS в целом, включено или выключено оно для приложения. По умолчанию NSAllowArbitraryLoads установлено значение NO. Установка ключа в значение YESприведет к полному отключению ATS. Это означает, что система не будет запрещать вашему приложению взаимодействовать с любыми доменами по протоколу HTTP и не будет применено никаких проверок безопасности. Крайне не рекомендуется отключать ATS, особенно для всего приложения.

Если по какой-то причине необходимо отключение ATS, рекомендуется дополнительно проверить:

  • Шифры, используемые для сетевого взаимодействия приложения (и что они надежны);
  • Протоколы, используемые для отправки и получения данных (и что они безопасны);
  • Есть ли в приложении уязвимости для перехода на более раннюю версию протокола шифрования;
  • Проверяет ли приложение сертификаты, используемые для TLS-подключений;

NSAllowsLoadsForMedia

Это исключение относится к мультимедийному контенту, защищенному системой управления цифровыми правами (DRM) или шифрованием. По умолчанию NSAllowsLoadsForMedia установлено значение NO. Если для ключа NSAllowsLoadsForMedia установлено значение YES, ATS отключается для контента, отправляемого с использованием фреймворка AVFoundation (обычно это происходит с приложениями, которые включают в себя возможность работы с видео/аудиоконтентом).

Если по какой-то причине необходимо отключение ATS, рекомендуется дополнительно проверить:

  • Мультимедийные данные, отправленные приложением, не содержат конфиденциального содержимого и защищены с помощью DRM или шифрования;

Хотя лучше всего реализовать эти меры защиты, даже если контент передается по HTTPS, т.к. перехват передаваемого контента по HTTP или другим небезопасным протоколам осуществляется очень просто.

NSAllowsArbitraryLoadsInWebContent

Ключ NSAllowsArbitraryLoadsInWebContent определяет, возможно ли соединение по небезопасным протоколам из компонентов WebView.

По умолчанию для ключа NSAllowsArbitraryLoadsInWebContentустановлено значение NO. Если для ключа установлено значение YES, ATS будет отключен для WebView.

Неправильное использование WebView может привести к различным уязвимости в приложении, поэтому крайне важно обеспечить их безопасность. Например, WebView могут быть уязвимы для ряда распространенных веб-уязвимостей, таких как внедрение SQL (SQL injection), подделка межсайтовых запросов (CSRF) и атаки межсайтовых сценариев (XSS). Чтобы получить дополнительную информацию о безопасности при использовании WebView, ознакомьтесь с дополнительными рекомендациями.

NSAllowsLocalNetworking

Ключ NSAllowsLocalNetworking определяет работу ATS в локальной сети. По умолчанию для ключа NSAllowsLocalNetworkingустановлено значение NO. Обычно это исключение используют приложения, которые подключаются к локальному устройству для обеспечения сети Интернета вещей (IoT). При отключении ATS убедитесь, что при взаимодействии в локальной сети не передаются конфиденциальные данные, а также использует безопасное TLS-соединение.

NSExceptionDomains

Используя ключ NSExceptionDomains, есть возможность настраивать исключения ATS для отдельных доменов. Стоит помнить, что подразделы ATS внутри NSExceptionDomainsзаменяют другие первичные ключи. Например, если приложение загружает мультимедиа из определенного домена и для этого конкретного домена используются и исключение NSAllowsLoadsForMedia на верхнем уровне, и конфигурация NSExceptionDomains, то параметры NSExceptionDomains имеют приоритет ( то есть заменяют NSAllowsLoadsForMedia верхнего уровня для конкретно этого домена).

Вторая особенность, если домен в исключениях указан без какой-либо конфигурации, этот домен получит полную защиту ATS, даже если для параметра NSAllowsArbitraryLoadsустановлено значение YES. То есть, разработчик может отключить ATS глобально, но включить его для определенных доменов, указав их в ключе NSExceptionDomains. Это является ошибкой конфигурации, отключение ATS для всего приложения и включение только для определенных доменов. При необходимости использования небезопасных протоколов для известных доменов необходимо именно их добавлять в исключения и включать ATS на глобальном уровне для всего приложения.

Если вы указываете исключения для доменов, ATS игнорирует любые ключи глобальной конфигурации, такие как NSAllowsArbitraryLoads, для этого домена. Это работает, даже если вы оставите словарь для домена пустым и полностью полагаетесь на значения по умолчанию его ключей.

NSIncludesSubdomains

Данный ключ определяет, будет ли применяться политика ATS для всех поддоменов.

По умолчанию для ключа NSIncludesSubdomains установлено значение NO. Если установлено значение YES, любая конфигурация ATS, включенная для определенного домена, будет использоваться для всех поддоменов. И, если установлен домен, но не настроено никаких дополнительных ключей, кроме NSIncludesSubdomains, этот домен и его поддомены будут использовать ATS.

NSExceptionAllowsInsecureHTTPLoads

Ключ NSExceptionAllowsInsecureHTTPLoadопределяет, возможна ли передача незащищенного трафика HTTP на указанный домен.

По умолчанию для этого ключа установлено значение NO. Если установлено значение YES, приложению будет разрешено отправлять HTTP-трафик на этот домен.

NSExceptionMinimumTLSVersion

Этот ключ позволяет снизить минимально допустимую версию TLS. По умолчанию допустимыми версиями являются TLS 1.2 и выше.

NSExceptionRequiresForwardSecrecy

Данный ключ определяет использование свойства Forward Secrecy для конкретного домена.

По умолчанию для этого ключа установлено значение YES. Если значение выставлено в NOсвойство Forward Secrecy будет отключено для конкретного домена.

NSRequiresCertificateTransparency

Данный ключ определяет использование свойства Certificate Transparency (прозрачность сертификатов) для конкретного домена.

По умолчанию для этого ключа установлено значение NO. Если для ключа установлено значение YES, для сертификата домена потребуется метка времени Certificate Transparency. Certificate Transparency — это проект Google, направленный на повышение безопасности системы выпуска сертификатов SSL. Если ваша организация или рассматриваемый домен поддерживает Certificate Transparency, рекомендуется включить данную опцию. Certificate Transparency помогает выявлять мошеннические центры сертификации (ЦС), а также помогает предотвратить атаки типа «человек по середине», уведомляя владельца, если его сертификат был скомпрометирован. Когда этот ключ включен, проверки сертификатов, связанные с Certificate Transparency, будут выполнены до установления соединения.

ATS — это не серебряная пуля

ATS — это мера безопасности на стороне клиента, которая не заменяет безопасность на стороне сервера. Безопасность на стороне клиента можно обойти, если злоумышленник имеет физический доступ к устройству. Таким образом, хотя ATS защищает приложения iOS и их пользователей, помогая предотвратить атаки на более раннюю версию SSL и использование слабых шифров, компаниям по-прежнему необходимо защищать серверную часть приложения — например, путем реализации HTTP Strict Transport Security (HSTS), отключая слабые шифры и т. д. Безопасность на стороне клиента усиливает безопасность на стороне сервера и является всего лишь одним из уровней комплексной защиты мобильного приложения.

Ссылки

  1. https://developer.apple.com/documentation/security/preventing_insecure_network_connections

  2. https://books.nowsecure.com/secure-mobile-development/en/webviews/

  3. https://developer.apple.com/documentation/security/preventing_insecure_network_connections

  4. https://www.certificate-transparency.org/

  5. https://developer.apple.com/documentation/avfoundation

  6. https://developer.apple.com/news/?id=12212016b

  7. https://www.owasp.org/index.php/Mobile_Top_10_2016-M3-Insecure_Communication

  8. https://cwe.mitre.org/data/definitions/319.html

К началу