Небезопасная конфигурация 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), отключая слабые шифры и т. д. Безопасность на стороне клиента усиливает безопасность на стороне сервера и является всего лишь одним из уровней комплексной защиты мобильного приложения.
Ссылки
-
https://developer.apple.com/documentation/security/preventing_insecure_network_connections
-
https://books.nowsecure.com/secure-mobile-development/en/webviews/
-
https://developer.apple.com/documentation/security/preventing_insecure_network_connections
-
https://www.owasp.org/index.php/Mobile_Top_10_2016-M3-Insecure_Communication