코드 구현 및 보안 지침

모든 커밋에 걸쳐 코드 구현 표준을 자동으로 적용

정적 분석은 code 구현 지침을 단순한 문서상의 권장 사항이 아닌, 반드시 준수해야 하는 공학적 제약 조건으로 전환하는 방법입니다. PC-lint Plus는 빌드할 때마다 MISRA C 및 C++, AUTOSAR, CERT-C, CWE에 대해 이러한 제약 조건을 자동으로 적용하며, 쿼리 기반의 사용자 정의 규칙 메커니즘을 통해 아키텍처 규칙, 명명 규칙, 도메인별 안전 요구사항 등을 포괄하는 프로젝트별 제약 조건까지 확장합니다.

지침목적PC-lint Plus에서 지원하는 버전
MISRA C임베디드/안전이 중요한 시스템에서 C 언어의 안전성 및 신뢰성MISRA C:2025, MISRA C:2023, MISRA C:2012 (개정안 1-4), MISRA C:2004
MISRA C++임베디드/안전이 중요한 시스템에서 C++의 안전성 및 신뢰성MISRA C++:2023, MISRA C++:2008
AUTOSAR AUTOSAR 준수 자동차 ECU 소프트웨어 코드를 위한 코드 구현 규칙AUTOSAR 17 및 19
CERT-CC 언어의 보안 및 신뢰성 모범 사례정적으로 적용 가능한 CERT-C 규칙
CWE일반적인 소프트웨어 및 하드웨어 취약점 열거CWE Top 25, CWE Top 10 KEV (모든 C/C++ 관련 항목), CWE 호환 인증
사용자화한 지침조직별 규칙 및 제약 조건AST 검사를 통한 쿼리 기반 사용자 정의 검사

MISRA C 및 MISRA C++

MISRA(Motor Industry Software Reliability Association)는 안전이 중요한 embedded software를 위한 가장 널리 채택된 code 구현 지침을 발표합니다. 이름에서 알 수 있듯이 자동차 산업에서 유래했지만, MISRA 지침은 C나 C++가 구현 언어로 사용되는 항공우주, 의료, 산업 및 철도 개발 분야 전반에 걸쳐 사용되고 있습니다.

MISRA C는 C 프로그래밍 언어를 대상으로 합니다. 이 지침의 규칙은 임베디드 환경에서 정의되지 않았거나, 구현에 따라 달라지거나, 그 밖의 이유로 위험할 수 있는 구문(예: 초기화되지 않은 변수, 암시적 형 변환, 실행 불가능한 코드 및 이와 유사한 수백 가지 패턴)을 제거하도록 설계되었습니다. MISRA C++는 동일한 원칙을 C++로 확장합니다.

이 지침은 언어 표준의 발전에 따라 지속적으로 개정됩니다. 현재 최신판은 MISRA C:2025와 MISRA C++:2023입니다.

PC-lint Plus의 MISRA 지원

  • MISRA C: 2025
  • MISRA C:2023
  • MISRA C:2012 (개정안 1, 2, 3, 4 포함)
  • MISRA C:2004
  • MISRA C++:2023
  • MISRA C++:2008

AUTOSAR

AUTOSAR(Automotive Open System Architecture)는 전자 제어기(ECU)를 위한 표준화된 시스템 아키텍처를 정의하는 글로벌 자동차 산업 파트너십입니다. 이 파트너십의 C++ 코딩 지침은 다양한 공급자에서 제공하는 AUTOSAR 준수 전자 제어기에 올바르게 통합될 수 있는 C++ 코드 구현 규칙을 명시하고 있습니다.

AUTOSAR C++ 지침은 자동차 소프트웨어 시스템의 맥락에서 코드 품질, 신뢰성 및 안전성을 다룹니다. 이 지침을 준수하면 서로 다른 팀과 공급자가 개발한 소프트웨어 컴포넌트 간의 상호 운용성이 보장되며, C++ 코드베이스가 ISO 26262 기능 안전 표준을 준수할 수 있는 기반을 마련해 줍니다.

PC-lint Plus는 설치 즉시 AUTOSAR17 및 AUTOSAR19를 지원합니다.

CERT-C

CERT-C 코딩 표준은 카네기 멜론 대학교 소프트웨어 공학 연구소(SEI) 산하 CERT 부서에서 개발했습니다. 이 표준은 특히 보안 취약점과 신뢰성 결함을 대상으로 하는 C 언어 코드 구현 지침 및 모범 사례를 제공합니다.

