시큐어코딩
- home
- 보안소식
- 시큐어코딩
14. [입력 데이터 검증 및 표현] 메모리 버퍼 오버플로우
2019.04.30 09:54
안녕하세요, 지에스인포입니다.
이번에는 행자부 개발보안 가이드라인 47개 항목 중 입력 데이터 검증 및 표현의 14번째 항목인 '메모리 버퍼 오버플로우'에 대해 알아보겠습니다.
메모리 버퍼 오버플로우는 행정자치부에서 발표한 '소프트웨어 개발보안 가이드'에 속해있는 주요 항목입니다. 분석, 설계 단계의 보안 요구항목에서는 '입력 데이터 검증 및 표현'의 '허용된 범위 내 메모리 접근'이라는 항목으로, 구현 단계 보안약점에서는 '입력 데이터 검증 및 표현'의 '메모리 버퍼 오버플로우'라는 항목으로 명시가 되어있습니다.
#메모리 버퍼 오버플로우란?
메모리 버퍼 오버플로우란, 연속된 메모리 공간을 사용하는 프로그램에서 할당되어있는 메모리의 범위를 넘어선 위치에 접근하여 자료를 읽거나 쓰려고 할 때 발생하는 보안약점입니다. 비정상적인 위치의 메모리에 접근하게 되면 프로그램의 오동작을 유발하거나, 악의적인 코드를 실행시킬 수 있어 공격자가 프로그램을 통제할 수 있는 권한을 획득할 수 있습니다.
예를 들어 살펴보겠습니다.
위의 소스 코드는 프로그램이 시작될 때 입력받은 값을 20만큼의 크기로 생성한 buffer 배열에 strcpy() 함수를 이용해 복사하고, printf() 함수를 이용해 buffer 배열을 출력하는 소스 코드입니다.
입력받은 값이 buffer의 크기보다 작은 경우라면 상관이 없을 것이지만 긴 문자열이 들어와서 buffer 배열이 할당받은 메모리 사이즈를 초과하게 된다면 메모리 버퍼 오버플로우가 발생할 수 있습니다. 메모리 버퍼 오버플로우가 발생되면 치명적인 오류와 함께 프로그램이 종료되거나, 메모리 구조를 파악하고 있는 공격자가 자신이 원하는 악의적인 행동이 담겨있는 메모리로 이동시킬 수 있어 할당받은 메모리를 넘어서는 경우가 발생하지 않도록 주의하여야 합니다.
#메모리 버퍼 오버플로우를 막기 위한 보안 대책은?
메모리 버퍼 오버플로우를 방어하기 위한 대책은 소프트웨어 개발 생명 주기에 따라 크게 두 가지로 나눌 수 있습니다.
소프트웨어 개발보안 가이드에서 제시하는 "메모리 버퍼 오버플로우"에 대한 보안 대책은 위와 같으며, 각각의 상황에 맞게 적절히 시큐어코딩을 적용하기를 권장하고 있습니다.
오늘은 "메모리 버퍼 오버플로우"에 대해 살펴봤습니다.
다음은 시큐어코딩 15번째 항목, "포맷 스트링 삽입"에 대해 알아보도록 하겠습니다.
댓글 0
본사주소 : 서울특별시 금천구 가산디지털1로 181, 가산더블유센터 1508호 COPYRIGHT ⓒ ALL RIGHT RESERVED.