소프트웨어 개발 보안 구축
SW개발 보안 설계
세션통제의 개념
- 세션
- 서버와 클라이언트의 연결
- 세션통제
- 세션의 연결과 연결로 인해 발생하는 정보를 관리
- 소프트웨어 개발 과정 중 요구사항 분석 및 설계단계에서 진단해야 하는 보안 점검 내용
- 보안 약점
- 불충분한 세션 관리
- 잘못된 세션에 의한 정보 노출
- 인가된 클라이언트만 접근할 수 있도록하는 것은 기밀성에 관한 것
1. 불충분한 세션 관리
- 일정한 규칙이 존재하는 세션ID가 발급되거나 타임아웃이 너무 길게 설정되어 있는 경우 발생할 수 있는 보안 약점
- 세션 관리가 충분하지 않으면 침입자는 세션 하이재킹와 같은 공격을 통해 획득한 세션ID로 인가되지 않은 시스템의 기능을 이용하거나 중요한 정보에 접근 가능
2. 잘못된 세션에 의한 정보 노출
- 다중 스레드 환경에서 멤버 변수에 정보를 저장할 때 발생하는 보안 약점
- 싱글톤 패턴에서 발생하는 레이스 컨디션으로 인해 동기화 오류가 발생하거나, 멤버 변수의 정보가 노출
- 싱글톤
- 하나의 객체를 생성하면 생성된 객체를 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조할 수 없는 디자인 패턴
- 레이스컨디션
- 두 개 이상의 프로세스가 공용 자원을 획득하기 위해 경쟁하는 상태
- 싱글톤
- 멤버 변수보다 지역 변수를 활용하여 변수의 범위를 제한함으로써 방지
세션 설계 시 고려사항
- 시스템의 모든 페이지에서 로그아웃이 가능하도록 UI 구성
- 로그아웃 요청시 할당된 세션이 완전히 제거되도록 함
- 세션 타임아웃은 중요도 높을 시 2~5분, 낮을실 15~30분
- 이전 세션이 종료되지 않으면 새 세션이 생성되지 못하도록 설계
- 중복 로그인을 허용하지 않는 경우 클라이언트의 중복 접근에 대한 세션 관리 정책을 수립
- 패스워드 변경 시 활성화된 세션을 삭제하고 재할당
세션ID의 관리방법
- 안전한 서버에서 최소 128비트
- 예측이 불가능하도록 안전한 난수 알고리즘
- URL Rewrite기능을 사용하지 않는 방향으로 설계
- URL Rewrite
- 쿠키를 사용할 수 없는 환경에서 세션ID전달을 위해 URLL에 세션ID를 포함시키는
- URL Rewrite
- 로그인시 로그인 이전의 세션ID를 삭제하고 재할당
- 장기간 접속하고 있는 세션ID는 주기적으로 재할당되도록 설계