
ミスラ C 2012 対 MISRA C2-レボアユー
セキュア・コード・ウォリアーでは、常にトレーニング対象範囲の拡大を目指しています。組込み開発者とセキュリティ管理者が安全な組込みシステムを構築できるようにするために、私たちは組込みシステム・セキュリティの世界に参入しています。この投稿では、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の両方に適用されます。

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

ご覧のように、オブジェクトは異なるタイプ (uint8_t と uint16_t) であるため、これは非準拠のソリューションです。
入力として長さをとらない文字列処理関数は、範囲外アクセスにはなりません
<string.h>その長さを入力として受け取らない文字列処理関数では、範囲外アクセスが発生しないはずです。関連する関数は strcat、strchr、strcmp、strcoll、strcpy、strcspn、strlen、strpbrk、strrchr、strspn、strrstr、strtok です。ルールは 必須、 つまり、どんな状況でも破ることはできないということです。これは C90 と C99 の両方に適用され、 決まらない。

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

ご覧の通り、 ずんぐりした 関数 f1 では、5 文字しか格納できない文字列の長さを超えてコピーします。また、strcpy の仕様に準拠した安全な使い方もあります。strcpy では、「str」の内容が収まる場合にのみ文字列がコピーされます。
外部から受信したデータを検証
Dir 4.14では、「外部」ソースから受信したデータの有効性を確認することを推奨しています。外部入力には次のようなものがあります。
- ファイルからの読み込み。
- 環境変数から読み取ります。
- 任意のユーザー入力。
- 通信チャネルを介して受信したもの。たとえば、TCP 接続や HTTP API などを介して送信された場合などです。
この指令は 必須 カテゴリであり、C90とC99の両方に適用されます。その理由は、外部ソースから受信したデータをプログラムが制御できないため、このデータは無効または悪意のあるものである可能性があるということです。例えば、プログラムではユーザーが数字を入力することを期待しているのに、ユーザーが文字列を入力したとします。入力を処理する前に、プログラムは入力が実際に数値であることを確認する必要があります。

MISRA C 2012 に切り替える方法
MISRA C 2012 に切り替えるには、コーディングガイドラインドキュメントを更新する必要があります。これを使用せず、代わりに静的解析ツール (推奨選択肢) を使用している場合は、新しいバージョンのツールを入手しなければならない場合があります。MISRA C 2012 への準拠を確認するツールが 3 つあります。
- Cppcheck は、MISRA ルールをチェックしたり、さまざまな種類のバグを検出したりできるオープンソースツールです。
- PC-リントプラス は、30 日間の評価期間がある有料ツールです。MISRA C への準拠を確認するだけでなく、潜在的なバグや脆弱性を特定するのにも役立ちます。
- コードソナー は、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++: 埋め込みの課題 今日は学習プラットフォームで!


アポリ、MISRA C 2012 とC2 ヴァングインプラシ、WERGVING CODOWLISISISSA。ABINARKNALTたりMISRAのせいせいせいでもうなずく。
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é.

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.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.


セキュア・コード・ウォリアーでは、常にトレーニング対象範囲の拡大を目指しています。組込み開発者とセキュリティ管理者が安全な組込みシステムを構築できるようにするために、私たちは組込みシステム・セキュリティの世界に参入しています。この投稿では、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の両方に適用されます。

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

ご覧のように、オブジェクトは異なるタイプ (uint8_t と uint16_t) であるため、これは非準拠のソリューションです。
入力として長さをとらない文字列処理関数は、範囲外アクセスにはなりません
<string.h>その長さを入力として受け取らない文字列処理関数では、範囲外アクセスが発生しないはずです。関連する関数は strcat、strchr、strcmp、strcoll、strcpy、strcspn、strlen、strpbrk、strrchr、strspn、strrstr、strtok です。ルールは 必須、 つまり、どんな状況でも破ることはできないということです。これは C90 と C99 の両方に適用され、 決まらない。

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

ご覧の通り、 ずんぐりした 関数 f1 では、5 文字しか格納できない文字列の長さを超えてコピーします。また、strcpy の仕様に準拠した安全な使い方もあります。strcpy では、「str」の内容が収まる場合にのみ文字列がコピーされます。
外部から受信したデータを検証
Dir 4.14では、「外部」ソースから受信したデータの有効性を確認することを推奨しています。外部入力には次のようなものがあります。
- ファイルからの読み込み。
- 環境変数から読み取ります。
- 任意のユーザー入力。
- 通信チャネルを介して受信したもの。たとえば、TCP 接続や HTTP API などを介して送信された場合などです。
この指令は 必須 カテゴリであり、C90とC99の両方に適用されます。その理由は、外部ソースから受信したデータをプログラムが制御できないため、このデータは無効または悪意のあるものである可能性があるということです。例えば、プログラムではユーザーが数字を入力することを期待しているのに、ユーザーが文字列を入力したとします。入力を処理する前に、プログラムは入力が実際に数値であることを確認する必要があります。

