스킬캠퍼스

오늘 끝나면

인증·세션 공격

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

실습 미션

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

성공 조건

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

화이트해킹 · 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개념을 외우는 것보다 입력을 바꾸면 무엇이 달라지는지 보는 것이 우선이다.

완료 전 점검

복습 카드

인증

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

취약점

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

익스플로잇

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