블로그

MISRA C 2012 vs MISRA C2 - 스위치를 만드는 방법

Secure Code Warrior
게시일: 2021.08.17.

에 Secure Code Warrior , 우리는 항상 우리의 훈련 범위를 확장하고자합니다. 임베디드 개발자와 보안 관리자에게 안전한 임베디드 시스템을 구축할 수 있도록 임베디드 시스템 보안의 세계를 활용하고 있습니다. 이 게시물에서는 MISRA C 2012 표준에 대해 이야기하고 보안 임베디드 시스템을 구축하기 위해 규정 준수가 필요한 이유에 대해 이야기합니다.

C에서 코드를 작성하는 동안 겉보기에 는 올바르게 보이지만 본질적으로 잘못된 것을 구현하는 것은 매우 쉽습니다. 코드가 잘 컴파일되고 일정 기간 동안 잘 실행될 수도 있습니다. 그러나 입력 크기 및/또는 메모리가 증가하는 경우 동일한 코드가 충돌하거나 정의되지 않은 동작을 나타낼 수 있습니다. 예를 들어 정수가 오버플로를 일으키는 특정 입력 번호 또는 배열을 범위를 벗어나게 하는 특정 문자 시퀀스입니다.

이것은 MISRA C 코딩 표준이 도움이 될 수있는 곳입니다. 표준에 명시된 규칙, 지침 및 모범 사례를 통해 개발자는 임베디드 개발을 위해 안전하고 신뢰할 수 있는 C 코드를 작성할 수 있습니다. 

MISRA C 2012, 표준의 최신 버전, 새로운 규칙을 추가, 기존 규칙을 향상, 그리고 몇 가지 불일치를 해결. 이전 버전을 계속 사용하고 있다면 지금은 전환하기에 좋은 시간이 될 것입니다. 

MISRA C 코딩 표준이란 무엇입니까?

MISRA C 표준에는 C 프로그래밍 언어에 대한 코드 안전성, 휴대성 및 신뢰성 지침이 포함되어 있습니다. 첫 번째 지침 세트는 C 언어에 만전을 기하는 1998년에 발표되었습니다. 

그러나 그 이후로 MISRA 컨소시엄은 C++에 대한 코딩 표준을 개발합니다. 모든 MISRA C 문서에는 해당 규칙의 개발에 기여한 배경 정보에 대한 규칙 집합, 비준수 예제 및 자세한 섹션이 포함되어 있습니다.

C와 C++는 임베디드 소프트웨어를 개발하는 데 가장 널리 사용되는 언어입니다. 주된 이유 중 하나는 기계 언어에 비해 1~2단계의 추상화만 으로 빠르기 때문에 빠릅니다. 그러나 이것은 또한 특히 C에서 안전한 코드를 작성하는 것이 어렵고 오류가 발생하기 쉽다는 것을 의미합니다. 예를 들어 Java 및 C#과 같은 대부분의 상위 언어에서는 가비지 수집이나 동적 타이핑과 같은 사소한 언어에 대해 걱정할 필요가 없습니다. 

그러나 C에서는 데이터 구조에 대한 메모리 조각을 할당하는 경우와 같이 쓰레기를 수집하는 미리 정의된 방법이 없습니다. 그렇지 않으면 C는 다른 언어와 달리 메모리가 해제되지 않아 메모리 가 누수됩니다.

MISRA C 2004 (C2) vs. 미스라 C 2012 (C3) – 무엇이 변경되었습니까?

MISRA C: 2012년, C3라고도 불리는 2013년 4월에 처음 출시되었습니다. 수천 명의 사람들과 조직의 작품에서 지식을 그리는 C3는 새로운 규칙을 추가하고, 기존 규칙의 설명과 배경을 향상시키며, 몇 가지 허점을 닫습니다.

C3는 이전 ISO C90에 대한 규칙을 유지하면서 C99 버전의 언어를 지원합니다. C3의 주요 초점 영역은 규칙 집행의 일반적인 비용을 줄이는 동시에 중요한 시스템에서 C 언어를 더 안전하게 사용하는 것이었습니다. 이 모든 것은 당신이 이미하지 않은 경우, 새로운 표준으로 전환하는 것이 신중합니다.

전반적으로 가장 중요한 변경 사항 목록은 다음과 같습니다.

  • 2004 년 버전에서 발견 된 올바른 문제.
  • 낙엽 규칙의 수를 크게 늘립니다. 해석 도구가 적합성을 결정하는 데 도움이 되는 경우 규칙을 신뢰할 수 있습니다.
  • 규칙은 "필수", "권고"또는 "필수"로 분류됩니다. 어떤 상황에서도 필수 규칙을 위반해서는 안 됩니다. 위반이 정당화되는 경우 필수 및 자문 규칙은 특별한 시나리오에서 위반될 수 있습니다.
  • 자동 생성된 코드에 규칙을 적용하는 방법에 대한 지침이 추가되었습니다. 인간으로 작성된 코드의 동일한 지침이 도구에서 생성된 코드에 항상 적용되지 는 않으므로 매우 중요합니다.
  • 합당한 사용자 행동을 금지하는 지나치게 일반화된 규칙을 제거합니다. 예를 들어 이전에는 매크로를 전혀 사용하지 않는 것이 좋습니다. 이를 통해 우아하고 안전하며 편리한 솔루션을 제공할 수 있는 상황에서도 매크로를 사용할 수 없었습니다. MISRA C: 2012년에는 매크로에 관한 새로운 규칙이 도입되어 적용 가능한 경우 신중하게 사용할 수 있습니다. 함수를 통해 매크로를 사용하는 것이 좋습니다 MISRA C 문서에서 가져온 다음 발췌를 참조하십시오.

MISRA C 규칙

충분한 이야기, 지금은 그들이 적용하는 방법의 예와 함께, 몇 가지 MISRA C 규칙과 실습을 얻을 시간이다.

호환 되는 형식을 memcpy, memmove 및 memcmp에 대 한 포인터 인수로 사용

표준 라이브러리는 memcpy, memmove memcmp가 지정된 바이트 수의 바이트 이동 또는 비교를 바이트단위로 수행합니다. MISRA C 2012 표준의 규칙 21.15는 두 함수 매개 변수가 동일한 형식에 대한 포인터여야 한다고 지시합니다. 호환되지 않는 포인터 유형이 있는 함수 호출은 실수를 나타낼 수 있습니다. 