MISRA C 2012 に切り替える方法
MISRA C 2012 に切り替えるには、コーディングガイドラインドキュメントを更新する必要があります。これを使用せず、代わりに静的解析ツール (推奨選択肢) を使用している場合は、新しいバージョンのツールを入手しなければならない場合があります。MISRA C 2012 への準拠を確認するツールが 3 つあります。
- Cppcheck は、MISRA ルールをチェックしたり、さまざまな種類のバグを検出したりできるオープンソースツールです。
- PC-リントプラス は、30 日間の評価期間がある有料ツールです。MISRA C への準拠を確認するだけでなく、潜在的なバグや脆弱性を特定するのにも役立ちます。
- コードソナー は、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++: 埋め込みの課題 今日は学習プラットフォームで!

セキュア・コード・ウォリアーでは、常にトレーニング対象範囲の拡大を目指しています。組込み開発者とセキュリティ管理者が安全な組込みシステムを構築できるようにするために、私たちは組込みシステム・セキュリティの世界に参入しています。この投稿では、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の両方に適用されます。

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

ご覧のように、オブジェクトは異なるタイプ (uint8_t と uint16_t) であるため、これは非準拠のソリューションです。
入力として長さをとらない文字列処理関数は、範囲外アクセスにはなりません
<string.h>その長さを入力として受け取らない文字列処理関数では、範囲外アクセスが発生しないはずです。関連する関数は strcat、strchr、strcmp、strcoll、strcpy、strcspn、strlen、strpbrk、strrchr、strspn、strrstr、strtok です。ルールは 必須、 つまり、どんな状況でも破ることはできないということです。これは C90 と C99 の両方に適用され、 決まらない。

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

ご覧の通り、 ずんぐりした 関数 f1 では、5 文字しか格納できない文字列の長さを超えてコピーします。また、strcpy の仕様に準拠した安全な使い方もあります。strcpy では、「str」の内容が収まる場合にのみ文字列がコピーされます。
外部から受信したデータを検証
Dir 4.14では、「外部」ソースから受信したデータの有効性を確認することを推奨しています。外部入力には次のようなものがあります。
- ファイルからの読み込み。
- 環境変数から読み取ります。
- 任意のユーザー入力。
- 通信チャネルを介して受信したもの。たとえば、TCP 接続や HTTP API などを介して送信された場合などです。
この指令は 必須 カテゴリであり、C90とC99の両方に適用されます。その理由は、外部ソースから受信したデータをプログラムが制御できないため、このデータは無効または悪意のあるものである可能性があるということです。例えば、プログラムではユーザーが数字を入力することを期待しているのに、ユーザーが文字列を入力したとします。入力を処理する前に、プログラムは入力が実際に数値であることを確認する必要があります。

MISRA C 2012 に切り替える方法
MISRA C 2012 に切り替えるには、コーディングガイドラインドキュメントを更新する必要があります。これを使用せず、代わりに静的解析ツール (推奨選択肢) を使用している場合は、新しいバージョンのツールを入手しなければならない場合があります。MISRA C 2012 への準拠を確認するツールが 3 つあります。
- Cppcheck は、MISRA ルールをチェックしたり、さまざまな種類のバグを検出したりできるオープンソースツールです。
- PC-リントプラス は、30 日間の評価期間がある有料ツールです。MISRA C への準拠を確認するだけでなく、潜在的なバグや脆弱性を特定するのにも役立ちます。
- コードソナー は、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 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.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.
セキュア・コード・ウォリアーでは、常にトレーニング対象範囲の拡大を目指しています。組込み開発者とセキュリティ管理者が安全な組込みシステムを構築できるようにするために、私たちは組込みシステム・セキュリティの世界に参入しています。この投稿では、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の両方に適用されます。

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

