CERT C 코딩 표준
"CERT C Coding Standard" 표준은 C 프로그래밍 언어로 보안 코딩을 위한 규칙을 제공함.
코딩 규칙 및 권장 사항의 목표는 정의되지 않은 프로그램 동작 및 악용 가능한 취약점으로 이어질 수 있는 정의되지 않은 동작을 제거하여 안전하고 신뢰할 수 있는 보안 시스템을 개발하는 것.
표준에 정의된 코딩 규칙에 대한 적합성은 C 프로그래밍 언어로 개발된 소프트웨어 시스템의 안전, 신뢰성 및 보안을 보장하는 데 필요함 (그러나 충분하지는 않음, 예를 들면 safe and secure design 필요).
안전 필수 시스템(safety-critical systems)은 일반적으로 이 코딩 표준에서 부과하는 것보다 더 엄격한 요구 사항을 갖음.
그러나 이 코딩 표준을 적용하면 신뢰할 수 있고 견고한 시스템을 구축할 수 있음.
잘 문서화되고 실행 가능한 코딩 표준은 C 프로그래밍 언어 코딩의 필수 요소임.
코딩 표준은 프로그래머가 개인의 취향이 아닌 프로젝트 및 조직의 요구 사항에 따라 결정된 일련의 통일된 규칙을 따르도록 권장함
일단 설정되면 이러한 표준은 소스 코드를 평가하기 위한 품질 지표(metric)으로 사용할 수 있음(수동 또는 자동화된 프로세스 사용).
CERT의 코딩 표준은 업계에서 널리 채택되고 있음.
Cisco Systems, Inc.는 2011년 10월 Cisco의 연례 SecCon 컨퍼런스에서 제품 개발의 기본 프로그래밍 표준으로 CERT C 보안 코딩 표준을 채택했다고 발표함.
최근 Oracle은 CERT의 모든 보안 코딩 표준을 기존 보안 코딩 표준에 통합했음.
CERT와 Oracle은 이전에 The CERT Oracle Secure Coding Standard for Java (Addison-Wesley, 2011) 를 작성하는 데 협력했음.
가이드라인은 규칙이나 제안으로 분류됨
아래의 조건을 모두 만족하는 경우 규칙(Rule)으로 정의됨
1. 코딩 지침 위반 시 악용 가능한 취약성으로 이어지는 보안 결함이 될 가능성이 있음.
2. 정확한 동작을 보장하기 위해 코딩 지침을 위반할 수밖에 없는 상황으로, 유한한 수의 조건이 있는 경우.
3. 코딩 실제를 만족하는지 여부를 자동화된 분석, 정형화된 방법 또는 수동 검사 기술을 통해 판단할 수 있는 경우.
- 코딩 규칙 카테고리
Rule 01. Preprocessor (PRE), 전처리기
Rule 02. Declarations and Initialization (DCL), 선언과 초기화
Rule 03. Expressions (EXP), 표현식
Rule 04. Integers (INT), 정수
Rule 05. Floating Point (FLP), 부동소수점
Rule 06. Arrays (ARR), 배열
Rule 07. Characters and Strings (STR), 문자와 문자열
Rule 08. Memory Management (MEM), 메모리 관리
Rule 09. Input Output (FIO), 입력과 출력
Rule 10. Environment (ENV), 환경
Rule 11. Signals (SIG), 시그널
Rule 12. Error Handling (ERR), 에러 처리
Rule 13. Application Programming Interfaces (API), 어플리케이션 프로그래밍 인터페이스
Rule 14. Concurrency (CON), 동시성
Rule 48. Miscellaneous (MSC), 기타
Rule 50. POSIX (POS), 부록
Rule 51. Microsoft Windows (WIN)
* SEI : SW Engineering Insitute
* CERT : US-CERT's Technical Cyber Security Alerts
* CWE : Common Weakness Enumeration, MITRE