작업 환경
- VMware Workstation Pro (17.6.2 ver)
- Server
- Web 서버 : Rocky_Linux(8.10 ver, VMnet 2, PHP로 구성)
- DNS 서버 : Rocky_Linux(8.10 ver, VMnet 1)
- Client
- Kali Linux : Web 취약점 점검용 (VMnet 1)
- GNS 구성
- 해당 점검은 비밀번호 수정 페이지에 한해서 진행됨
SC (상) | 18. 불충분한 세션 만료 |
취약점 개요 | |
점검 내용 | 세션의 만료 기간 설정 여부 점검 |
점검 목적 | 세션 타임아웃 기능을 구현하여 공격자가 만료되지 않은 세션 활용을 방지하기 위함 |
보안 위협 | 세션의 만료 기간을 정하지 않거나, 만료기한을 너무 길게 설정된 경우 악의적인 사용자가 만료되지 않은 세션을 활용하여 불법적인 접근이 가능할 수 있음 |
판단 기준 |
양호 : 세션 종료 시간이 설정되어 있는 경우 취약 : 세션 종료 시간이 설정되어 있지 않아 세션 재사용이 가능한 경우 |
참고 | OWASP TOP 10 항목 중 A07 : Identification and Authentication Failures 에 해당한다고 판단 |
점검 방법
- Step 1) 인증 후 정상적으로 세션이 발행된 페이지의 리퀘스트를 취득하여 일정 시간 (사이트에 따라 다름)이 지난 후에 재전송 시 정상 처리가 되는지 확인
현재 세션 발급에 대한 설정만 존재, 세션 종료 시간 설정은 참고 확인
보안 설정 방법
- 세션 타임아웃 구현 시 타임아웃 시간은 10분으로 설정할 것을 권고함
참고
세션 종료 시간 설정
1. 일정 시간 "미사용"시 자동 만료
→ 권고 사항인 10분으로 설정
- 설정 방법
- 해당 페이지만 설정 : session.gc_maxlifetime 값을 600초로 설정
- 전역 설정 : php.ini 에서 session.gc_maxlifetime 값을 600초로 설정
/var/www/html/update.php <- 비밀번호 수정 페이지만 설정하고싶은 경우
<?php
ini_set('session.gc_maxlifetime', 600); // 서버 세션 수거 주기도 10분으로
session_start();
// 타임아웃 기준 시간
$timeout = 600;
// 마지막 활동 시간 확인
if (isset($_SESSION['last_activity']) && (time() - $_SESSION['last_activity']) > $timeout) {
session_unset();
session_destroy();
header("Location: /proc/logout.php?reason=timeout");
exit;
}
// 활동 시점 갱신
$_SESSION['last_activity'] = time();
...중략
/etc/php.ini 에서 전역설정 추가
session.gc_maxlifetime = 600
🔐 OWASP TOP 10(2021)과의 연관
OWASP 공식문서 중 일부
“Sessions should be invalidated on the server after logout, idle timeout, and absolute timeout.”
1. A07: Identification and Authentication Failures
- 외부 입력이 코드나 명령으로 해석되어 실행
- PHP 자체는 이런 구조가 아니지만, PHP로 연동된 네이티브 애플리케이션이 존재할 경우 발생 가능
'주요정보통신기반시설가이드 > Web 취약점 점검' 카테고리의 다른 글
[AU (상)] 20. 자동화 공격 (2) | 2025.05.14 |
---|---|
[SF (상)] 19. 세션 고정 (0) | 2025.05.14 |
[IN (상)] 17. 불충분한 인가 (0) | 2025.05.13 |
[SE (상)] 16. 세션 예측 (0) | 2025.05.13 |
[CF (상)] 15. 크로스사이트 리퀘스트 변조(CSRF) (0) | 2025.05.13 |