* 불충분한 세션 관리 취약점 : 웹 상에서 사용자가 로그인을 할 시, 매번 동일 세션ID(일정 패턴 존재) 발급 또는, 세션 타임아웃을 너무 길게 설정한 경우, 공격자에 의해 세션이 탈취될 수 있는 취약점
* 공격 예시
ex) 웹 프록시를 통해 사용자가 로그인 시, 발생하는 Cookie 정보를 획득(HTTP Session Hijacking), 탈취한 세션ID로 로그인 하여, 해당 사용자의 권한으로 악성 행위 가능.
* 취약점 판단 기준 : 세션 ID 분석 및 변조하여 로그인에 성공할 경우, 취약한 것으로 판단
점검 위치 | 행위 | 취약 반응 |
로그인 후 세션 ID | 세션 값을 변조하여, 로그인 시도 | 다중 로그인 성공 |
로그인 후 세션 ID | 로그인과 로그아웃을 반복하여 수집된 세션 ID의 패턴 분석 | 타 사용자 로그인 성공 |
* 대응책
1) Session ID 추측이 불가능 하도록, 매번 랜덤한 값으로 새롭게 발급하는 코드로 구성
2) Session Timeout 설정으로 일정시간(권장 10~30분 사이) 요청이 없을 경우, 자동 로그아웃 되도록 구현
3) httponly 및 secure 속성 활성화
- php.ini에서 session.cookie_httponly = 1 (또는 True) 설정으로, 클라이언트 스크립트(JavaScript, VisualBasic)을 통한 참조가 불가능 하도록 설정 (JavaScript를 통한 XSS 방지 등...)
- php.ini에서 session.cookie_secure = 1 (또는 True) 설정으로, HTTPS(SSL/TLS) 통신일 경우에만 해당 쿠키 전송하도록 설정
4) 중요 정보 페이지는 캐쉬를 사용하지 못하도록 설정
- 기반 시스템 별(HTML, ASP etc..) no-cache 설정을 통해, 페이지 요청 시마다 매번 서버로부터 새롭게 전송받아 중요 내용에 대한 노출을 방지
// HTML인 경우 (head 부분에 포함)
<META http-equiv="Expires" content="-1">
<META http-equiv="Pragma" content="no-cache">
<META http-equiv="Cache-Control" content="No-Cache">
// ASP인 경우
<%
Response.Expires = 0
Response.AddHeader "Pragma","no-cache"
Response.AddHeader "Cache-Control","no-cache,must-revalidate"
%>
// JSP인 경우
<%
response.setHeader("Cache-Control","no-store");
response.setHeader("Pragma","no-cache");
response.setDateHeader("Expires",0);
if (request.getProtocol().equals("HTTP/1.1"))
response.setHeader("Cache-Control", "no-cache");
%>
// PHP인 경우
<?
header("Pragma: no-cache");
header("Cache-Control: no-cache,must-revalidate");
?>
'Information Security > Hacking' 카테고리의 다른 글
XPath/Xquery Injection Vulnerability (0) | 2021.02.17 |
---|---|
HTTP 응답 분할 취약점 (HTTP Response Splitting Vulnerability) (0) | 2021.02.17 |
파일 삽입 취약점 (File Inclusion Vulnerability) (0) | 2021.02.15 |
파일 다운로드 취약점 (File Download Vulnerability) (0) | 2021.02.15 |
파일 업로드 취약점 (File Upload Vulnerability) (0) | 2021.02.15 |