CERT-C는 특정 분야에 국한되지 않습니다. 안전하고 신뢰할 수 있는 C 코드가 필요한 항공우주, 자동차, 의료 및 금융 소프트웨어 분야에서 널리 사용됩니다. 이 표준은 공통 평가 기준(Common Criteria) 및 ISO 27001 준수 체계에서 인정받고 있으며, 안전성과 보안성을 모두 충족해야 하는 프로젝트에서는 MISRA C와 함께 자주 채택됩니다.

PC-lint Plus는 CERT-C의 정적 검증 가능한 지침 중 상당수를 지원하며, 이 표준이 규정하는 보안 및 신뢰성 규칙의 광범위한 영역을 포괄합니다.

CWE: 일반적인 취약점 열거

CWE는 NIST 및 CISA의 데이터를 바탕으로 커뮤니티가 관리하는 일반적인 소프트웨어 및 하드웨어 취약점 유형 목록입니다. 이 목록의 목표는 취약점을 사전에 파악하여, 배포 후 발견되는 것이 아니라 개발 단계에서 제거될 수 있도록 하는 것입니다.

'CWE 가장 위험한 소프트웨어 취약점 상위 25개' 및 'CWE 상위 10대 KEV(알려진 악용 취약점) 취약점 목록'은 개발 팀과 도구 공급업체에 우선순위가 지정된 대상 목록을 제공합니다. CWE 호환성 인증은 정적 분석 도구가 문서화되고 검증 가능한 방식으로 해당 목록에 포함된 취약점을 다루고 있음을 입증합니다.

PC-lint Plus 버전 2.1 이상은 CWE 호환성 인증을 획득했습니다. 이 도구는 CWE 상위 10대 KEV 취약점 목록에 포함된 C 및 C++ 관련 모든 취약점과 CWE 상위 25대 취약점 목록의 대부분을 포괄합니다.

사용자 정의 코드 구현 지침

공개된 코딩 표준은 일반적인 결함 유형과 언어적 위험 요소를 다룹니다. 또한 대부분의 프로젝트에는 공개된 지침의 범위를 벗어난, 해당 아키텍처, 조직 또는 도메인에 특화된 제약 조건이 존재합니다. PC-lint Plus는 쿼리 기반의 사용자 정의 규칙 메커니즘을 통해 이 두 가지를 모두 지원하며, MISRA 또는 AUTOSAR 규칙과 마찬가지로 프로젝트별 제약 조건에도 동일한 정적 검증을 적용합니다.

PC-lint Plus의 쿼리 시스템은 분석 과정에서 생성된 추상 구문 트리(AST)를 탐색하며, 정적 타입의 도메인 특정 언어를 사용하여 검사가 정확히 무엇을 찾아야 하는지 명시합니다. 사용자화한 규칙을 통해 아키텍처 제약 조건을 강제 적용하거나, 안티패턴을 표시하거나, 조직별 안전 규칙을 정의할 수 있습니다.

동일한 쿼리 메커니즘을 사용하여 정당한 예외를 정의할 수 있습니다. 이는 전체 규칙 범주를 무효화하는 광범위한 억제 대신, 특정 조건이 충족될 때만 적용되는 정밀하고 패턴 기반의 억제 기능입니다. 이를 통해 억제 파일을 깔끔하고, 감사 가능하며, 의도적으로 관리할 수 있습니다.

위반 사항 관리 및 감사 대비

기존 코드베이스에 대한 정적 분석을 수행하면 검토, 정당화 또는 억제 조치가 필요한 결과가 도출됩니다. 이러한 결정을 체계적으로 관리하는 접근 방식이 없다면, 억제 파일에는 더 이상 유효하지 않은 예외가 쌓이고, 정당화된 편차는 문서화되지 않으며, 구성은 초기 감사에서 승인된 상태에서 점차 벗어나게 됩니다.

PC-lint Plus는 개별 발견 사항, 코드 영역, 파일 및 규칙 범주 수준에서 예외 억제를 제공합니다. 모든 예외 억제는 문서화 및 추적이 가능합니다. 진단 회계 기능은 더 이상 필요하지 않은 예외 억제를 표시하여, 감사 신뢰도를 저해하는 오래된 예외가 누적되는 것을 방지합니다.