반응형
https://www.kisa.or.kr/public/laws/laws3.jsp
구현 단계 시큐어코딩 가이드 - 코드오류 - 초기화되지 않은 변수 사용
가. 개요
- C 언어의 경우 스택 메모리에 저장되는 지역변수는 생성될 때 자동으로 초기화되지 않는다. 초기화되지 않은 변수를 사용하게 될 경우 임의 값을 사용하게 되어 의도하지 않은 결과를 출력하거나 예상 치 못한 동작을 수행할 수 있다.
나. 보안대책
- 초기화되지 않은 스택 메모리 영역의 변수는 임의값이라 생각해서 대수롭지 않게 생각할 수 있으나 사실은 이전 함수에서 사용되었던 내용을 포함하고 있다. 공격자는 이러한 약점을 사용하여 메모리에 저장되어 있는 값을 읽거나 특정 코드를 실행할 수 있다. 모든 변수를 사용 전에 반드시 올바른 초기 값을 할당함으로써 이러한 문제를 예방한다.
다. 코드예제
C
더보기
다음 코드는 커서의 위치를 정하는 프로그램이다. switch문 안에서 초기화를 수행하도록 구현이 되어 있으나, default 부분에서 변수 x만 초기화하고 변수 y는 초기화되지 않았으므로 이 함수가 수행되기 전에 공격자가 이 변수에 원하는 값을 저장해 놓는다면 서비스 거부 공격도 가능하다.
아래의 예제는 switch 문 안에 case 항목으로 존재하던 초기화 구문을 switch문 밖으로 꺼내어 변수를 올바르게 초기화하고 있으므로 안전하다.
참고자료
- CWE-457, Use of Uninitialized Variable, MITRE,
http://cwe.mitre.org/data/definitions/457.html - Do not read uninitialized memory, CERT,
http://www.securecoding.cert.org/confluence/display/c/EXP33-C.+Do+not+read+uninitialized+memory - Uninitialized Variable, OWASP,
https://www.owasp.org/index.php/Uninitialized_variable
반응형
'공부 > KISA' 카테고리의 다른 글
제거되지 않고 남은 디버그 코드 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.22 |
---|---|
잘못된 세션에 의한 데이터 정보노출 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.22 |
해제된 자원 사용 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.22 |
부적절한 자원 해제 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.22 |
Null Pointer 역참조 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.22 |
댓글