Notice
Recent Posts
Recent Comments
Link
IgnatiusHeo
구현단계 보안약점 제거 기준-오류 메시지 정보노출 본문
작성일: 230706
※ 본 게시글은 학습 목적으로 행정안전부·KISA의 소프트웨어 보안약점 진단 가이드, 소프트웨어 개발보안 가이드를 참고하여 작성하였습니다.
정리 내용: 소프트웨어 보안약점 진단 가이드(419~424p)
구분 | - 에러처리 |
설계단계 | - 예외처리 https://cryptocurrencyclub.tistory.com/108 |
개요 | 응용프로그램이 실행환경, 사용자 등 관련 데이터에 대한 민감한 정보를 포함하는 오류 메시지를 생성하여 외부에 제공하는 경우, 공격자의 악성 행위를 도울 수 있다. 예외발생시 예외이름이나 스택 트레이스를 출력하는 경우, 프로그램 내부구조를 쉽게 파악할 수 있기 때문이다. |
진단 세부사항 (설계단계) |
① 명시적인 예외의 경우 예외처리 블럭을 이용하여 예외 발생 시 수행해야 하는 기능이 구현되어야 한다. 예외 발생을 예방하기 위해 입력값을 검증하고 예외 발생시 예외처리 블록을 이용하여 수행되어야 할 기능이 구현되도록 설계되어 있는지 확인한다. ㅇ Exception 유형별 처리 방법을 정의하고 프로그램 구현시 안전한 처리 방법을 개발가이드에 정의하고 있는지 확인 - 오류 메시지로 시스템정보가 노출되지 않도록 프로그램이 작성 되어야함 - 예외 상황에 대해 반드시 처리되도록 프로그램이 작성되어야 함 - 각 예외 상황에 대해 분리하여 처리하도록 프로그램이 작성되어야 함 ㅇ Exception 발생에 대한 로깅 정책이 설계에 반영되었는지 확인 - Exception 발생 상황에 대해 시간, 이유 등과 같은 내용이 포함되도록 설계되어 있는지 확인 - 로그에 포함되는 중요정보는 암호화되도록 설계되어 있는지 확인 ② 런타임 예외의 경우 입력값의 범위를 체크하여 애플리케이션이 정상적으로 동작할 수 있는 값만 사용되도록 보장해야 한다. 예외 발생을 예방하기 위해 입력값을 검증하고 예외 발생 시 예외처리 블록을 이용하여 수행 되어야 할 기능이 구현되도록 설계되어 있는지 확인한다. ㅇ 예외가 발생 가능한 기능 구현 시 입력데이터에 대한 유효한 입력값의 범위를 검증하여 예외가 발생하지 않도록 개발가이드로 코딩 규칙을 정의하고 있는지 확인 ③ 에러가 발생한 경우 상세한 에러 정보가 사용자에게 노출되지 않게 해야 한다. 에러 발생 시 오류 메시지 정보 또는 중요정보가 노출되지 않도록 설계되어 있는지 확인한다. ㅇ 예외 발생 시 스택정보나 중요정보가 외부로 노출되지 않도록 개발가이드에 코딩 규칙이 정의되어 있는지 확인 ㅇ Exception 발생 시 지정된 에러페이지를 이용하여 사용자에게 예외사항 정보를 제공하도록 서버설정 계획이 설계되어 있는지 확인 - Exception 발생에 대한 로그가 생성될 수 있도록 서버설정 계획이 설계되어 있는지 확인 |
보안대책 (구현단계) |
오류 메시지는 정해진 사용자에게 유용한 최소한의 정보만 포함하도록 한다. 소스코드에서 예외상황은 내부적으로 처리하고 사용자에게 민감한 정보를 포함하는 오류를 출력하지 않도록 미리 정의된 메시지를 제공하도록 설정한다. |
진단방법 (구현단계) |
해당 취약점에서 시스템 환경, 유저정보, 민감한 정보 등에 대한 기준을 정적도구가 판단하기 어려움에 따라 진단원이 출력함수 등으로 외부에 출력되는 값 중 민감한 정보 등을 판단할 필요가 있다. ① 오류메시지를 출력하는 경우 해당오류에 시스템 환경, 유저정보, 데이터 등 민감한 정보가 포함되어 있는지 확인한다. |
다. 코드예제
ㅇ 분석
1: try {
2: rd = new BufferedReader(new FileReader(new File(filename)));
3: } catch(IOException e) {
// 에러 메시지로 스택 정보가 노출됨
4: e.printStackTrace();
5: }
1: } catch(IOException e) {
// 오류발생시 화면에 출력된 시스템 정보로 다른 공격의 빌미를 제공한다.
2: System.err.print(e.getMessage());
3: }
ㅇ 내용
1. 직접적인 에러메시지를 출력하지 말고 관련된 정보를 보여줌으로써 정보 노출 최소화
ㅇ 수정
1: try {
2: rd = new BufferedReader(new FileReader(new File(filename)));
3: } catch(IOException e) {
// 에러 코드와 정보를 별도로 정의하고 최소 정보만 로깅
4: logger.error("ERROR-01: 파일 열기 에러");
5: }
ㅇ 내용
1. 따로 에러에 대한 식별번호나 코드를 만들어서 분류하는 걸로 보임
ㅇ 분석
1: try
2: {
3: //do something
4: }
5: catch (CustomException e)
6: {
7: Console.WriteLine(e);
8: }
ㅇ 내용
1. 익셉션에 대한 콘솔 내용이 그대로 노출됨
ㅇ 수정
1: try
2: {
3: //do something
4: }
5: catch (CustomException e)
6: {
7: _log.Debug(“ERROR-01 : error information”);
8: }
ㅇ 내용
1. 에러코드로 변경
끝.
'자격 > SW보안약점진단원' 카테고리의 다른 글
구현단계 보안약점 제거 기준-부적절한 예외 처리 (0) | 2023.07.06 |
---|---|
구현단계 보안약점 제거 기준-오류상황 대응 부재 (0) | 2023.07.06 |
구현단계 보안약점 제거 기준-종료되지 않는 반복문 또는 재귀 함수 (0) | 2023.07.06 |
구현단계 보안약점 제거 기준-경쟁조건: 검사 시점과 사용 시점(TOCTOU) (0) | 2023.07.06 |
구현단계 보안약점 제거 기준-반복된 인증시도 제한 기능 부재 (0) | 2023.07.06 |