오늘 끝나면
브라우저 샌드박스
- ✓브라우저 샌드박스의 핵심 문제를 한 문장으로 설명한다
- ✓오른쪽 실습에서 브라우저이 어떻게 움직이는지 관찰한다
- ✓다음 강의와 이어지는 한계를 말할 수 있다
실습 미션
격리는 어떻게 만들고, 어떻게 새나 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.
성공 조건
- □실습의 기본값을 먼저 관찰
- □입력값이나 모드를 한 번 이상 바꿔 결과 비교
- □왜 결과가 바뀌었는지 한 문장으로 설명
화이트해킹 · 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의 핵심은 한 줄 — 남의 출처는 내 데이터에 손 못 댐.