다섯 살도 알 수 있게 · 보안

CSRF가 뭐예요?

CSRF(Cross-Site Request Forgery)와 그 사촌 클릭재킹을, 손님이 찬 입장 팔찌를 빌려 손님 몰래 창구에 쪽지를 보내는 도둑 이야기로 풀어봤어요.

팔찌 있네요 — 됐어요!대장장이에게금화 3개금화 창구팔찌 찬 손님공짜 빵!마을 게시판도둑이 종이를 붙였어요창구는 팔찌만 봐요 — 편하지만, 도둑도 그걸 알아요

창구는 손님 팔찌만 보고 쪽지를 들어줘요.입장 팔찌를 찬 손님이 쪽지를 내면 창구는 팔찌만 보고 금화를 보내요. 편해요. 그런데 마을 게시판에 도둑이 이상한 종이를 붙여 뒀어요.

공짜 빵!손님은 빵 그림만 봐요금화 전부 도둑에게— 손님 팔찌 붙여서손님 몰래 보내는 쪽지팔찌 진짜네 — 보내요!금화 창구금화는 도둑에게팔찌는 진짜, 뜻은 가짜손님은 아무것도 시킨 적이 없어요

CSRF는 손님 팔찌를 빌려 몰래 보내는 쪽지예요.손님은 빵 그림만 봤어요. 그런데 그 종이가 손님 팔찌를 달아 '내 금화를 도둑에게' 쪽지를 창구로 보내요. 팔찌는 진짜라서 창구는 믿어요 — 뜻만 가짜예요.

게시판의 종이도둑이 붙여 뒀어요
손님 몰래빵 그림만 봤을 뿐
팔찌는 진짜그래서 창구가 믿어요
뜻은 가짜손님은 시킨 적 없어요
금화 창구금화 보내기공짜 빵!↓ 여기 눌러요!투명 종이 밑에 진짜 버튼손님 손가락이 눌러요클릭재킹 — 팔찌 빌리기의 사촌: 손가락까지 빌려요

사촌도 있어요: 투명 종이 밑에 진짜 버튼을 숨겨요.도둑이 우리 창구 위에 투명 종이를 덮고 '여기 눌러요!'라고 써요. 손님이 누르면 밑에 있던 진짜 '금화 보내기' 버튼이 눌려요. 팔찌도 진짜, 손가락도 진짜예요.

번호표 7482쪽지마다 새 번호번호 없음게시판에서 온 쪽지그 자리에서 준 번호표게시판 종이는 번호를 몰라요우리 창구에서만팔찌는 우리 창구에서만게시판에서 온 쪽지엔 안 붙어요남의 창문남의 창문엔 안 나와요투명 종이 밑에 깔릴 수 없어요쪽지엔 번호표, 팔찌는 우리 창구만, 창문은 우리 것만팔찌를 빌려도 쪽지가 통하지 않아요

쪽지엔 번호표, 팔찌는 우리 창구만, 창문은 우리 것만.창구가 그 자리에서 준 번호표 없는 쪽지는 안 받아요 — 게시판 종이는 번호를 몰라요. 팔찌는 우리 창구에 낸 쪽지에만 붙고, 우리 창구는 남의 창문 안에 나오지 않아요.

빵 하나 주세요…그리고 금고 열어쪽지에 숨긴 명령도둑이 자기 손으로 보내요금화 도둑에게(손님은 몰라요)남의 팔찌로 보낸 쪽지손님이 자기도 모르게 보내요둘 다 창구 앞 쪽지 검토원이 먼저 봐요인젝션은 쪽지 속을 노리고, 이 도둑은 팔찌를 노려요

쪽지 속을 노리는 도둑과 팔찌를 노리는 도둑은 달라요.쪽지에 숨긴 명령은 도둑이 자기 손으로 보내고, 이 도둑은 손님 손으로 보내게 해요. 둘 다 창구 앞 쪽지 검토원이 먼저 보지만, 팔찌 도둑은 번호표가 있어야 막혀요.

한 줄로

CSRF = 도둑이 붙인 종이가 손님 팔찌를 빌려 손님 몰래 창구에 가짜 뜻의 쪽지를 보내는 것. 번호표(그 자리에서 준 비밀 번호), 팔찌는 우리 창구만, 남의 창문엔 안 나오기로 막아요.

Cross-Site Request Forgery. 로그인된 사용자의 브라우저가 쿠키를 자동으로 붙이는 걸 이용해, 다른 사이트에서 사용자 몰래 요청을 보내게 하는 공격이에요. CSRF 토큰, SameSite 쿠키, 그리고 클릭재킹을 막는 X-Frame-Options / CSP frame-ancestors 로 막아요.

어른들은 이렇게 불러요

CSRF
CSRF
팔찌 빌려 몰래 보내는 쪽지. 손님은 진짜, 팔찌도 진짜, 뜻만 가짜. 손님이 로그인한 채로 도둑의 페이지를 열면 생겨요.
CSRF 토큰
CSRF token
그 자리에서 준 번호표. 창구가 쪽지 종이에 미리 적어 준 비밀 번호. 게시판 종이는 이 번호를 알 수 없어요.
SameSite 쿠키
SameSite cookie
우리 창구에서만 통하는 팔찌. 다른 마을에서 보낸 쪽지엔 팔찌가 안 붙어요. 요즘 브라우저는 기본으로 이렇게 해요.
클릭재킹
Clickjacking
투명 종이 밑의 진짜 버튼. 손님이 '여기 눌러요'를 누르면 밑의 진짜 버튼이 눌려요. 팔찌 빌리기의 사촌이에요.
X-Frame-Options / CSP
X-Frame-Options / CSP
남의 창문엔 안 나오기. 우리 창구를 다른 페이지 안에 끼워 넣을 수 없게 해요. 그러면 투명 종이를 덮을 곳이 없어요.
세션
Session
입장 팔찌. 창구가 손님을 알아보는 팔찌. 훔칠 수도, 빌릴 수도 있어요. → 입장 팔찌를 훔치는 도둑
인젝션과의 차이
Versus injection
쪽지 속 vs 팔찌. 인젝션은 쪽지 안에 명령을 숨기고, CSRF는 남의 팔찌로 보내요. → 쪽지에 숨긴 명령
WAF
WAF
창구 앞 쪽지 검토원. 이상한 쪽지를 먼저 걸러요. 하지만 팔찌 도둑은 번호표가 있어야 확실히 막혀요. → 창구 앞 쪽지 검토원
다음 이야기
마을 소문만 모아도 성 지도가 나와요 →
다른 용어도 그림책으로 보고 싶다면 요청하기 →