공식 MISRA 규정 준수 문서에서 가져온 다음 이미지를 고려하십시오. 이 규칙은 필요하고 낙하가능하며 C90과 C99 모두에 적용됩니다.

MISRA C 규칙 21.15의 스크린 샷

예제는 규칙 설명을 따릅니다.

비준수 솔루션의 스크린샷입니다.

볼 수 있듯이 개체는 다른 유형(uint8_t 및 uint16_t)이므로 이 솔루션은 비준수 솔루션입니다.

입력으로 길이가 걸리지 않는 문자열 처리 함수는 바인딩되지 않은 액세스가 발생하지 않습니다.

String handling functions from <string.h> that don’t take the length as an input, shouldn’t result in out-of-bound access. The relevant functions are: strcat, strchr, strcmp, strcoll, strcpy, strcspn, strlen, strpbrk, strrchr, strspn, strrstr, and strtok. The rule is mandatory, meaning it can never be breached, under any circumstances. It applies to both C90 and C99, and is undecidable.

MISRA C 규칙 21.17의 스크린 샷.

해당 예제는 다음과 같은 예입니다.

문자열 처리 기능의 올바른 예제의 스크린샷

당신이 볼 수 있듯이, 함수 f1의 strcpy, 5 문자를 보유 할 수있는 문자열의 길이를 넘어 복사됩니다. 또한 "str"의 내용이 맞는 경우에만 문자열이 복사되는 strcpy를 준수하고 안전하게 사용합니다.

외부에서 수신된 데이터 검증

Dir 4.14는 "외부" 소스에서 수신된 데이터의 유효성을 확인하는 것이 좋습니다. 외부 입력은 다음과 같은 수 있습니다.

  • 파일에서 읽습니다.
  • 환경 변수에서 읽습니다.
  • 모든 사용자 입력.
  • 통신 채널을 통해 받은 모든 것. 예를 들어 TCP 연결 또는 HTTP API 등을 통해

이 지침은 필요한 범주에 속하며 C90 과 C99 모두에 적용됩니다. 이에 대한 근거는 프로그램이 외부 소스에서 수신된 데이터를 제어할 수 없으므로 이 데이터가 유효하지 않거나 악의적일 수 있다는 것입니다. 예를 들어 프로그램은 사용자가 숫자를 입력할 것으로 예상하지만 사용자는 문자열을 입력합니다. 입력을 처리하기 전에 프로그램은 실제로 숫자인지 확인해야 합니다.

외부 소스로부터 받은 값의 유효성을 확인해야 합니다.

MISRA C 2012로 전환하는 방법

MISRA C 2012로 전환하려면 코딩 지침 문서에서 업데이트가 필요합니다. 사용하지 않고 대신 정적 분석 도구(권장 선택)에 의존하는 경우 도구의 최신 버전을 얻어야 할 수 있습니다. MISRA C 2012 규정 준수를 확인하는 세 가지 도구는 다음과 같습니다.

  1. Cppcheck는 MISRA 규칙을 확인하고 다양한 종류의 버그를 감지할 수 있는 오픈 소스 도구입니다.
  2. PC-lint Plus는 30일 평가 기간이 함께 제공되는 유료 도구입니다. MISRA C 규정 준수를 확인하는 것 외에도 잠재적인 버그 및 취약점을 식별하는 데도 도움이 될 수 있습니다.
  3. CodeSonar는 MISRA C와 C++ 규정 준수를 모두 확인하는 또 다른 도구입니다.

MISRA 규정 준수를 테스트할 수 있는 컴파일러도 몇 개 있습니다. 규칙 위반이 감지되면 경고 또는 예외가 그에 따라 발생합니다. 예를 들어 그린 힐스 소프트웨어는 컴파일러에게 32비트 및 64비트 아키텍처 모두에 대한 모든 MISRA 표준을 지원합니다.

사용 Secure Code Warrior MISRA C의 개발자를 업스킬로

Secure Code Warrior '주력 제품 - learning platform - 수많은 대화 형 도전이, courses 개발자가 안전한 C/C++ 코드를 작성하는 데 도움이 되는 평가와 평가. 플랫폼의 콘텐츠는 프레임워크에 특화되어 있으며 매우 매력적입니다. 우리의 C / C + +:포함 코딩 문제는 MISRA C, AUTOSAR C +(MISRA C +) 및 IEC 모두에서 영감을했다.

개발자는 C/C++에 따른 취약점을 식별하고 더 중요한 것은 이러한 버그를 해결하는 방법을 배우는 개인화된 학습 여정에 착수할 수 있습니다. 이 과정에서 개발자는 자신의 약점을 파악하기 위해 진행 상황을 추적하고 동료와 친근한 코딩 대회를 즐길 수 있습니다. 당사의 솔루션을 통해 자동차 및 운송 산업을 어떻게 돕는지 자세히 알아보십시오.

우리의 도전이 얼마나 대화형이고 포함되는지 알아내고 싶으신가요? 일부 C / C + +:에 포함 된 도전을 시도하십시오. learning platform 오늘!

리소스 보기
리소스 보기

이 게시물에서는 MISRA C 2012 표준을 C2와 비교하고 새로운 표준으로 전환하는 여정을 안내합니다. 우리는 안전한 임베디드 시스템을 구축하기 위해 MISRA의 규정 준수가 필요한 이유를 설명 합니다.

더 알고 싶으신가요?

Secure Code Warrior 개발자가 기술을 향상함에 따라 안전한 코딩을 긍정적으로 만들고 매력적인 경험을 제공합니다. 우리는 보안 숙련 된 개발자가 우리의 연결된 세계의 일상적인 슈퍼 히어로가 될 수 있도록, 자신의 선호하는 학습 경로를 따라 각 코더를 안내합니다.

Secure Code Warrior 는 전체 소프트웨어 개발 수명 주기에서 코드를 보호하고 사이버 보안을 최우선으로 생각하는 문화를 조성할 수 있도록 도와드립니다. 앱 보안 관리자, 개발자, CISO 등 보안과 관련된 모든 사람이 안전하지 않은 코드와 관련된 위험을 줄일 수 있도록 도와드릴 수 있습니다.

데모 예약
공유하세요:
저자
Secure Code Warrior
게시일: 2021.08.17.

