가. 취약점 개요
사례1 : 오류 메시지 정보노출
웹 서버에 별도의 에러페이지를 설정하지 않은 경우, 에러 메시지로 서버 데이터 정보 등 공격에 필요 한 정보가 노출되는 취약점이다.
사례2 : 시스템 정보노출
시스템, 관리자, DB정보 등 시스템의 내부 데이터가 공개되면, 공격자에게 또 다른 공격의 빌미를 제공하게 된다.
나. 설계시 고려사항
① 명시적인 예외의 경우 예외처리 블럭을 이용하여 예외 발생시 수행해야 하는 기능이 구현 되도록 해야 한다.
각 프로그래밍 언어별 예외처리 문법에 대한 안전한 사용방법을 기술하고, 모든 개발자가 구현 단계에서 안전하게 예외처리를 할 수 있도록 시큐어코딩 규칙을 정의한다.
[예시] 자바 플랫폼 사용시
프로그램에서 발생된 에러 정보를 로깅하는 Logger API를 활용할 수 있도록 시큐어코딩 규칙을 정의한다
② 런타임 예외의 경우 입력 값의 범위를 체크하여 애플리케이션이 정상적으로 동작할 수 있는 값만 사용되도록 보장해야 한다.
입력값에 따라 예외가 발생 가능한 경우 입력 값의 범위를 체크하여 사용하도록 시큐어코딩 규칙을 정의한다.
③ 에러가 발생한 경우 상세한 에러 정보가 사용자에게 노출되지 않게 해야 한다.
(ㄱ) 에러가 발생한 경우 지정된 페이지로 사용자에게 에러 공지.
에러가 발생한 경우 프로그램 내에서 지정된 에러페이지로 리다이렉트 되도록 시큐어코딩 규칙을 정의하거나, 웹 애플리케이션 서버 설정하여 특정 에러나 예외사항에 대해 지정된 페이지가 사 용자에게 보일 수 있도록 설계한다.
[예시] web.xml 파일을 이용하여 에러시 지정된 페이지 응답
<!‐‐ error 페이지 ‐‐>
<error‐page>
<error‐code>404</error‐code>
<location>/WEB‐INF/jsp/common/error/404error.jsp</location>
</error‐page>
<error‐page>
<error‐code>500</error‐code>
<location>/WEB‐INF/jsp/common/error/500error.jsp</location>
</error‐page>
<error‐page>
<exception‐type>java.lang.Throwable</exception‐type>
<location>/WEB‐INF/jsp/common/error/error.jsp</location>
</error‐page>
(ㄴ) 사용자에게 보내지는 오류 메시지에 중요정보가 포함되지 않도록 함.
오류 메시지에 중요정보(개인정보, 시스템정보, 민감정보 등)가 포함되지 않도록 시큐어코딩 규칙을 정의한다.
다. 진단 세부사항
요구사항
① 명시적인 예외의 경우 예외처리 블럭을 이용하여 예외 발생 시 수행해야 하는 기능이 구현되도록 해야 한다. 예외 발생을 예방하기 위해 입력값을 검증하고 예외 발생시 예외처리 블록을 이용하여 수행되어야 할 기능이 구현되도록 설계되어 있는지 확인한다.
진단기준
1. 프로그램 작성시 명시적인 Exception 상황을 안전하게 처리하도록 설계되어 있는가?
2. 안전한 예외처리를 점검하는 테스트계획이 수립되어 있는가?
요구사항
② 런타임 예외의 경우 입력값의 범위를 체크하여 애플리케이션이 정상적으로 동작할 수 있는 값만 사용 되도록 보장해야 한다.
예외 발생을 예방하기 위해 입력값을 검증하고 예외 발생시 예외처리 블록을 이용하여 수행 되어야 할 기능이 구현되도록 설계되어 있는지 확인한다.
진단기준
1. 프로그램 실행시 발생되는 Runtime Exception이 안전하게 처리되도록 설계되어 있는가?
2. 안전한 예외처리를 점검하는 테스트계획이 수립되어 있는가?
[테스트 문제]
문제: 보안대책을 서술하시오.
1. 명시적인 예외의 경우 예외처리 블록을 이용
2. 런타임 예외의 경우 입력값 범위를 체크
3. 사용자에게 에러 정보를 노출되지 않도록 조치
다. 진단 세부사항
요구사항
① 명시적인 예외의 경우 (ㄱ)을 이용하여 예외 발생 시 수행해야 하는 기능이 구현되도록 해야 한다. 예외 발생을 예방하기 위해 입력값을 검증하고 예외 발생시 예외처리 블록을 이용하여 수행되어야 할 기능이 구현되도록 설계되어 있는지 확인한다.
진단기준
1. 프로그램 작성시 명시적인 (ㄴ) 상황을 안전하게 처리하도록 설계되어 있는가?
2. 안전한 예외처리를 점검하는 테스트계획이 수립되어 있는가?
요구사항
② 런타임 예외의 경우 입력값의 범위를 체크하여 애플리케이션이 정상적으로 동작할 수 있는 값만 사용 되도록 보장해야 한다.
예외 발생을 예방하기 위해 입력값을 검증하고 예외 발생시 예외처리 블록을 이용하여 수행 되어야 할 기능이 구현되도록 설계되어 있는지 확인한다.
진단기준
1. 프로그램 실행시 발생되는 (ㄷ)이 안전하게 처리되도록 설계되어 있는가?
2. 안전한 예외처리를 점검하는 테스트계획이 수립되어 있는가?
정답
ㄱ: 예외처리 블럭
ㄴ: Exception
ㄷ: Runtime Exception