Icônes SCW
héros bg sans séparateur
Blog

ミスラ C 2012 対 MISRA C2-レボアユー

Secure Code Warrior
Publié le 17 août 2021
Dernière mise à jour le 10 mars 2026

セキュア・コード・ウォリアーでは、常にトレーニング対象範囲の拡大を目指しています。組込み開発者とセキュリティ管理者が安全な組込みシステムを構築できるようにするために、私たちは組込みシステム・セキュリティの世界に参入しています。この投稿では、MISRA C 2012 標準と、安全な組み込みシステムを構築するためになぜそのコンプライアンスが必要なのかについて説明します。

C でコードを書いていると、一見正しいように見えて本質的に間違っているものを実装するのはとても簡単です。コードは問題なくコンパイルできるかもしれませんし、一定期間でも正常に動作するかもしれません。しかし、入力サイズやメモリが増えると、同じコードがクラッシュしたり、未定義の動作をしたりする可能性があります。たとえば、特定の入力番号によって整数がオーバーフローしたり、特定の文字シーケンスが原因で配列が範囲外になったりします。

そこで、MISRA C コーディング標準が役に立ちます。この規格によって定められた規則、ガイドライン、ベスト・プラクティスにより、開発者は組込み開発用の安全で信頼できる C コードを書くことができます。

この規格の最新版である MISRA C 2012 では、新しい規則が追加され、既存の規則が強化され、いくつかの相違点が修正されています。まだ古いバージョンを使用している場合は、今が切り替えの絶好の機会です。

MISRA C コーディング標準とはどのようなものですか?

MISRA C 標準には、C プログラミング言語のコードの安全性、移植性、信頼性のガイドラインが含まれています。C 言語に特化した最初のガイドラインは 1998 年にリリースされました。

しかし、それ以来、MISRAコンソーシアムはC++のコーディング標準も開発しています。すべての MISRA C 文書には、一連の規則、非準拠の例、および当該規則の開発に貢献した背景情報に関する詳細なセクションが含まれています。

CとC++は、組み込みソフトウェアの開発で最も広く使用されている言語です。その主な理由の 1 つは、これらの言語は高速で、機械語と比べて抽象化レベルが 1 ~ 2 レベルしかないことです。しかしこれは、特に C で安全なコードを書くのは難しく、間違いも起こりやすいということでもあります。たとえば、Java や C# などのほとんどの高級言語では、ガベージコレクションや動的型付けなどの些細なことを気にする必要はありません。

しかし、C言語では、ゴミを集めるための定義済みの方法はありません。つまり、データ構造にメモリを割り当てる場合、使い終わったら手動でメモリを解放する必要があります。そうしないと、C は他の言語とは異なり、メモリを解放しないため、メモリリークが発生します。

MISRA C 2004 (C2) 対 MISRA C 2012 (C3) — 何が変わったのか?

MISRA C: 2012はC3とも呼ばれ、2013年4月に初めてリリースされました。C3は、何千もの人々や組織の活動から得た知識を活用して、新しいルールを追加し、既存のルールの説明や背景を強化し、抜け穴を塞いでいます。

C3 は C99 バージョンの言語をサポートすると同時に、古い ISO C90 のルールも維持しています。C3 の主な焦点は、クリティカルなシステムで C 言語をより安全に使用できるようにすると同時に、ルール施行にかかる通常のコストを削減することでした。こうしたことから、まだ新しい標準に切り替えていない場合は、新しい標準に切り替えるのが賢明です。

全体として、最も重要な変更点は次のとおりです。

  • 2004 バージョンで見つかった問題を修正しました。
  • の数を大幅に増やす 決定可能なルール。 ルールは 決定可能、 分析ツールがそれへの適合性を判断するのに役立つかどうか。
  • ルールは「必須」、「勧告」、または「必須」に分類されます。強制ルールはいかなる状況においても決して破ってはなりません。特別なシナリオでは、違反が正当化される限り、必須規則や勧告規則に違反する可能性があります。
  • 自動生成コードにルールを適用する方法に関するガイダンスを追加しました。これは非常に重要です。なぜなら、人間が書いたコードと同じガイドラインが、ツールによって生成されたコードには必ずしも当てはまらないからです。
  • ユーザーの合理的な行動を妨げる過度に一般化されたルールを削除してください。たとえば、以前はマクロをまったく使用しないことが推奨されていました。マクロは、さまざまな問題や混乱を招く可能性があるためです (マクロをデバッグできない、マクロに名前空間がないなど)。これにより、マクロがエレガントで安全で便利なソリューションを提供できるような状況でも、マクロを使用できなくなりました。MISRA C: 2012 では、マクロに関する新しい規則が導入され、ユーザーはいつでもマクロを慎重に使用できるようになりました。MISRA C 文書から抜粋した次の抜粋では、関数ではなくマクロを使用することを推奨しています。

MISRA C ルールが実際に使われています

説明は以上です。次は、MISRA C のルールを、その適用方法の例とともに実際に使ってみましょう。

互換性のある型を memcpy、memmove、および memcmp へのポインタ引数として使用する

標準ライブラリ関数 メモリコピー、メモリムーブ、 そして memcmp バイト単位の移動または指定されたバイト数の比較を行います。MISRA C 2012 規格の規則 21.15 では、2 つの関数パラメータは同じ型へのポインタでなければならないと規定されています。互換性のないポインタ型を使った関数呼び出しは、間違いを示している可能性があります。

