Статьи

Apple усиливает безопасность благодаря транспортной безопасности приложений

За последние несколько лет важность и внимание к безопасности в сети значительно возросли. Во время WWDC в этом году Apple ясно дала понять, что планирует подавать пример, улучшая безопасность своих операционных систем с помощью новой функции App Transport Security .

Конечно, безопасность платформы так же сильна, как и безопасность ее компонентов, и это касается сторонних приложений. Другими словами, Apple ожидает, что разработчики примут App Transport Security в своих приложениях.

В этой статье я объясню, что такое App Transport Security   влечет за собой, как это повлияет на ваши приложения, и как вы можете обновить свои приложения в соответствии с рекомендациями и рекомендациями Apple

App Transport Security , или сокращенно ATS , — это новая функция iOS 9 и OS X El Capitan. Хотя Apple не упомянула watchOS, мы можем предположить, что App Transport Security также применима к watchOS 2. App Transport Security направлена ​​на повышение безопасности операционных систем Apple и любых приложений, работающих на этих операционных системах.

Сетевые запросы, сделанные через HTTP, передают данные в виде открытого текста . Само собой разумеется, что это представляет значительный риск для безопасности. Apple подчеркивает, что каждый разработчик должен стремиться обеспечивать безопасность данных своих клиентов, даже если эти данные не кажутся важными или конфиденциальными.

App Transport Security активно поощряет безопасность, внедряя ряд рекомендаций по безопасности, наиболее важным из которых является требование отправки сетевых запросов по защищенному соединению. При включенной App Transport Security сетевые запросы автоматически отправляются через HTTPS вместо HTTP.

Существует ряд других требований для дальнейшего повышения безопасности. Например, App Transport Security требует TLS ( Transport Layer Security ) 1.2 или выше. Хотя вы можете быть незнакомы с TLS, я уверен, что вы слышали о SSL ( Secure Sockets Layer ). TLS является преемником SSL и представляет собой набор криптографических протоколов для обеспечения безопасности сетевых подключений.

Apple недавно опубликовала предварительную техническую заметку о App Transport Security, чтобы дать разработчикам возможность планировать App Transport Security. Документ описывает, что App Transport Security ожидает от ваших приложений и веб-сервисов, с которыми он взаимодействует.

Подожди секунду. Мое приложение использует CDN (сеть доставки контента), которое я не контролирую и не поддерживает HTTPS. Не беспокойся Apple прикрыла твою спину. Что касается App Transport Security, приложение попадает в одну из четырех категорий. Давайте рассмотрим каждую категорию, чтобы увидеть, как это влияет на приложение.

Если ваше приложение взаимодействует только с серверами, поддерживающими HTTPS, то вам повезло. Ваше приложение не должно будет вносить никаких изменений. Однако обратите внимание, что App Transport Security требует TLS 1.2 и ожидает, что домен будет использовать шифры, поддерживающие прямую секретность. Сертификат также должен соответствовать требованиям, предъявляемым ATS. Поэтому важно дважды проверить, что серверы, с которыми взаимодействует ваше приложение, соответствуют требованиям ATS.

Возможно, ваше приложение взаимодействует с серверами, которые не отвечают требованиям ATS. В этом случае вам нужно сообщить операционной системе, какие домены задействованы, и указать в Info.plist вашего приложения, какие требования не выполняются.

Это означает, что App Transport Security применяется для каждой конечной точки, к которой обращается ваше приложение, за исключением тех, которые указаны в Info.plist вашего приложения. Вы можете настроить исключения, используя ряд предопределенных ключей. В следующем Info.plist мы определяем три исключения.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?xml version=»1.0″ encoding=»UTF-8″?>
<!DOCTYPE plist PUBLIC «-//Apple//DTD PLIST 1.0//EN» «http://www.apple.com/DTDs/PropertyList-1.0.dtd»>
<plist version=»1.0″>
<dict>
    …
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>api.insecuredomain.com</key>
            <dict>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <false/>
            </dict>
            <key>cdn.somedomain.com</key>
            <dict>
                <key>NSThirdPartyExceptionMinimumTLSVersion</key>
                <string>1.1<string/>
            </dict>
            <key>thatotherdomain.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
        </dict>
    </dict>
    …
</dict>
</plist>

