[Swift] WWDC21 Get ready for iCloud Private Relay

안녕하세요. 미닛메이드 Minnit 입니다😋

 

iOS15에서 현재 베타 서비스로 제공하고 있는

iCloud Private Relay(iCloud 비공개 릴레이)에 대해 WWDC21 영상이 있어서 정리해보았습니다 ~

 

Swift + 보안 + 네트워크라 조금 이해하기 어려웠지만,,

최대한 간단하게 풀어서 요약해보겠습니다 ~ 👐🏻


iCloud Private Relay란?

iCloud+에서 구독 옵션으로 제공되는 새로운 인터넷 개인정보 보호 서비스로, 사용자가 iOS 15, PadOS 15 및 macOS Monterey에서 비공개로 안전하게 웹에 접속하고 탐색할 수 있도록 지원하는 서비스이다.

iCloud + 를 구독하는 사용자에게만 제공하는 서비스입니다

현재 iOS15 사용자들은 베타 버전으로 이 서비스를 이용해볼 수 있습니다

한마디로 이 서비스는 인터넷을 통해 사용자 활동 모니터링하는 네트워크 및 서버를 방지하는 기능 !

애플은 보안이 뛰어나다고도 유명하잖아요? 

(물론 그만큼 안돼서 답답한 것도 많지만..ㅎ)

그런 보안을 한 겹 더 감싸줄 수 있는 새로운 서비스인 것 같습니다 ☺️

 

기존 통신 방법

 

그럼 먼저 애플이 왜 이런 서비스를 제공하는가,

기존의 네트워크 통신의 어떤 문제점이 있었는가를 먼저 살펴보도록 하겠습니다

 

iCloud Private Relay 서비스를 사용하지 않았을 때 통신

우리가 인터넷에 접속 시 그 local network(접속한 네트워크)에 있는 모든 사람들은

DNS 쿼리 검사를 기반으로 액세스 하는 모든 웹 사이트의 이름을 볼 수 있게 됩니다

 

예를 들면, 내가 어떤 와이파이에 접속 시 이 와이파이에 같이 접속한 타 유저는 어떠한 방법을 통해

내가 이 와이파이를 통해 내가 접속한 웹사이트 이름 같은 걸 다 확인할 수 있게 됩니다..!

(내가 어제는 애플 사이트에 들어갔고, 오늘은 네이버 메일에 들어갔고.. 요론..!!!)

 

이러한 정보는 사용자의 발자취가 되어 하나의 history를 만들어낼 수 있기 때문에

 이 정보를 비밀스럽게(사용자 몰래) 수집할 수 없게 해야 합니다

 

웹 사이트를 실행하는 서버에 연결하면 그 서버들은 user의 ip 주소를 볼 수 있게 됩니다

이렇게 되면 서버는 사용자의 허락을 구하지 않고 사용자의 location을 결정할 수 있습니다 

 

iCloud Private Relay 적용 시 통신 방법

 

이런 기존의 문제점을 해결하기 위해

iCloud Private Relay는 중간에 여러 보안 프록시를 추가하여

사용자 트래픽을 라우팅하고 개인정보를 비공개로 유지해줍니다

프록시는 별도의 entity에 의해 운영되는데 하나는 애플, 하나는 콘텐츠 제공 업체 entity로 구성되어 있습니다

 

네트워크 공급자와 첫 번째 프록시(애플)는 클라이언트 ip 주소만 확인할 수 있습니다

 

두 번째 프록시(콘텐츠 제공 업체)는 사용자가 요청한 server name만 보고
서버와의 연결을 구축하기 위해 사용합니다

어느 누구도 사용자의 ip주소와 사용자가 액세스 하는 항목을 두 개를 같이 볼 수 없다는 것이 포인트 ⭐️

(심지어 애플까지도 불가능)

 

이로써 사용자의 발자취를 가질 수 있는 기회가 없어지게 됩니다 

 

iCloud Private Relay 적용 범위

 

 

iCloud Private Relay는 최신 프로토콜개인 정보 보호 인증을 사용함으로써

모든 거래(주고받음)가 안전하고 빠르다고 합니다

 

이런 iCloud Private Relay는 ios15, MacOS 12에서부터

모든 사파리 웹 브라우징, 모든 DNS 이름 확인 쿼리 및 앱에서 전송되는 트래픽의 작은 부분에도 적용됩니다

(특히 여기에는 TCP 포트 80과 같은 모든 안전하지 않은 HTTP 트래픽이 포함되어 있습니다)

 

혹시 앱이 콘텐츠 필터 혹은 자녀 보호 필터를 제공하는 경우에도,

Private Relay를 통과하기 전에 트래픽을 계속 확인하므로 이전과 마찬가지로 필터를 적용할 수 있습니다

 

물론, Private Relay의 영향을 받지 않는 트래픽도 존재합니다

( 앱에서 수행하는 모든 네트워킹이 공용 인터넷을 통해 발생하는 건 아니기 때문이죠! )

 

1. 앱이 로컬 네트워크를 통해 연결 시
2. 개인 도메인에 연결 시
3. 앱에서 VPN 또는 앱 프록시 기능을 추가하기 위한 네트워크 확장을 제공하는 경우 확장은 Private Relay를 사용하지 않으며 확장을 사용하는 앱 트래픽 일시
4. 프록시를 사용하는 트래픽 일시

