스킬캠퍼스
7강 · 인증·세션 공격
강의

오늘 끝나면

인증·세션 공격

  • 인증·세션 공격의 핵심 문제를 한 문장으로 설명한다
  • 오른쪽 실습에서 인증이 어떻게 움직이는지 관찰한다
  • 다음 강의와 이어지는 한계를 말할 수 있다

실습 미션

로그인 우회·세션 탈취와 방어 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.

성공 조건

  • 실습의 기본값을 먼저 관찰
  • 입력값이나 모드를 한 번 이상 바꿔 결과 비교
  • 왜 결과가 바뀌었는지 한 문장으로 설명

화이트해킹 · 07

인증·세션
공격

로그인은 한 번만 함. 그 뒤로 나를 기억하는 건 세션 토큰 한 조각임.
이 조각을 훔치거나 미리 심으면 비번 없이도 남이 됨.
교육·방어 목적. 실제 공격 코드 없이 원리만 안전하게 봄.

P.01화이트해킹 · 07

세션 = 로그인 뒤의 출입증

HTTP는 매 요청을 처음 보는 사람처럼 대함. 방금 로그인한 것도 다음 요청에선 기억 못 함.

그래서 로그인 성공 순간 서버가 세션 토큰을 발급함.
이후 모든 요청에 이 토큰을 같이 보냄 / 보통 쿠키에 담겨 자동으로 따라감.
서버는 토큰만 보고 “아, 그 사람” 하고 통과시킴.

즉 토큰은 출입증임. 비번을 모르더라도 출입증만 손에 넣으면 그 사람으로 통함.
그래서 공격의 표적이 비번에서 토큰으로 옮겨감.

비번은 한 번 · 그 뒤는 토큰이 대신함
로그인 한 번 → 토큰이 기억함
1브라우저ID·비번으로 로그인
2서버토큰 발급: 9f3a…c1
3브라우저쿠키에 토큰 보관
4브라우저요청마다 토큰 동봉
5서버토큰 확인 → 통과
2번 토큰만 손에 넣으면 — 비번 없이 5번처럼 통과됨
P.02화이트해킹 · 07

약한 토큰은 다음 값이 보인다

토큰이 순번이나 시각으로 만들어지면, 내 토큰 하나만 봐도 남의 다음 토큰이 보임.

오른쪽에서 직접 해봄.
약한 토큰은 공격자가 좁은 후보만 던져도 금방 맞음.
강한 토큰은 같은 횟수로 적중 확률이 사실상 0임.

이건 안전한 개념 시뮬임 / 진짜 서버를 치지 않고 추측 공간의 크기 차이만 보여줌.
핵심은 하나. 토큰에 패턴이 있으면 그게 곧 구멍임.
방어는 예측 불가한 큰 무작위 값 / 추측 공간을 사람이 평생 못 훑게 키우는 것임.

예측 가능 토큰 vs 무작위 토큰 · 직접 추측
세션 토큰 추측 — 안전한 개념 시뮬
토큰 발급 방식

순번+시각 기반. 공격자가 본 직전 토큰 바로 다음을 좁게 찍음.

공격자가 아는 것
추측 공간1,000 가지
방금 본 토큰100

다음 토큰은 101 부근일 게 뻔함 — 좁은 9칸만 던지면 됨.

공격자 — 다음 토큰 추측
시도
0
최근 추측
결과
빗나감
누적 적중 확률0.0%

약한 토큰: 좁은 후보 공간이라 몇 번 만에 맞음. 패턴이 곧 구멍임.

P.03화이트해킹 · 07

토큰 탈취 — 가로채고, 새어 나가고

토큰이 무작위로 강해도, 전송 중에 새면 추측은 필요도 없음. 그냥 주워 쓰면 됨.

평문(HTTP)으로 보내면 같은 와이파이의 누군가가 통째로 봄.
페이지에 XSS(6강) 구멍이 있으면 스크립트가 쿠키를 긁어감.
토큰이 URL이나 로그에 찍히면 거기서도 흘러나감.

주운 토큰을 자기 요청에 붙이면 서버는 의심 없이 통과시킴 / 비번도 MFA도 안 물어봄.
그래서 방어는 새는 길을 막는 것임 / HTTPS 강제 · 쿠키에 HttpOnly · Secure · SameSite · URL과 로그에 토큰 금지.