MISRA の公式コンプライアンス文書から抜粋した次の画像を見てください。ルールは 必須、決定可能、 C90とC99の両方に適用されます。

Capture d'écran de la règle 21.15 de la MISRA C

ルールの説明の次に例を示します。

Capture d'écran d'une solution non conforme.

ご覧のように、オブジェクトは異なるタイプ (uint8_t と uint16_t) であるため、これは非準拠のソリューションです。

入力として長さをとらない文字列処理関数は、範囲外アクセスにはなりません

<string.h>その長さを入力として受け取らない文字列処理関数では、範囲外アクセスが発生しないはずです。関連する関数は strcat、strchr、strcmp、strcoll、strcpy、strcspn、strlen、strpbrk、strrchr、strspn、strrstr、strtok です。ルールは 必須、 つまり、どんな状況でも破ることはできないということです。これは C90 と C99 の両方に適用され、 決まらない。

Capture d'écran de la règle 21.17 de la MISRA C.

対応する例は次のとおりです。

Capture d'écran d'un exemple correct de fonctions de manipulation de chaînes de caractères

ご覧の通り、 ずんぐりした 関数 f1 では、5 文字しか格納できない文字列の長さを超えてコピーします。また、strcpy の仕様に準拠した安全な使い方もあります。strcpy では、「str」の内容が収まる場合にのみ文字列がコピーされます。

外部から受信したデータを検証

Dir 4.14では、「外部」ソースから受信したデータの有効性を確認することを推奨しています。外部入力には次のようなものがあります。

  • ファイルからの読み込み。
  • 環境変数から読み取ります。
  • 任意のユーザー入力。
  • 通信チャネルを介して受信したもの。たとえば、TCP 接続や HTTP API などを介して送信された場合などです。

この指令は 必須 カテゴリであり、C90とC99の両方に適用されます。その理由は、外部ソースから受信したデータをプログラムが制御できないため、このデータは無効または悪意のあるものである可能性があるということです。例えば、プログラムではユーザーが数字を入力することを期待しているのに、ユーザーが文字列を入力したとします。入力を処理する前に、プログラムは入力が実際に数値であることを確認する必要があります。

La validité des valeurs reçues de sources externes doit être vérifiée

MISRA C 2012 に切り替える方法

MISRA C 2012 に切り替えるには、コーディングガイドラインドキュメントを更新する必要があります。これを使用せず、代わりに静的解析ツール (推奨選択肢) を使用している場合は、新しいバージョンのツールを入手しなければならない場合があります。MISRA C 2012 への準拠を確認するツールが 3 つあります。

  1. Cppcheck は、MISRA ルールをチェックしたり、さまざまな種類のバグを検出したりできるオープンソースツールです。
  2. PC-リントプラス は、30 日間の評価期間がある有料ツールです。MISRA C への準拠を確認するだけでなく、潜在的なバグや脆弱性を特定するのにも役立ちます。
  3. コードソナー は、MISRA C と C++ の両方への準拠をチェックするもう 1 つのツールです。

MISRA への準拠をテストできるコンパイラもいくつかあります。ルール違反が検出されると、それに応じて警告または例外が発生します。例えば グリーンヒルズソフトウェア は、32 ビットアーキテクチャと 64 ビットアーキテクチャの両方で、すべての MISRA 標準をサポートするコンパイラを提供します。

セキュアコードウォリアーを使用して MISRA C の開発者をスキルアップする

Secure Code Warriorの主力製品である学習プラットフォームには、開発者が安全なC/C++コードを書くためのトレーニングに役立つインタラクティブな課題、コース、評価が多数あります。プラットフォーム上のコンテンツはフレームワークに特化しており、非常に魅力的です。C/C++: Embed コーディングの課題は、MISRA C、AUTOSAR C++ (MISRA C++)、IEC の両方からインスピレーションを得たものです。

開発者は、C/C++固有の脆弱性を特定し、さらに重要なことに、それらのバグの修正方法を学ぶという、パーソナライズされた学習ジャーニーに乗り出すことができます。このプロセスでは、開発者は自分の弱点を特定するために進捗状況を追跡できるほか、同僚との友好的なコーディングコンテストを楽しむこともできます。詳細はこちらをご覧ください。 自動車および輸送産業への支援方法 私たちのソリューションで。

私たちの課題がどれほどインタラクティブで、埋め込みに焦点を当てているかを知りたいですか?試してみてください 一部の C/C++: 埋め込みの課題 今日は学習プラットフォームで!

Afficher les ressources
Afficher les ressources

アポリ、MISRA C 2012 とC2 ヴァングインプラシ、WERGVING CODOWLISISISSA。ABINARKNALTたりMISRAのせいせいせいでもうなずく。

Souhaitez-vous en savoir davantage ?

Secure Code Warrior transforme le codage sécurisé en une expérience positive et stimulante à mesure que les développeurs améliorent leurs compétences. Il guide chaque codeur vers le parcours d'apprentissage qu'il souhaite suivre afin que les développeurs possédant des compétences en sécurité puissent devenir des super-héros au quotidien dans un monde connecté.

En savoir plus

Secure Code Warrior vous assiste dans la protection de votre code tout au long du cycle de vie du développement logiciel et dans la création d'une culture qui accorde la priorité à la cybersécurité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité des systèmes d'information ou professionnel de la sécurité, nous vous aidons à réduire les risques liés au code non sécurisé.

Veuillez réserver une démonstration.
Partager :
marques LinkedInSocialLogo x
Auteur
Secure Code Warrior
Publié le 17 août 2021

