Private Network Access (PNA) 정책은 웹 애플리케이션이 로컬 네트워크와 상호 작용할 때 발생할 수 있는 보안 문제를 해결하기 위한 표준. 특히, **CORS (Cross-Origin Resource Sharing)**와 같은 웹 보안 정책을 로컬 네트워크에 적용하여 잠재적인 보안 위협을 줄이기 위해 W3C 에서 제정
1. Private Network Access (PNA) 개요
Private Network Access는 로컬 네트워크나 비공개 네트워크에 있는 자원에 웹 애플리케이션이 접근할 때 발생할 수 있는 보안 위협을 줄이기 위한 W3C의 새로운 정책입니다. 주요 목표는 웹 사이트가 외부 네트워크에서 내부 네트워크 자원에 접근할 때 사용자나 네트워크의 보안을 침해하지 않도록 하는 것
특히, 클라이언트가 공개적인 출처(origin)에서 실행될 때 비공개 네트워크에 있는 장치나 서버로부터 데이터를 요청하는 상황을 다루고 있음. 사설 IP 주소를 사용하는 네트워크(예: 가정용 네트워크, 사무실 네트워크, 로컬 인트라넷)
2. PNA가 필요한 이유: 보안 문제
웹 애플리케이션이 사설 네트워크와 상호 작용할 때 여러 보안 위협이 발생
- CSRF (Cross-Site Request Forgery): 악성 웹사이트가 사용자의 네트워크 내에 있는 장치로 임의의 요청을 전송해, 해당 장치를 악용할 수 있는 문제
- 정보 유출: 비공개 네트워크의 자원에 접근하는 외부 웹사이트가 의도치 않게 내부 네트워크의 구조나 정보를 유출
- 공격 경로 확대: 비공개 네트워크 내부에 있는 시스템들이 직접 인터넷에 노출되지 않더라도, 외부 웹 애플리케이션이 이 시스템에 접근할 수 있다면, 보안 취약점을 악용할 수 있는 가능성
1. W3C와 PNA 표준 연혁
2020년 5월 - PNA 표준 초안 발표
- W3C의 Web Application Security Working Group에서 Private Network Access에 대한 첫 번째 초안이 발표되었습니다. 이 초안에서는 PNA의 기본 원칙과 목표를 설명하며, 웹 애플리케이션이 비공개 네트워크 자원에 접근할 때 보안이 강화되어야 한다고 명시했습니다.
2021년 1월 - PNA 스펙 업데이트
- W3C는 PNA 스펙을 업데이트하면서, 사전 요청(preflight request)을 통해 비공개 네트워크 자원에 대한 접근 권한을 명시적으로 허용하도록 요구했습니다. 이를 통해 외부 웹사이트가 내부 네트워크 자원에 무단으로 접근하는 것을 방지하는 CORS와 유사한 정책을 제안했습니다.
2022년 - PNA 관련 지속적인 개선 작업
- PNA 표준은 계속해서 피드백을 반영하여 수정되었습니다. 특히, 사설 네트워크에 접근하는 웹 애플리케이션에 대한 보안 요구 사항이 강화되었고, 다양한 브라우저에서의 호환성을 위해 관련 문서가 개선되었습니다.
2. Chrome과 PNA 연혁
2021년 6월 - Chrome 91: PNA 실험적 지원
- Chrome 91에서는 Private Network Access에 대한 실험적 지원이 시작되었습니다. 비공개 네트워크로의 요청을 감지하고, 이를 안전하게 처리하기 위한 첫 번째 단계로 CORS-like 사전 요청(preflight request)을 테스트 환경에서 적용할 수 있게 되었습니다.
2021년 10월 - Chrome 94: PNA 정책 적용 시작
- Chrome 94에서는 PNA 정책이 더욱 적극적으로 적용되었습니다. 이제 외부 공개 출처(origin)에서 비공개 네트워크 자원에 접근하려는 경우, 사전 요청을 반드시 수행해야 했습니다. 이를 통해 비공개 네트워크 자원에 대한 외부 접근이 안전하게 제어되었습니다.
2022년 3월 - Chrome 98: PNA의 기본 정책 활성화
- Chrome 98부터는 Private Network Access 정책이 기본적으로 활성화되었습니다. 사설 네트워크 자원에 접근하려는 모든 요청에 대해 사전 요청을 수행하고, 서버가 이를 명시적으로 허용해야만 접근이 가능해졌습니다. 이 버전에서 PNA는 본격적으로 중요한 보안 기능으로 자리 잡았습니다.
2022년 9월 - Chrome 102: PNA 정책 강화
- Chrome 102에서는 PNA 정책이 강화되었습니다. 비공개 네트워크 자원에 대한 사전 요청이 더 엄격하게 관리되었고, 네트워크 자원에 접근하는 웹사이트가 적절한 CORS 응답 헤더를 포함하지 않을 경우 요청이 차단되었습니다.
2023년 5월 - Chrome 104: 사설 네트워크 경고 및 차단 강화
- Chrome 104부터는 PNA 정책을 위반하는 요청에 대해 경고를 표시하고, 웹 개발자가 올바른 CORS 헤더를 설정할 수 있도록 안내하는 기능이 도입되었습니다. 이 버전에서는 비공개 네트워크 자원에 대한 접근이 차단될 경우 사용자에게 명확한 경고 메시지를 표시하도록 개선되었습니다.
2024년 이후 - PNA의 점진적 발전
- Chrome 브라우저는 지속적으로 PNA 정책을 개선하고 있으며, W3C와 협력하여 최신 보안 표준을 반영하고 있습니다. 앞으로도 Chrome의 업데이트에서는 PNA 관련 보안 정책이 강화될 가능성이 큽니다.
Chrome 120-122 (2023년)
- Origin Trial: Chrome 120에서 비공개 네트워크 자원 접근을 위해 Permission Prompt를 도입했습니다. 이 기능은 비공개 네트워크 자원에 접근할 때 허가를 요청할 수 있는 기능을 제공합니다. targetAddressSpace 옵션을 추가해 혼합 콘텐츠 검사를 우회하고, 서버에서 명시적인 허가가 필요한 프리플라이트 요청(preflight request)을 통해 비공개 네트워크에 접근할 수 있었습니다(Chrome for Developers).
Chrome 123-124 (2024년 초)
- 웹 워커 및 네비게이션 페치 보호 강화: Chrome 123부터 PNA 보호가 웹 워커(서비스 워커 포함)와 네비게이션 페치에 적용되었습니다. 이를 통해 워커 스크립트에서 시작된 요청에도 PNA 규칙을 적용하며, 모든 자원 요청에 대해 사전 요청이 수행되어야 했습니다(Chrome for Developers).
- 새로운 CORS 헤더 도입: Chrome 123에서는 PNA 사전 요청을 위해 일부 CORS 헤더가 생략되었으며, 비공개 네트워크 접근 시 Access-Control-Allow-Private-Network: true 헤더가 필수적으로 요구되었습니다(
Chrome 125-127 (2024년 중반)
- WebSocket 확장: Chrome 126에서는 WebSocket 핸드셰이크도 PNA 보호 범위에 포함되었습니다. 즉, WebSocket을 통한 통신도 사전 요청을 통해 보호되며, 초기 단계에서는 경고만 표시되다가 Chrome 130부터는 완전히 차단됩니다(
- 강화된 보안 검증: Chrome 127에서는 PNA 보호 기능이 더욱 강화되어, 비공개 네트워크 자원 접근 요청이 명확하게 차단되며, 보안 관련 취약점들도 여러 차례 패치되었습니다(Chrome for Developers)(The Record from Recorded Future).
1. Chrome 128 (2024년 7월)
- 0.0.0.0 IP 주소 차단: Chrome 128에서는 0.0.0.0 IP 주소를 통한 비공개 네트워크 자원 접근을 차단했습니다. 이 IP 주소는 과거에 PNA 보호를 우회하기 위한 수단으로 악용될 수 있었기 때문에 더 이상 사용되지 않도록 차단되었습니다. 이를 통해 localhost에서 실행되는 자원이 보다 안전하게 보호(Chrome for Developers).
- Preflight 요청: Chrome 128은 PNA 관련 자원 접근 시 **사전 요청(preflight request)**을 수행하여 서버가 명시적으로 자원 접근을 허가해야만 요청을 처리합니다. 이는 특히 웹 워커(서비스 워커 등)에 대한 보안을 강화합니다. 웹 워커를 사용하는 스크립트의 요청도 PNA 보호를 따르게 되어, 보안 수준이 한층 강화(Chrome for Developers).
2. Chrome 129 (2024년 8월)
- 웹 워커와 네비게이션 페치 보호 강화: Chrome 129에서는 웹 워커(서비스 워커, 공유 워커 등)와 네비게이션 요청(예: iframe, 팝업)에 대한 PNA 보호가 더욱 강화되었습니다. 이제 워커 스크립트가 비공개 네트워크 자원에 접근할 때도 PNA 규칙을 따르며, 사전 요청을 통해 서버가 명시적으로 허용해야만 자원 접근이 가능(Chrome for Developers).
- 기타 웹 API 개선: 이 버전에서는 WebRTC DataChannel의 Blob 지원, Private Aggregation API 개선 등 새로운 웹 기능들이 추가되어, 웹 애플리케이션에서 더욱 유연한 데이터 처리와 보안이 가능(Chrome for Developers).
3. Chrome 130 (2024년 10월 예상)
- PNA 완전 시행: Chrome 130에서는 PNA가 완전히 시행됩니다. 즉, 모든 네비게이션 요청과 워커에서 시작된 자원 요청이 PNA 검사를 통과하지 못하면 차단됩니다. 차단된 요청에 대해서는 사용자가 경고 메시지를 확인하고 수동으로 다시 시도할 수 있는 옵션이 제공될 예정(Chrome for Developers)(Chrome Releases).
- 사전 요청 강화: 사전 요청(preflight)이 더 엄격하게 적용되며, 모든 비공개 네트워크 자원에 대한 접근은 서버가 명시적으로 허용하지 않는 한 차단됩니다. 이를 통해 비인가된 외부 접근을 효과적으로 막을 수 있음(Chrome for Developers).
반응형
댓글