오늘 끝나면
브라우저 샌드박스
- ✓브라우저 샌드박스의 핵심 문제를 한 문장으로 설명한다
- ✓오른쪽 실습에서 브라우저이 어떻게 움직이는지 관찰한다
- ✓다음 강의와 이어지는 한계를 말할 수 있다
실습 미션
격리는 어떻게 만들고, 어떻게 새나 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.
성공 조건
- □실습의 기본값을 먼저 관찰
- □입력값이나 모드를 한 번 이상 바꿔 결과 비교
- □왜 결과가 바뀌었는지 한 문장으로 설명
화이트해킹 · 08
브라우저
샌드박스
브라우저는 사이트 하나하나를 모래상자에 가둔다.
한 사이트는 OS도 옆 사이트도 건드리지 못한다.
이 벽이 뚫리는 버그가 가장 무섭다.
사이트마다 모래상자에 가둔다
브라우저는 아무 사이트나 코드를 실행한다. 그런데도 안전하다. 이유는 격리다.
내가 연 페이지의 자바스크립트는 모래상자(샌드박스) 안에서만 돈다.
파일 시스템도 다른 프로그램도 옆 탭의 은행 페이지도 직접 건드리지 못한다.
모래상자 안에서 뭘 하든 밖으로는 새지 않는다.
그래서 처음 보는 사이트를 눌러도 노트북이 털리지 않는다.
격리가 기본값이라 위험한 코드도 갇혀 있다.
벽을 넘는 화살표가 없다. 그게 격리다
출처는 스킴·호스트·포트로 정해진다
격리의 기준은 출처(origin)다. 출처가 같으면 한 식구이고 다르면 남이다.
출처는 세 칸으로 정해진다.
스킴(https), 호스트(bank.com), 포트(443)다.
이 셋이 전부 같아야 같은 출처다.
http로만 바꿔도 다른 출처가 된다.
포트 하나만 달라도 남이다. api.bank.com도 호스트가 달라서 남이다.
글자 하나 차이로 식구냐 남이냐가 갈린다.
동일출처정책을 직접 해본다
동일출처정책(SOP)은 한 줄이다. 다른 출처는 내 데이터를 읽지 못한다.
내 사이트는 https://bank.com:443으로 고정이다.
접근하려는 사이트의 스킴, 호스트, 포트를 바꿔 가며 허용과 차단을 본다.
세 칸이 다 같으면 허용이다.
하나라도 다르면 차단이다.
그래서 evil.com이 내 로그인 세션을 읽지 못한다. 이게 SOP가 매일 막는 일이다.
https://bank.com:443
하나라도 다르면 다른 출처다. evil.com이 bank.com 데이터를 못 읽는 이유가 이것이다.
격리가 막아주는 것
이 벽이 없다고 상상해 본다. 광고 한 줄이 띄운 스크립트가 내 은행 탭을 읽는다.
SOP가 막는 건 구체적이다.
다른 출처가 내 페이지의 쿠키와 로컬스토리지를 읽는 것.
다른 출처가 내 응답 본문을 몰래 가져가는 것.
다른 출처가 내 페이지 안(iframe)을 들여다보는 것.
방어 관점에서 이건 공짜 방어선이다. 브라우저가 기본으로 깔아 준다.
개발자는 필요할 때만 CORS로 문을 콕 집어 연다. 함부로 다 열면 SOP를 스스로 무너뜨리는 셈이다.
쿠키 · 로컬스토리지 읽기
다른 출처 스크립트
응답 본문 가로채기
다른 출처 fetch
iframe 안 들여다보기
끼워 넣은 남의 페이지
샌드박스 탈출은 최상위 심각도다
공격자가 노리는 건 모래상자 자체를 깨는 것, 바로 샌드박스 탈출이다.
탈출이 되면 웹페이지 코드가 모래상자 밖 OS로 나간다.
파일을 읽고 프로그램을 깔고 카메라를 켠다.
그냥 한 페이지가 뚫린 게 아니라 기기 전체가 뚫린다.
그래서 샌드박스 탈출 버그는 값이 가장 비싸고 패치도 가장 급하다.
방어는 단순하다. 브라우저를 최신으로 유지하는 것이다. 격리는 패치로 계속 메워지는 벽이다.
Q. 동일출처정책(SOP)이 막는 것은? (내 코드가 내 데이터 읽기 · 다른 출처가 내 데이터 읽기 · 페이지 새로고침 · 이미지 표시)
정답은 다른 출처 사이트가 내 데이터를 읽는 것이다.내 코드가 내 데이터를 읽는 건 같은 출처라 당연히 허용된다.
새로고침과 이미지 표시는 격리와 무관하다.
SOP의 핵심은 한 줄이다. 남의 출처는 내 데이터에 손대지 못한다.