Secure Code Warrior transforme le codage sécurisé en une expérience positive et stimulante à mesure que les développeurs améliorent leurs compétences. Il guide chaque codeur vers le parcours d'apprentissage qu'il souhaite suivre afin que les développeurs possédant des compétences en sécurité puissent devenir des super-héros au quotidien dans un monde connecté.

Cet article a été rédigé par l'équipe d'experts industriels de Secure Code Warrior. Il vise à aider les développeurs à acquérir les connaissances et les compétences nécessaires pour créer des logiciels sécurisés dès le départ. Il s'appuie sur une expertise approfondie en matière de pratiques de codage sécurisé, sur les tendances du secteur et sur des observations tirées du monde réel.

Partager :
marques LinkedInSocialLogo x

セキュア・コード・ウォリアーでは、常にトレーニング対象範囲の拡大を目指しています。組込み開発者とセキュリティ管理者が安全な組込みシステムを構築できるようにするために、私たちは組込みシステム・セキュリティの世界に参入しています。この投稿では、MISRA C 2012 標準と、安全な組み込みシステムを構築するためになぜそのコンプライアンスが必要なのかについて説明します。

C でコードを書いていると、一見正しいように見えて本質的に間違っているものを実装するのはとても簡単です。コードは問題なくコンパイルできるかもしれませんし、一定期間でも正常に動作するかもしれません。しかし、入力サイズやメモリが増えると、同じコードがクラッシュしたり、未定義の動作をしたりする可能性があります。たとえば、特定の入力番号によって整数がオーバーフローしたり、特定の文字シーケンスが原因で配列が範囲外になったりします。

そこで、MISRA C コーディング標準が役に立ちます。この規格によって定められた規則、ガイドライン、ベスト・プラクティスにより、開発者は組込み開発用の安全で信頼できる C コードを書くことができます。

この規格の最新版である MISRA C 2012 では、新しい規則が追加され、既存の規則が強化され、いくつかの相違点が修正されています。まだ古いバージョンを使用している場合は、今が切り替えの絶好の機会です。

MISRA C コーディング標準とはどのようなものですか?

MISRA C 標準には、C プログラミング言語のコードの安全性、移植性、信頼性のガイドラインが含まれています。C 言語に特化した最初のガイドラインは 1998 年にリリースされました。

しかし、それ以来、MISRAコンソーシアムはC++のコーディング標準も開発しています。すべての MISRA C 文書には、一連の規則、非準拠の例、および当該規則の開発に貢献した背景情報に関する詳細なセクションが含まれています。

CとC++は、組み込みソフトウェアの開発で最も広く使用されている言語です。その主な理由の 1 つは、これらの言語は高速で、機械語と比べて抽象化レベルが 1 ~ 2 レベルしかないことです。しかしこれは、特に C で安全なコードを書くのは難しく、間違いも起こりやすいということでもあります。たとえば、Java や C# などのほとんどの高級言語では、ガベージコレクションや動的型付けなどの些細なことを気にする必要はありません。

しかし、C言語では、ゴミを集めるための定義済みの方法はありません。つまり、データ構造にメモリを割り当てる場合、使い終わったら手動でメモリを解放する必要があります。そうしないと、C は他の言語とは異なり、メモリを解放しないため、メモリリークが発生します。

MISRA C 2004 (C2) 対 MISRA C 2012 (C3) — 何が変わったのか?

MISRA C: 2012はC3とも呼ばれ、2013年4月に初めてリリースされました。C3は、何千もの人々や組織の活動から得た知識を活用して、新しいルールを追加し、既存のルールの説明や背景を強化し、抜け穴を塞いでいます。

C3 は C99 バージョンの言語をサポートすると同時に、古い ISO C90 のルールも維持しています。C3 の主な焦点は、クリティカルなシステムで C 言語をより安全に使用できるようにすると同時に、ルール施行にかかる通常のコストを削減することでした。こうしたことから、まだ新しい標準に切り替えていない場合は、新しい標準に切り替えるのが賢明です。

全体として、最も重要な変更点は次のとおりです。

  • 2004 バージョンで見つかった問題を修正しました。
  • の数を大幅に増やす 決定可能なルール。 ルールは 決定可能、 分析ツールがそれへの適合性を判断するのに役立つかどうか。
  • ルールは「必須」、「勧告」、または「必須」に分類されます。強制ルールはいかなる状況においても決して破ってはなりません。特別なシナリオでは、違反が正当化される限り、必須規則や勧告規則に違反する可能性があります。
  • 自動生成コードにルールを適用する方法に関するガイダンスを追加しました。これは非常に重要です。なぜなら、人間が書いたコードと同じガイドラインが、ツールによって生成されたコードには必ずしも当てはまらないからです。
  • ユーザーの合理的な行動を妨げる過度に一般化されたルールを削除してください。たとえば、以前はマクロをまったく使用しないことが推奨されていました。マクロは、さまざまな問題や混乱を招く可能性があるためです (マクロをデバッグできない、マクロに名前空間がないなど)。これにより、マクロがエレガントで安全で便利なソリューションを提供できるような状況でも、マクロを使用できなくなりました。MISRA C: 2012 では、マクロに関する新しい規則が導入され、ユーザーはいつでもマクロを慎重に使用できるようになりました。MISRA C 文書から抜粋した次の抜粋では、関数ではなくマクロを使用することを推奨しています。

MISRA C ルールが実際に使われています

説明は以上です。次は、MISRA C のルールを、その適用方法の例とともに実際に使ってみましょう。

