티스토리 뷰
가. 원인
- 사용 후 반드시 자원해제해야 하는 메모리 / 파일 / DB연결 / 소켓 등의 유한한 자원이 사용이후 반환되지 않을 경우
나. 영향
- 해제하지 않은 자원이 고갈되어 더 이상 할당할 수 없는 상태
- 자원해제 코드가 잘못된 루틴에 존재하여 시스템 오류 발생
다. 보안대책
- 유한한 자원은 반드시 반환되도록 제어문이나 예외처리를 작성
- 자바의 경우 반환코드는 finally 블록에 구현하여 반드시 실행되도록 작성
라. 안전한 코드
1. finally 구문에서 자원해제
... PrintWriter out = null; try { out = new PrintWriter( new FileWriter( "/read.txt" ); ... } catch (IOException e ) { ... } catch (Exception e ) { ... } finally { if( out != null ) { try { out,close( ); } catch (Exception e ) { ... } } }
|
마. 진단방법
<자원해제 확인>
1. 유한한 자원을 선언 및 사용하는 로직 확인
2. 반드시 자원해제가 되도록 구현되었는지 확인
바. 정/오탐 케이스
<정탐 케이스>
1. Catch 문 안에서 자원종료( close() ) 처리 시 예외가 다시 발생하여, 자원해제가 정상적으로 되지 않을 수 있음
<오탐 케이스>
1. Finally 절에서 Close 를 할 경우
2. 함수의 역할이 자원을 리턴하는 경우, 함수를 호출하는 쪽에서 자원을 해제해야 하므로 취약하지 않음
'Web Analytics > SW 보안약점 진단원' 카테고리의 다른 글
[구현보안] 코드오류 04 - 초기화되지 않은 변수 사용 (0) | 2019.10.07 |
---|---|
[구현보안] 코드오류 03 - 해제된 자원 사용 (0) | 2019.10.07 |
[구현보안] 코드오류 01 - Null Pointer 역참조 (0) | 2019.10.07 |
[구현보안] 에러처리 03 - 부적절한 예외 처리 (0) | 2019.10.07 |
[구현보안] 에러처리 02 - 오류 상황 대응 부재 (0) | 2019.10.07 |
- Total
- Today
- Yesterday