
정적 분석 - 규칙을 만드는 사람
정적 코드 분석 툴인 C-STAT은 IAR 임베디드 워크벤치 IDE에 완전히 통합되어 있으며, 애플리케이션이 MISRA(자동차 산업 소프트웨어 신뢰성 협회)에서 정의한 자동차 코딩 표준을 준수하는지 쉽게 확인할 수 있는 방법을 제공합니다. 하지만 이 툴은 모든 유형의 애플리케이션에 대해 우수한 코드 품질을 보장할 수 있습니다. MISRA 규칙 세트 외에도 CWE 및 CERT에서 파생된 수백 개의 검사와 C-STAT에 특화된 검사가 포함되어 있습니다.
따라서 C-STAT은 MISRA, CERT 또는 CWE 이니셔티브에서 위험하다고 지적한 특정 코드 구성을 피하는 데 도움이 될 수 있습니다. 그렇다면 이러한 이니셔티브의 배후에는 누가 있으며, 이를 준수해야 하는 이유는 무엇일까요?
MISRA C/C++
MISRA-C 규칙 세트는 영국의 자동차 산업 소프트웨어 신뢰성 협회에서 시작한 이니셔티브로, 자동차 소프트웨어만을 대상으로 합니다. 수년에 걸쳐 MISRA-C 규칙은 전 세계와 다른 산업 분야로 확산되었으며, 현재 임베디드 업계에서 가장 널리 사용되는 C 하위 집합이 되었습니다.
최신 버전인 MISRA-C:2012에는 143개의 규칙과 16개의 지침이 포함되어 있습니다. 규칙은 필수, 필수 또는 권고로 분류되며 정수 크기와 같은 컴파일러 차이 방지, 오류가 발생하기 쉬운 함수 및 구조체 사용 방지, 코드 복잡성 제한, 명명 규칙 및 주석 사용 등을 통해 코드의 유지 관리 가능성 보장 등의 영역을 다룹니다.
공통 약점 열거
CWE (공통 약점 열거)는 커뮤니티에서 개발한 소프트웨어 약점 및 취약점 사전입니다. 각 항목에는 ID 번호, 약점 및 잠재적 결과에 대한 설명, 잠재적 완화 방법, 코드 샘플, 분류법 및 참조가 포함되어 있습니다. 이 프로젝트는 소프트웨어 취약점을 더 잘 이해하고 관리할 뿐만 아니라 이러한 취약점을 찾을 수 있는 소프트웨어 보안 도구와 서비스를 더 효과적으로 선택하고 사용할 수 있도록 돕기 위한 것입니다. 이 프로젝트는 여러 연방 지원 연구 개발 센터를 운영하는 미국의 비영리 단체인 MITRE Corporation이 후원합니다.
그렇다면 '소프트웨어 약점'이란 무엇일까요? MITRE는 소프트웨어 구현, 코드, 설계 또는 아키텍처의 결함, 결함, 버그, 취약성 및 기타 오류로 정의하며, 이를 해결하지 않으면 시스템과 네트워크가 공격에 취약해질 수 있습니다.
나열된 모든 취약점이 임베디드 시스템과 관련이 있는 것은 아니지만, 가장 위험한 소프트웨어 오류의 CWE/SANS 상위 25개 목록을 살펴보면 반드시 알고 있어야 하는 몇 가지 취약점이 있습니다. 예를 들어 이 목록에는 입력 크기를 확인하지 않은 버퍼 복사('클래식 버퍼 오버플로'), 잘못된 버퍼 크기 계산, 제어되지 않은 형식 문자열 및 정수 오버플로 또는 래퍼라운드가 포함됩니다. 상위 25개 항목만 보더라도 전체 사전에는 천 개가 넘는 항목이 있습니다.
CERT C/C++
CERT C/C++ 보안 코딩 표준은 C/C++ 프로그래밍 언어의 보안 코딩에 대한 규칙과 권장 사항을 제공합니다. 이 표준은 카네기 멜론 대학교에서 운영하는 소프트웨어 엔지니어링 연구소(SEI)의 CERT 부서에서 발행합니다. SEI는 주로 미국 국방부와 국토안보부에서 자금을 지원하는 연구 개발 센터입니다.
CERT는 C++뿐만 아니라 C언어로도 보안 코딩을 위한 규칙 집합을 제공합니다. 각 가이드라인은 제목, 설명, 비준수 코드 예시 및 준수 솔루션의 예시로 구성됩니다. 이 표준에는 코딩 및 구현 오류와 낮은 수준의 설계 오류를 방지하기 위한 지침이 포함되어 있습니다. 이 표준의 목적은 안전하지 않은 코딩 관행과 악용 가능한 취약점을 초래할 수 있는 정의되지 않은 동작을 제거하는 것입니다.
서로 다른 표준 간의 관계
서로 다른 표준의 규칙은 서로 겹치기도 하고 보완하기도 합니다. CWE는 소프트웨어의 알려진 취약점에 대한 요약을 제공하는 반면, CERT 및 MISRA 표준은 소프트웨어의 취약점을 잠재적으로 노출할 수 있는 코딩 구조를 식별합니다. 모든 코딩 표준이 하나의 코딩 언어에 존재하는 것은 아니므로 CWE의 모든 목록을 포함하는 코딩 표준은 없습니다. 또한 일부 취약점은 높은 수준의 설계 문제와 관련이 있습니다. 동시에, 문제가 있는 코딩 구조가 항상 나열된 특정 취약점과 직접적으로 연관되는 것은 아니기 때문에 MISRA 또는 CERT에서 정의한 모든 코딩 가이드라인을 CWE의 항목에 매핑할 수 있는 것은 아닙니다. 그러나 CERT 가이드라인에는 해당되는 경우 CWE 항목에 대한 참조가 포함되어 있습니다.
상호 보완적인 역할을 하기 때문에 소프트웨어가 안전하고 안전한지 확인하기 위해 이러한 모든 사례를 참조하는 것이 현명하고 심지어 필수적입니다.
자동화하세요!
도구를 사용해 자동화하는 것은 어떨까요? C-STAT은 CERT C/C++ 보안 코딩 표준에 정의된 MISRA 규칙 세트 및 규칙 준수 여부와 CWE에 정의된 여러 약점에 대해 여러 가지 보안 검사를 수행합니다. 규정 준수 작업을 더욱 간소화하기 위해 C-STAT은 CWE의 취약점 이름과 일치하는 출력을 제공합니다.
C-STAT의 모든 점검은 CWE의 해당 항목과 MISRA 및 CERT 표준을 참조하여 철저하게 문서화되어 있습니다. 개별 규칙뿐만 아니라 규칙 집합과 비교하여 코드를 검사하도록 선택할 수 있습니다.
관련 CWE 항목 및 CERT 및 MISRA 표준의 해당 규칙에 대한 참조와 함께 범위를 벗어난 배열에 대한 C-STAT 검사에 대한 설명.
C-STAT는 IDE에 완전히 통합되어 있으며 일반 빌드 도구처럼 사용이 간편합니다. 복잡한 도구 설정이 필요 없고 언어 지원 및 일반적인 빌드 문제로 어려움을 겪을 필요도 없습니다. C-STAT은 약 250개의 고유한 검사를 지원하며, CERT 및 CWE 이니셔티브의 규칙은 물론 MISRA C:2012, MISRA C++:2008, MISRA C:2004 등 다양한 코딩 표준 및 규칙 세트의 약 600개 규칙에 매핑됩니다.
C-STAT 표준 검사 규칙 세트에는 CWE 및 CERT C/C++에서 다루는 수백 개의 이슈에 매핑되는 검사가 포함되어 있습니다.
C-STAT은 IAR 임베디드 워크벤치에 특화된 모든 언어 구성을 포함하여 C와 C++를 지원하며 빌드 툴체인에서 활성화하여 하드웨어와 직접 인터페이스하는 코드 개발을 간소화할 수 있습니다. 정적 분석은 버퍼 오버플로, 산술 및 변환 문제, 힙 관리의 시간적 속성 등 단순히 의심스러운 것부터 명백히 잘못된 것까지 다양한 코드 패턴을 식별하는 최첨단 기술을 기반으로 합니다.
크로스 모듈 분석의 이점이 있는 점검의 경우, C-STAT은 모듈 경계를 넘어 정보를 전파합니다. 또한 특정 검사의 분석 정밀도를 높이기 위해 전체 소스를 하나의 모듈로 분석하는 다중 파일 컴파일 모드에서 C-STAT을 실행할 수도 있습니다.
결론적으로 C-STAT을 사용하면 개발 중에 코드를 완전히 제어하고 코드 품질을 개선할 수 있습니다. 각 개발자의 일상 업무에 코드 품질 검사를 포함함으로써 기업은 문제를 조기에 발견하고 완제품은 물론 프로젝트 일정에 미치는 영향을 최소화할 수 있습니다.