티스토리 뷰

반응형

 

 

 

가. 원인

  - 객체가 Null이 될 수 없다는 가정이 위반되었을 경우 발생 

  - Null로 설정된 참조변수를 참조하는 경우

 

 

나. 영향

  - Null Pointer 역참조를 통해 발생되는 예외사항을 이용하여 추후 공격에 활용

 

 

다. 보안대책

  - Null이 될 수 있는 참조변수를 사용하기 전 Null인지 여부를 검사 후 사용

 

 

라. 안전한 코드

1. Null Pointer 검사 후 사용

 

  ...

  String user_id = request.getParameter("userID");

  if ( user_id == null ) {

     showAlert( "Input User ID" );

     break;

  } else {

     UserInfo objUserInfo = getUserInfo( user_id );

     ...

     if ( objUserInfo != null )

     {

        String userName = objUserInfo.getUserName( );

        ...

     }

     ...

  }

 

 

  public int compare( Object o1, Object o2 ) {

     // 2개의 객체가 하나라도 널일 경우 비교할 수 없음

     if ( o1 == null || o2 == null ) {

        return -2;

     }

     ...

  }

 

 

 

마. 진단방법

<Null 참조 검사>

  1. 참조변수 및 객체가 Null이 될 수 있는지 여부를 확인

  2. 참조변수 및 객체를 사용하기 전에 Null 여부를 검증하는지 확인

 

 

바. 정/오탐 케이스

<정탐 케이스>

  1. 객체를 널로 초기화 한 특정 조건에 의한 분기시점에서 사용될 경우

  2. 널로 초기화한 객체를 초기화 시 Exception이 발생하고, Exception 처리 시 NULL 체크를 하지 않을 경우

  3. 함수 리턴 결과가 NULL일수 있는 경우, 리턴값을 NULL 체크하지 않고 사용할 경우

  4. 조건절에서 NULL 체크 전에 문자열 길이 등을 체크할 경우

 

<오탐 케이스>

  1. Interface Iteration은 널을 리턴하지 않음

  2. 널을 리턴하지 않는 함수 사용 시 ( ex. new String Tokenizer() )

  3. Try~Catch 문을 사용하여 throw를 할 경우, NULL 포인트 역참조가 발생하지 않음

  4. || 조건 시 처음에 NULL을 체크할 경우 ( NULL일 경우, 뒤에는 수행하지 않으므로 )

  5. JSP에서 내장 객체를 사용할 경우 ( ${pageContext.request.context} )

  6. 클래스의 Static 함수를 호출할 경우 ( Integer.parseInt( ) )

  7. Data Flow상이 아닌 단일 함수에서 파라미터가 NULL일 경우 취약하지 않다고 판단.
    (호출하는 곳에서 체크해야 함)  ????????????????????

  8. 생성자 호출 시

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