互換性のある型を memcpy、memmove、および memcmp へのポインタ引数として使用する

標準ライブラリ関数 メモリコピー、メモリムーブ、 そして memcmp バイト単位の移動または指定されたバイト数の比較を行います。MISRA C 2012 規格の規則 21.15 では、2 つの関数パラメータは同じ型へのポインタでなければならないと規定されています。互換性のないポインタ型を使った関数呼び出しは、間違いを示している可能性があります。

MISRA の公式コンプライアンス文書から抜粋した次の画像を見てください。ルールは 必須、決定可能、 C90とC99の両方に適用されます。

Capture d'écran de la règle 21.15 de la MISRA C

ルールの説明の次に例を示します。

Capture d'écran d'une solution non conforme.

ご覧のように、オブジェクトは異なるタイプ (uint8_t と uint16_t) であるため、これは非準拠のソリューションです。

入力として長さをとらない文字列処理関数は、範囲外アクセスにはなりません

<string.h>その長さを入力として受け取らない文字列処理関数では、範囲外アクセスが発生しないはずです。関連する関数は strcat、strchr、strcmp、strcoll、strcpy、strcspn、strlen、strpbrk、strrchr、strspn、strrstr、strtok です。ルールは 必須、 つまり、どんな状況でも破ることはできないということです。これは C90 と C99 の両方に適用され、 決まらない。

Capture d'écran de la règle 21.17 de la MISRA C.

対応する例は次のとおりです。

Capture d'écran d'un exemple correct de fonctions de manipulation de chaînes de caractères

ご覧の通り、 ずんぐりした 関数 f1 では、5 文字しか格納できない文字列の長さを超えてコピーします。また、strcpy の仕様に準拠した安全な使い方もあります。strcpy では、「str」の内容が収まる場合にのみ文字列がコピーされます。

外部から受信したデータを検証

Dir 4.14では、「外部」ソースから受信したデータの有効性を確認することを推奨しています。外部入力には次のようなものがあります。

  • ファイルからの読み込み。
  • 環境変数から読み取ります。
  • 任意のユーザー入力。
  • 通信チャネルを介して受信したもの。たとえば、TCP 接続や HTTP API などを介して送信された場合などです。

この指令は 必須 カテゴリであり、C90とC99の両方に適用されます。その理由は、外部ソースから受信したデータをプログラムが制御できないため、このデータは無効または悪意のあるものである可能性があるということです。例えば、プログラムではユーザーが数字を入力することを期待しているのに、ユーザーが文字列を入力したとします。入力を処理する前に、プログラムは入力が実際に数値であることを確認する必要があります。

La validité des valeurs reçues de sources externes doit être vérifiée

MISRA C 2012 に切り替える方法

MISRA C 2012 に切り替えるには、コーディングガイドラインドキュメントを更新する必要があります。これを使用せず、代わりに静的解析ツール (推奨選択肢) を使用している場合は、新しいバージョンのツールを入手しなければならない場合があります。MISRA C 2012 への準拠を確認するツールが 3 つあります。

  1. Cppcheck は、MISRA ルールをチェックしたり、さまざまな種類のバグを検出したりできるオープンソースツールです。
  2. PC-リントプラス は、30 日間の評価期間がある有料ツールです。MISRA C への準拠を確認するだけでなく、潜在的なバグや脆弱性を特定するのにも役立ちます。
  3. コードソナー は、MISRA C と C++ の両方への準拠をチェックするもう 1 つのツールです。

MISRA への準拠をテストできるコンパイラもいくつかあります。ルール違反が検出されると、それに応じて警告または例外が発生します。例えば グリーンヒルズソフトウェア は、32 ビットアーキテクチャと 64 ビットアーキテクチャの両方で、すべての MISRA 標準をサポートするコンパイラを提供します。

セキュアコードウォリアーを使用して MISRA C の開発者をスキルアップする

Secure Code Warriorの主力製品である学習プラットフォームには、開発者が安全なC/C++コードを書くためのトレーニングに役立つインタラクティブな課題、コース、評価が多数あります。プラットフォーム上のコンテンツはフレームワークに特化しており、非常に魅力的です。C/C++: Embed コーディングの課題は、MISRA C、AUTOSAR C++ (MISRA C++)、IEC の両方からインスピレーションを得たものです。

開発者は、C/C++固有の脆弱性を特定し、さらに重要なことに、それらのバグの修正方法を学ぶという、パーソナライズされた学習ジャーニーに乗り出すことができます。このプロセスでは、開発者は自分の弱点を特定するために進捗状況を追跡できるほか、同僚との友好的なコーディングコンテストを楽しむこともできます。詳細はこちらをご覧ください。 自動車および輸送産業への支援方法 私たちのソリューションで。

私たちの課題がどれほどインタラクティブで、埋め込みに焦点を当てているかを知りたいですか?試してみてください 一部の C/C++: 埋め込みの課題 今日は学習プラットフォームで!

Afficher les ressources
Afficher les ressources

Pour télécharger le rapport, veuillez remplir le formulaire ci-dessous.

Nous vous prions de bien vouloir nous autoriser à vous envoyer des informations sur nos produits et/ou sur des sujets liés au codage sécurisé. Nous traitons vos informations personnelles avec le plus grand soin et ne les vendons jamais à des tiers à des fins marketing.

Envoi
icône de réussite scw
icône d'erreur scw
Pour envoyer le formulaire, veuillez activer le cookie « Analytics ». Une fois le paramétrage terminé, vous pouvez le désactiver à nouveau.

