🔐 소프트웨어 개발 보안 구축 #5 - 세션통제
2020. 7. 14. 14:51ㆍ컴퓨터언어/소프트웨어공학
728x90
반응형
👍 세션통제란?
세션 : 서버와 클라이언트의 연결
세션통제란 세션의 연결 및 그로 인해 발생하는 정보를 관리하는 것을 의미하며, 소프트웨어 개발 과정 중 "요구사항분석"과 "설계" 단계에서 진단해야 하는 보안점검 내용이다.
다음은 세션통제를 제대로 하지 못했을 때 발생할 수 있는 보안약점이다.
불충분한 세션관리 | ❗️ 일정한 규칙이 존재하는 세션ID가 발급되거나 타임아웃(자동로그아웃시간)이 너무 길게 되면 침입자가 세션하이재킹(가로채기)과 같은 공격을 통해 획득한 세션ID로 인가되지 않은 시스템의 기능을 이용하거나 중요한 정보에 접근이 가능해진다. |
잘못된 세션에 의한 정보 노출 | ❗️ 다중스레드 환경에서 멤버변수에 정보를 저장할 때 발생함. ❗️ 싱글톤패턴에서 발생하는 레이스컨디션으로 인해 동기화 오류가 발생하거나 멤버변수의 정보가 노출될 수 있음. ✅ 멤버변수보다 지역변수를 활용하여 변수의 범위를 제한함으로써 방지 |
다중스레드 : 프로세스 내의 작업 단위. 시스템의 자원을 할당받아 실행하는 프로그램의 단위를 스레드라고 하는데, 두 개 이상의 스레드가 생성되어 동시처리되는 다중작업을 멀티스레드라고 한다.
싱글톤패턴 : 하나의 객체를 생성하면 어디서든 그 객체를 참조할 수 있지만, 여러 프로세스가 동시에 참조할 수 없는 디자인 패턴
레이스컨디션 : 두개 이상의 프로세스가 공용자원을 획득하기 위해 경쟁하는 상태
멤버변수 : 객체와 연결된 변수로, 클래스 내에 선언되어 클래스의 모든 메소드들이 접근 가능한 변수. 멤버필드라고도 하며, 클래스변수(static)와 인스턴스변수가 있음.
그렇다면 우리는 확실한 보안을 위해서 다음과 같이 세션을 설계하여야 한다.
- 시스템의 모든 페이지에서 로그아웃이 가능하도록 UI 구성하기
- 로그아웃 요청 시 할당된 세션이 완전히 제거되도록 하기
- 세션 타임아웃은 중요도가 높으면 2~5분, 낮으면 15~30분으로 설정하기
- 이전 세션이 종료되지 않으면 새 세션이 생성되지 못하도록 설계하기
- 중복 로그인을 허용하지 않은 경우, 클라이언트의 중복접근에 대한 세션관리정책 수립하기
- 패스워드 변경 시 활성화된 세션을 삭제하고 재할당하기
그리고 서버와 클라이언트를 연결할 때는, 서버가 각 클라이언트를 구별하기 위해 세션ID를 발급하며, 클라이언트는 서버에 요청을 보낼 때마다 본인이 가진 세션ID가 서버가 발급했던 것이 맞는지 인증을 거쳐야 한다.
다음은 세션ID의 관리방법이다.
- 안전한 서버에서 최소 128비트의 길이로 생성할 것
- 예측이 불가능하도록 안전한 난수 알고리즘을 적용할 것
- 노출되지 않도록 URL Rewrite(쿠키를 사용할 수 없는 환경에서 세션ID 전달을 위해 URL에 세션ID를 포함시키는 것) 기능을 사용하지 않는 방향으로 설계할 것
- 로그인 시 로그인 전의 세션ID를 삭제하고 재할당할 것
- 장기간 접속하고 있는 세션ID는 주기적으로 재할당되도록 설계할 것
728x90
반응형
'컴퓨터언어 > 소프트웨어공학' 카테고리의 다른 글
🔐 소프트웨어 개발 보안 구축 #7 - 코드오류 (0) | 2020.07.14 |
---|---|
🔐 소프트웨어 개발 보안 구축 #6 - 암호 알고리즘 (0) | 2020.07.14 |
🔐 소프트웨어 개발 보안 구축 #4 - 에러처리 (0) | 2020.07.14 |
🔐 소프트웨어 개발 보안 구축 #3 - 보안기능 (0) | 2020.07.14 |
🔐 소프트웨어 개발 보안 구축 #2 - 입력데이터 검증 및 표현 (0) | 2020.07.14 |