Secure Code Warrior 개발자가 기술을 향상함에 따라 안전한 코딩을 긍정적으로 만들고 매력적인 경험을 제공합니다. 우리는 보안 숙련 된 개발자가 우리의 연결된 세계의 일상적인 슈퍼 히어로가 될 수 있도록, 자신의 선호하는 학습 경로를 따라 각 코더를 안내합니다.

Secure Code Warrior 는 개발자에게 안전하게 코딩할 수 있는 기술을 제공하여 보안 중심의 개발자 문화를 구축합니다. Atlassian의 대표적인 애자일( Learning Platform )은 관련 기술 기반 경로, 실습( missions) 및 상황에 맞는 도구를 제공하여 개발자가 빠르게 기술을 배우고, 구축하고, 적용하여 보안 코드를 빠르게 작성할 수 있도록 지원합니다.

공유하세요:

에 Secure Code Warrior , 우리는 항상 우리의 훈련 범위를 확장하고자합니다. 임베디드 개발자와 보안 관리자에게 안전한 임베디드 시스템을 구축할 수 있도록 임베디드 시스템 보안의 세계를 활용하고 있습니다. 이 게시물에서는 MISRA C 2012 표준에 대해 이야기하고 보안 임베디드 시스템을 구축하기 위해 규정 준수가 필요한 이유에 대해 이야기합니다.

C에서 코드를 작성하는 동안 겉보기에 는 올바르게 보이지만 본질적으로 잘못된 것을 구현하는 것은 매우 쉽습니다. 코드가 잘 컴파일되고 일정 기간 동안 잘 실행될 수도 있습니다. 그러나 입력 크기 및/또는 메모리가 증가하는 경우 동일한 코드가 충돌하거나 정의되지 않은 동작을 나타낼 수 있습니다. 예를 들어 정수가 오버플로를 일으키는 특정 입력 번호 또는 배열을 범위를 벗어나게 하는 특정 문자 시퀀스입니다.

이것은 MISRA C 코딩 표준이 도움이 될 수있는 곳입니다. 표준에 명시된 규칙, 지침 및 모범 사례를 통해 개발자는 임베디드 개발을 위해 안전하고 신뢰할 수 있는 C 코드를 작성할 수 있습니다. 

MISRA C 2012, 표준의 최신 버전, 새로운 규칙을 추가, 기존 규칙을 향상, 그리고 몇 가지 불일치를 해결. 이전 버전을 계속 사용하고 있다면 지금은 전환하기에 좋은 시간이 될 것입니다. 

MISRA C 코딩 표준이란 무엇입니까?

MISRA C 표준에는 C 프로그래밍 언어에 대한 코드 안전성, 휴대성 및 신뢰성 지침이 포함되어 있습니다. 첫 번째 지침 세트는 C 언어에 만전을 기하는 1998년에 발표되었습니다. 

그러나 그 이후로 MISRA 컨소시엄은 C++에 대한 코딩 표준을 개발합니다. 모든 MISRA C 문서에는 해당 규칙의 개발에 기여한 배경 정보에 대한 규칙 집합, 비준수 예제 및 자세한 섹션이 포함되어 있습니다.

C와 C++는 임베디드 소프트웨어를 개발하는 데 가장 널리 사용되는 언어입니다. 주된 이유 중 하나는 기계 언어에 비해 1~2단계의 추상화만 으로 빠르기 때문에 빠릅니다. 그러나 이것은 또한 특히 C에서 안전한 코드를 작성하는 것이 어렵고 오류가 발생하기 쉽다는 것을 의미합니다. 예를 들어 Java 및 C#과 같은 대부분의 상위 언어에서는 가비지 수집이나 동적 타이핑과 같은 사소한 언어에 대해 걱정할 필요가 없습니다. 

그러나 C에서는 데이터 구조에 대한 메모리 조각을 할당하는 경우와 같이 쓰레기를 수집하는 미리 정의된 방법이 없습니다. 그렇지 않으면 C는 다른 언어와 달리 메모리가 해제되지 않아 메모리 가 누수됩니다.

MISRA C 2004 (C2) vs. 미스라 C 2012 (C3) – 무엇이 변경되었습니까?

MISRA C: 2012년, C3라고도 불리는 2013년 4월에 처음 출시되었습니다. 수천 명의 사람들과 조직의 작품에서 지식을 그리는 C3는 새로운 규칙을 추가하고, 기존 규칙의 설명과 배경을 향상시키며, 몇 가지 허점을 닫습니다.

C3는 이전 ISO C90에 대한 규칙을 유지하면서 C99 버전의 언어를 지원합니다. C3의 주요 초점 영역은 규칙 집행의 일반적인 비용을 줄이는 동시에 중요한 시스템에서 C 언어를 더 안전하게 사용하는 것이었습니다. 이 모든 것은 당신이 이미하지 않은 경우, 새로운 표준으로 전환하는 것이 신중합니다.

전반적으로 가장 중요한 변경 사항 목록은 다음과 같습니다.

  • 2004 년 버전에서 발견 된 올바른 문제.
  • 낙엽 규칙의 수를 크게 늘립니다. 해석 도구가 적합성을 결정하는 데 도움이 되는 경우 규칙을 신뢰할 수 있습니다.
  • 규칙은 "필수", "권고"또는 "필수"로 분류됩니다. 어떤 상황에서도 필수 규칙을 위반해서는 안 됩니다. 위반이 정당화되는 경우 필수 및 자문 규칙은 특별한 시나리오에서 위반될 수 있습니다.
  • 자동 생성된 코드에 규칙을 적용하는 방법에 대한 지침이 추가되었습니다. 인간으로 작성된 코드의 동일한 지침이 도구에서 생성된 코드에 항상 적용되지 는 않으므로 매우 중요합니다.
  • 합당한 사용자 행동을 금지하는 지나치게 일반화된 규칙을 제거합니다. 예를 들어 이전에는 매크로를 전혀 사용하지 않는 것이 좋습니다. 이를 통해 우아하고 안전하며 편리한 솔루션을 제공할 수 있는 상황에서도 매크로를 사용할 수 없었습니다. MISRA C: 2012년에는 매크로에 관한 새로운 규칙이 도입되어 적용 가능한 경우 신중하게 사용할 수 있습니다. 함수를 통해 매크로를 사용하는 것이 좋습니다 MISRA C 문서에서 가져온 다음 발췌를 참조하십시오.

