본문 바로가기
about Security/SECURE CODING

[코드오류] NULL Pointer 역참조 (5등급)

by saniii 2021. 8. 10.

 

0. 개요 

 

널 포인터(Null Pointer) 역참조는 '일반적으로 그 객체가 널(Null)이 될 수 없다.' 라는 가정을 위반했을 때 발생한다.

공격자가 의도적으로 널 포인터 역참조를 발생시키는 경우,

그 결과로 발생하는 예외 상황을 이용하여 추후의 공격을 계획하는 데 사용될 수 있다.

 

* Null 역참조 : 프로그램에서 객체가 생성되면 메모리 공간에 할당되어 저장되고

                       이 객체의 값을 불러오기 위해서는 객체가 저장된 메모리의 위치주소가 필요하다.

 

                       이때 객체가 Null인 경우에는 객체가 없는 것으로 간주되어

                       메모리에 저장되지도, 저장된 주소값도 존재하지 않게 된다.

                       이런 상황에서 Null 인 객체를 호출하면 불러올 주소값이 존재하지 않아

                       프로그램이 정상적으로 작동할 수 없게 된다.

 

 

 

1. 보안 대책

 

- Null 이 될 수 있는 레퍼런스는 참조하기 전에 Null 값인지를 검사하여 안전한 경우에만 사용한다.

 

 

 

2. 진단 방법

 

 - 참조변수 및 객체가 Null이 될 수 있는지 확인한다.

 

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

 

 

 

3. 코드 예시

 

# 1  -  NULL Pointer 역참조 - 안전하지 않은 코드 예시(JAVA)

소프트웨어 개발보안 가이드 (2019.11) / 행정안전부 & 한국인터넷진흥원

objnull이고, eltnull이 아닌 경우 널(Null) 포인터 역참조가 발생한다.

 

>> objnull인지 검사 후 참조하자.

 

# 1  +  NULL Pointer 역참조 - 안전한 코드 예시(JAVA)

소프트웨어 개발보안 가이드 (2019.11) / 행정안전부 & 한국인터넷진흥원

 

 

 

# 2  -  NULL Pointer 역참조 - 안전하지 않은 코드 예시(JAVA)

소프트웨어 개발보안 가이드 (2019.11) / 행정안전부 & 한국인터넷진흥원

request.getParameter에 의해 null이 들어오게 되면 널(Null) 포인터 역참조가 발생한다.

 

>> null을 가질 수 있는 참조 변수를 사용해 객체의 속성이나 메소드를 사용하는 경우 null 검사를 수행한 뒤 사용하자.

 

# 2  +  NULL Pointer 역참조 - 안전한 코드 예시(JAVA)  

소프트웨어 개발보안 가이드 (2019.11) / 행정안전부 & 한국인터넷진흥원

 

 

 

 

4. 해당 취약점 CASE

 

- 객체를 Null로 초기화 한 특정 조건에 의한 분기시점에서 사용

 

- Null 로 초기화한 객체를 초기화 시  Exception이 발생하고, Exception 처리 시 Null 체크를 하지 않음

 

- 함수 리턴 결과가 Null일 수 있는 경우, 리턴값을 Null 체크하지 않고 사용

 

- 조건절에서 Null 체크 전에 문자열 길이 등을 체크할 경우

 

 

 

#. 참고 블로그 

https://prokyhsigma.tistory.com/74?category=848515 

 

[구현보안] 코드오류 01 - Null Pointer 역참조

가. 원인 - 객체가 Null이 될 수 없다는 가정이 위반되었을 경우 발생 - Null로 설정된 참조변수를 참조하는 경우 나. 영향 - Null Pointer 역참조를 통해 발생되는 예외사항을 이용하여 추후 공격에 활

prokyhsigma.tistory.com

 

댓글