모의해킹&웹취약점진단/주•통기반 웹 취약점 점검

16. 세션 예측 & 세션 고정 취약점

sheow13 2024. 1. 2. 16:09
728x90

 

 개요

- 사용자에게 전달하는 세션 ID가 일정한 패턴을 가지고 있거나 고정값으로 설정할 경우, 공격자가 세션 ID를 추측 및 접근하여 계정 정보를 몰라도 관리자 계정으로 접근 가능한 취약점

- 로그아웃 후 재 로그인 시 생성되는 세션 ID가 일정한 패턴으로 생성되는지 추측 불가능한 세션 ID로 발급되는지 체크

- 주요정보통신기반시설 취약점 진단 기준으로 16. 세션 예측 취약점 해당

 

 

세션 vs 쿠키 차이

- 세션과 쿠키의 개념 및 차이점은 하기 링크 참조

https://sheow13.tistory.com/48

 

28. 쿠키 변조 취약점

■ 개요 - 웹 어플리케이션 운영 시 사용자 인증 방식 중 하나인 쿠키를 공격자가 변조하여 다른 사용자로 전환하거나 권한 상승이 가능한 취약점으로 클라이언트에 전달되는 쿠키에 사용자 식

sheow13.tistory.com

 

세션 예측 실습 환경

- Kali Linux

- DVWA

 

세션 예측 실습

Step 1) DVWA에서 'Weak Session IDs'로 이동 후 현재 쿠키값 확인.

[DVWA Weak Session ID로 이동]

 

[현재 접근한 계정 쿠키값 확인]

 

 

Step 2) 새로운 dvwaSession값을 생성하는 버튼인 'Generate' 클릭 시, dvwaSession값이 1씩 증가함을 확인할 수 있다.

세션 생성이 예측 가능하게 생성이 될 경우, 공격자는 이를 예측하여 로그인 중인 사용자의 세션을 훔치고 정상적인 사용자로 사칭하여 중요 정보를 탈취하거나 악의적인 행동 수행 가능

 

[새로운 세션을 생성하는 버튼 클릭]

 

[버튼 클릭시 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))