セキュア・コード・ウォリアーでは、常にトレーニング対象範囲の拡大を目指しています。組込み開発者とセキュリティ管理者が安全な組込みシステムを構築できるようにするために、私たちは組込みシステム・セキュリティの世界に参入しています。この投稿では、MISRA C 2012 標準と、安全な組み込みシステムを構築するためになぜそのコンプライアンスが必要なのかについて説明します。

C でコードを書いていると、一見正しいように見えて本質的に間違っているものを実装するのはとても簡単です。コードは問題なくコンパイルできるかもしれませんし、一定期間でも正常に動作するかもしれません。しかし、入力サイズやメモリが増えると、同じコードがクラッシュしたり、未定義の動作をしたりする可能性があります。たとえば、特定の入力番号によって整数がオーバーフローしたり、特定の文字シーケンスが原因で配列が範囲外になったりします。

そこで、MISRA C コーディング標準が役に立ちます。この規格によって定められた規則、ガイドライン、ベスト・プラクティスにより、開発者は組込み開発用の安全で信頼できる C コードを書くことができます。

この規格の最新版である MISRA C 2012 では、新しい規則が追加され、既存の規則が強化され、いくつかの相違点が修正されています。まだ古いバージョンを使用している場合は、今が切り替えの絶好の機会です。

MISRA C コーディング標準とはどのようなものですか?

MISRA C 標準には、C プログラミング言語のコードの安全性、移植性、信頼性のガイドラインが含まれています。C 言語に特化した最初のガイドラインは 1998 年にリリースされました。

しかし、それ以来、MISRAコンソーシアムはC++のコーディング標準も開発しています。すべての MISRA C 文書には、一連の規則、非準拠の例、および当該規則の開発に貢献した背景情報に関する詳細なセクションが含まれています。

CとC++は、組み込みソフトウェアの開発で最も広く使用されている言語です。その主な理由の 1 つは、これらの言語は高速で、機械語と比べて抽象化レベルが 1 ~ 2 レベルしかないことです。しかしこれは、特に C で安全なコードを書くのは難しく、間違いも起こりやすいということでもあります。たとえば、Java や C# などのほとんどの高級言語では、ガベージコレクションや動的型付けなどの些細なことを気にする必要はありません。

しかし、C言語では、ゴミを集めるための定義済みの方法はありません。つまり、データ構造にメモリを割り当てる場合、使い終わったら手動でメモリを解放する必要があります。そうしないと、C は他の言語とは異なり、メモリを解放しないため、メモリリークが発生します。

MISRA C 2004 (C2) 対 MISRA C 2012 (C3) — 何が変わったのか?

MISRA C: 2012はC3とも呼ばれ、2013年4月に初めてリリースされました。C3は、何千もの人々や組織の活動から得た知識を活用して、新しいルールを追加し、既存のルールの説明や背景を強化し、抜け穴を塞いでいます。

C3 は C99 バージョンの言語をサポートすると同時に、古い ISO C90 のルールも維持しています。C3 の主な焦点は、クリティカルなシステムで C 言語をより安全に使用できるようにすると同時に、ルール施行にかかる通常のコストを削減することでした。こうしたことから、まだ新しい標準に切り替えていない場合は、新しい標準に切り替えるのが賢明です。

全体として、最も重要な変更点は次のとおりです。

  • 2004 バージョンで見つかった問題を修正しました。
  • の数を大幅に増やす 決定可能なルール。 ルールは 決定可能、 分析ツールがそれへの適合性を判断するのに役立つかどうか。
  • ルールは「必須」、「勧告」、または「必須」に分類されます。強制ルールはいかなる状況においても決して破ってはなりません。特別なシナリオでは、違反が正当化される限り、必須規則や勧告規則に違反する可能性があります。
  • 自動生成コードにルールを適用する方法に関するガイダンスを追加しました。これは非常に重要です。なぜなら、人間が書いたコードと同じガイドラインが、ツールによって生成されたコードには必ずしも当てはまらないからです。
  • ユーザーの合理的な行動を妨げる過度に一般化されたルールを削除してください。たとえば、以前はマクロをまったく使用しないことが推奨されていました。マクロは、さまざまな問題や混乱を招く可能性があるためです (マクロをデバッグできない、マクロに名前空間がないなど)。これにより、マクロがエレガントで安全で便利なソリューションを提供できるような状況でも、マクロを使用できなくなりました。MISRA C: 2012 では、マクロに関する新しい規則が導入され、ユーザーはいつでもマクロを慎重に使用できるようになりました。MISRA C 文書から抜粋した次の抜粋では、関数ではなくマクロを使用することを推奨しています。

MISRA C ルールが実際に使われています

説明は以上です。次は、MISRA C のルールを、その適用方法の例とともに実際に使ってみましょう。

互換性のある型を memcpy、memmove、および memcmp へのポインタ引数として使用する

標準ライブラリ関数 メモリコピー、メモリムーブ、 そして memcmp バイト単位の移動または指定されたバイト数の比較を行います。MISRA C 2012 規格の規則 21.15 では、2 つの関数パラメータは同じ型へのポインタでなければならないと規定されています。互換性のないポインタ型を使った関数呼び出しは、間違いを示している可能性があります。

MISRA の公式コンプライアンス文書から抜粋した次の画像を見てください。ルールは 必須、決定可能、 C90とC99の両方に適用されます。

Capture d'écran de la règle 21.15 de la MISRA C