이 4가지 경우에는 Private Relay의 영향을 받지 않는다고 합니다

 

iCloud Private Relay Network 관리

 

그동안 애플은 계속 URLSessiongNWConnection과 같은 최신 API를 사용하기를 권장했는데

역시 이것들은 Private Relay가 트래픽에 적용되는 방식을 이해하기 위한 최고의 도구를 제공합니다

( 그러니깐 기본 network api 쓰라는 말 ;ㅇ; )

 

애플은 모든 사용자들을 위해 end-to-end 연결을 안전하게 유지하길 권고합니다

서버가 TLS를 지원하는지 확인 후, URL을 http:// 에서 https:// 로 변경하는 것도 방법입니다

 

또한, 앱에서 위치 기반의 기능을 사용한다면 IP 주소에서 위치를 추론하는 서버에 의존하는 대신

Core Location에서 API를 사용할 수 있는지 검토하는 것도 방법입니다

IP주소의 지리적 위치는 종종 신뢰할 수 없고 정확하지 않기 때문에 

Core Location을 사용해 더 정확하게 사용자 위치를 이용하는게 좋습니다

 

Private Relay를 사용하는 장치의 네트워크 연결

1. 장치가 서버에 액세스를 시도 시 먼저 수신 프록시(Ingress Proxy)에 대한 네트워크 연결을 설정

(이 연결은 네트워크 공급자가 할당한 IP 주소를 사용하여 설정된다)

2. 그런 다음 장치는 수신 프록시(Ingress Proxy)를 사용하여 수신 프록시 IP 주소를 사용하여

네트워크 요청을 송신 프록시(Egress Proxy)에 전달

3. 송신 프록시(Egress Proxy)는 장치의 도시 또는 지역에 매핑되는 IP 주소를 선택하여 이러한 요청을 대상 서버로 전달

 

사용자를 식별해야 하는 경우 ip주소를 사용자 식별에 이용하지 말고

로그인이나 다른 형식의 명시적 식별의 요청을 통해 사용하는 게 좋습니다

 

Private Relay를 사용하지 않는 일반적인 네트워크 연결 트래픽

장치가 서버에 액세스 하려고 할 때, 먼저 서버의 호스트 이름에 대한 DNS 쿼리를 전송합니다

호스트 이름이 ip 주소로 확인된다면,

장치는 TCP와 같은 전송 프로토콜을 사용하여 서버의 IP 주소에 연결합니다

그런 다음 장치는 서버와 TCP three-way handshake를 수행한 다음 TLS 교환을 수행하여 서버와의 보안 연결을 설정합니다

( TCP 3 Way Handshake는 TCP/IP 프로토콜을 이용해서 통신을 하는 응용프로그램이

데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미 ! )

 

-> Private Relay를 사용하지 않는다면 네트워크의 패킷을 관찰하는 것만으로

서버의 호스트 이름과 서버에 연결하는 장치의 IP 주소를 볼 수 있는 걸 확인할 수 있습니다

 

Private Relay를 사용하는 네트워크 연결 트래픽

Private Relay를 사용하면 장치는 먼저 QUIC 또는 HTTP/3을 사용하여 수신 프록시에 대한 연결을 설정합니다

( HTTP/3는 HTTP와 HTTP/2와 더불어 월드 와이드 웹상의 정보를 교환하기 위해 사용되는

HTTP의 차기 주요 버전이자 3번째 프로토콜 )

패킷 캡처에서 수신 프록시의 포트 443으로 전송된 UDP 패킷을 확인할 수 있습니다

수신 프록시(ingress proxy)에 대한 네트워크 연결이 설정되면

신 프록시에 대한 연결 내에서 서버에 대한 액세스가 보호됩니다

-> 서버 측에서는 프로토콜이 변경되지 않습니다

 

TCP/TLS 교환은 Private Relay가 없는 트래픽과 유사하지만,

유일한 차이점은 서버가 장치의 IP 주소 대신 프록시 IP 주소에서 들어오는 연결을 본다는 것입니다

 


역시 애플은 보안에 진심인걸 알 수 있는 세션이였네여...^-^

이 세션이 사실 Network + 보안 관련된 내용이 주라서

대학교 전공 수업을 다시 듣는 기분이였달까요.. ㅎㅎ 💬

 

이 세션을 들으면서 제일 궁금한점은

애플에서는 이 두 엔터티를 추가해서 이런 과정을 거쳐도 속도가 빠르다 ! 라고 했는데

그래도 과정이 추가되는거니깐 속도에 진짜 조금이라도 영향이 있지 않을까요..?

한번 실험해보신 분이 있다면 댓글 달아주세요 ! ㅎㅎ

(제가 베타 기능을 키고 앱을 실행해봤을 때 체감 속도는 괜찮았습니다)

 

혹시 더 궁금하신 부분이 있다면

댓글 남겨주세요 ! 👐🏻

 

애플 WWDC21 - Get ready for iCloud Private Relay의

원본영상은 여기 있습니다 ! 

 

Get ready for iCloud Private Relay - WWDC21 - Videos - Apple Developer

iCloud Private Relay is an iCloud+ service that prevents networks and servers from monitoring a person's activity across the internet...

developer.apple.com