about Security/SECURE CODING

[시간 및 상태] 종료되지 않는 반복문 또는 재귀 함수 (5등급)

saniii 2021. 8. 10. 23:17

 

0. 개요 

 

재귀의 순환횟수를 제어하지 못하여 할당된 메모리나 프로그램 스택 등의 자원을 과다하게 사용하면 위험하다.

대부분의 경우, 귀납 조건이 없는 재귀함수는 무한루프에 빠져 자원고갈을 유발하여 

시스템의 정상적인 서비스를 제공할 수 없게 한다.

 

 

 

1. 보안 대책

 

- 모든 재귀 호출 시, 재귀 호출 횟수를 제한하거나, 초기값을 설정(상수)하여 재귀호출을 제한한다.

 

 

 

 

2. 진단 방법

 

 - 재귀함수의 사용여부를 확인

 

 - 재귀함수 내의 제어문을 통해 종료가 가능한지 확인

 

 

 

3. 코드 예시

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

# 1  -  제거되지 않고 남은 디버그 코드 - 안전하지 않은 코드 예시(JAVA)

 

 

# 1  +  제거되지 않고 남은 디버그 코드 - 안전한 코드 예시(JAVA)

 

 

# 2  -  제거되지 않고 남은 디버그 코드 - 안전하지 않은 코드 예시(JAVA)

 

 

# 2  +  제거되지 않고 남은 디버그 코드 - 안전한 코드 예시(JAVA)  

 

 

 

# 3  -  제거되지 않고 남은 디버그 코드 - 안전하지 않은 코드 예시(JAVA)

 

 

 

 

# 4  -  제거되지 않고 남은 디버그 코드 - 안전하지 않은 코드 예시(JAVA)

 

 

 

 

4. 해당 취약점 CASE

 

- 함수명, 파라미터 갯수, 파라미터 자료형이 일치하는 자신을 호출하는 경우

 

 

 

#. 참고 블로그 

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

 

[구현보안] 시간 및 상태 02 - 종료되지 않은 반복문 또는 재귀함수

가. 원인 - 재귀함수의 순환횟수를 제어하지 않아 자원을 과다하게 사용하는 경우 나. 영향 - 귀납조건 없이 재귀함수를 호출하여 무한루프에 빠짐 - 자원고갈을 유발하여 정상 서비스 불가 다.

prokyhsigma.tistory.com