ルールの説明の次に例を示します。

Capture d'écran d'une solution non conforme.

ご覧のように、オブジェクトは異なるタイプ (uint8_t と uint16_t) であるため、これは非準拠のソリューションです。

入力として長さをとらない文字列処理関数は、範囲外アクセスにはなりません

<string.h>その長さを入力として受け取らない文字列処理関数では、範囲外アクセスが発生しないはずです。関連する関数は strcat、strchr、strcmp、strcoll、strcpy、strcspn、strlen、strpbrk、strrchr、strspn、strrstr、strtok です。ルールは 必須、 つまり、どんな状況でも破ることはできないということです。これは C90 と C99 の両方に適用され、 決まらない。

Capture d'écran de la règle 21.17 de la MISRA C.

対応する例は次のとおりです。

Capture d'écran d'un exemple correct de fonctions de manipulation de chaînes de caractères

ご覧の通り、 ずんぐりした 関数 f1 では、5 文字しか格納できない文字列の長さを超えてコピーします。また、strcpy の仕様に準拠した安全な使い方もあります。strcpy では、「str」の内容が収まる場合にのみ文字列がコピーされます。

外部から受信したデータを検証

Dir 4.14では、「外部」ソースから受信したデータの有効性を確認することを推奨しています。外部入力には次のようなものがあります。

  • ファイルからの読み込み。
  • 環境変数から読み取ります。
  • 任意のユーザー入力。
  • 通信チャネルを介して受信したもの。たとえば、TCP 接続や HTTP API などを介して送信された場合などです。

この指令は 必須 カテゴリであり、C90とC99の両方に適用されます。その理由は、外部ソースから受信したデータをプログラムが制御できないため、このデータは無効または悪意のあるものである可能性があるということです。例えば、プログラムではユーザーが数字を入力することを期待しているのに、ユーザーが文字列を入力したとします。入力を処理する前に、プログラムは入力が実際に数値であることを確認する必要があります。

La validité des valeurs reçues de sources externes doit être vérifiée

MISRA C 2012 に切り替える方法

MISRA C 2012 に切り替えるには、コーディングガイドラインドキュメントを更新する必要があります。これを使用せず、代わりに静的解析ツール (推奨選択肢) を使用している場合は、新しいバージョンのツールを入手しなければならない場合があります。MISRA C 2012 への準拠を確認するツールが 3 つあります。

  1. Cppcheck は、MISRA ルールをチェックしたり、さまざまな種類のバグを検出したりできるオープンソースツールです。
  2. PC-リントプラス は、30 日間の評価期間がある有料ツールです。MISRA C への準拠を確認するだけでなく、潜在的なバグや脆弱性を特定するのにも役立ちます。
  3. コードソナー は、MISRA C と C++ の両方への準拠をチェックするもう 1 つのツールです。

MISRA への準拠をテストできるコンパイラもいくつかあります。ルール違反が検出されると、それに応じて警告または例外が発生します。例えば グリーンヒルズソフトウェア は、32 ビットアーキテクチャと 64 ビットアーキテクチャの両方で、すべての MISRA 標準をサポートするコンパイラを提供します。

セキュアコードウォリアーを使用して MISRA C の開発者をスキルアップする

Secure Code Warriorの主力製品である学習プラットフォームには、開発者が安全なC/C++コードを書くためのトレーニングに役立つインタラクティブな課題、コース、評価が多数あります。プラットフォーム上のコンテンツはフレームワークに特化しており、非常に魅力的です。C/C++: Embed コーディングの課題は、MISRA C、AUTOSAR C++ (MISRA C++)、IEC の両方からインスピレーションを得たものです。

開発者は、C/C++固有の脆弱性を特定し、さらに重要なことに、それらのバグの修正方法を学ぶという、パーソナライズされた学習ジャーニーに乗り出すことができます。このプロセスでは、開発者は自分の弱点を特定するために進捗状況を追跡できるほか、同僚との友好的なコーディングコンテストを楽しむこともできます。詳細はこちらをご覧ください。 自動車および輸送産業への支援方法 私たちのソリューションで。

私たちの課題がどれほどインタラクティブで、埋め込みに焦点を当てているかを知りたいですか?試してみてください 一部の C/C++: 埋め込みの課題 今日は学習プラットフォームで!

Veuillez consulter le séminaire en ligne.
Commençons
En savoir plus

Veuillez cliquer sur le lien ci-dessous pour télécharger le PDF de cette ressource.

Secure Code Warrior vous assiste dans la protection de votre code tout au long du cycle de vie du développement logiciel et dans la création d'une culture qui accorde la priorité à la cybersécurité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité des systèmes d'information ou professionnel de la sécurité, nous vous aidons à réduire les risques liés au code non sécurisé.

Afficher le rapportVeuillez réserver une démonstration.
Télécharger le PDF
Afficher les ressources
Partager :
marques LinkedInSocialLogo x
Souhaitez-vous en savoir davantage ?

Partager :
marques LinkedInSocialLogo x
Auteur
Secure Code Warrior
Publié le 17 août 2021

Secure Code Warrior transforme le codage sécurisé en une expérience positive et stimulante à mesure que les développeurs améliorent leurs compétences. Il guide chaque codeur vers le parcours d'apprentissage qu'il souhaite suivre afin que les développeurs possédant des compétences en sécurité puissent devenir des super-héros au quotidien dans un monde connecté.

