🔐 소프트웨어 개발 보안 구축 #7 - 코드오류

2020. 7. 14. 16:01컴퓨터언어/소프트웨어공학

728x90
반응형

 

👍 코드오류란?

 

소프트웨어 "구현"단계에서 개발자들이 코딩 중 실수하기 쉬운 형(Type)변환, 자원반환 등의 오류를 예방하기 위한 보안점검 항목

 

다음은 코드오류로 발생할 수 있는 보안약점이다.

 

👊 널포인터(포인터에 Null이 저장되어 어떠한 곳도 가라키지 못하는 상태의 요소) 역참조

보통 많은 라이브러리 함수들은 오류가 발생할 경우 Null을 반환하는데, 이를 포인터로 참조하는 경우 발생하는 오류다.

대부분의 운영체제에서 널포인터는 메모리의 첫주소를 가리키는데, 이는 소프트웨어의 비정상적인 종료를 유발할 수 있다.

공격자는 널포인터 역참조로 발생하는 예외상황을 기억한 후, 추후에 이를 악용할 수 있다.

따라서 널이 될 수 있는 포인터를 이용하기 전에, 해당 포인터가 널을 갖고 있는지 검사함으로서 방지할 수 있다(초기화x).

 

👊 부적절한 자원해제

프로그램은 자원(CPU, 메모리 등)을 사용한 후 반드시 반환해야 하는데, 자원을 반환하는 코드를 누락하거나 프로그램의 오류로 인해 힙메모리(소프트웨어가 자유롭게 사용할 수 있는 메모리 공간), 소켓(데이터 교환을 위한 통로) 등 유일한 시스템 자원을 반환하지 못하면 자원 부족으로 인해 새로운 입력을 처리하지 못하는 보안약점이다.

프로그램 내에 자원반환 코드가 누락되었는지 확인하고, 오류로 인해 함수가 중간에 종료되었을 떄 예외처리에 관계없이 자원이 반환되도록 코딩함으로써 방지할 수 있다.

 

👊 해제된 자원 사용

이미 사용이 종료되어 반환된 메모리를 참조하는 경우 예상치 못한 값 또는 코드를 수행하게 되어 의도하지 않은 결과가 발생하는 보안약점이다.

반환된 메모리에 접근할 수 없도록 주소를 저장하고 있는 포인터를 초기화함으로써 방지할 수 있다.

 

👊 초기화되지 않은 변수 사용

변수를 선언하면서 값을 새로 부여하지 않으면, 해당 메모리에 이전에 사용하던 내용이 계속 남아 외부에 노출되어 악용될 가능성이 있다.

따라서 변수를 선언할 때는 할당된 메모리를 초기화함으로써 방지할 수 있다.

 

728x90
반응형