IgnatiusHeo

구현단계 보안약점 제거 기준-초기화되지 않은 변수 사용 본문

자격/SW보안약점진단원

구현단계 보안약점 제거 기준-초기화되지 않은 변수 사용

Ignatius Heo 2023. 7. 6. 14:59

작성일: 230704

 

※ 본 게시글은 학습 목적으로 행정안전부·KISA의 소프트웨어 보안약점 진단 가이드, 소프트웨어 개발보안 가이드를 참고하여 작성하였습니다.

 

정리 내용: 소프트웨어 보안약점 진단 가이드(459~461p)

구분 - 코드오류
설계단계  
개요 C 언어의 경우 스택 메모리에 저장되는 지역변수는 생성될 때 자동으로 초기화되지 않는다.

초기화 되지 않은 변수를 사용하게 될 경우 임의 값을 사용하게 되어 의도하지 않은 결과를 출력하거나 예상치 못한 동작을 수행할 수 있다.
진단 세부사항
(설계단계)
 
보안대책
(구현단계)
초기화되지 않은 스택 메모리 영역의 변수는 임의값이라 생각해서 대수롭지 않게 생각할 수 있으나 사실은 이전 함수에서 사용되었던 내용을 포함하고 있다.

공격자는 이러한 약점을 사용하여 메모리에 저장되어 있는 값을 읽거나 특정 코드를 실행할 수 있다.

모든 변수를 사용 전에 반드시 올바른 초기 값을 할당함으로서 이러한 문제를 예방한다.
진단방법
(구현단계)
변수의 선언과 동시에 초기화가 이루어지는지 확인한다.

C++ 언어와 같이 객체의 필드가 초기 값을 가지지 않는 경우에는 생성자로 필드의 초기화가 이루어지는지 확인한다.

이와 같은 작업이 이루어지지 않을 경우에는 기본적으로 취약하다고 판단한다.

 

다. 코드예제

 

ㅇ 분석

1: //변수의 초기값을 지정하지 않을 경우 공격에 사용 될 수 있어 안전하지 않다.
2: int x, y;
3: switch(position) {
4: case 0: x = base_position y = base_position beak;
5: case 1: x = base_position + i y = base_position - i break;
6: default: x=1; break;
7: }
8: setCursorPosition(x,y);

ㅇ 내용

1. y의 디폴트는?? + 스위치 안에 선언을??

 

ㅇ 수정

1: //변수의 초기값은 항상 지정하여야 한다.
2: int x=1, y=1;
3: switch(position) {
4: case 0: x = base_position y = base_position beak;
5: case 1: x = base_position + i y = base_position - i break;
6: default: x=1; break;
7: }
8: setCursorPosition(x,y);

ㅇ 내용

 

 

 

 

끝.