본문 바로가기

웹 보안

[웹 개발자를 위한 웹 보안] 10장

10장. 세션 하이재킹

 

1. 세션 하이재킹이란

로그인 등으로 서버가 부여한 세션(사용자 신분 증명)을 도둑맞아 공격자가 그 사용자의 권한으로 사이트를 조작하는 공격이다. 결과적으로 공격자는 계정 탈취, 금전 이체, 개인정보 변경 등을 수행할 수 있다.

"세션 토큰(세션 ID)를 빼앗겼느냐"

 

2. 세션 작동 방식

웹은 상태를 기억하지 않기 때문에 서버는 사용자 구분을 위해 세션ID를 발급하고 서버(세션 저장소)에 사용자 정보를 저장한다. 이 세션 ID는 보통 쿠키로 브라우저에 전달되고, 브라우저는 이후 요청마다 쿠키를 자동 전송해서 로그인 상태를 유지한다. 

 

서버 발급 -> 세션 저장 -> Set-Cookie 전달 -> 브라우저가 요청에 쿠키 첨부 -> 서버가 세션 조회

 

3. 공격자가 세션을 가로채는 방법

대표적인 방법

1) 쿠키 도난: 브라우저가 가진 세션 식별자를 공격자가 빼앗는 것. 쿠키가 탈취되면 공격자는 그 쿠키로 서버에 접속해 피해다와 같은 권한을 갖게 됨.

쿠키 도난의 세가지 기술:

- 크로스 사이트 스크립팅 공격 : 이를 통해 세션 쿠키 도용

- 중간자 공격: 이를 사용하여 쿠키 훔침

- CSRF 공격: 사용자의 세션 쿠키에 액세스할 필요X

 

2) 세션 고정: 공격자가 미리 만든 세션 ID를 피해자에게 사용하게 만들어 로그인 후에도 동일 세션을 사용하게 하는 기법. (공격자가 정해둔 신분증을 피해자에게 쓰게 하는 방식)

보안 문제:

- URL에 세션 ID를 작성하면 로그 파일에서 세션 ID 유출 가능

- 세션 고정 취약점

 

3) 취약한 세션 ID 활용: 세션 ID 자체가 약하거나, 잘못 지정되거나, 재사용 가능하면 공격자는 이를 추측, 대입, 획득해서 세션을 가로채는 기법

방어 방법:

- 암호학적 난수 -> 충분한 엔트로피 세션 토큰 생성

- 세션 ID URL 포함 금지