Notice
Recent Posts
Recent Comments
Link
IgnatiusHeo
구현단계 보안약점 제거 기준-종료되지 않는 반복문 또는 재귀 함수 본문
작성일: 230706
※ 본 게시글은 학습 목적으로 행정안전부·KISA의 소프트웨어 보안약점 진단 가이드, 소프트웨어 개발보안 가이드를 참고하여 작성하였습니다.
정리 내용: 소프트웨어 보안약점 진단 가이드(415~418p)
구분 | - 시간 및 상태 |
설계단계 | |
개요 | 재귀의 순환횟수를 제어하지 못하여 할당된 메모리나 프로그램 스택 등의 자원을 과다하게 사용하면 위험하다. 대부분의 경우, 귀납 조건(Base Case)이 없는 재귀함수는 무한 루프에 빠져 들게 되고 자원고갈을 유발함으로써 시스템의 정상적인 서비스를 제공할 수 없게 한다. |
진단 세부사항 (설계단계) |
|
보안대책 (구현단계) |
모든 재귀 호출시, 재귀 호출 횟수를 제한하거나, 초기값을 설정(상수)하여 재귀 호출을 제한해야 한다. |
진단방법 (구현단계) |
자신을 호출하는 재귀함수나 메소드가 존재하는지 식별하고, 해당 함수 내에 제어문으로 해당 함수에 서 리턴될 수 있는지 확인한다. 제어문으로 재귀함수를 빠져나올 수 있으면 안전하다. |
다. 코드예제
ㅇ 분석
1: #include <stdio.h>
2: int factorial(int i)
3: {
//재귀함수 탈출 조건을 설정하지 않아 무한루프가 된다.
4: return i * factorial(i - 1);
5: }
6: int main()
7: {
8: int num = 5;
9: int result = factorial(num);
10: printf("%d! : %d\n", num, result);
11: return 0;
12:}
ㅇ 내용
1. 리턴조건이 안나옴
ㅇ 수정
1: #include <stdio.h>
2: int factorial(int I)
3: {
//재귀함수 사용시에는 아래와 같이 탈출 조건을 사용해야 한다.
4: if (i <= 1) {
5: return 1;
6: }
7: return i * factorial(i - 1);
8: }
9: int main()
10:{
11: int num = 5;
12: int result = factorial(num);
13: printf("%d! : %d\n", num, result);
14: return 0;
15:}
ㅇ 내용
1. 리턴조건을 넣음
끝.
'자격 > SW보안약점진단원' 카테고리의 다른 글
구현단계 보안약점 제거 기준-오류상황 대응 부재 (0) | 2023.07.06 |
---|---|
구현단계 보안약점 제거 기준-오류 메시지 정보노출 (0) | 2023.07.06 |
구현단계 보안약점 제거 기준-경쟁조건: 검사 시점과 사용 시점(TOCTOU) (0) | 2023.07.06 |
구현단계 보안약점 제거 기준-반복된 인증시도 제한 기능 부재 (0) | 2023.07.06 |
구현단계 보안약점 제거 기준-무결성 검사 없는 코드 다운로드 (0) | 2023.07.06 |