Cet article a été rédigé par l'équipe d'experts industriels de Secure Code Warrior. Il vise à aider les développeurs à acquérir les connaissances et les compétences nécessaires pour créer des logiciels sécurisés dès le départ. Il s'appuie sur une expertise approfondie en matière de pratiques de codage sécurisé, sur les tendances du secteur et sur des observations tirées du monde réel.

Partager :
marques LinkedInSocialLogo x

セキュア・コード・ウォリアーでは、常にトレーニング対象範囲の拡大を目指しています。組込み開発者とセキュリティ管理者が安全な組込みシステムを構築できるようにするために、私たちは組込みシステム・セキュリティの世界に参入しています。この投稿では、MISRA C 2012 標準と、安全な組み込みシステムを構築するためになぜそのコンプライアンスが必要なのかについて説明します。

C でコードを書いていると、一見正しいように見えて本質的に間違っているものを実装するのはとても簡単です。コードは問題なくコンパイルできるかもしれませんし、一定期間でも正常に動作するかもしれません。しかし、入力サイズやメモリが増えると、同じコードがクラッシュしたり、未定義の動作をしたりする可能性があります。たとえば、特定の入力番号によって整数がオーバーフローしたり、特定の文字シーケンスが原因で配列が範囲外になったりします。

そこで、MISRA C コーディング標準が役に立ちます。この規格によって定められた規則、ガイドライン、ベスト・プラクティスにより、開発者は組込み開発用の安全で信頼できる C コードを書くことができます。

この規格の最新版である MISRA C 2012 では、新しい規則が追加され、既存の規則が強化され、いくつかの相違点が修正されています。まだ古いバージョンを使用している場合は、今が切り替えの絶好の機会です。

MISRA C コーディング標準とはどのようなものですか?

MISRA C 標準には、C プログラミング言語のコードの安全性、移植性、信頼性のガイドラインが含まれています。C 言語に特化した最初のガイドラインは 1998 年にリリースされました。

しかし、それ以来、MISRAコンソーシアムはC++のコーディング標準も開発しています。すべての MISRA C 文書には、一連の規則、非準拠の例、および当該規則の開発に貢献した背景情報に関する詳細なセクションが含まれています。

CとC++は、組み込みソフトウェアの開発で最も広く使用されている言語です。その主な理由の 1 つは、これらの言語は高速で、機械語と比べて抽象化レベルが 1 ~ 2 レベルしかないことです。しかしこれは、特に C で安全なコードを書くのは難しく、間違いも起こりやすいということでもあります。たとえば、Java や C# などのほとんどの高級言語では、ガベージコレクションや動的型付けなどの些細なことを気にする必要はありません。

しかし、C言語では、ゴミを集めるための定義済みの方法はありません。つまり、データ構造にメモリを割り当てる場合、使い終わったら手動でメモリを解放する必要があります。そうしないと、C は他の言語とは異なり、メモリを解放しないため、メモリリークが発生します。

MISRA C 2004 (C2) 対 MISRA C 2012 (C3) — 何が変わったのか?

MISRA C: 2012はC3とも呼ばれ、2013年4月に初めてリリースされました。C3は、何千もの人々や組織の活動から得た知識を活用して、新しいルールを追加し、既存のルールの説明や背景を強化し、抜け穴を塞いでいます。

C3 は C99 バージョンの言語をサポートすると同時に、古い ISO C90 のルールも維持しています。C3 の主な焦点は、クリティカルなシステムで C 言語をより安全に使用できるようにすると同時に、ルール施行にかかる通常のコストを削減することでした。こうしたことから、まだ新しい標準に切り替えていない場合は、新しい標準に切り替えるのが賢明です。

全体として、最も重要な変更点は次のとおりです。

  • 2004 バージョンで見つかった問題を修正しました。
  • の数を大幅に増やす 決定可能なルール。 ルールは 決定可能、 分析ツールがそれへの適合性を判断するのに役立つかどうか。
  • ルールは「必須」、「勧告」、または「必須」に分類されます。強制ルールはいかなる状況においても決して破ってはなりません。特別なシナリオでは、違反が正当化される限り、必須規則や勧告規則に違反する可能性があります。
  • 自動生成コードにルールを適用する方法に関するガイダンスを追加しました。これは非常に重要です。なぜなら、人間が書いたコードと同じガイドラインが、ツールによって生成されたコードには必ずしも当てはまらないからです。
  • ユーザーの合理的な行動を妨げる過度に一般化されたルールを削除してください。たとえば、以前はマクロをまったく使用しないことが推奨されていました。マクロは、さまざまな問題や混乱を招く可能性があるためです (マクロをデバッグできない、マクロに名前空間がないなど)。これにより、マクロがエレガントで安全で便利なソリューションを提供できるような状況でも、マクロを使用できなくなりました。MISRA C: 2012 では、マクロに関する新しい規則が導入され、ユーザーはいつでもマクロを慎重に使用できるようになりました。MISRA C 文書から抜粋した次の抜粋では、関数ではなくマクロを使用することを推奨しています。

MISRA C ルールが実際に使われています

説明は以上です。次は、MISRA C のルールを、その適用方法の例とともに実際に使ってみましょう。

互換性のある型を memcpy、memmove、および memcmp へのポインタ引数として使用する

標準ライブラリ関数 メモリコピー、メモリムーブ、 そして memcmp バイト単位の移動または指定されたバイト数の比較を行います。MISRA C 2012 規格の規則 21.15 では、2 つの関数パラメータは同じ型へのポインタでなければならないと規定されています。互換性のないポインタ型を使った関数呼び出しは、間違いを示している可能性があります。