ご覧のように、オブジェクトは異なるタイプ (uint8_t と uint16_t) であるため、これは非準拠のソリューションです。
入力として長さをとらない文字列処理関数は、範囲外アクセスにはなりません
<string.h>その長さを入力として受け取らない文字列処理関数では、範囲外アクセスが発生しないはずです。関連する関数は strcat、strchr、strcmp、strcoll、strcpy、strcspn、strlen、strpbrk、strrchr、strspn、strrstr、strtok です。ルールは 必須、 つまり、どんな状況でも破ることはできないということです。これは C90 と C99 の両方に適用され、 決まらない。

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

ご覧の通り、 ずんぐりした 関数 f1 では、5 文字しか格納できない文字列の長さを超えてコピーします。また、strcpy の仕様に準拠した安全な使い方もあります。strcpy では、「str」の内容が収まる場合にのみ文字列がコピーされます。
外部から受信したデータを検証
Dir 4.14では、「外部」ソースから受信したデータの有効性を確認することを推奨しています。外部入力には次のようなものがあります。
- ファイルからの読み込み。
- 環境変数から読み取ります。
- 任意のユーザー入力。
- 通信チャネルを介して受信したもの。たとえば、TCP 接続や HTTP API などを介して送信された場合などです。
この指令は 必須 カテゴリであり、C90とC99の両方に適用されます。その理由は、外部ソースから受信したデータをプログラムが制御できないため、このデータは無効または悪意のあるものである可能性があるということです。例えば、プログラムではユーザーが数字を入力することを期待しているのに、ユーザーが文字列を入力したとします。入力を処理する前に、プログラムは入力が実際に数値であることを確認する必要があります。

MISRA C 2012 に切り替える方法
MISRA C 2012 に切り替えるには、コーディングガイドラインドキュメントを更新する必要があります。これを使用せず、代わりに静的解析ツール (推奨選択肢) を使用している場合は、新しいバージョンのツールを入手しなければならない場合があります。MISRA C 2012 への準拠を確認するツールが 3 つあります。
- Cppcheck は、MISRA ルールをチェックしたり、さまざまな種類のバグを検出したりできるオープンソースツールです。
- PC-リントプラス は、30 日間の評価期間がある有料ツールです。MISRA C への準拠を確認するだけでなく、潜在的なバグや脆弱性を特定するのにも役立ちます。
- コードソナー は、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
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é.

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]Ressources pour débuter
Sujets et contenu de la formation sur le code sécurisé
Notre contenu, leader dans le secteur, évolue constamment en fonction de l'environnement de développement logiciel en constante mutation, tout en tenant compte du rôle de nos clients. Il couvre tous les sujets, de l'IA à l'injection XQuery, et s'adresse à divers rôles, des architectes et ingénieurs aux chefs de produit et responsables de l'assurance qualité. Nous vous invitons à consulter le catalogue de contenu pour découvrir son contenu par sujet et par rôle.
La Chambre de commerce établit la norme en matière de sécurité à grande échelle axée sur les développeurs
La Chambre de commerce néerlandaise explique comment elle a intégré le codage sécurisé dans le développement quotidien grâce à des certifications basées sur les rôles, à l'évaluation comparative du Trust Score et à une culture de responsabilité partagée en matière de sécurité.
Modélisation des menaces avec l'IA : transformer chaque développeur en modélisateur de menaces
Vous repartirez mieux équipé pour aider les développeurs à combiner les idées et les techniques de modélisation des menaces avec les outils d'IA qu'ils utilisent déjà pour renforcer la sécurité, améliorer la collaboration et créer des logiciels plus résilients dès le départ.
Ressources pour débuter
Cybermon est de retour : la mission IA consistant à vaincre le boss est désormais disponible à la demande.
Cybermon 2025 Beat the Boss est désormais disponible toute l'année sur SCW. Renforcez considérablement le développement sécurisé de l'IA en introduisant des défis de sécurité avancés en matière d'IA/LLM.
Explication de la loi sur la cyber-résilience : implications pour le développement de logiciels sécurisés dès la conception
Découvrez les exigences de la loi européenne sur la résilience cybernétique (CRA), à qui elle s'applique et comment les équipes d'ingénierie peuvent se préparer en matière de pratiques de sécurité dès la conception, de prévention des vulnérabilités et de développement des compétences des développeurs.
Facilitateur 1 : Critères de réussite prédéfinis et mesurables
Enabler 1 est le premier volet d'une série de dix intitulée « Enablers of Success » (Les catalyseurs de la réussite). Il présente comment associer le codage sécurisé à des résultats commerciaux tels que la réduction des risques et l'accélération des processus afin de faire évoluer le programme à long terme.




%20(1).avif)
.avif)
