IgnatiusHeo

구현단계 보안약점 제거 기준-오류상황 대응 부재 본문

자격/SW보안약점진단원

구현단계 보안약점 제거 기준-오류상황 대응 부재

Ignatius Heo 2023. 7. 6. 14:17

작성일: 230706

 

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

 

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

구분 - 에러처리
설계단계  
개요 오류가 발생할 수 있는 부분을 확인하였으나, 이러한 오류에 대하여 예외 처리를 하지 않을 경우, 공
격자는 오류 상황을 악용하여 개발자가 의도하지 않은 방향으로 프로그램이 동작하도록 할 수 있다.
진단 세부사항
(설계단계)
 
보안대책
(구현단계)
오류가 발생할 수 있는 부분에 대하여 제어문을 사용하여 적절하게 예외 처리(C/C++에서 if와
switch, Java에서 try-catch 등)를 한다.
진단방법
(구현단계)
오류가 발생할 수 있는 부분에 대하여 예외처리를 수행했는지 확인하고 제어문으로 예외 처리하는 루틴
이 비어있는지 확인한다.

 

다. 코드예제

 

ㅇ 분석

1: protected Element createContent(WebSession s) {
2: ……
3: try {
4: username = s.getParser().getRawParameter(USERNAME);
5: password = s.getParser().getRawParameter(PASSWORD);
6: if (!"webgoat".equals(username) || !password.equals("webgoat")) {
7: s.setMessage("Invalid username and password entered.");
8: return (makeLogin(s));
9: }
10: } catch (NullPointerException e) {
//요청 파라미터에 PASSWORD가 존재하지 않을 경우 Null Pointer Exception이 발생하고 해당
오류에 대한 대응이 존재하지 않아 인증이 된 것으로 처리
11: }

ㅇ 내용

1. 널포인터 익셉션에 대한 내용이 빠져서 저기에 뭐 추가하면 될듯

 

ㅇ 수정

1: protected Element createContent(WebSession s) {
2: ……
3: try {
4: username = s.getParser().getRawParameter(USERNAME);
5: password = s.getParser().getRawParameter(PASSWORD);
6: if (!"webgoat".equals(username) || !password.equals("webgoat")) {
7: s.setMessage("Invalid username and password entered.");
8: return (makeLogin(s));
9: }
10: } catch (NullPointerException e) {
//예외 사항에 대해 적절한 조치를 수행하여야 한다.
11: s.setMessage(e.getMessage());
12: return (makeLogin(s));
13: }

ㅇ 내용

1. 널포인터 익셉션 메세지 보내도록 함. 근데 그냥 저 메세지도 에러코드로 분류해서 보내면 안되나?

 


ㅇ 분석

1: try {
2: InvokeMtd();
3: } catch (CustomException e) {
4: //예외 상황에 대한 대응 부재
5: }

ㅇ 수정

1: try {
2: InvokeMtd();
3: } catch (CustomException e) {
//예외 상황에 대해 적절한 조치를 수행하여야 한다.
4: logger.Debug(“log message”);
5: }

ㅇ 내용

 

 

 

끝.