시큐어코딩
- home
- 보안소식
- 시큐어코딩
39. [코드오류] 해제 된 자원 사용
2019.07.24 13:10
안녕하세요! 신뢰, 정직, 가치를 중시하는 정보보호 전문기업 지에스인포입니다 ^^
오늘은 행안부 SW 개발보안가이드 보안취약점 중 '해제된 자원 사용'에 대한 시큐어코딩을 함께 공부 해 보도록 하겠습니다.
# 해제 된 자원 사용 : 해제 된 자원을 참조하여 예기치 않은 오류가 발생 될 수 있는 보안 취약점
지난주 공부 해 본 보안 취약점은 '부적절한 자원 해제' 항목이었습니다. 메모리 등의 자원을 사용한 뒤 적절하게 해제 해 주지 않으면 시스템의 자원이 과부하가 걸려 프로그램 작동에 오류가 생길 수 있다는 보안취약점이었는데요.
이번에는 그 반대의 경우로 이미 해제 된 자원을 프로그램에서 호출 할 때 나타날 수 있는 보안취약점의 경우입니다.
이 보안취약점의 경우는 특히 C 언어 프로그래밍을 할 때 주의해야 하는데요. C언어에서 동적으로 할당 된 메모리를 해제 한 후 그 메모리를 참조하고 있던 포인터를 참조 추적이나 형 변환, 수식에서의 피연산자 등으로 사용하여 해제된 메모리에 접근하도록 해서는 안 됩니다.
무슨 얘기인지 코드 예제와 함게 보시겠습니다!
위 소스코드를 보면 동적 변수 temp에 할당된 동적 메모리를 해제 후 다시 사용하고 있습니다.
이 경우 예상치 못한 임의의 프로그램이 수행되는 취약점을 유발 할 수 있게 되는데요.
따라서 아래와 같이 시큐어코딩을 해 주어야합니다.
이 예제를 보면 메모리를 해제하기 전에 할당된 메모리를 사용하는 작업을 수행한 후 최종적 단계에서 메모리를 해제 해 주고 있습니다.
이렇게 자원의 사용이 완전히 끝난 후 자원 해제를 해 주고, 자원 해제가 된 뒤에는 더 이상 해당 자원을 호출하지 않도록 프로그램의 로직을 설계해야 한다는 것이죠.
한 가지 더 예시를 보시겠습니다! 이번에는 해제 후 사용과 관련 된 안전하지 않은 코드의 예입니다.
이 예시에서는 문자형으로 동적 할당 된 메모리를 참조하는 포인터와 정수형 변수 data_type이 사용되고 있습니다. 여기에서 만약 data_type 값이 val_1과 동일하면서 동시에 val_2와도 동일한 값이 된다면, 두 번째 조건문에서 이중 해제 문제가 발생하게 되는 것이지요.
그렇다면 이 경우에는 어떻게 해결 해 주어야 할까요? 바로 아래와 같이 Null을 사용하는 기법으로 시큐어코딩을 해 주면 됩니다.
보시는 바와 같이 동적 할당된 포인터를 해제 한 후에 NULL 값으로 설정함으로써 동일한 메모리 할당에 대해서는 한 번만 해제하도록 해 주면 이중 해제 문제를 방지 할 수 있게 됩니다.
어때요? 복잡 해 보이지만 의외로 간단한 코딩 기법으로 보안취약점을 미연에 방지 할 수 있다는 사실!
아는 것이 힘이다 라는 만고불변의 진리는 코딩세계에서도 똑같이 통한답니다.
그러니 소중한 안전한 정보보호를 위해서도, 보다 질 좋고 완성도 있는 프로그램을 설계하게 위해서도 시큐어코딩은 이제 선택이 아닌 필수적으로 알아야 하는 기본상식이라는 것!
시큐어코딩이 어렵다구요? 시큐어코딩을 배우고 싶은데 잘 모르시겠다구요?
그럴 땐 언제든지 저희 지에스인포의 문을 두드려주세요~!
저희 (주)지에스인포는 행정안전부에서 발급하는 시큐어코딩 전문가 자격인 'SW개발보안진단원'의 자격을 가진 보안 전문가가 국정원의 CC인증을 받은 시큐어코딩 전문 도구와 함께 직접 여러분의 SW 보안취약성을 점검 해 드리고 컨설팅을 해 드리고 있으니까요 +_+
또한 개발자나 보안담당자를 대상으로 한 시큐어코딩 교육도 필요한 분야의 눈높이에 맞춰 맞춤형 교육을 제공 해 드리고 있으니 시큐어코딩에 대해 배워보고 싶으신 분들도 언제든 저희 지에스인포의 문을 두드려주세요~
오늘은 '해제 된 자원 사용'이라는 보안취약점에 대해 공부 해 보았습니다.
다음번에도 피가 되고 살이 되는 보안 소식으로 찾아뵙는 지에스인포 되겠습니다! ^^