기준
세션 예측
세션 고정
불충분한 세션 만료
취약점 설명
세션 예측
세션의 구성이 단순하게 구성되거나 복호화가 가능한 암호화를 통해 예상 가능하게 구성되어 다른 사용자의 세션을 쉽게 유추할 수 있는 경우 발생하는 취약점입니다.
본인의 세션을 여러 번 생성하여 확인하는 것 만으로 타 사용자의 세션을 예측하여 도용할 수 있는 매우 위험한 취약점입니다.
불충분한 세션 만료
로그아웃 후 혹은 로그인 시의 세션 유지시간이 너무 긴 경우 세션을 필요 이상으로 유지하여 발생할 수 있는 취약점입니다.
타 사용자의 세션이 강탈당하거나 세션을 획득한 경우 세션을 도용하여 타 사용자 및 관리자의 권한을 탈취할 수 있는 매우 위험한 취약점입니다.
세션 고정
사용자 로그인 시에 생성되는 세션이 고정되어 발생되는 취약점입니다.
사용자 및 관리자의 세션을 탈취한 경우 고정된 세션으로 접근하여 공격자에 의해 권한이 도용될 수 있는 취약점으로 매우 위험한 취약점입니다.
-----------------------------------------------------------------------------------------------------------------------------------
각각의 취약점은 위험성이 큰 취약점입니다.
하지만 위의 세 취약점은 매우 유사한 부분이 많아 한번에 취합하여 포스팅하게 되었습니다.
세 가지 취약점은 세션의 보안 조치가 취약하게 설정되어 발생하는 취약점으로 서비스를 이용하는 사용자의 가용성 저해 및 개인정보 탈취, 타 사용자 ID 도용, 사용자 ID를 활용한 DoS 공격 등을 유발할 수 있는 취약점입니다.
공격 방법
(해당 취약점은 DVWA의 Weak Session IDs를 활용하여 실습해보도록 하겠습니다.)
1. Low Level
해당 페이지의 형태는 위와 같습니다.
우선 세션의 취약점을 확인할 방법으로 쿠키를 확인해보도록 하겠습니다.
개발자 도구 > 애플리케이션 > 쿠키를 들어가 보면 세션 값을 확인할 수 있습니다.
dvwaSession 값이 4로 설정되어 있지만 페이지의 Generate를 눌러보겠습니다.
우선 PHPSESSID는 고정되어 있으며 dvwaSession 값은 1씩 증가하는 방식이랑 것을 알 수 있습니다.
고치려고 하는 값을 더블클릭해주면 수정할 수 있습니다.
2. Medium Level
Low Level과 달리 세션 값이 길어진 것을 알 수 있습니다.
Generate를 해보면 위처럼 바뀌는 것은 알 수 있습니다.
PHPSESSID는 고정되어 있지만 dvwasession은 다르게 바뀌는 것을 알 수 있습니다.
그럼 이제 좀 자세히 보기 위해 페이지 소스를 확인해보겠습니다.
세션을 확인해보면 시간을 쿠키값에 적용해 생성되는 것을 알 수 있습니다.
다시 Generate 하면서 확인해보면 앞의 '164810'은 고정된 값이고 뒤의 3자리는 시간에 의해 생성되는 것을 확인할 수 있습니다.
3. High Level
High Level에서 확인해보면 고정되어 있는 것처럼 확인되지만 실제고 적용은 되지 않는 것을 알 수 있습니다.
그래서 Request와 Response 패킷을 확인하여 Session값이 어떻게 적용되는지 확인해보겠습니다.
확인해보면 Response 패킷이 Generate 되는 것을 확인할 수 있습니다.
그럼 Session 값이 어떤 방식으로 바뀌는지 확인하기 위해 소스코드를 확인해보도록 하겠습니다.
<?php
$html = "";
if ($_SERVER['REQUEST_METHOD'] == "POST") {
if (!isset ($_SESSION['last_session_id_high'])) {
$_SESSION['last_session_id_high'] = 0;
}
$_SESSION['last_session_id_high']++;
$cookie_value = md5($_SESSION['last_session_id_high']);
setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], false, false);
}
?>
소스코드를 확인해보면 cookie_value = md5로 적용되는 것을 확인할 수 있습니다.
md5는 해쉬 함수로 rainbow table로 cracking이 가능합니다.
복호화해보면 md5가 적용되었을 뿐 전과같이 1씩 증가하는 형태로 Session값이 적용 중인 것을 확인할 수 있습니다.
'Web' 카테고리의 다른 글
자동화 공격 (주요정보통신기반시설 기술적 취약점 분석 평가 방법 상세가이드) (0) | 2022.03.28 |
---|---|
불충분한 인가 (주요정보통신기반시설 기술적 취약점 분석 평가 방법 상세가이드) (0) | 2022.03.28 |
CSRF (Cross-Site Request Forgery) (주요정보통신기반시설 기술적 취약점 분석 평가 방법 상세가이드) (0) | 2022.03.24 |
취약한 패스워드 복구 (주요정보통신기반시설 기술적 취약점 분석 평가 방법 상세가이드) (0) | 2022.03.23 |
불충분한 인증 (주요정보통신기반시설 기술적 취약점 분석 평가 방법 상세가이드) (0) | 2022.03.23 |