MISRA C 규칙

충분한 이야기, 지금은 그들이 적용하는 방법의 예와 함께, 몇 가지 MISRA C 규칙과 실습을 얻을 시간이다.

호환 되는 형식을 memcpy, memmove 및 memcmp에 대 한 포인터 인수로 사용

표준 라이브러리는 memcpy, memmove memcmp가 지정된 바이트 수의 바이트 이동 또는 비교를 바이트단위로 수행합니다. MISRA C 2012 표준의 규칙 21.15는 두 함수 매개 변수가 동일한 형식에 대한 포인터여야 한다고 지시합니다. 호환되지 않는 포인터 유형이 있는 함수 호출은 실수를 나타낼 수 있습니다. 

공식 MISRA 규정 준수 문서에서 가져온 다음 이미지를 고려하십시오. 이 규칙은 필요하고 낙하가능하며 C90과 C99 모두에 적용됩니다.

MISRA C 규칙 21.15의 스크린 샷

예제는 규칙 설명을 따릅니다.

비준수 솔루션의 스크린샷입니다.

볼 수 있듯이 개체는 다른 유형(uint8_t 및 uint16_t)이므로 이 솔루션은 비준수 솔루션입니다.

입력으로 길이가 걸리지 않는 문자열 처리 함수는 바인딩되지 않은 액세스가 발생하지 않습니다.

String handling functions from <string.h> that don’t take the length as an input, shouldn’t result in out-of-bound access. The relevant functions are: strcat, strchr, strcmp, strcoll, strcpy, strcspn, strlen, strpbrk, strrchr, strspn, strrstr, and strtok. The rule is mandatory, meaning it can never be breached, under any circumstances. It applies to both C90 and C99, and is undecidable.

MISRA C 규칙 21.17의 스크린 샷.

해당 예제는 다음과 같은 예입니다.

문자열 처리 기능의 올바른 예제의 스크린샷

당신이 볼 수 있듯이, 함수 f1의 strcpy, 5 문자를 보유 할 수있는 문자열의 길이를 넘어 복사됩니다. 또한 "str"의 내용이 맞는 경우에만 문자열이 복사되는 strcpy를 준수하고 안전하게 사용합니다.

외부에서 수신된 데이터 검증

Dir 4.14는 "외부" 소스에서 수신된 데이터의 유효성을 확인하는 것이 좋습니다. 외부 입력은 다음과 같은 수 있습니다.

  • 파일에서 읽습니다.
  • 환경 변수에서 읽습니다.
  • 모든 사용자 입력.
  • 통신 채널을 통해 받은 모든 것. 예를 들어 TCP 연결 또는 HTTP API 등을 통해

이 지침은 필요한 범주에 속하며 C90 과 C99 모두에 적용됩니다. 이에 대한 근거는 프로그램이 외부 소스에서 수신된 데이터를 제어할 수 없으므로 이 데이터가 유효하지 않거나 악의적일 수 있다는 것입니다. 예를 들어 프로그램은 사용자가 숫자를 입력할 것으로 예상하지만 사용자는 문자열을 입력합니다. 입력을 처리하기 전에 프로그램은 실제로 숫자인지 확인해야 합니다.

외부 소스로부터 받은 값의 유효성을 확인해야 합니다.

MISRA C 2012로 전환하는 방법

MISRA C 2012로 전환하려면 코딩 지침 문서에서 업데이트가 필요합니다. 사용하지 않고 대신 정적 분석 도구(권장 선택)에 의존하는 경우 도구의 최신 버전을 얻어야 할 수 있습니다. MISRA C 2012 규정 준수를 확인하는 세 가지 도구는 다음과 같습니다.

  1. Cppcheck는 MISRA 규칙을 확인하고 다양한 종류의 버그를 감지할 수 있는 오픈 소스 도구입니다.
  2. PC-lint Plus는 30일 평가 기간이 함께 제공되는 유료 도구입니다. MISRA C 규정 준수를 확인하는 것 외에도 잠재적인 버그 및 취약점을 식별하는 데도 도움이 될 수 있습니다.
  3. CodeSonar는 MISRA C와 C++ 규정 준수를 모두 확인하는 또 다른 도구입니다.

MISRA 규정 준수를 테스트할 수 있는 컴파일러도 몇 개 있습니다. 규칙 위반이 감지되면 경고 또는 예외가 그에 따라 발생합니다. 예를 들어 그린 힐스 소프트웨어는 컴파일러에게 32비트 및 64비트 아키텍처 모두에 대한 모든 MISRA 표준을 지원합니다.

사용 Secure Code Warrior MISRA C의 개발자를 업스킬로

Secure Code Warrior '주력 제품 - learning platform - 수많은 대화 형 도전이, courses 개발자가 안전한 C/C++ 코드를 작성하는 데 도움이 되는 평가와 평가. 플랫폼의 콘텐츠는 프레임워크에 특화되어 있으며 매우 매력적입니다. 우리의 C / C + +:포함 코딩 문제는 MISRA C, AUTOSAR C +(MISRA C +) 및 IEC 모두에서 영감을했다.

개발자는 C/C++에 따른 취약점을 식별하고 더 중요한 것은 이러한 버그를 해결하는 방법을 배우는 개인화된 학습 여정에 착수할 수 있습니다. 이 과정에서 개발자는 자신의 약점을 파악하기 위해 진행 상황을 추적하고 동료와 친근한 코딩 대회를 즐길 수 있습니다. 당사의 솔루션을 통해 자동차 및 운송 산업을 어떻게 돕는지 자세히 알아보십시오.

우리의 도전이 얼마나 대화형이고 포함되는지 알아내고 싶으신가요? 일부 C / C + +:에 포함 된 도전을 시도하십시오. learning platform 오늘!

리소스 보기
리소스 보기

아래 양식을 작성하여 보고서를 다운로드하세요.

우리는 당신에게 우리의 제품 및 / 또는 관련 보안 코딩 주제에 대한 정보를 보낼 수있는 귀하의 허가를 바랍니다. 우리는 항상 최대한의주의를 기울여 귀하의 개인 정보를 취급 할 것이며 마케팅 목적으로 다른 회사에 판매하지 않을 것입니다.

