Chromium Chronicle #5: 샌드박스 외부에서 코딩하기

에피소드 5: 캘리포니아주 마운틴뷰의 Ade 제공 (2019년 8월)
이전 에피소드

Chrome은 프로세스로 나뉩니다. 이 중 일부는 샌드박스 처리되어 있어 시스템 및 사용자 계정에 대한 액세스가 줄어듭니다. 샌드박스 프로세스에서 악성 코드 실행을 허용하는 버그는 훨씬 덜 심각합니다.

브라우저 프로세스에 샌드박스가 없으므로 버그로 인해 악성 코드가 전체 기기에 대한 전체 액세스 권한을 부여할 수 있습니다. 어떻게 해야 할까요? 다른 프로세스에서는 어떤 상황일까요?

샌드박스 다이어그램

모든 코드에 버그가 있습니다. 브라우저 프로세스에서 이러한 버그를 통해 악성 코드가 프로그램을 설치하고, 사용자 데이터를 도용하고, 컴퓨터 설정을 조정하고, 모든 브라우저 탭의 콘텐츠에 액세스하고, 로그인 데이터에 액세스하는 등의 작업을 할 수 있습니다.

다른 프로세스에서는 OS 액세스가 플랫폼별 제한을 통해 제한됩니다. 자세한 내용은 Chrome의 샌드박스 구현 가이드를 참고하세요.

다음과 같은 흔히 발생하는 실수를 방지하세요.

2의 법칙

  • 브라우저 프로세스에서 C++를 사용하여 신뢰할 수 없는 데이터를 파싱하거나 해석하지 않습니다.
  • 렌더러가 나타내도록 주장하는 출처를 신뢰하지 마세요. 브라우저의 RenderFrameHost를 사용하여 현재 출처를 안전하게 가져올 수 있습니다.


권장사항

대신 다음 권장사항을 따르세요.

  • 코드가 브라우저 프로세스에 있는 경우 좀 더 편집증이 생길 수 있습니다.
  • 다른 프로세스의 모든 IPC를 검증합니다. 다른 모든 프로세스가 이미 도용되어 사용자를 속이는 것으로 가정합니다.
  • 렌더기나 유틸리티 프로세스나 기타 샌드박스 프로세스에서 처리합니다. 자바스크립트와 같은 메모리 안전 언어를 사용하는 것이 이상적입니다(50% 가 넘는 보안 버그 해결).

수년간 브라우저 프로세스에서 네트워크 스택 (예: HTTP, DNS, QUIC)을 실행했으며 이로 인해 몇 가지 심각한 취약점이 발생했습니다. 일부 플랫폼에서는 이제 네트워킹에 자체 프로세스가 있으며 샌드박스가 도입됩니다.

추가 리소스

  • Chromium의 두 규칙: 안전하지 않은 데이터, 안전하지 않은 코드, 안전하지 않은 프로세스를 2개까지만 적용합니다.
  • IPC 데이터 유효성 검사: 렌더러 프로세스의 IPC가 Fib 및 허위 진술로 가득 차 있지 않은지 확인하는 방법에 관한 가이드입니다.