티스토리 뷰
가. 원인
- 객체가 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. 생성자 호출 시
'Web Analytics > SW 보안약점 진단원' 카테고리의 다른 글
[구현보안] 코드오류 03 - 해제된 자원 사용 (0) | 2019.10.07 |
---|---|
[구현보안] 코드오류 02 - 부적절한 자원 해제 (0) | 2019.10.07 |
[구현보안] 에러처리 03 - 부적절한 예외 처리 (0) | 2019.10.07 |
[구현보안] 에러처리 02 - 오류 상황 대응 부재 (0) | 2019.10.07 |
[구현보안] 에러처리 01 - 오류 메시지를 통한 정보 노출 (0) | 2019.10.07 |
- Total
- Today
- Yesterday