시큐어코딩
- home
- 보안소식
- 시큐어코딩
38. [코드오류] 부적절한 자원 해제
2019.07.17 15:22
안녕하세요, 정보보안 전문기업 지에스인포입니다.
이번에는 행안부 개발보안 가이드라인 47개 항목 중 "코드 오류"의 두 번째 항목인 '부적절한 자원 해제'에 대해 알아보겠습니다.
# 부적절한 자원 해제 : 사용된 자원을 적절히 해제하지 않아 자원 누수가 발생하여 새로운 입력을 처리 할 수 없게 되는 보안 취약점
프로그램의 자원, 예를 들면 열린 파일디스크립터(Open File Descriptor), 힙 메모리(Heap Memory), 소켓(Socket)등은 유한한 자원입니다. 이러한 자원을 할당받아 사용하게 되면, 사용 후 반드시 반환 해 주어야 하는데요. 프로그램 오류 또는 에러로 사용이 끝난 자원을 반환하지 못하게 되면 프로그램이 새로운 입력을 처리 할 수가 없는 문제가 생길 수 있습니다.
이를 방지하기 위해서는 자원을 획득하여 사용한 후 반드시 해제 해 주는 작업을 해야 하는데요.
코드예제와 함께 보시겠습니다!
'부적절한 자원 해제' 항목의 안전한 예 (JAVA)
- 소프트웨어 개발보안 가이드 (행정안전부 / 한국인터넷진흥원)
위 사례에서는 try 구문 내에서 에러가 발생 할 경우, close() 메서드가 실행되지 못합니다. 그렇게 되면 호출하여 사용한 PrinterWriter out의 자원을 반환할 수 없게 되는 것이죠.
'부적절한 자원 해제' 항목의 안전한 예 (JAVA)
- 소프트웨어 개발보안 가이드 (행정안전부 / 한국인터넷진흥원)
따라서 위처럼 예외의 발생 여부와 상관 없이 할당받은 자원을 finally 블록에서 반환하여 사용한 자원은 반드시 반환되도록 프로그램을 설계 해 주어야 합니다.
사소 해 보이지만 소스코드의 이러한 설계들 하나하나가 나중에 가면 정말 큰 문제를 방지 할 수도 있다는 점! 모두 상기하면서 오늘도 즐거운 코딩 라이프 되어보아요~
다음에도 유익한 소식으로 찾아뵙겠습니다. 감사합니다.