16. 세션 예측 & 세션 고정 취약점
■ 개요
- 사용자에게 전달하는 세션 ID가 일정한 패턴을 가지고 있거나 고정값으로 설정할 경우, 공격자가 세션 ID를 추측 및 접근하여 계정 정보를 몰라도 관리자 계정으로 접근 가능한 취약점
- 로그아웃 후 재 로그인 시 생성되는 세션 ID가 일정한 패턴으로 생성되는지 추측 불가능한 세션 ID로 발급되는지 체크
- 주요정보통신기반시설 취약점 진단 기준으로 16. 세션 예측 취약점에 해당
■ 세션 vs 쿠키 차이
- 세션과 쿠키의 개념 및 차이점은 하기 링크 참조
https://sheow13.tistory.com/48
28. 쿠키 변조 취약점
■ 개요 - 웹 어플리케이션 운영 시 사용자 인증 방식 중 하나인 쿠키를 공격자가 변조하여 다른 사용자로 전환하거나 권한 상승이 가능한 취약점으로 클라이언트에 전달되는 쿠키에 사용자 식
sheow13.tistory.com
■ 세션 예측 실습 환경
- Kali Linux
- DVWA
■ 세션 예측 실습
Step 1) DVWA에서 'Weak Session IDs'로 이동 후 현재 쿠키값 확인.
Step 2) 새로운 dvwaSession값을 생성하는 버튼인 'Generate' 클릭 시, dvwaSession값이 1씩 증가함을 확인할 수 있다.
세션 생성이 예측 가능하게 생성이 될 경우, 공격자는 이를 예측하여 로그인 중인 사용자의 세션을 훔치고 정상적인 사용자로 사칭하여 중요 정보를 탈취하거나 악의적인 행동 수행 가능
■ 대응 방안
1. 세션 값을 예측할 수 없도록 난수값으로 생성되도록 시큐어 코딩
import secrets
import string
def generate_session_key():
RANDOM_STRING_CHARS = string.ascii_letters+string.digits
# 보안 기능과 관련된 난수는 secrets 라이브러리를 사용해야 안전
return "".join(secrets.choice(RANDOM_STRING_CHARS) for i in range(32))