MISRA の公式コンプライアンス文書から抜粋した次の画像を見てください。ルールは 必須、決定可能、 C90とC99の両方に適用されます。

Capture d'écran de la règle 21.15 de la MISRA C

ルールの説明の次に例を示します。

Capture d'écran d'une solution non conforme.

ご覧のように、オブジェクトは異なるタイプ (uint8_t と uint16_t) であるため、これは非準拠のソリューションです。

入力として長さをとらない文字列処理関数は、範囲外アクセスにはなりません

<string.h>その長さを入力として受け取らない文字列処理関数では、範囲外アクセスが発生しないはずです。関連する関数は strcat、strchr、strcmp、strcoll、strcpy、strcspn、strlen、strpbrk、strrchr、strspn、strrstr、strtok です。ルールは 必須、 つまり、どんな状況でも破ることはできないということです。これは C90 と C99 の両方に適用され、 決まらない。

Capture d'écran de la règle 21.17 de la MISRA C.

対応する例は次のとおりです。

Capture d'écran d'un exemple correct de fonctions de manipulation de chaînes de caractères

ご覧の通り、 ずんぐりした 関数 f1 では、5 文字しか格納できない文字列の長さを超えてコピーします。また、strcpy の仕様に準拠した安全な使い方もあります。strcpy では、「str」の内容が収まる場合にのみ文字列がコピーされます。

外部から受信したデータを検証

Dir 4.14では、「外部」ソースから受信したデータの有効性を確認することを推奨しています。外部入力には次のようなものがあります。

  • ファイルからの読み込み。
  • 環境変数から読み取ります。
  • 任意のユーザー入力。
  • 通信チャネルを介して受信したもの。たとえば、TCP 接続や HTTP API などを介して送信された場合などです。

この指令は 必須 カテゴリであり、C90とC99の両方に適用されます。その理由は、外部ソースから受信したデータをプログラムが制御できないため、このデータは無効または悪意のあるものである可能性があるということです。例えば、プログラムではユーザーが数字を入力することを期待しているのに、ユーザーが文字列を入力したとします。入力を処理する前に、プログラムは入力が実際に数値であることを確認する必要があります。

La validité des valeurs reçues de sources externes doit être vérifiée

MISRA C 2012 に切り替える方法

MISRA C 2012 に切り替えるには、コーディングガイドラインドキュメントを更新する必要があります。これを使用せず、代わりに静的解析ツール (推奨選択肢) を使用している場合は、新しいバージョンのツールを入手しなければならない場合があります。MISRA C 2012 への準拠を確認するツールが 3 つあります。

  1. Cppcheck は、MISRA ルールをチェックしたり、さまざまな種類のバグを検出したりできるオープンソースツールです。
  2. PC-リントプラス は、30 日間の評価期間がある有料ツールです。MISRA C への準拠を確認するだけでなく、潜在的なバグや脆弱性を特定するのにも役立ちます。
  3. コードソナー は、MISRA C と C++ の両方への準拠をチェックするもう 1 つのツールです。

MISRA への準拠をテストできるコンパイラもいくつかあります。ルール違反が検出されると、それに応じて警告または例外が発生します。例えば グリーンヒルズソフトウェア は、32 ビットアーキテクチャと 64 ビットアーキテクチャの両方で、すべての MISRA 標準をサポートするコンパイラを提供します。

セキュアコードウォリアーを使用して MISRA C の開発者をスキルアップする

Secure Code Warriorの主力製品である学習プラットフォームには、開発者が安全なC/C++コードを書くためのトレーニングに役立つインタラクティブな課題、コース、評価が多数あります。プラットフォーム上のコンテンツはフレームワークに特化しており、非常に魅力的です。C/C++: Embed コーディングの課題は、MISRA C、AUTOSAR C++ (MISRA C++)、IEC の両方からインスピレーションを得たものです。

開発者は、C/C++固有の脆弱性を特定し、さらに重要なことに、それらのバグの修正方法を学ぶという、パーソナライズされた学習ジャーニーに乗り出すことができます。このプロセスでは、開発者は自分の弱点を特定するために進捗状況を追跡できるほか、同僚との友好的なコーディングコンテストを楽しむこともできます。詳細はこちらをご覧ください。 自動車および輸送産業への支援方法 私たちのソリューションで。

私たちの課題がどれほどインタラクティブで、埋め込みに焦点を当てているかを知りたいですか?試してみてください 一部の C/C++: 埋め込みの課題 今日は学習プラットフォームで!

Table des matières

Télécharger le PDF
Afficher les ressources
Souhaitez-vous en savoir davantage ?

Secure Code Warrior transforme le codage sécurisé en une expérience positive et stimulante à mesure que les développeurs améliorent leurs compétences. Il guide chaque codeur vers le parcours d'apprentissage qu'il souhaite suivre afin que les développeurs possédant des compétences en sécurité puissent devenir des super-héros au quotidien dans un monde connecté.

En savoir plus

Secure Code Warrior vous assiste dans la protection de votre code tout au long du cycle de vie du développement logiciel et dans la création d'une culture qui accorde la priorité à la cybersécurité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité des systèmes d'information ou professionnel de la sécurité, nous vous aidons à réduire les risques liés au code non sécurisé.

Veuillez réserver une démonstration.[Télécharger]
Partager :
marques LinkedInSocialLogo x
Centre de ressources

Ressources pour débuter

Autres publications
Centre de ressources

Ressources pour débuter

Autres publications