세션에서 발생하는 취약점 (Session Vuln)

세션에서 발생하는 취약점 (Session Vuln)

Lecture
Security
태그
web
webhacking
security
public
완성
Y
생성일
Mar 26, 2024 08:44 AM
LectureName
Web Hacking

1. 개요


쿠키와 세션 에 대한 이야기에 이어 세션에서 발생할 수 있는 취약점을 알아볼 예정입니다. 세션에서 발생할 수 있는 취약점은 세션 생성, 유지, 파기 과정 중 발생하며 사용자 뿐만이 아니라 관리자 세션 등이 존재할 경우 더 큰 파급력으로 이어질 수 있습니다.
 

2. 세션 취약점 종류


2.1 세션 토큰 생성 취약점

웹 애플리케이션에서 토큰을 만들어내는 과정에서 취약점이 발생할 수 있습니다. 이는 토큰 생성 패턴이나 보편적으로 사용하는 토큰(쿠키) 생성 방식에서 취약점이 발생하게 되는데, 취약점의 종류는 다음과 같습니다.
 
안전하지 않은 토큰 생성
보편적으로 웹 프레임워크에서 생성하는 토큰은 프레임워크에서 취약점이 나오지 않는 한 문제가 되지 않지만, 웹페이지 개발자가 특정 이벤트 추적이나 상태 기록을 위해서 쿠키를 사용해야 할 때가 있습니다. 이때 쿠키를 안전하게 생성하지 않으면 취약점이 발생할 수 있습니다.
 
Set-cookie:history=757365723d61646d696e3b646174653d31322f31322f3132
  • 해당 쿠키는 안전해 보이나요?
 
해당 쿠키는 임의의 난수로 생성된 것처럼 보입니다. 하지만 해당 쿠키 생성 규칙을 자세하게 들여보면 아스키 코드로 인코딩 되어 있음을 알 수 있습니다. 이를 아스키 코드에 디코딩 작업을 하게 되면 다음과 같습니다.
user=admin;date=12/12/12
  • 만약 다음과 같은 토큰에 민감 정보가 들어 있다면 큰 문제가 될 수 있습니다.
 
 
 

2. 세션 유지 과정 중 취약점

잘못된 세션 생성도 문제가 발생할 수 있지만 토큰의 생명 주기도 취약점이 될 수 있습니다. 다음은 토큰을 발급하고 유지하는 과정에서 발생하는 취약점을 알아보겠습니다.
 
💡
생명주기?
  • 토큰이 생성되고 유지되며 파기되는 사이클을 의미합니다.
 
 
동시 접속 가능 취약점
웹 애플리케이션에서 부여한 세션에 둘 이상의 사용자가 접근 가능하면 취약하다고 볼 수 있습니다. 만약 공격자가 세션 탈취에 성공했을 경우 수집한 사용자의 권한으로 서비스를 사용할 수 있기 때문에 취약하다고 볼 수 있습니다.
 
🛡️ 방어 대책은 다음과 같습니다.
  • User-agent 에 대하여 값을 검증하여, 세션에 속성을 부여하여 정말 올바른 사용자가 맞는지 알 수 있습니다.
  • 세션 동시접속 수를 제한합니다.
 
정적인 토큰 사용 취약점
정적인 토큰이란, 토큰이 삭제(파기) 되지 않고 계속해서 같은 값으로 유지되는 토큰을 말합니다. 이때 세션에 중요 정보들이 담기게 되고, 사용자 이외의 사람이 해당 토큰을 얻거나 타 유저가 사용자의 토큰을 시간을 들여 유추할 수 있다면 사용자의 정보가 노출될 수 있습니다.
 
 
동일한 세션 값 사용 취약점
웹 애플리케이션에서 사용자가 사용하던 세션값을 다른 사용자에게 재 사용할 경우 공격자는 유저가 사용할 세션을 유추, 해당 세션에 유저가 연결될 때 까지 기다리는 방법을 통해 사용자를 공격할 수 있습니다.
 
 
 

