소프트웨어 개발 보안 구축
SW개발 보안 구현
코드오류의 개념
- 코드 오류는 소프트웨어 구현 단계에서 개발자들이 코딩 중 실수하기 쉬운 형(Type) 변환, 자원 반환 등의 오류를 예방하기 위한 보안 점검 항목
- 코드 오류로 발생할 수 있는 보안 약점
- Null 포인터 역참조
- Null은 값이 없음을 의미하며 포인터는 메모리의 위치를 가리킴.
- 부적절한 자원 해제
- 해제된 자원 사용
- 초기화되지 않은 변수 사용
- Null 포인터 역참조
보안약점종류
1. 널 포인터(Null Pointer) 역참조
- 널포인트가 가리키는 메모리에 어떠한 값을 저장할 때 발생하는 보안 약점
- 많은 라이브러리 함수들이 오류가 발생할 경우 널 값을 반환하는데, 이 반환값을 포인터로 참조하는 경우 발생
- 널포인터는 메모리의 첫 주소를 가리키며, 해당 주소를 참조할 경우 소프트웨어가 비정상적으로 종료 됨
- 공격자는 널 포인터 참조 오류로 발생하는 예외 상황을 악용할 수 있음
- 널 값을 갖고 있는지 검사함으로써 방지
- null이 이미 없는 것이기 때문에 초기화 불가
2. 부적절한 자원 해제
- 자원을 반환하는 코드를 누락하거나 프로그램 오류로 할당된 자원을 반환하지 못했을 때 발생하는 보안 약점
- 힙 메모리, 소켓 등의 유일한 시스템 자원이 계속 점유하고 있으면 자원 부족으로 인해 새로운 입력을 처리하지 못함
- 힙 메모리
- 소프트웨어가 자유롭게 사용할 수 있는 메모리 공간
- 소켓
- 데이터 교환을 위한 통로
- 힙 메모리
- 자원 반환 코드가 누락되었는지 확인하고, 오류로 인해 함수가 중간에 종료되었을 때 예외처리에 관계없이 자원이 반환되도록 코딩함으로써 방지
3. 해제된 자원 사용
- 이미 사용이 종료되어 반환된 메모리를 참조하는 경우 발생하는 보안 약점
- 반환된 메모리를 참조하는 경우 예상하지 못한 값 또는 코드를 수행하게 되어 의도하지 않은 결과 발생
- 주소를 저장하고 있는 포인터를 초기화함으로써 방지 가능
4. 초기화되지 않은 변수 사용
- 변수 선언 후 값이 부여되지 않은 변수를 사용할 때 발생하는 보안 약점
- 변수 선언으로 메모리가 할당되면 해당 메모리 이전에 사용하던 내용이 계속 남아 외부에 노출되는 경우 중요 정보 악용됨
- 변수 선언시 할당된 메모리를 초기화함으로써 방지 가능