티스토리 뷰

반응형

 

 

 

가. 원인

  - 사용 후 반드시 자원해제해야 하는 메모리 / 파일 / 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. 함수의 역할이 자원을 리턴하는 경우, 함수를 호출하는 쪽에서 자원을 해제해야 하므로 취약하지 않음

반응형
댓글
반응형
최근에 올라온 글
Total
Today
Yesterday