Swifter {Swift Developer}

메뉴

iOS10 ATS(App Transport Security) 2016년말부터 필수 조건

WWDC2016 세션에서 앱스토어에 공개되는 앱은 올해안에 ATS(App Transport Security)를 요구한다라고 발표가 되었다. 앱에서 통신을 https연결로 제한하는 ATS활성화가 앱스토어에 앱등록을 위한 필수조건이 되는 것이지만, http기반 웹페이지를 포함일 여러가지 컨텐츠 표시에 많이 사용하는 앱은 어디까지 제한이 되는 것인지 궁금해졌다. 그래서 WWDC기간동안 애플 엔지니어에게 물어본 결과를 정리해본다.

2016년말부터 ATS가 필수 조건이 될 것이다.

ATS는 iOS9, OS X 10.11에서 도입된 앱과 네트워크간의 안전한 통신을 보장하기 위한 기능으로 안전하게 암호화된 https통신만 허용하고 안전하지 않는 수준의 https/http통신을 차단하는 것이다.

How iOS Security Really Works, What’s New In Security세션에서 2016년말부터 앱스토어(App Store)에 공개하는 앱은 ATS가 필요하다고 발표되었다. (세션 슬라이드자료 100페이지 참조)

App Transport Security

  • Required by App Store at end of 2016
  • TLS v1.2, with exceptions for alreadyencrypted bulk data like media streaming

ATS필수조건과 iOS10의 출시로 어떤 것이 바뀌는가?

ATS는 지금까지 ATS 자체의 비활성화와 화이트리스트를 작성하고 ATS통신 차단 대상에서 제외할 도메인을 지정하거나 전체 ATS를 해제하면서 일부 도메인은 ATS대상으로 하거나 ATS가 허용하는 암호화수준을 낮추는 등의 사용자정의가 가능해졌다.

ATS설정은 앱의 info.plist에 키를 추가해서 값을 설정하지만 이용 가능한 키는 아래 링크를 참고하기 바란다. (관련 정보 링크)

단, 주의해야할 점은 해당 문서는 iOS10이 아직은 베타이기 때문에 확정된 최종사양서가 아니기 때문에 변동이 생길 수 있습니다.

iOS10에서 새롭게 추가된 NSAllowsArbitraryLoadsInWebContent라는 키가 추가되었고 이 키 설정값을 YES로 하면 웹페이지로딩 및 AVFoundation의 Streaming media에 한해서 http통신을 허용한다.

이는 iOS9에서는 불특정 다수의 웹페이지를 표시하는 앱은 ATS를 비활성화해서 사용하게 되어 웹페이지이외의 http통신까지 허용했다. 반대로 iOS10 불특정다수의 웹컨텐츠를 표시하면서도 통신이 안전한 https연결만을 허용함에 따라 보안을 향상시킬 수 있게 된 것이다.

또한 이를 통해 ATS를 사용하지 않은 경우를 상당히 제한하여 앱스토어에 공개되는 앱의 전반적인 보안수준을 높이기 위해 2016년말 ATS를 필수조건으로 설정하게 된 것이라고 추측한다.

 

조건별 ATS사양을 확인하고 설정하자

ATS설정 영향을 받는 네트워크통신을 하는 NSURLSession이나 웹페이지를 표시하는 UIWebView, WKWebView등의 통신을 실행하는 클래스이다. 앱에서 독립적으로 웹페이지를 표시하는 SFSafariViewController는 ATS의 영향을 받지 않는다.

또한, iOS10에서 사용할 수 있게 된 ATS의 새로운 설정키는 NSAllowArbitraryLoadsWebContent와 기존 .ATS비활성화 설정키 NSAllowsArbitrayLoads가 동시에 존재하면 어느쪽이 활성화되는지에는 조합에 따라 틀리다.

apple-appstore-ats

iOS9는 기존 그대로 NSAllowsArbitraryLoads가 YES이면 http통신을 할 수 있다.

iOS10에서는 우선 NSAllowsArbitrayLoadsInWebContent가 YES인지 조건을 체크한다. NSAllowsArbitrayLoadsInWebContent가 설정되어 있지 않거나 NO인 경우 iOS9와 같다. YES로 설정되어 있는 경우 iOS10에서는 NSAllowsArbitraryLoads가 무시되고 WKWebView만 http통신을 허용한다.

이때 데이터통신을 하는 NSURLSession과 UIWebView에 대해서도 http통신이 허용되지 않는 것이 중요하다.가급적 WKWebView를 이용해야 한다는 것이다. 또한 NSExceptionDomains를 설정하면 지정된 도메인에 NSURLSession과 UIWebView에서 http통신도 가능하다.

그렇지만 현재 애플 엔지니어들도 서로 정보가 엇갈리는 것 같고 애플 내부적으로도 의견이 통일되지 않고 있지만 정식출시가 될때 정리될 가능성이 높다.

애플엔지니어와 의견을 나눈 내용을 고려해보면 지금까지 http기반 웹페이지를 이용하기 위해서는 NSAllowsArbitraryLoads를 YES로 했다면 NSAllowsArbitraryLoadsInWebContent를 추가하고 YES를 설정하고 WKWebView만 http통신을 허용하는 것을 추천한다.

UIWebView와 NSURLSession에서 블특정 다숭의 서버에 http통신을 해야만 하는 경우 그대로 NSAllowsArbitraryLoads만 YES로 설정되어 있으면 될 것 같다. 다만 앱등록시 심사에서 이유를 설명해야만 한다. UIWebView를 사용하는 경우 특별한 사유가 없다면 WKWebView로 전환하는 것을 추천한다.

 

Facebook Comments

카테고리:   Xcode

댓글

죄송하지만 댓글은 닫혀 있습니다.