티스토리 뷰
가. 취약점 개요
- 일정한 규칙을 갖는 세션ID가 발급되거나, 세션 타임아웃이 너무 길게 설정된 경우, 사용자 권한도용이 가능한 취약점
→ (불충분한 세션관리)
- 다중 스레드의 싱글톤 객체에서 멤버변수 등을 통해 서로 다른 세션 간 데이터를 공유로 인해 경쟁조건 발생하는 취약점
→ 잘못된 세션에 의한 정보노출
나. 요구사항
1. 세션간 데이터가 공유되지 않도록 설계
2. 세션을 안전하게 관리
3. 세션ID를 안전하게 관리
다. 요구사항 별 고려사항
1. 세션간 데이터가 공유되지 않도록 설계
- 싱글톤 객체로 생성되는 서비스 컴포넌트 확인
- 해당 컴포넌트에 읽고 쓰기가 가능한 멤버변수, 클래스 변수를 사용하지 않도록 설계
2. 세션을 안전하게 관리
- 모든 페이지에서 로그아웃 가능하도록 UI 설계
- 로그아웃을 통해 할당된 세션을 완전히 제거 ( session.Invalidate() )
- 중요기능 세션타임 2~5분, 일반 세션타임 15~30분 설정
- 일정시간 사용하지 않은 세션은 강제삭제
- 새로운 로그인 시 기존 로그인 세션을 종료하거나 새로운 세션을 종료
- 세션ID를 사용할 경우 HttpOnly 속성 추가
- 패스워드 변경 시 현재 활성화 된 모든 세션을 삭제 후 재할당
3. 세션ID를 안전하게 관리
- 세션ID는 서버에서 생성
- 세션ID는 난수 알고리즘을 통해 예측불가능한 최소 128비트 길이로 생성
- 로그인 성공 시 할당받은 세션ID는 파기 후 새로운 값으로 재할당
- 장기간 접속되어 있는 경우, 주기적으로 세션ID를 재할당하도록 설계
라. 요구사항 별 진단기준 및 방법
0. 공통내용
- 요구사항 정의서에 보안요구항목에 대한 대책이 수립
- 아키텍쳐 설계서에 보안요구항목 적용계획이 수립
- 요구사항 추적표를 통해 요구사항 추적가능 여부
1. 세션 간 데이터가 공유되지 않도록 설계
- Servlet / Controller에서 클래스 멤버변수, 클래스 변수 사용하지 않도록 설계되었는지 확인
- JSP에서 변수선언하여 사용하지 않도록 설계되었는지 확인
2. 세션을 안전하게 관리
- 로그인 성공 후 세션을 재할당 하도록 정의하였는지 확인
- 로그아웃 시 할당된 세션을 완전히 제거하도록 정의하였는지 확인
- 사용자의 일방적인 연결종료에 대해 할당된 세션을 제거하도록 정의하였는지 확인
3. 세션ID를 안전하게 관리
- 세션ID를 서버에서 생성하도록 설계되었는지 확인
- 세션ID 전송방법을 쿠키로 제한하여 HttpOnly가 설정되도록 설계되었는지 확인
- 장시간 접속 시 주기적으로 세션ID가 재할당되도록 설계되었는지 확인
- 로그인 후 세션ID를 재할당하도록 설계되었는지 확인
마. 진단기준
1. 세션 간 데이터가 공유되지 않도록 설계
- 세션 간 데이터가 공유되지 않도록 클래스가 설계되었는지 확인
- 세션 간 데이터 공유를 점검하는 테스트 계획 확인
2. 세션을 안전하게 관리
- 세션이 안전하게 관리되도록 설계되어 있는지 확인
- 세션이 안전하게 관리되는지 점검하는 테스트 계획 확인
3. 세션ID를 안전하게 관리
- 세션ID가 안전하게 관리되도록 설계되어 있는지 확인
- 세션ID 노출여부를 점검하는 테스트 계획 확인
바. 안전한 보안설계 예
No | 요구사항 명 | 해결방안 | 검수기준 | |
1 | 세션 간 데이터 공유 예방 | 컨트롤러 컴포넌트를 상속받는 클래스에 멤버변수가 포함되지 않도록 하고, JSP페이지의 선언부에 변수를 선언하지 않도록 한다. | 컨트롤러 컴포넌트를 상속받은 클래스에 멤버변수를 포함하지 않고, JSP페이지의 선언부에 변수가 선언되지 않았다. | |
2 | 안전한 세션 관리 | 모든 화면 오른쪽 상단에 "로그아웃" 버튼을 제공하여 쉽게 로그아웃을 요청할 수 있도록 하고, 로그아웃 후 세션에 저장된 모든 정보가 삭제되도록 한다. | 오른쪽 상단에 로그아웃 버튼이 제공되고, 로그아웃 후 세션 정보가 삭제된다. | |
3 | 안전한 세션ID 관리 | 인증에 성공하면 인증 전에 할당한 세션ID를 파기하고, 세션ID를 재할당하여 전달한다. | 인증 전/후 다른 세션ID를 사용한다. |
'Web Analytics > SW 보안약점 진단원' 카테고리의 다른 글
[구현보안] 입력 데이터 검증 및 표현 02 - 경로 조작 및 자원 삽입 (0) | 2019.09.30 |
---|---|
[구현보안] 입력 데이터 검증 및 표현 01 - SQL 삽입 (0) | 2019.09.30 |
[설계보안] 에러처리 01 - 예외처리 (0) | 2019.09.29 |
[설계보안] 보안기능 08 - 중요정보 전송 (0) | 2019.09.29 |
[설계보안] 보안기능 07 - 중요정보 저장 (0) | 2019.09.29 |
- Total
- Today
- Yesterday