Notice
Recent Posts
Recent Comments
Link
IgnatiusHeo
구현단계 보안약점 제거 기준-초기화되지 않은 변수 사용 본문
작성일: 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);
ㅇ 내용
끝.
'자격 > SW보안약점진단원' 카테고리의 다른 글
구현단계 보안약점 제거 기준-잘못된 세션에 의한 데이터 정보 노출 (0) | 2023.07.06 |
---|---|
구현단계 보안약점 제거 기준-신뢰할 수 없는 데이터의 역직렬화 (0) | 2023.07.06 |
구현단계 보안약점 제거 기준-해제된 자원 사용 (0) | 2023.07.06 |
구현단계 보안약점 제거 기준-부적절한 자원 해제 (0) | 2023.07.06 |
구현단계 보안약점 제거 기준-Null Pointer 역참조 (0) | 2023.07.06 |