Первое исключение, которое мы определяем, говорит ATS, что связь с этим поддоменом отменяет требование использовать HTTPS. Обратите внимание, что это исключение применяется только к поддомену, указанному в исключении. Важно понимать, что ключ NSExceptionAllowsInsecureHTTPLoads относится не только к использованию HTTPS. Исключение указывает, что для этого домена все требования App Transport Security отменяются.

Возможно, что ваше приложение обращается к серверу, который обслуживает свои данные по HTTPS, но не использует TLS 1.2 или выше. В этом случае вы определяете исключение, которое указывает минимальную версию TLS, которая должна использоваться. Это лучший и безопасный вариант, чем полное переопределение App Transport Security для этого конкретного домена.

Ключ NSIncludesSubdomains сообщает App Transport Security, что исключение применяется к каждому поддомену указанного домена. Кроме того, исключение определяет, что домен может использовать шифры, которые не поддерживают прямую секретность ( NSExceptionRequiresForwardSecrecy ), путем расширения списка принятых шифров. Для получения дополнительной информации о прямой секретности, я рекомендую прочитать технику Apple по этой теме.

Если вы создаете веб-браузер, то у вас есть немного большая проблема. Поскольку вы не знаете, какие веб-страницы будут посещать ваши пользователи, вы не сможете определить, обслуживаются ли эти веб-страницы по HTTPS и соответствуют ли они требованиям ATS. В этом случае нет другого выбора, кроме как полностью отказаться от App Transport Security.

Важно, чтобы вы явно отказались от использования App Transport Security. Помните, что App Transport Security применяется по умолчанию. В Info.plist вашего приложения вы добавляете словарь для ключа NSAppTransportSecurity . Словарь должен содержать один ключ, NSAllowsArbitraryLoads , и его значение должно быть установлено в YES . Вот как должен выглядеть файл Info.plist вашего приложения, если вы отказываетесь от App Transport Security.

01
02
03
04
05
06
07
08
09
10
11
12
13
<?xml version=»1.0″ encoding=»UTF-8″?>
<!DOCTYPE plist PUBLIC «-//Apple//DTD PLIST 1.0//EN» «http://www.apple.com/DTDs/PropertyList-1.0.dtd»>
<plist version=»1.0″>
<dict>
    …
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>
    …
</dict>
</plist>

Существует четвертый вариант, в котором ваше приложение отказывается от App Transport Security, но определяет ряд исключений. Это полезно, если ваше приложение извлекает данные с ряда серверов, которые вы не контролируете, но также общается с поддерживаемым вами API. В этом случае вы указываете в Info.plist вашего приложения, что разрешены произвольные загрузки, но вы также определяете одно или несколько исключений, для которых включена App Transport Security. Вот как может выглядеть Info.plist.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version=»1.0″ encoding=»UTF-8″?>
<!DOCTYPE plist PUBLIC «-//Apple//DTD PLIST 1.0//EN» «http://www.apple.com/DTDs/PropertyList-1.0.dtd»>
<plist version=»1.0″>
<dict>
    …
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>api.tutsplus.com</key>
            <dict>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <false/>
            </dict>
        </dict>
    </dict>
    …
</dict>
</plist>

Apple подчеркнула, что приложения автоматически выбирают App Transport Security, если они созданы на iOS 9 или OS X El Capitan. Это означает, что вам не придется вносить какие-либо изменения в свои приложения, если вы создаете их для iOS 8 или OS X Yosemite.

Однако, основываясь на предыдущих выпусках iOS и OS X, мы узнали, что Apple требует от разработчиков создавать свои приложения на основе новейшего SDK довольно скоро после их официального выпуска. Другими словами, даже если вам не придется соблюдать App Transport Security, когда iOS 9 и OS X El Capitan будут выпущены позднее в этом году, вполне вероятно, что Apple потребует от разработчиков сборки в соответствии с последним SDK в первом или Второй квартал 2016 года. Поэтому я рекомендую вам изучить, как App Transport Security повлияет на ваши приложения раньше, чем позже.

Я надеюсь, что эта статья прояснила, что App Transport Security — это не то, что ваши приложения могут принять когда- нибудь , Это похоже на требование Apple о поддержке 64-битной версии не так давно. Если ваши приложения не общаются только с серверами по протоколу HTTPS, которые соответствуют требованиям ATS, вам нужно потратить некоторое время на изучение того, как App Transport Security повлияет на ваши приложения. Техника Apple о App Transport Security может помочь вам в этом.