본문 바로가기
about Security/SECURE CODING

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

by saniii 2021. 8. 10.

 

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

 

댓글