
ミスラ 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 macht sicheres Codieren zu einer positiven und attraktiven Erfahrung, während Entwickler ihre Fähigkeiten verbessern. Es führt jeden einzelnen Programmierer auf den von ihm gewünschten Lernpfad, damit Entwickler mit Sicherheitskenntnissen in unserer vernetzten Welt täglich zu Superhelden werden können.

Secure Code Warrior schützt Ihren Code während des gesamten Softwareentwicklungszyklus und hilft Ihnen dabei, eine Kultur zu schaffen, in der Cybersicherheit oberste Priorität hat. Ganz gleich, ob Sie Anwendungs-Sicherheitsmanager, Entwickler, CISO oder Sicherheitsbeauftragter sind – wir helfen Ihnen dabei, die mit unsicherem Code verbundenen Risiken zu minimieren.
デモを予約Secure Code Warrior macht sicheres Codieren zu einer positiven und attraktiven Erfahrung, während Entwickler ihre Fähigkeiten verbessern. Es führt jeden einzelnen Programmierer auf den von ihm gewünschten Lernpfad, damit Entwickler mit Sicherheitskenntnissen in unserer vernetzten Welt täglich zu Superhelden werden können.
Dieser Artikel wurde vom Branchenexperten-Team von Secure Code Warrior verfasst. Er zielt darauf ab, Entwicklern das Wissen und die Fähigkeiten zu vermitteln, die sie benötigen, um von Anfang an sichere Software zu entwickeln. Dabei werden fundierte Fachkenntnisse über die Praxis des sicheren Codierens, Branchentrends und Einblicke aus der Praxis genutzt.


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

Klicken Sie auf den folgenden Link, um die PDF-Datei dieser Ressource herunterzuladen.
Secure Code Warrior schützt Ihren Code während des gesamten Softwareentwicklungszyklus und hilft Ihnen dabei, eine Kultur zu schaffen, in der Cybersicherheit oberste Priorität hat. Ganz gleich, ob Sie Anwendungs-Sicherheitsmanager, Entwickler, CISO oder Sicherheitsbeauftragter sind – wir helfen Ihnen dabei, die mit unsicherem Code verbundenen Risiken zu minimieren.
Bericht anzeigenデモを予約Secure Code Warrior macht sicheres Codieren zu einer positiven und attraktiven Erfahrung, während Entwickler ihre Fähigkeiten verbessern. Es führt jeden einzelnen Programmierer auf den von ihm gewünschten Lernpfad, damit Entwickler mit Sicherheitskenntnissen in unserer vernetzten Welt täglich zu Superhelden werden können.
Dieser Artikel wurde vom Branchenexperten-Team von Secure Code Warrior verfasst. Er zielt darauf ab, Entwicklern das Wissen und die Fähigkeiten zu vermitteln, die sie benötigen, um von Anfang an sichere Software zu entwickeln. Dabei werden fundierte Fachkenntnisse über die Praxis des sicheren Codierens, Branchentrends und Einblicke aus der Praxis genutzt.
セキュア・コード・ウォリアーでは、常にトレーニング対象範囲の拡大を目指しています。組込み開発者とセキュリティ管理者が安全な組込みシステムを構築できるようにするために、私たちは組込みシステム・セキュリティの世界に参入しています。この投稿では、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++: 埋め込みの課題 今日は学習プラットフォームで!
目次
Secure Code Warrior macht sicheres Codieren zu einer positiven und attraktiven Erfahrung, während Entwickler ihre Fähigkeiten verbessern. Es führt jeden einzelnen Programmierer auf den von ihm gewünschten Lernpfad, damit Entwickler mit Sicherheitskenntnissen in unserer vernetzten Welt täglich zu Superhelden werden können.

Secure Code Warrior schützt Ihren Code während des gesamten Softwareentwicklungszyklus und hilft Ihnen dabei, eine Kultur zu schaffen, in der Cybersicherheit oberste Priorität hat. Ganz gleich, ob Sie Anwendungs-Sicherheitsmanager, Entwickler, CISO oder Sicherheitsbeauftragter sind – wir helfen Ihnen dabei, die mit unsicherem Code verbundenen Risiken zu minimieren.
デモを予約[ダウンロード]Ressourcen für den Einstieg
Themen und Inhalte der Secure-Code-Schulung
Unsere branchenführenden Inhalte werden unter Berücksichtigung der Aufgaben unserer Kunden ständig weiterentwickelt, um mit der sich ständig verändernden Softwareentwicklungsumgebung Schritt zu halten. Sie decken alle Themen von KI bis hin zu XQuery-Injection ab und sind für verschiedene Aufgabenbereiche konzipiert, von Architekten und Ingenieuren bis hin zu Produktmanagern und Qualitätssicherungsfachleuten. Werfen Sie einen Blick auf die Inhalte unseres Content-Katalogs, sortiert nach Themen und Aufgabenbereichen.
Die Kamer van Koophandel setzt Maßstäbe für entwicklergesteuerte Sicherheit in großem Maßstab
Die Kamer van Koophandel berichtet, wie sie sicheres Codieren durch rollenbasierte Zertifizierungen, Trust Score-Benchmarking und eine Kultur der gemeinsamen Verantwortung für Sicherheit in die tägliche Entwicklungsarbeit integriert hat.
Bedrohungsmodellierung mit KI: So wird jeder Entwickler zum Bedrohungsmodellierer
Sie werden besser gerüstet sein, um Entwicklern dabei zu helfen, Ideen und Techniken zur Bedrohungsmodellierung mit den KI-Tools zu kombinieren, die sie bereits verwenden, um die Sicherheit zu erhöhen, die Zusammenarbeit zu verbessern und von Anfang an widerstandsfähigere Software zu entwickeln.
Ressourcen für den Einstieg
Cybermon ist zurück: Die KI-Mission zum Besiegen des Bosses ist jetzt auf Abruf verfügbar.
「Cybermon 2025 Beat the Boss」 kann nun das ganze Jahr über bei SCW gespielt werden. Führen Sie anspruchsvolle AI/LLM-Sicherheitsherausforderungen ein, um die sichere AI-Entwicklung in großem Maßstab zu stärken.
Erläuterung des Cyber-Resilience-Gesetzes: Bedeutung für die Entwicklung sicherer Software
Erfahren Sie, was das EU-Gesetz zur Cyberresilienz (CRA) verlangt, für wen es gilt und wie sich Ingenieurteams auf Secure-by-Design-Praktiken, Schwachstellenprävention und die Kompetenzentwicklung von Entwicklern vorbereiten können.
Enabler 1: Definierte und messbare Erfolgskriterien
Enabler 1 ist der erste Teil der zehnteiligen Reihe „Enablers of Success“ und zeigt, wie sichere Programmierung mit geschäftlichen Ergebnissen wie Risikominderung und Geschwindigkeit verknüpft werden kann, um Programme langfristig zu optimieren.




%20(1).avif)
.avif)