평문 전송 · XSS · 로그 — 출입증이 새는 길
출입증이 새는 길 · 막는 법
평문 전송→ 새어 나감

HTTP로 보내면 같은 망의 누군가가 통째로 봄

방어 · HTTPS 강제

XSS→ 새어 나감

심긴 스크립트가 document.cookie를 긁어감

방어 · HttpOnly 쿠키

URL·로그→ 새어 나감

토큰이 주소·서버 로그에 그대로 찍힘

방어 · URL·로그에 토큰 금지

P.04화이트해킹 · 07

세션 고정 — 미리 심어두는 함정

탈취가 “남의 토큰을 뺏는 것”이라면, 세션 고정은 “내 토큰을 남에게 미리 심는 것”임.

공격자가 먼저 토큰 하나를 받아 그 값을 피해자에게 심음 / 링크나 스크립트로.
피해자가 그 상태로 로그인함. 서버가 토큰을 안 바꾸면 — 로그인된 세션이 공격자가 아는 그 값임.
공격자는 같은 토큰을 들고 로그인된 상태로 들어감.

그래서 방어 규칙은 단순함.
로그인 직후 세션 ID를 무조건 새로 발급(rotate)함 / 로그인 전 토큰은 즉시 폐기.
예전 토큰을 그대로 들고 가는 일 자체를 못 하게 함.

공격자가 먼저 심은 토큰 · 로그인 후에도 그대로
세션 고정 — 토큰을 안 바꿀 때
공격자토큰 sess=AAA 미리 받음AAA
공격자그 토큰을 피해자에게 심음AAA
피해자그 상태로 로그인AAA
공격자같은 AAA로 로그인된 채 진입AAA

방어 · 로그인 직후 재발급

AAA → 폐기 · 새 토큰 7Qk…z9

예전 값이 죽으니 공격자가 든 AAA는 빈 출입증이 됨

P.05화이트해킹 · 07

방어 — 예측 불가 · HTTPS · MFA · 짧은 만료

정리하면 방어는 한 방이 아니라 네 겹을 겹치는 것임. 하나가 뚫려도 다음이 막음.

예측 불가 토큰 — 큰 무작위 값. 추측을 무의미하게 만듦.
HTTPS · 안전 쿠키 — 전송 중·스크립트로 새는 길을 막음.
MFA — 토큰이나 비번이 새도 한 겹 더 / 그 사람만의 두 번째 증거를 요구함.

짧은 만료 · 로그인 시 재발급 — 주운 출입증의 유효기간을 깎음.
토큰이 새도 곧 죽어 있으니 훔칠 값이 줄어듦.

Q. 세션 탈취를 어렵게 하려면? (한 줄로)예측 불가한 무작위 토큰 + HTTPS·안전 쿠키 + 짧은 만료(거기에 MFA·로그인 시 재발급).
예측 불가 토큰은 추측을, HTTPS·쿠키는 가로채기를, 짧은 만료는 주워 쓰는 시간을 막음.
한 겹이 아니라 겹쳐야 함 / 하나가 뚫려도 나머지가 버팀.
네 겹을 겹쳐 출입증의 가치를 떨어뜨림
네 겹을 겹친다
1
예측 불가 토큰
막는 것 · 추측·다음 값 예측
2
HTTPS · 안전 쿠키
막는 것 · 가로채기·스크립트 절도
3
MFA
막는 것 · 토큰·비번이 새도 한 겹 더
4
짧은 만료 · 재발급
막는 것 · 주운 토큰의 유효기간
결론하나 뚫려도 다음 겹이 버팀 — 출입증의 가치를 0에 가깝게

3줄 요약

  1. 1로그인 우회·세션 탈취와 방어
  2. 2인증·세션 공격은 기초·정찰 → 웹 취약점 → 시스템 침투 → 네트워크·IoT → 레드팀·AI 흐름 안의 한 칸이다.
  3. 3개념을 외우는 것보다 입력을 바꾸면 무엇이 달라지는지 보는 것이 우선이다.

완료 전 점검

복습 카드

인증

로그인 우회·세션 탈취와 방어

취약점

공격에 악용될 수 있는 시스템의 약점

익스플로잇

취약점을 실제로 이용하는 코드나 기법