전송
양식을 제출하려면 '분석' 쿠키를 활성화하세요. 완료되면 언제든지 다시 비활성화할 수 있습니다.

에 Secure Code Warrior , 우리는 항상 우리의 훈련 범위를 확장하고자합니다. 임베디드 개발자와 보안 관리자에게 안전한 임베디드 시스템을 구축할 수 있도록 임베디드 시스템 보안의 세계를 활용하고 있습니다. 이 게시물에서는 MISRA C 2012 표준에 대해 이야기하고 보안 임베디드 시스템을 구축하기 위해 규정 준수가 필요한 이유에 대해 이야기합니다.

C에서 코드를 작성하는 동안 겉보기에 는 올바르게 보이지만 본질적으로 잘못된 것을 구현하는 것은 매우 쉽습니다. 코드가 잘 컴파일되고 일정 기간 동안 잘 실행될 수도 있습니다. 그러나 입력 크기 및/또는 메모리가 증가하는 경우 동일한 코드가 충돌하거나 정의되지 않은 동작을 나타낼 수 있습니다. 예를 들어 정수가 오버플로를 일으키는 특정 입력 번호 또는 배열을 범위를 벗어나게 하는 특정 문자 시퀀스입니다.

이것은 MISRA C 코딩 표준이 도움이 될 수있는 곳입니다. 표준에 명시된 규칙, 지침 및 모범 사례를 통해 개발자는 임베디드 개발을 위해 안전하고 신뢰할 수 있는 C 코드를 작성할 수 있습니다. 

MISRA C 2012, 표준의 최신 버전, 새로운 규칙을 추가, 기존 규칙을 향상, 그리고 몇 가지 불일치를 해결. 이전 버전을 계속 사용하고 있다면 지금은 전환하기에 좋은 시간이 될 것입니다. 

MISRA C 코딩 표준이란 무엇입니까?

MISRA C 표준에는 C 프로그래밍 언어에 대한 코드 안전성, 휴대성 및 신뢰성 지침이 포함되어 있습니다. 첫 번째 지침 세트는 C 언어에 만전을 기하는 1998년에 발표되었습니다. 

그러나 그 이후로 MISRA 컨소시엄은 C++에 대한 코딩 표준을 개발합니다. 모든 MISRA C 문서에는 해당 규칙의 개발에 기여한 배경 정보에 대한 규칙 집합, 비준수 예제 및 자세한 섹션이 포함되어 있습니다.

C와 C++는 임베디드 소프트웨어를 개발하는 데 가장 널리 사용되는 언어입니다. 주된 이유 중 하나는 기계 언어에 비해 1~2단계의 추상화만 으로 빠르기 때문에 빠릅니다. 그러나 이것은 또한 특히 C에서 안전한 코드를 작성하는 것이 어렵고 오류가 발생하기 쉽다는 것을 의미합니다. 예를 들어 Java 및 C#과 같은 대부분의 상위 언어에서는 가비지 수집이나 동적 타이핑과 같은 사소한 언어에 대해 걱정할 필요가 없습니다. 

그러나 C에서는 데이터 구조에 대한 메모리 조각을 할당하는 경우와 같이 쓰레기를 수집하는 미리 정의된 방법이 없습니다. 그렇지 않으면 C는 다른 언어와 달리 메모리가 해제되지 않아 메모리 가 누수됩니다.

MISRA C 2004 (C2) vs. 미스라 C 2012 (C3) – 무엇이 변경되었습니까?

MISRA C: 2012년, C3라고도 불리는 2013년 4월에 처음 출시되었습니다. 수천 명의 사람들과 조직의 작품에서 지식을 그리는 C3는 새로운 규칙을 추가하고, 기존 규칙의 설명과 배경을 향상시키며, 몇 가지 허점을 닫습니다.

C3는 이전 ISO C90에 대한 규칙을 유지하면서 C99 버전의 언어를 지원합니다. C3의 주요 초점 영역은 규칙 집행의 일반적인 비용을 줄이는 동시에 중요한 시스템에서 C 언어를 더 안전하게 사용하는 것이었습니다. 이 모든 것은 당신이 이미하지 않은 경우, 새로운 표준으로 전환하는 것이 신중합니다.

전반적으로 가장 중요한 변경 사항 목록은 다음과 같습니다.

  • 2004 년 버전에서 발견 된 올바른 문제.
  • 낙엽 규칙의 수를 크게 늘립니다. 해석 도구가 적합성을 결정하는 데 도움이 되는 경우 규칙을 신뢰할 수 있습니다.
  • 규칙은 "필수", "권고"또는 "필수"로 분류됩니다. 어떤 상황에서도 필수 규칙을 위반해서는 안 됩니다. 위반이 정당화되는 경우 필수 및 자문 규칙은 특별한 시나리오에서 위반될 수 있습니다.
  • 자동 생성된 코드에 규칙을 적용하는 방법에 대한 지침이 추가되었습니다. 인간으로 작성된 코드의 동일한 지침이 도구에서 생성된 코드에 항상 적용되지 는 않으므로 매우 중요합니다.
  • 합당한 사용자 행동을 금지하는 지나치게 일반화된 규칙을 제거합니다. 예를 들어 이전에는 매크로를 전혀 사용하지 않는 것이 좋습니다. 이를 통해 우아하고 안전하며 편리한 솔루션을 제공할 수 있는 상황에서도 매크로를 사용할 수 없었습니다. MISRA C: 2012년에는 매크로에 관한 새로운 규칙이 도입되어 적용 가능한 경우 신중하게 사용할 수 있습니다. 함수를 통해 매크로를 사용하는 것이 좋습니다 MISRA C 문서에서 가져온 다음 발췌를 참조하십시오.

MISRA C 규칙

충분한 이야기, 지금은 그들이 적용하는 방법의 예와 함께, 몇 가지 MISRA C 규칙과 실습을 얻을 시간이다.

호환 되는 형식을 memcpy, memmove 및 memcmp에 대 한 포인터 인수로 사용

표준 라이브러리는 memcpy, memmove memcmp가 지정된 바이트 수의 바이트 이동 또는 비교를 바이트단위로 수행합니다. MISRA C 2012 표준의 규칙 21.15는 두 함수 매개 변수가 동일한 형식에 대한 포인터여야 한다고 지시합니다. 호환되지 않는 포인터 유형이 있는 함수 호출은 실수를 나타낼 수 있습니다. 

