설계단계 보안설계기준-예외처리
작성일: 230630
※ 본 게시글은 학습 목적으로 행정안전부·KISA의 소프트웨어 보안약점 진단 가이드, 소프트웨어 개발보안 가이드를 참고하여 작성하였습니다.
정리 내용: 소프트웨어 보안약점 진단 가이드(165~170p)
유형 | 에러처리 |
설계항목 | 예외처리 |
설명 | 오류메시지에 중요정보(개인정보, 시스템 정보, 민감 정보 등)가 노출되거나, 부적절한 에러 및 오류처리로 인해 의도치 않은 상황이 발생하지 않도록 설계한다. |
보안대책 | ① 명시적인 예외의 경우 예외처리 블럭을 이용하여 예외 발생 시 수행해야 하는 기능이 구현되어야 한다. ② 런타임 예외의 경우 입력값의 범위를 체크하여 애플리케이션이 정상적으로 동작할 수 있는 값만 사용되도록 보장해야 한다. ③ 에러가 발생한 경우 상세한 에러 정보가 사용자에게 노출되지 않게 해야 한다. |
연관된 구현단계 |
- 오류 메시지 정보노출 https://cryptocurrencyclub.tistory.com/146 |
가. 취약점 개요
ㅇ 위 내용을 볼 때, 예상 가능한 보안 위협: 1.에러정보에 민감정보 노출, 2.오버/언더플로우 ?
- 오류 메시지 정보노출: 웹 서버에 별도의 에러페이지를 설정하지 않은 경우, 에러 메시지로 서버 데이터 정보 등 공격에 필요한 정보가 노출되는 취약점이다.
- 시스템 정보노출: 시스템, 관리자, DB정보 등 시스템의 내부 데이터가 공개되면, 공격자에게 또 다른 공격의 빌미를 제공하게 된다.
나. 설계시 고려사항
① 명시적인 예외의 경우 예외처리 블럭을 이용하여 예외 발생 시 수행해야 하는 기능이 구현되어야 한다.
ㅇ 각 프로그래밍 언어별 예외처리 문법에 대한 안전한 사용방법을 기술하고, 모든 개발자가 구현단계에서 안전하게 예외처리를 할 수 있도록 시큐어코딩 규칙을 정의한다. (ex. Java의 경우 Logger API)
② 런타임 예외의 경우 입력값의 범위를 체크하여 애플리케이션이 정상적으로 동작할 수 있는 값만 사용되도록 보장해야 한다.
ㅇ 입력값에 따라 예외가 발생한 경우 입력값의 범위를 체크하여 사용하도록 시큐어코딩 규칙을 정의한다.
③ 에러가 발생한 경우 상세한 에러 정보가 사용자에게 노출되지 않게 해야 한다.
- 에러가 발생한 경우 지정된 페이지로 사용자에게 에러 공지: 지정된 에러페이지로 리다이렉트 되도록 시큐어코딩 규칙을 정의하거나, 웹 애플리케이션 서버 설정하여 특정 에러나 예외사항에 대해 지정된 페이지가 사용자에게 보일 수 있도록 설계한다.
- 사용자에게 보내지는 오류 메시지에 중요정보가 포함되지 않도록 함: 오류메시지에 중요정보가 포함되지 않도록 시큐어코딩 규칙을 정의
다. 진단 세부사항
① 명시적인 예외의 경우 예외처리 블럭을 이용하여 예외 발생 시 수행해야 하는 기능이 구현되어야 한다. 예외 발생을 예방하기 위해 입력값을 검증하고 예외 발생시 예외처리 블록을 이용하여 수행되어야 할 기능이 구현되도록 설계되어 있는지 확인한다.
ㅇ Exception 유형별 처리 방법을 정의하고 프로그램 구현시 안전한 처리 방법을 개발가이드에 정의하고 있는지 확인
- 오류 메시지로 시스템정보가 노출되지 않도록 프로그램이 작성 되어야함
- 예외 상황에 대해 반드시 처리되도록 프로그램이 작성되어야 함
- 각 예외 상황에 대해 분리하여 처리하도록 프로그램이 작성되어야 함
ㅇ Exception 발생에 대한 로깅 정책이 설계에 반영되었는지 확인
- Exception 발생 상황에 대해 시간, 이유 등과 같은 내용이 포함되도록 설계되어 있는지 확인
- 로그에 포함되는 중요정보는 암호화되도록 설계되어 있는지 확인
② 런타임 예외의 경우 입력값의 범위를 체크하여 애플리케이션이 정상적으로 동작할 수 있는 값만 사용되도록 보장해야 한다. 예외 발생을 예방하기 위해 입력값을 검증하고 예외 발생 시 예외처리 블록을 이용하여 수행 되어야 할 기능이 구현되도록 설계되어 있는지 확인한다.
ㅇ 예외가 발생 가능한 기능 구현 시 입력데이터에 대한 유효한 입력값의 범위를 검증하여 예외가 발생하지 않도록 개발가이드로 코딩 규칙을 정의하고 있는지 확인
③ 에러가 발생한 경우 상세한 에러 정보가 사용자에게 노출되지 않게 해야 한다. 에러 발생 시 오류 메시지 정보 또는 중요정보가 노출되지 않도록 설계되어 있는지 확인한다.
ㅇ 예외 발생 시 스택정보나 중요정보가 외부로 노출되지 않도록 개발가이드에 코딩 규칙이 정의되어 있는지 확인
ㅇ Exception 발생 시 지정된 에러페이지를 이용하여 사용자에게 예외사항 정보를 제공하도록 서버설정 계획이 설계되어 있는지 확인
- Exception 발생에 대한 로그가 생성될 수 있도록 서버설정 계획이 설계되어 있는지 확인
끝.