3. 세션 쿠키 설정 & 파기 관련 취약점

쿠기의 경우 여러가지 속성 값을 줄 수 있다. 해당 속성을 적절히 설정하고, 세션 라이프 사이클 관련된 설정을 명확히 해야 한다.
 
올바르지 않은 속성 값 설정 취약점
🐖 부여 가능한 속성 값
특성 명
설명
Secure
HTTPS 통신을 통해서만 쿠키 정보를 전송할 수 있습니다.
Http Only
document.cookie 와 같이 자바스크립트로 쿠키 정보를 탈취하는 것을 막습니다.
Same Site
크로스사이트 요청에 대한 설정 가능
  • 중요한 속성 값은 다음과 같습니다.
  • 웹 애플리케이션 운영 환경에 따라 필요한 권한을 제외하고 제약사항을 걸어놓아야 합니다.
 
이외에도 쿠키가 사용될 경로 등을 명확히 명시하지 않아서 개발자가 신경 쓰지 못한 부분에서 취약점이 발생할 수 있습니다.
 
 
세션 종료 정책 미흡
사용자의 세션 사용 기간을 짧게 할 수록 공격자들이 세션 토큰을 추측하고 악용할 수 있는 시간이 줄어듭니다. 공격자가 지속적으로 세션을 분석하려고 하면 충분한 분석 시간과 정탐, 오탐을 판별할 수 있는 데이터가 필요한데 이때 세션 종료에 대한 정책을 올바르게 세운다면 공격자가 세션 분석 활동을 하는 것에 대한 방어를 할 수 있습니다.
 
 
 

3. 취약점 탐색 방법


  1. 어플리케이션에서 토큰을 얻어 다양한 방식으로 데이터를 수정, 토큰의 유효한 섹션을 탐색합니다. 토큰의 값 중 바이트나 비트 등을 하나씩 바꾼 후 수정된 토큰이 유효한지 살펴봅니다. 버프 인트루더에서 좋은 기능을 활용할 수 있습니다.
  1. 다양한 사용자 아이디를 이용해 로그인을 시도, 서버로부터 얻은 토큰을 기록합니다. 세부적으로 데이터를 나누어 가며 특정 섹션에서 변화하는 데이터를 유심히 관찰합니다.
  1. 인코딩 형식을 보고 분석을 시도합니다.
  1. 세션 토큰을 복사하여 타 브라우저에서 이용 시, 세션이 유지되는지 확인합니다.
  1. 로그인, 로그 아웃 과정을 거쳐 정적인 토큰이 생성되는지 확인합니다.
  1. 쿠키 설정 정보를 확인하고 로그아웃 기능을 사용하여 로그아웃을 시도해봅니다.
 
 
여기서 고려해 볼 수 있는 취약점은 다음과 같습니다.
  • 숨겨진 문자열로 판별하는 토큰
  • 시간 의존성을 가진 토큰
  • 취약한 무작위 번호 생성 로직 발견
  • 동시 접속 가능
  • 정적인 토큰 사용
 
 
 
 

4. 이 외 취약점


네트워크상의 토큰 노출
세션 토큰은 네트워크 단에서 암호화 되지 않은 상태로 전송될 때(HTTP) 세션 토큰 노출 취약점이 발생할 수 있습니다.
  • 특정 URL 접근 시 HTTP 사용 및 Secure flag 미적용
  • 특정 되지 않은 쿠키 경로 사용
 
로그에서 토큰 노출
시스템 로그에서 사용자 토큰이 노출된다면 공격자가 해당 로그를 파악, 세션을 탈취할 수 있습니다. 이는 관리자가 사용자의 세션을 찾아 최근 기록을 조회하거나, 로직 결함으로 인해서 발생할 수 있습니다.
해당 취약점이 발생할 수 있는 포인트는 다음과 같다.
  • 사용자의 브라우저 로그
  • 웹서버 로그
  • 프록시 서버 로그