공식 MISRA 규정 준수 문서에서 가져온 다음 이미지를 고려하십시오. 이 규칙은 필요하고 낙하가능하며 C90과 C99 모두에 적용됩니다.

MISRA C 규칙 21.15의 스크린 샷

예제는 규칙 설명을 따릅니다.

비준수 솔루션의 스크린샷입니다.

볼 수 있듯이 개체는 다른 유형(uint8_t 및 uint16_t)이므로 이 솔루션은 비준수 솔루션입니다.

입력으로 길이가 걸리지 않는 문자열 처리 함수는 바인딩되지 않은 액세스가 발생하지 않습니다.

String handling functions from <string.h> that don’t take the length as an input, shouldn’t result in out-of-bound access. The relevant functions are: strcat, strchr, strcmp, strcoll, strcpy, strcspn, strlen, strpbrk, strrchr, strspn, strrstr, and strtok. The rule is mandatory, meaning it can never be breached, under any circumstances. It applies to both C90 and C99, and is undecidable.

MISRA C 규칙 21.17의 스크린 샷.

해당 예제는 다음과 같은 예입니다.

문자열 처리 기능의 올바른 예제의 스크린샷

당신이 볼 수 있듯이, 함수 f1의 strcpy, 5 문자를 보유 할 수있는 문자열의 길이를 넘어 복사됩니다. 또한 "str"의 내용이 맞는 경우에만 문자열이 복사되는 strcpy를 준수하고 안전하게 사용합니다.

외부에서 수신된 데이터 검증

Dir 4.14는 "외부" 소스에서 수신된 데이터의 유효성을 확인하는 것이 좋습니다. 외부 입력은 다음과 같은 수 있습니다.

  • 파일에서 읽습니다.
  • 환경 변수에서 읽습니다.
  • 모든 사용자 입력.
  • 통신 채널을 통해 받은 모든 것. 예를 들어 TCP 연결 또는 HTTP API 등을 통해

이 지침은 필요한 범주에 속하며 C90 과 C99 모두에 적용됩니다. 이에 대한 근거는 프로그램이 외부 소스에서 수신된 데이터를 제어할 수 없으므로 이 데이터가 유효하지 않거나 악의적일 수 있다는 것입니다. 예를 들어 프로그램은 사용자가 숫자를 입력할 것으로 예상하지만 사용자는 문자열을 입력합니다. 입력을 처리하기 전에 프로그램은 실제로 숫자인지 확인해야 합니다.

외부 소스로부터 받은 값의 유효성을 확인해야 합니다.

MISRA C 2012로 전환하는 방법

MISRA C 2012로 전환하려면 코딩 지침 문서에서 업데이트가 필요합니다. 사용하지 않고 대신 정적 분석 도구(권장 선택)에 의존하는 경우 도구의 최신 버전을 얻어야 할 수 있습니다. MISRA C 2012 규정 준수를 확인하는 세 가지 도구는 다음과 같습니다.

  1. Cppcheck는 MISRA 규칙을 확인하고 다양한 종류의 버그를 감지할 수 있는 오픈 소스 도구입니다.
  2. PC-lint Plus는 30일 평가 기간이 함께 제공되는 유료 도구입니다. MISRA C 규정 준수를 확인하는 것 외에도 잠재적인 버그 및 취약점을 식별하는 데도 도움이 될 수 있습니다.
  3. CodeSonar는 MISRA C와 C++ 규정 준수를 모두 확인하는 또 다른 도구입니다.

MISRA 규정 준수를 테스트할 수 있는 컴파일러도 몇 개 있습니다. 규칙 위반이 감지되면 경고 또는 예외가 그에 따라 발생합니다. 예를 들어 그린 힐스 소프트웨어는 컴파일러에게 32비트 및 64비트 아키텍처 모두에 대한 모든 MISRA 표준을 지원합니다.

사용 Secure Code Warrior MISRA C의 개발자를 업스킬로

Secure Code Warrior '주력 제품 - learning platform - 수많은 대화 형 도전이, courses 개발자가 안전한 C/C++ 코드를 작성하는 데 도움이 되는 평가와 평가. 플랫폼의 콘텐츠는 프레임워크에 특화되어 있으며 매우 매력적입니다. 우리의 C / C + +:포함 코딩 문제는 MISRA C, AUTOSAR C +(MISRA C +) 및 IEC 모두에서 영감을했다.

개발자는 C/C++에 따른 취약점을 식별하고 더 중요한 것은 이러한 버그를 해결하는 방법을 배우는 개인화된 학습 여정에 착수할 수 있습니다. 이 과정에서 개발자는 자신의 약점을 파악하기 위해 진행 상황을 추적하고 동료와 친근한 코딩 대회를 즐길 수 있습니다. 당사의 솔루션을 통해 자동차 및 운송 산업을 어떻게 돕는지 자세히 알아보십시오.

우리의 도전이 얼마나 대화형이고 포함되는지 알아내고 싶으신가요? 일부 C / C + +:에 포함 된 도전을 시도하십시오. learning platform 오늘!

리소스에 접근

아래 링크를 클릭하여 이 자료의 PDF를 다운로드하세요.

Secure Code Warrior 는 전체 소프트웨어 개발 수명 주기에서 코드를 보호하고 사이버 보안을 최우선으로 생각하는 문화를 조성할 수 있도록 도와드립니다. 앱 보안 관리자, 개발자, CISO 등 보안과 관련된 모든 사람이 안전하지 않은 코드와 관련된 위험을 줄일 수 있도록 도와드릴 수 있습니다.

보고서 보기데모 예약
PDF 다운로드
리소스 보기
공유하세요:
더 알고 싶으신가요?

공유하세요:
저자
Secure Code Warrior
게시일: 2021.08.17.

Secure Code Warrior 개발자가 기술을 향상함에 따라 안전한 코딩을 긍정적으로 만들고 매력적인 경험을 제공합니다. 우리는 보안 숙련 된 개발자가 우리의 연결된 세계의 일상적인 슈퍼 히어로가 될 수 있도록, 자신의 선호하는 학습 경로를 따라 각 코더를 안내합니다.

