특징
- 사용자가 대상 웹서버에 접속하면 식별을 위해 세션 ID를 할당하게됨
- 세션 ID는 사용자의 쿠키에 저장되어 서버와 사용자 간의 식별을 유지
- 하지만 세션 ID가 단순할 경우 쉽게 위조될 수 있음
- 공격자는 세션 ID를 쉽게 추측할 수 있어, 다른 사용자로 위장하여 접근할 가능성
Session
- 클라이언트가 웹 서버에 접속해있는 상태가 하나의 단위
- 클라이언트로부터 오는 요청을 하나의 상태로 보고 그 상태를 일정하게 유지하는 기술
DVWA 실습
- 버튼을 클릭할때 마다 새로운 쿠키를 생성해주는 페이지
- burp suite 를 통해 어떤 요청을 하고 응답이 오는지 확인
- 처음 페이지를 요청하면 웹서버에서 cookie dvwaSession=1 이라는 값을 전송
- 새 쿠키 생성 버튼을 누르면 값이 일정하게 증가하는 것을 확인할 수 있음
- 위와 같은 세션 ID 알고리즘은 충분히 예측 가능하기 때문에 공격자가 사용자의 ID를 탈취할 가능성이 매우 높아짐
소스코드 분석
<?php
$html = "";
if ($_SERVER['REQUEST_METHOD'] == "POST") {
if (!isset($_SESSION['last_session_id'])) {
$_SESSION['last_session_id'] = 0;
}
$_SESSION['last_session_id']++;
$cookie_value = $_SESSION['last_session_id'];
setcookie("dvwaSession", $cookie_value);
}
?>
- 세션 ID가 숫자를 1씩 증가시키는 방식으로 설정되어 예측 가능한 패턴이기 때문에, 공격자가 쉽게 다음 세션 ID를 추측 가능
- 쿠키 값이 안전하지 않은 방식으로 설정
대응방안
- 예측 불가능한 세션 ID 생성
위의 php의 경우 session_start()와 session_regenerate_id()를 사용 - 세션 만료 시간 설정
일정 시간 동안 사용자가 활동하지 않을 경우 세션을 자동으로 만료시켜, 공격자가 오랫동안 세션을 사용할 수 없도록 설정 - IP 주소 및 사용자 에이전트 검증
세션이 생성된 이후 사용자의 IP 주소와 브라우저의 사용자 에이전트를 기록하고, 매 요청마다 일치하는지 확인하여 세션 탈취 방지 - 세션 종료 시 데이터 정리
세션이 종료될 때, 또는 로그아웃 시점에 모든 세션 데이터를 확실히 파기하고, 브라우저 쿠키에서도 삭제하여 사용자가 로그아웃 후 다시 접근할 수 없도록 설정
'CERT' 카테고리의 다른 글
웹 모의해킹: Stored XSS (0) | 2024.10.05 |
---|---|
웹 모의해킹: DOM Based XSS (2) | 2024.10.05 |
웹 모의해킹: Insecure CAPTCHA (0) | 2024.10.05 |
웹 모의해킹: File Upload (2) | 2024.10.05 |
웹 모의해킹: File Inclusion (0) | 2024.10.05 |