사용자가 자신의 로컬 네트워크에 접근하는 사이트를 제한하는 제안

1 week ago 8

  • Chrome Secure Web and Network 팀이 로컬 네트워크 접근을 사용자 동의에 기반해 제어하는 새로운 권한 시스템을 제안함
  • 공개 웹사이트가 사용자의 로컬 네트워크에 무단 접근하거나 취약한 장치를 공격할 수 있는 문제를 해결하려는 목적임
  • 기존 Private Network Access(PNA) 방식과 달리, 이 제안은 프리플라이트 요청이 아닌 사용자 동의를 통해 접근을 허용하는 구조임
  • 동작 원리는, 퍼블릭 사이트가 로컬 네트워크에 연결 시 권한 요청 프롬프트로 사용자가 명시적으로 허용하지 않으면 접근을 차단함
  • 장단점, 구조적 세부 방식, 퍼미션 정책, WebRTC/Fetch/HTML 등 다양한 기술적 통합 방안을 논의함

개요

이 제안은 Chrome Secure Web and Network 팀이 사용자 로컬 네트워크 접근 문제를 해결하기 위해 내놓은 초기 설계안임. 현재 공개된 웹사이트가 사용자의 브라우저를 이용해 로컬 네트워크 또는 컴퓨터 내의 소프트웨어에 접근하고, 취약한 로컬 장치에 CSRF 공격을 가하거나 악용할 수 있는 위험이 존재함. 예를 들어 evil.com에 방문하면, 해당 사이트가 브라우저를 통해 프린터 등 네트워크 내 장치에 공격 요청을 보낼 수 있음

제안의 주요 목적

  • 브라우저 기반의 드라이브 바이 웹 공격으로부터 취약한 장치와 서버를 보호하는 목표임
  • 사용자가 명확하게 인지하고 허용한 경우에만, 공개 웹사이트가 로컬 네트워크 장치와 통신하는 경로를 제공함
  • 점차 확대되고 있는 운영체제 레벨의 로컬 네트워크 접근 권한을 브라우저가 적절히 관리해야 한다는 인식임

목표에 포함되지 않는 사항

  • 로컬 네트워크 장치 제어에 의존하는 기존 서비스 워크플로우 전체를 깨뜨리는 것은 지양함. 일부 예외 상황에서는 사용성 저하가 있을 수 있음
  • 로컬 네트워크용 HTTPS 문제 해결은 이 사양의 범위에 없음

사용 사례

케이스 1

  • 로컬 네트워크 장치에 외부의 웹사이트가 접근하기를 기대하지 않는 사용자의 경우, 기존에는 아무런 알림 없이 자동으로 접근 가능했음
  • 이 제안으로, 사용자가 예상하지 않은 접근 시 브라우저가 반드시 권한 프롬프트를 띄워줌

케이스 2

  • IoT 기기/라우터 등 로컬 장치를 공개 웹 인터페이스에서 설정/제어하는 경우
  • 제조사는 장치에 웹서버를 복잡하게 직접 내장하지 않고 공개 웹사이트 페이지와 브라우저를 경유해 제어를 위임함

세부 제안 내용

  • 로컬 네트워크에 요청을 보내는 기능은 새로운 "local network access" 권한을 획득한 오리진에만 허용함
  • 권한이 없으면 요청은 차단되고, 브라우저가 사용자에게 허용 여부를 묻는 프롬프트를 표시함

주소 공간 분류

  • loopback(자기 자신 전용), local(로컬 네트워크 내부), public(모두 접근 가능) 세 계층으로 IP 네트워크 계층을 분류함
  • .local 도메인, RFC1918/4193의 프라이빗 IP, RFC6762의 링크로컬 네임 등 다양한 로컬 네트워크 식별 기준을 포함함

로컬 네트워크 요청의 정의

  • 공개 네트워크에서 로컬/루프백 네트워크로의 요청부터, 로컬에서 루프백으로의 요청까지를 로컬 네트워크 요청으로 간주함
  • 예외: 로컬→로컬, 루프백→어떤 주소 등은 제한 대상이 아님

권한 프롬프트 방식

  • 사이트가 로컬 네트워크로 요청 시, 권한이 없다면 브라우저가 사용자에게 허용 여부를 묻는 프롬프트를 띄움
  • 거부 시 요청 차단, 수락 시 요청 진행

