App Transport Security Summary
이 포스트는 edwith의 iOS 프로그래밍을 공부하고 정리한 내용입니다.
edwith iOS 프로그래밍 - App Transport Security
App Transport Security란?
-
애플리케이션과 웹 서비스 사이에 통신 보안 향상을 위한 기능
-
App Transport Security 를 줄여 ATS 라 불린다
ATS란?
-
ATS는 애플리케이션과 웹 서비스 사이에 통신 시 보안 향상을 위한 기능
- iOS 9.0, macOS 10.11부터 적용 가능
-
모든 인터넷 통신 시 안전한 프로토콜을 사용하도록 보장하는 것으로 사용자의 민감한 정보가 유출되는 것을 방지한다
ATS 등장 배경
-
다양한 종류의 애플리케이션이 개인의 여러 가지 정보(연락처, 사진, 건강정보, 메시지, 메일 등)를 다루게 되면서 사용자 정보보호에 대한 중요성이 한층 부각되었다.
-
그런데 기존의 보안/암호 기술은 오래되어 공격에 취약해졌지만, 컴퓨터 성능은 점점 발전하면서 새롭게 등장하는 네트워크 공격이 강력해지자 이에 대응하기 위해 2015년
ATS를 도입하게 되었다
-
2016년부터 새롭게 만들어지는 애플리케이션은 반드시 ATS를 사용해야 하며, 기존에 개발된 애플리케이션은 ATS를 사용할 수 있도록 네트워크 보안을 강화해야 한다
ATS 동작
-
URLSession, CFURL 그리고 NSURLConnection API를 이용해 데이터를 주고받을 때 ATS 기능을 기본적으로 사용하게 된다.
-
ATS가 활성화 되어있을 때는 HTTP 통신을 할 수 없으며 애플에서 권장하는 아래 요구 사항을 충족하지 않은 네트워크는 연결에 실패할 수 있다.
-
서버는 TLS(Transport Layer Security) 프로토콜 버전 1.2 이상을 지원해야한다.
-
적어도 2048비트 이상의 RSA 키 또는 256비트 이상의 ECC(Elliptic-Curve) 키가 있는 SHA256을 인증서에 사용해야 한다.
-
암호 연결은 아래 허용된 암호 목록으로 제한한다.
-
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
-
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
-
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
-
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
-
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
-
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
-
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
-
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
-
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
-
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
-
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
-
-
용어 정리
-
전송 계층 보안 (Transport Layer Security - TLS)
- 암호 프로토콜, 서버와 클라이언트 애플리케이션이 네트워크로 통신하는 과정에서 도청, 간섭, 위조를 방지하기 위해서 설계되었다
-
HTTPS(Hypertext Transfer Protocol Secure)
- TLS를 사용해 암호화된 연결을 하는 HTTP(Hypertext Transfer Protocol)를 HTTPS라고 한다
-
TLS는 다양한 종류의 보안 통신을 하려는 프로토콜이고, HTTPS는 TLS위에 HTTP 프로토콜을 얹어 보안된 HTTP 통신을 하는 프로토콜이다
예외 사항
-
애플리케이션이 ATS가 요구하는 사항을 충족하기 힘든 경우, ATS 기능을 비활성화할 수 있다
-
ATS 기능을 사용하지 않을 수 있는 예외 사항
-
AVFoundation 프레임워크를 통한 스트리밍 서비스
-
WebKit을 통한 콘텐츠 요청
-
로컬 네트워크 연결
-
그 외에는 서버가 최신 TLS 버전으로 업그레이드 할 때까지 애플리케이션의 유지 보수를 위해 일시적으로 ATS 기능을 사용하지 않는 것이 가능하며, APP Store 심사 시 정당한 이유를 설명하는 문서가 필요할 수도 있다
-
ATS 기능 비활성화 방법
-
해당 프로젝트의 info.plist 파일에서 설정
- 모든 HTTP 통신 허용: 암호화 하지 않은 통신이므로 불가피한 때 외에는 사용하지 않는 것이 좋다
- ATS에서 제외할 특정 도메인 지정