주요정보통신기반 웹 취약 분석 평가 방법 19번째 항목인 세션 고정(Session Fixation/SF)이다.
저번 포스팅에서 세션의 중요성에 대해 짧막하게 설명했었다. 공격자에 입장에서 어떤 특정 사용자의 계정을 공격하기 위해 패스워드를 노릴까? 아니다. 세션을 노리는게 훨씬 공격자 입장에서 좋다.
세션을 노린다는 것은 이미 로그인되어 있는 사용자의 계정을 노리는 건데 로그인된 계정의 세션을 가져오게 된다면 이미 로그인된 것(이미 인증됨)과 다름이 없기 때문이다.
이렇게 중요한 세션을 고정 사용한다는 것은 무척이나 위험한 일이다. 주통기반에서는 아래와 같이 세션 고정 취약점에 대해 설명하고 있다.
사용자 로그인 시 항상 일정하게 고정된 세션 ID가 발행되는 경우 세션 ID를 도용한 비인가자의 접근 및 권한 우회가 가능
저렇게 세션을 고정시켜 사용하는 경우 공격자가 세션을 탈취하여 다른 곳에서 가로챈 세션을 이용하여 로그인할 수 있는데 이를 세션 하이재킹(Session Hijacking)이라고 한다.
오랜만에 실습하면서 해보자
특정 사용자로 로그인했고 세션값을 확인한 결과다.
여기서 로그아웃을 하면 1. 원래 쓰던 세션을 파기하고 나중에 로그인하면 2. 새로운 세션으로 발급해야 한다. 하지만 취약한 사이트는 새로운 세션으로 발급하지 않고 고정 세션을 사용했다.
분명 로그아웃을 했고 세션도 없어진 것을 확인했지만 아까 사용되었던 세션을 이용해보면!
짜잔! 다시 돌아왔습니다!!
세션을 고정으로 사용한다는 것은 있을 수 없는 일!! 로그인 할때마다 그때그때 새로운 세션을 발급해주어야 한다.
그런데? 그러면 끝인가?? 위에 내가 1번 2번으로 강조해놨다. 2번인 새로운 세션 발급은 ok. 1번은??
만약 새로운 세션 발급은 원할히 이루어져도 파기가 제대로 되지 않고 있다면 어떻게 될까?
다른 사용자로 로그인된 상태.
하지만 이전 ragdo11의 세션 값을 확인해본다면...
값이 존재한다. 이러면 Session Reuse 공격 혹은 하이재킹 공격에 또 다시 당할 수 밖에 없다.
세션을 파기하는 것도 항상 중요시 여겨야 함!!
SF의 보안설정방법
- 로그인할 때마다 예측 불가능한 새로운 세션 ID를 발급받도록 해야 하고 기존 세션 ID는 파기해야 함
오 주통기반에서도 역시 기존 세션의 파기를 권고하고 있다.
세션의 파기는 사용하는 문법마다 다르겠지만 내가 사용하는 php에서는
session_destory();
위와 같이 파기한다. 다만 위는 서버에서의 세션만 파기, 클라이언트에서는 파기하지 않아 로그아웃 후에도 쿠키값은 남아있는 것으로 보인다.
setcookie(session_name(), '', time() - 42000, '/');
쿠키값도 슥삭 해주자.
'주요정보통신기반 웹 취약점 분석·평가 항목' 카테고리의 다른 글
프로세스 검증 누락(PV) (0) | 2025.05.26 |
---|---|
자동화 공격(AU) (0) | 2025.05.23 |
불충분한 세션 만료(SC) (0) | 2025.05.23 |
불충분한 인가(IN) (0) | 2025.05.21 |
세션 예측(SE) (0) | 2025.05.21 |