Secure Code Warrior 는 개발자에게 안전하게 코딩할 수 있는 기술을 제공하여 보안 중심의 개발자 문화를 구축합니다. Atlassian의 대표적인 애자일( Learning Platform )은 관련 기술 기반 경로, 실습( missions) 및 상황에 맞는 도구를 제공하여 개발자가 빠르게 기술을 배우고, 구축하고, 적용하여 보안 코드를 빠르게 작성할 수 있도록 지원합니다.

공유하세요:

에 Secure Code Warrior , 우리는 항상 우리의 훈련 범위를 확장하고자합니다. 임베디드 개발자와 보안 관리자에게 안전한 임베디드 시스템을 구축할 수 있도록 임베디드 시스템 보안의 세계를 활용하고 있습니다. 이 게시물에서는 MISRA C 2012 표준에 대해 이야기하고 보안 임베디드 시스템을 구축하기 위해 규정 준수가 필요한 이유에 대해 이야기합니다.

C에서 코드를 작성하는 동안 겉보기에 는 올바르게 보이지만 본질적으로 잘못된 것을 구현하는 것은 매우 쉽습니다. 코드가 잘 컴파일되고 일정 기간 동안 잘 실행될 수도 있습니다. 그러나 입력 크기 및/또는 메모리가 증가하는 경우 동일한 코드가 충돌하거나 정의되지 않은 동작을 나타낼 수 있습니다. 예를 들어 정수가 오버플로를 일으키는 특정 입력 번호 또는 배열을 범위를 벗어나게 하는 특정 문자 시퀀스입니다.

이것은 MISRA C 코딩 표준이 도움이 될 수있는 곳입니다. 표준에 명시된 규칙, 지침 및 모범 사례를 통해 개발자는 임베디드 개발을 위해 안전하고 신뢰할 수 있는 C 코드를 작성할 수 있습니다. 

MISRA C 2012, 표준의 최신 버전, 새로운 규칙을 추가, 기존 규칙을 향상, 그리고 몇 가지 불일치를 해결. 이전 버전을 계속 사용하고 있다면 지금은 전환하기에 좋은 시간이 될 것입니다. 

MISRA C 코딩 표준이란 무엇입니까?

MISRA C 표준에는 C 프로그래밍 언어에 대한 코드 안전성, 휴대성 및 신뢰성 지침이 포함되어 있습니다. 첫 번째 지침 세트는 C 언어에 만전을 기하는 1998년에 발표되었습니다. 

그러나 그 이후로 MISRA 컨소시엄은 C++에 대한 코딩 표준을 개발합니다. 모든 MISRA C 문서에는 해당 규칙의 개발에 기여한 배경 정보에 대한 규칙 집합, 비준수 예제 및 자세한 섹션이 포함되어 있습니다.

C와 C++는 임베디드 소프트웨어를 개발하는 데 가장 널리 사용되는 언어입니다. 주된 이유 중 하나는 기계 언어에 비해 1~2단계의 추상화만 으로 빠르기 때문에 빠릅니다. 그러나 이것은 또한 특히 C에서 안전한 코드를 작성하는 것이 어렵고 오류가 발생하기 쉽다는 것을 의미합니다. 예를 들어 Java 및 C#과 같은 대부분의 상위 언어에서는 가비지 수집이나 동적 타이핑과 같은 사소한 언어에 대해 걱정할 필요가 없습니다. 

그러나 C에서는 데이터 구조에 대한 메모리 조각을 할당하는 경우와 같이 쓰레기를 수집하는 미리 정의된 방법이 없습니다. 그렇지 않으면 C는 다른 언어와 달리 메모리가 해제되지 않아 메모리 가 누수됩니다.

MISRA C 2004 (C2) vs. 미스라 C 2012 (C3) – 무엇이 변경되었습니까?

MISRA C: 2012년, C3라고도 불리는 2013년 4월에 처음 출시되었습니다. 수천 명의 사람들과 조직의 작품에서 지식을 그리는 C3는 새로운 규칙을 추가하고, 기존 규칙의 설명과 배경을 향상시키며, 몇 가지 허점을 닫습니다.

C3는 이전 ISO C90에 대한 규칙을 유지하면서 C99 버전의 언어를 지원합니다. C3의 주요 초점 영역은 규칙 집행의 일반적인 비용을 줄이는 동시에 중요한 시스템에서 C 언어를 더 안전하게 사용하는 것이었습니다. 이 모든 것은 당신이 이미하지 않은 경우, 새로운 표준으로 전환하는 것이 신중합니다.

전반적으로 가장 중요한 변경 사항 목록은 다음과 같습니다.

  • 2004 년 버전에서 발견 된 올바른 문제.
  • 낙엽 규칙의 수를 크게 늘립니다. 해석 도구가 적합성을 결정하는 데 도움이 되는 경우 규칙을 신뢰할 수 있습니다.
  • 규칙은 "필수", "권고"또는 "필수"로 분류됩니다. 어떤 상황에서도 필수 규칙을 위반해서는 안 됩니다. 위반이 정당화되는 경우 필수 및 자문 규칙은 특별한 시나리오에서 위반될 수 있습니다.
  • 자동 생성된 코드에 규칙을 적용하는 방법에 대한 지침이 추가되었습니다. 인간으로 작성된 코드의 동일한 지침이 도구에서 생성된 코드에 항상 적용되지 는 않으므로 매우 중요합니다.
  • 합당한 사용자 행동을 금지하는 지나치게 일반화된 규칙을 제거합니다. 예를 들어 이전에는 매크로를 전혀 사용하지 않는 것이 좋습니다. 이를 통해 우아하고 안전하며 편리한 솔루션을 제공할 수 있는 상황에서도 매크로를 사용할 수 없었습니다. MISRA C: 2012년에는 매크로에 관한 새로운 규칙이 도입되어 적용 가능한 경우 신중하게 사용할 수 있습니다. 함수를 통해 매크로를 사용하는 것이 좋습니다 MISRA C 문서에서 가져온 다음 발췌를 참조하십시오.

MISRA C 규칙

충분한 이야기, 지금은 그들이 적용하는 방법의 예와 함께, 몇 가지 MISRA C 규칙과 실습을 얻을 시간이다.

호환 되는 형식을 memcpy, memmove 및 memcmp에 대 한 포인터 인수로 사용

