자격/SW보안약점진단원

설계단계 보안설계기준-예외처리

Ignatius Heo 2023. 6. 30. 17:26

작성일: 230630

 

※ 본 게시글은 학습 목적으로 행정안전부·KISA의 소프트웨어 보안약점 진단 가이드, 소프트웨어 개발보안 가이드를 참고하여 작성하였습니다.

 

정리 내용: 소프트웨어 보안약점 진단 가이드(165~170p)

 

유형  에러처리
설계항목  예외처리
설명
 오류메시지에 중요정보(개인정보, 시스템 정보, 민감 정보 등)가 노출되거나, 부적절한 에러 및 오류처리로 인해 의도치 않은 상황이 발생하지 않도록 설계한다.

보안대책
 ① 명시적인 예외의 경우 예외처리 블럭을 이용하여 예외 발생 시 수행해야 하는 기능이 구현되어야 한다.
 
 ② 런타임 예외의 경우 입력값의 범위를 체크하여 애플리케이션이 정상적으로 동작할 수 있는 값만 사용되도록 보장해야 한다.

 ③ 에러가 발생한 경우 상세한 에러 정보가 사용자에게 노출되지 않게 해야 한다.

연관된
구현단계
- 오류 메시지 정보노출
https://cryptocurrencyclub.tistory.com/146

 

 

가. 취약점 개요

 

ㅇ 위 내용을 볼 때, 예상 가능한 보안 위협: 1.에러정보에 민감정보 노출, 2.오버/언더플로우 ?

  1. 오류 메시지 정보노출: 웹 서버에 별도의 에러페이지를 설정하지 않은 경우, 에러 메시지로 서버 데이터 정보 등 공격에 필요한 정보가 노출되는 취약점이다.
  2. 시스템 정보노출: 시스템, 관리자, DB정보 등 시스템의 내부 데이터가 공개되면, 공격자에게 또 다른 공격의 빌미를 제공하게 된다.

오류 메시지 정보 노출(출처: 소프트웨어 보안약점 진단 가이드 2021, 행정안전부·KISA)

 

나. 설계시 고려사항

 

 ① 명시적인 예외의 경우 예외처리 블럭을 이용하여 예외 발생 시 수행해야 하는 기능이 구현되어야 한다.

  ㅇ 각 프로그래밍 언어별 예외처리 문법에 대한 안전한 사용방법을 기술하고, 모든 개발자가 구현단계에서 안전하게 예외처리를 할 수 있도록 시큐어코딩 규칙을 정의한다. (ex. Java의 경우 Logger API)

 

 ② 런타임 예외의 경우 입력값의 범위를 체크하여 애플리케이션이 정상적으로 동작할 수 있는 값만 사용되도록 보장해야 한다.

  ㅇ 입력값에 따라 예외가 발생한 경우 입력값의 범위를 체크하여 사용하도록 시큐어코딩 규칙을 정의한다.

 

 ③ 에러가 발생한 경우 상세한 에러 정보가 사용자에게 노출되지 않게 해야 한다.

  • 에러가 발생한 경우 지정된 페이지로 사용자에게 에러 공지: 지정된 에러페이지로 리다이렉트 되도록 시큐어코딩 규칙을 정의하거나, 웹 애플리케이션 서버 설정하여 특정 에러나 예외사항에 대해 지정된 페이지가 사용자에게 보일 수 있도록 설계한다.
  • 사용자에게 보내지는 오류 메시지에 중요정보가 포함되지 않도록 함: 오류메시지에 중요정보가 포함되지 않도록 시큐어코딩 규칙을 정의

 

다. 진단 세부사항

 

 ① 명시적인 예외의 경우 예외처리 블럭을 이용하여 예외 발생 시 수행해야 하는 기능이 구현되어야 한다. 예외 발생을 예방하기 위해 입력값을 검증하고 예외 발생시 예외처리 블록을 이용하여 수행되어야 할 기능이 구현되도록 설계되어 있는지 확인한다.

  ㅇ  Exception 유형별 처리 방법을 정의하고 프로그램 구현시 안전한 처리 방법을 개발가이드에 정의하고 있는지 확인

      - 오류 메시지로 시스템정보가 노출되지 않도록 프로그램이 작성 되어야함

      - 예외 상황에 대해 반드시 처리되도록 프로그램이 작성되어야 함

      - 각 예외 상황에 대해 분리하여 처리하도록 프로그램이 작성되어야 함

  ㅇ  Exception 발생에 대한 로깅 정책이 설계에 반영되었는지 확인

      - Exception 발생 상황에 대해 시간, 이유 등과 같은 내용이 포함되도록 설계되어 있는지 확인

      - 로그에 포함되는 중요정보는 암호화되도록 설계되어 있는지 확인

 

 ② 런타임 예외의 경우 입력값의 범위를 체크하여 애플리케이션이 정상적으로 동작할 수 있는 값만 사용되도록 보장해야 한다. 예외 발생을 예방하기 위해 입력값을 검증하고 예외 발생 시 예외처리 블록을 이용하여 수행 되어야 할 기능이 구현되도록 설계되어 있는지 확인한다.

  ㅇ  예외가 발생 가능한 기능 구현 시 입력데이터에 대한 유효한 입력값의 범위를 검증하여 예외가 발생하지 않도록 개발가이드로 코딩 규칙을 정의하고 있는지 확인

 

 ③ 에러가 발생한 경우 상세한 에러 정보가 사용자에게 노출되지 않게 해야 한다. 에러 발생 시 오류 메시지 정보 또는 중요정보가 노출되지 않도록 설계되어 있는지 확인한다.

  ㅇ  예외 발생 시 스택정보나 중요정보가 외부로 노출되지 않도록 개발가이드에 코딩 규칙이 정의되어 있는지 확인

  ㅇ Exception 발생 시 지정된 에러페이지를 이용하여 사용자에게 예외사항 정보를 제공하도록 서버설정 계획이 설계되어 있는지 확인

      - Exception 발생에 대한 로그가 생성될 수 있도록 서버설정 계획이 설계되어 있는지 확인

 

 

 

끝.