오늘 끝나면
인증·세션 공격
- ✓인증·세션 공격의 핵심 문제를 한 문장으로 설명한다
- ✓오른쪽 실습에서 인증이 어떻게 움직이는지 관찰한다
- ✓다음 강의와 이어지는 한계를 말할 수 있다
실습 미션
로그인 우회·세션 탈취와 방어 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.
성공 조건
- □실습의 기본값을 먼저 관찰
- □입력값이나 모드를 한 번 이상 바꿔 결과 비교
- □왜 결과가 바뀌었는지 한 문장으로 설명
화이트해킹 · 07
인증·세션
공격
로그인은 한 번만 함. 그 뒤로 나를 기억하는 건 세션 토큰 한 조각임.
이 조각을 훔치거나 미리 심으면 비번 없이도 남이 됨.
교육·방어 목적. 실제 공격 코드 없이 원리만 안전하게 봄.
세션 = 로그인 뒤의 출입증
HTTP는 매 요청을 처음 보는 사람처럼 대함. 방금 로그인한 것도 다음 요청에선 기억 못 함.
그래서 로그인 성공 순간 서버가 세션 토큰을 발급함.
이후 모든 요청에 이 토큰을 같이 보냄 / 보통 쿠키에 담겨 자동으로 따라감.
서버는 토큰만 보고 “아, 그 사람” 하고 통과시킴.
즉 토큰은 출입증임. 비번을 모르더라도 출입증만 손에 넣으면 그 사람으로 통함.
그래서 공격의 표적이 비번에서 토큰으로 옮겨감.
약한 토큰은 다음 값이 보인다
토큰이 순번이나 시각으로 만들어지면, 내 토큰 하나만 봐도 남의 다음 토큰이 보임.
오른쪽에서 직접 해봄.
약한 토큰은 공격자가 좁은 후보만 던져도 금방 맞음.
강한 토큰은 같은 횟수로 적중 확률이 사실상 0임.
이건 안전한 개념 시뮬임 / 진짜 서버를 치지 않고 추측 공간의 크기 차이만 보여줌.
핵심은 하나. 토큰에 패턴이 있으면 그게 곧 구멍임.
방어는 예측 불가한 큰 무작위 값 / 추측 공간을 사람이 평생 못 훑게 키우는 것임.
순번+시각 기반. 공격자가 본 직전 토큰 바로 다음을 좁게 찍음.
다음 토큰은 101 부근일 게 뻔함 — 좁은 9칸만 던지면 됨.
약한 토큰: 좁은 후보 공간이라 몇 번 만에 맞음. 패턴이 곧 구멍임.
토큰 탈취 — 가로채고, 새어 나가고
토큰이 무작위로 강해도, 전송 중에 새면 추측은 필요도 없음. 그냥 주워 쓰면 됨.
평문(HTTP)으로 보내면 같은 와이파이의 누군가가 통째로 봄.
페이지에 XSS(6강) 구멍이 있으면 스크립트가 쿠키를 긁어감.
토큰이 URL이나 로그에 찍히면 거기서도 흘러나감.
주운 토큰을 자기 요청에 붙이면 서버는 의심 없이 통과시킴 / 비번도 MFA도 안 물어봄.
그래서 방어는 새는 길을 막는 것임 / HTTPS 강제 · 쿠키에 HttpOnly · Secure · SameSite · URL과 로그에 토큰 금지.
HTTP로 보내면 같은 망의 누군가가 통째로 봄
방어 · HTTPS 강제
심긴 스크립트가 document.cookie를 긁어감
방어 · HttpOnly 쿠키
토큰이 주소·서버 로그에 그대로 찍힘
방어 · URL·로그에 토큰 금지
세션 고정 — 미리 심어두는 함정
탈취가 “남의 토큰을 뺏는 것”이라면, 세션 고정은 “내 토큰을 남에게 미리 심는 것”임.
공격자가 먼저 토큰 하나를 받아 그 값을 피해자에게 심음 / 링크나 스크립트로.
피해자가 그 상태로 로그인함. 서버가 토큰을 안 바꾸면 — 로그인된 세션이 공격자가 아는 그 값임.
공격자는 같은 토큰을 들고 로그인된 상태로 들어감.
그래서 방어 규칙은 단순함.
로그인 직후 세션 ID를 무조건 새로 발급(rotate)함 / 로그인 전 토큰은 즉시 폐기.
예전 토큰을 그대로 들고 가는 일 자체를 못 하게 함.
방어 · 로그인 직후 재발급
AAA → 폐기 · 새 토큰 7Qk…z9
예전 값이 죽으니 공격자가 든 AAA는 빈 출입증이 됨
방어 — 예측 불가 · HTTPS · MFA · 짧은 만료
정리하면 방어는 한 방이 아니라 네 겹을 겹치는 것임. 하나가 뚫려도 다음이 막음.
예측 불가 토큰 — 큰 무작위 값. 추측을 무의미하게 만듦.
HTTPS · 안전 쿠키 — 전송 중·스크립트로 새는 길을 막음.
MFA — 토큰이나 비번이 새도 한 겹 더 / 그 사람만의 두 번째 증거를 요구함.
짧은 만료 · 로그인 시 재발급 — 주운 출입증의 유효기간을 깎음.
토큰이 새도 곧 죽어 있으니 훔칠 값이 줄어듦.
Q. 세션 탈취를 어렵게 하려면? (한 줄로)
예측 불가한 무작위 토큰 + HTTPS·안전 쿠키 + 짧은 만료(거기에 MFA·로그인 시 재발급).예측 불가 토큰은 추측을, HTTPS·쿠키는 가로채기를, 짧은 만료는 주워 쓰는 시간을 막음.
한 겹이 아니라 겹쳐야 함 / 하나가 뚫려도 나머지가 버팀.