표준 라이브러리는 memcpy, memmove memcmp가 지정된 바이트 수의 바이트 이동 또는 비교를 바이트단위로 수행합니다. MISRA C 2012 표준의 규칙 21.15는 두 함수 매개 변수가 동일한 형식에 대한 포인터여야 한다고 지시합니다. 호환되지 않는 포인터 유형이 있는 함수 호출은 실수를 나타낼 수 있습니다. 

공식 MISRA 규정 준수 문서에서 가져온 다음 이미지를 고려하십시오. 이 규칙은 필요하고 낙하가능하며 C90과 C99 모두에 적용됩니다.

MISRA C 규칙 21.15의 스크린 샷

예제는 규칙 설명을 따릅니다.

비준수 솔루션의 스크린샷입니다.

볼 수 있듯이 개체는 다른 유형(uint8_t 및 uint16_t)이므로 이 솔루션은 비준수 솔루션입니다.

입력으로 길이가 걸리지 않는 문자열 처리 함수는 바인딩되지 않은 액세스가 발생하지 않습니다.

String handling functions from <string.h> that don’t take the length as an input, shouldn’t result in out-of-bound access. The relevant functions are: strcat, strchr, strcmp, strcoll, strcpy, strcspn, strlen, strpbrk, strrchr, strspn, strrstr, and strtok. The rule is mandatory, meaning it can never be breached, under any circumstances. It applies to both C90 and C99, and is undecidable.

MISRA C 규칙 21.17의 스크린 샷.

해당 예제는 다음과 같은 예입니다.

문자열 처리 기능의 올바른 예제의 스크린샷

당신이 볼 수 있듯이, 함수 f1의 strcpy, 5 문자를 보유 할 수있는 문자열의 길이를 넘어 복사됩니다. 또한 "str"의 내용이 맞는 경우에만 문자열이 복사되는 strcpy를 준수하고 안전하게 사용합니다.

외부에서 수신된 데이터 검증

Dir 4.14는 "외부" 소스에서 수신된 데이터의 유효성을 확인하는 것이 좋습니다. 외부 입력은 다음과 같은 수 있습니다.

  • 파일에서 읽습니다.
  • 환경 변수에서 읽습니다.
  • 모든 사용자 입력.
  • 통신 채널을 통해 받은 모든 것. 예를 들어 TCP 연결 또는 HTTP API 등을 통해

이 지침은 필요한 범주에 속하며 C90 과 C99 모두에 적용됩니다. 이에 대한 근거는 프로그램이 외부 소스에서 수신된 데이터를 제어할 수 없으므로 이 데이터가 유효하지 않거나 악의적일 수 있다는 것입니다. 예를 들어 프로그램은 사용자가 숫자를 입력할 것으로 예상하지만 사용자는 문자열을 입력합니다. 입력을 처리하기 전에 프로그램은 실제로 숫자인지 확인해야 합니다.

외부 소스로부터 받은 값의 유효성을 확인해야 합니다.

MISRA C 2012로 전환하는 방법

MISRA C 2012로 전환하려면 코딩 지침 문서에서 업데이트가 필요합니다. 사용하지 않고 대신 정적 분석 도구(권장 선택)에 의존하는 경우 도구의 최신 버전을 얻어야 할 수 있습니다. MISRA C 2012 규정 준수를 확인하는 세 가지 도구는 다음과 같습니다.

  1. Cppcheck는 MISRA 규칙을 확인하고 다양한 종류의 버그를 감지할 수 있는 오픈 소스 도구입니다.
  2. PC-lint Plus는 30일 평가 기간이 함께 제공되는 유료 도구입니다. MISRA C 규정 준수를 확인하는 것 외에도 잠재적인 버그 및 취약점을 식별하는 데도 도움이 될 수 있습니다.
  3. CodeSonar는 MISRA C와 C++ 규정 준수를 모두 확인하는 또 다른 도구입니다.

MISRA 규정 준수를 테스트할 수 있는 컴파일러도 몇 개 있습니다. 규칙 위반이 감지되면 경고 또는 예외가 그에 따라 발생합니다. 예를 들어 그린 힐스 소프트웨어는 컴파일러에게 32비트 및 64비트 아키텍처 모두에 대한 모든 MISRA 표준을 지원합니다.

사용 Secure Code Warrior MISRA C의 개발자를 업스킬로

Secure Code Warrior '주력 제품 - learning platform - 수많은 대화 형 도전이, courses 개발자가 안전한 C/C++ 코드를 작성하는 데 도움이 되는 평가와 평가. 플랫폼의 콘텐츠는 프레임워크에 특화되어 있으며 매우 매력적입니다. 우리의 C / C + +:포함 코딩 문제는 MISRA C, AUTOSAR C +(MISRA C +) 및 IEC 모두에서 영감을했다.

개발자는 C/C++에 따른 취약점을 식별하고 더 중요한 것은 이러한 버그를 해결하는 방법을 배우는 개인화된 학습 여정에 착수할 수 있습니다. 이 과정에서 개발자는 자신의 약점을 파악하기 위해 진행 상황을 추적하고 동료와 친근한 코딩 대회를 즐길 수 있습니다. 당사의 솔루션을 통해 자동차 및 운송 산업을 어떻게 돕는지 자세히 알아보십시오.

우리의 도전이 얼마나 대화형이고 포함되는지 알아내고 싶으신가요? 일부 C / C + +:에 포함 된 도전을 시도하십시오. learning platform 오늘!

목차

PDF 다운로드
리소스 보기
더 알고 싶으신가요?

Secure Code Warrior 개발자가 기술을 향상함에 따라 안전한 코딩을 긍정적으로 만들고 매력적인 경험을 제공합니다. 우리는 보안 숙련 된 개발자가 우리의 연결된 세계의 일상적인 슈퍼 히어로가 될 수 있도록, 자신의 선호하는 학습 경로를 따라 각 코더를 안내합니다.

Secure Code Warrior 는 전체 소프트웨어 개발 수명 주기에서 코드를 보호하고 사이버 보안을 최우선으로 생각하는 문화를 조성할 수 있도록 도와드립니다. 앱 보안 관리자, 개발자, CISO 등 보안과 관련된 모든 사람이 안전하지 않은 코드와 관련된 위험을 줄일 수 있도록 도와드릴 수 있습니다.

데모 예약다운로드
공유하세요:
리소스 허브

시작할 수 있는 리소스

더 많은 게시물
리소스 허브

시작할 수 있는 리소스

더 많은 게시물