특징

  • 사용자가 대상 웹서버에 접속하면 식별을 위해 세션 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를 추측 가능
  • 쿠키 값이 안전하지 않은 방식으로 설정

대응방안

  1. 예측 불가능한 세션 ID 생성 
    위의 php의 경우 session_start()session_regenerate_id()를 사용
  2. 세션 만료 시간 설정
    일정 시간 동안 사용자가 활동하지 않을 경우 세션을 자동으로 만료시켜, 공격자가 오랫동안 세션을 사용할 수 없도록 설정
  3. IP 주소 및 사용자 에이전트 검증
    세션이 생성된 이후 사용자의 IP 주소와 브라우저의 사용자 에이전트를 기록하고, 매 요청마다 일치하는지 확인하여 세션 탈취 방지
  4. 세션 종료 시 데이터 정리
    세션이 종료될 때, 또는 로그아웃 시점에 모든 세션 데이터를 확실히 파기하고, 브라우저 쿠키에서도 삭제하여 사용자가 로그아웃 후 다시 접근할 수 없도록 설정

'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

+ Recent posts