시큐어코딩
- home
- 보안소식
- 시큐어코딩
36. [에러처리] 부적절한 예외 처리
2019.07.12 16:24
안녕하세요. 자나깨나 소중한 정보보호를 최고로 생각하는 지에스인포입니다!
장마철이라서 날씨가 조금 꿀꿀한 요즘이지요. 그래도 장맛비가 농민들에겐 소중한 생명수 역할을 해 줄 것이라 기대하며, 오늘도 힘차게 하루를 시작해 보아요! ^^
오늘 공부 해 볼 항목은 행안부 SW 개발보안가이드의 36번째 항목인 '부절적한 예외처리'입니다.
분석 및 설계 단계 보안요구항목과 구현 단계 47개 보안약점 기준
- 소프트웨어 개발보안 가이드 (행정안전부 / 한국인터넷진흥원)
# 부적절한 예외 처리 : 프로그램 수행 중에 함수의 결과값에 대한 적절한 처리 또는 예외상황에 대한 조건을 적절하게 검사하지 않을 경우, 예기치 않은 문제를 야기 할 수 있는 보안 취약점
지난번에는 '오류 상황 대응 부재' 보안취약점을 배워보았는데요. 오늘 배워 볼 항목은 지난번 항목과 비슷한 맥락인 부적절한 예외 처리입니다. 프로그램 설계시, 예외 상황에 대해 대응하는 로직을 설계하지 않는 것도 문제지만, 부적절하게 처리하는 것 역시 문제라는 것이죠.
프로그램은 예외상황에 대한 로직이 탄탄하게 설계되어 있지 않으면, 예외상황 발생시 큰 보안상 문제가 생길 수 있기 때문입니다. 따라서 SW 개발 단계에서부터 값을 반환하는 모든 함수의 결과값을 검사하여 그 값이 의도했던 값인지 확인하고, 예외 처리를 사용하는 경우에는 광범위한 예외처리 대신 구체적인 예외 처리를 수행해야 합니다.
무슨 말인지 모르겠다구요? 코드예제를 함께 보시죠!
'부적절한 예외 처리' 항목의 위험한 예 (JAVA)
- 소프트웨어 개발보안 가이드 (행정안전부 / 한국인터넷진흥원)
위의 예제는 try 블록에서 다양한 예외가 발생 할 수 있음에도 불구하고 예외를 세분화하지 않고 하나로 뭉뚱그려서 광범위한 예외 클래스인 Exception 으로 처리하고 있습니다. 이렇게 되면 예외상황이 여러가지 종류가 일어날 수 있음에도 각각의 예외 상황에 대해서 적절한 조치가 이루어질 수 없게 되지요.
따라서 아래와 같이 수정 해 주어야 합니다.
'부적절한 예외 처리' 항목의 안전한 예 (JAVA)
- 소프트웨어 개발보안 가이드 (행정안전부 / 한국인터넷진흥원)
위 예제는 발생 가능한 예외를 세분화하고 그 순서에 따라서 각각에 맞게 예외처리를 해 주고 있는데요.
이렇게 하면 프로그램이 실행 중에 에러가 발생해도 그에 대해 적절히 대응해서 보안상 문제가 생기는 것을 방지 할 수 있겠죠? ㅎㅎ
한 가지 예시를 더 보시겠습니다.
'부적절한 예외 처리' 항목의 위험한 예 (JAVA)
- 소프트웨어 개발보안 가이드 (행정안전부 / 한국인터넷진흥원)
위 예제는 파일을 처리하는 과정에서 에러상황이 발생 했을 때 예외처리를 Exception 하나의 경우로만 통합해서 처리하고 있습니다. 파일을 처리하는 과정에서도 다양한 원인의 오류가 있을 수 있는데요, 이렇게 뭉뚱그려서 '파일 처리 오류' 라고만 예외처리를 하게 되면 정확한 원인을 파악하고 대응하기가 어려워지겠죠?
'부적절한 예외 처리' 항목의 안전한 예 (JAVA)
- 소프트웨어 개발보안 가이드 (행정안전부 / 한국인터넷진흥원)
따라서 위 경우처럼 파일처리 과정에서 일어날 수 있는 예외상황들을 종류별로 세분화해서 그에 따른 예외처리 방법을 구체적으로 지정 해 주는 것이 좋습니다. 이렇게 하면 어떤 에러가 일어났는지 정확히 파악할 수 있고, 그에 대한 적절한 대응을 할 수 있게 되니까요!
오늘까지 SW 개발보안가이드의 '에러처리' 항목을 모두 배워보았습니다.
안전한 SW를 개발하기 위해서는 오류 상황에 대한 대응로직이 정확하고 충분하게 설계되어야 한다는 사실, 모두 충분히 납득하셨죠?
예외상황에 대한 예외처리는 재난이 발생했을 때 비상구와도 같다는 것을 명심하고, 모두 오늘도 안전한 SW 개발을 해 BoA요~!!
그럼 다음에도 새로운 보안취약점 항목과 함께 찾아 뵙겠습니다. 정보보안기업의 세계 최고가 되는 그 날까지 달려가는 보안전문기업, 지에스인포였습니다!