동작 방식 예시

  • 예상치 못한 로컬 네트워크 접근 시, 사용자가 권한을 거부해 무단 요청을 차단할 수 있음
  • 제조사가 운영하는 장치 제어 페이지의 경우, 적절한 프로퍼티(예: targetAddressSpace="local")로 호출 시, 사용자 동의가 있을 경우 기존대로 동작 가능함

기술적 논의

Fetch API와 연계

  • Fetch 스펙은 DNS 해석 없이 단순 연결만 정의하므로, 새 연결에서 로컬 네트워크 요청 여부 판단
  • 보안 컨텍스트에서만 로컬 네트워크 요청 허용, 권한 미획득 시 프롬프트, 권한 부여 시 요청 허용
  • fetch()의 options에 targetAddressSpace 파라미터 추가로 개발자가 명시적으로 목적지 주소 공간 지정 가능
  • 실제 연결된 주소가 옵션의 공간과 다르면, 요청 실패로 처리해 혼합 콘텐츠 우회 방지

혼합 콘텐츠 문제

  • 비보안 컨텍스트에서 로컬 네트워크 접근 시도, HTTP 기반 하위 리소스 로딩, 혼합 콘텐츠 차단 적용 시나리오 등
  • 프라이빗 IP 리터럴, .local 도메인, targetAddressSpace 지정 요청 등은 혼합 콘텐츠 업그레이드 및 차단 단계를 생략하고, 후속 연결 시 권한 미보유 오리진이면 차단

HTML, WebRTC, Permissions Policy 통합

  • HTML 문서/워커에 주소 공간 값을 추가해 출처 기반 공간을 추적함
  • WebRTC 내 ICE Agent의 후보 추가 시, 로컬/루프백 주소는 권한 프롬프트를 사용함
  • 권한은 Permissions API와 연계하여, 사이트가 현재 권한 상태를 쿼리 가능
  • 기본적으로 상위 문서에서만 로컬 네트워크 접근 가능, 필요시 Permissions Policy의 위임 정책으로 하위 프레임에 권한 위임 가능

서비스 워커, 웹소켓, 하위 리소스

  • 서비스 워커/웹소켓 등도 Fetch 기반이므로 동등한 제한/권한 구조 적용

비교 및 대안

PNA(Private Network Access) 방식

  • 기존 PNA는 CORS 프리플라이트를 요구했으나 실제 적용 및 배포 어려움이 컸음
  • 일부 구간에서는 권한 프롬프트와 혼합 콘텐츠 예외 허용 방안 제안
  • DNS 문제, 장치별 사양 미지원 등으로 현실적 한계가 존재함

모든 로컬 네트워크 요청 전면 차단

  • 단순하지만, 사용례 파괴와 우회 비용 증가 우려로 현실적이지 않음

현상 유지

  • OS에서 앱별로 로컬 네트워크 권한을 관리하기 시작하면서, 브라우저 차원의 관리 필요성 강조됨

혼합 콘텐츠 대안

  • "보안 로컬 네트워크 하위 리소스만 허용" 등 접속 방법의 보안성 평가와 구현 부담이 논의됨
  • 응답 헤더/메타태그로 주소 공간 선언하는 법, HTML 요소 속성 추가 등도 대안으로 논의됨

미래 논의 및 고려사항

  • 메인 프레임 이동 시 로컬 네트워크 접근 제한하거나 경고 인터스티셜 표시
  • 로컬/루프백 주소 대상 모든 크로스 오리진 요청을 폭넓게 로컬 네트워크 요청으로 간주하는 안도 고려됨
  • 네트워크별로 세분화된 권한 부여 방안 연구, 다른 네트워크 이동 시 재동의 필요성
  • HTML 하위 리소스에서도 주소 공간 속성 추가 가능성 논의

보안∙프라이버시 고려

  • 권한 프롬프트를 통한 믹스드 컨텐츠 우회 면제는 별도 보기로 취급, 취약점과 위험성 인지 필요
  • PNA 대비, 사용자 주도적 동의가 없으면 로컬 네트워크 접근 불가하게 구조 단순화
  • 프리플라이트 사용 안하므로 타이밍/프로빙 공격 위험 감소

커뮤니티 피드백

  • 기존 PNA 프리플라이트 방식은 Mozilla, WebKit 등 타 브라우저 벤더에서도 긍정적 평가를 받았음

참고 및 감사

  • 기존 PNA 제안서와 표준화 작업에 참여한 엔지니어(특히 Titouan Rigoudy, Jonathan Hao, Yifan Luo)에게 감사를 표함

Read Entire Article