Static コード解析 - CERT C Secure コードチェック

エンベデッドソフトウェア プロジェクト用に書かれたCコードは、それを記述している開発者と同様に時々、形式や実行方法を変更できます。組織から見れば、必要でなければ定義したコーディングのガイドラインに従ってコードを記述することを望みます。形式自体は問題ではありません。コーディングテンプレートは強制的にフォーマット化して構築できます。より重要なことはそのコードの安全性です。組織や/またはコードが展開される場所に従って、このようなコードはどんな欠点、またはプログラム的なエラーを利用しようとするものに対抗することが必要かもしれません。

安全なCコードを記述するために、Altium Designer は CERT C Programming Language Secure Coding Standard によって与えられたルールや/または推奨に対してテストして、コンパイル後に static コード解析を実行する機能があります。この基準によって実行されたコーディングチェックは、脆弱性の結果となるプログラムエラーを減らしたCソースコードを利用でき、ソフトウェアを開発している時の強みになります。その結果は高品質なコードで、市場に出されたエレクトニクス製品の中でより安全/頑健に展開されます。 

CERT C secure コードチェックは、MISRA-C チェックと一緒に static コード解析に加えて価値をもたらします。記述者が、高品質のドキュメントを作成するためにつづりの確認と文法チェックを行う時、これらをCプログラミング言語で作業しているエンベデッド開発者のための ’コードチェッカー’とみなします!

static コード解析機能は、不安定な、または未定義のコード領域に導く共通のプログラミングエラーを検出する手助けを行う目的である点に注意することが重要です。簡単に表現すると、その解析は回路図での ERC、または PCB での DRC と同様です。それは CERT 基準のルール/recommendation に対してコードを確認します。これらのルール/recommendation を介することはより安定したコードになりますが、ソフトウェアシステムが安全面で '鉄壁' である(または、踏み込めない)唯一の指標ではありません。

コードチェックの有効化

コードチェックはエンベデッドプロジェクトの Project Options ダイアログ(Project»Project Options)の Compiler Options タブで有効にします。左側の C Compiler の項目をクリックして拡張し CERT C Secure Code Checking の項目をクリックします。 

C Compiler オプションの CERT C Secure Code Checking にアクセス。

チェックを有効にするかどうか(有効にした場合、チェックのレベルを)選択するには、右側のタブのドロップダウンを使用します。以下のオプションを利用できます:

  • Disabled – コードチェックを無効。
  • Supported rules only – CERT C Programming Language Secure Coding Standard の一部として定義したルールレベルのコード実行のみチェック。 
  • Supported recommendations and rules – CERT C Programming Language Secure Coding Standard の一部として定義したルールレベルと推奨レベル両方のコード実行に対してチェック。 
  • Custom configuration – CERT C Programming Language Secure Coding Standard の一部として定義したルールレベルと/または推奨レベルのコード実行をチェックするためにカスタマイズした設定を指定できます。 

Custom configuration を選択する時、Custom Configuration のサブページにアクセスします。そのページには、項目ごとに(基準内で)ルールや recommendation がリスト表示されます。static コード解析に含めたいルール/recommendation を有効/無効にします。  

個々のルールや推奨レベルでチェックして、コードで実行した解析を微調整できます。

CERT C Secure Code Checking は、C ソース (*.c) と C ヘッダ (*.h) ファイルの両方に適用されます。

違反の調査

CERT ルール、または推奨チェックのどんな違反も Messages パネルに表示されます。C ソースドキュメント、またはヘッダファイル内のコード行にクロスプローブするにはメッセージをダブルクリックします。コード行はハイライトされ問題の個所にカーソルが表示されます。 

static コード解析を実行後、Messages パネルから直接、問題のコード行にクロスプローブ。

サポートされたルール

以下の表は、static コード解析で利用できる CERT C Programming Language Secure Coding Standard からルールレベルのコード実行を要約したものです。 

以下の表に、Project Options ダイアログのルール識別子を記載します。CERT ドキュメントで -C サフィックスは、様々なその他の基準がその他のプログラミング言語を扱うように、ルールが CERT C Programming Language Secure Coding Standard の一部であることを反映するために使用されます。

ルール識別子

基準の項目

ルールの詳細

DCL30

Declarations and Initialization

適切なストレージ期間でオブジェクトを宣言

DCL31

Declarations and Initialization

それらを使用する前に識別子を宣言

DCL32

Declarations and Initialization

相互に見える識別子は固有であることを保証

DCL35

Declarations and Initialization

function の定義が一致しないタイプを使用して function を実行しない

EXP30

Expressions

連続したポイント間で評価の順番に依存しない

EXP32

Expressions

不安定でないリファレンスを通して不安定なオブジェクトにアクセスしない

EXP33

Expressions

初期化されていないメモリを参照しない

EXP34

Expressions

無効なポインタは参照先の値を取得しないことを確認

EXP37

Expressions

API によって意図された主張と共に function をコール

EXP38

Expressions

ビットフィールドメンバー、または無効なタイプで offsetof() をコールしない

INT30

Integers

サインされていない整数演算はラップしないことを確認

INT34

Integers

ビットの負数、またはオペランドに存在する以上のビットをシフトしない

INT35

Integers

比較、またはそのサイズに割り当てる前に、より大きいサイズの整数表現を評価

FLP30

Floating Point

ループカウンタとして浮動小数点変数を使用しない

FLP35

Floating Point

浮動小数点の値を比較している時、細かさを考慮する

FLP36

Floating Point

整数を浮動小数点に変換する時、精度の低下に注意

ARR34

Arrays

表現の配列タイプは互換性を持つことを確認

ARR35

Arrays

配列の最後を超えて繰り返すループを許可しない

STR30

Characters and Strings

誤字を修正しない

STR33

Characters and Strings

文字サイズを正確に

STR34

Characters and Strings

大きい整数サイズに変換する前に、文字をサインされていないタイプに割り当て

STR36

Characters and Strings

誤字と一緒に初期化された文字配列の境界を指定しない

MEM30

Memory Management

解放されたメモリをアクセスしない

MEM31

Memory Management

割り当てたメモリを解放

MEM32

Memory Management

メモリ割り当てエラーの検出と処理

MEM33

Memory Management

柔軟な配列メンバー用に正しい文法を使用

MEM34

Memory Management

割り当てたメモリを解放するのみ

MEM35

Memory Management

オブジェクト用に十分なメモリを割り当て

ENV32

Environment

全ての atexit ハンドラーは通常、戻る必要があります

SIG30

Signals

シグナルハンドラー内で非同期の安全な function のみコール

SIG32

Signals

シグナルハンドラー内から longjmp() をコールしない

MSC32

Miscellaneous

乱数ジェネレーターが適切に生成することを確認

サポートされた Recommendation

以下の表は、static コード解析で利用できる CERT C Programming Language Secure Coding Standard から推奨レベルのコード実行を要約したものです。 

以下の表に、Project Options ダイアログにある recommendation 識別子を記載します。  CERT ドキュメントで -C サフィックスは、様々なその他の基準がその他のプログラミング言語を扱うように、recommendation が CERT C Programming Language Secure Coding Standard の一部であることを反映するために使用されます。

Recommendation 識別子

基準の項目

Recommendation の詳細

PRE01

Preprocessor

パラメータ名のマクロ内で括弧を使用

PRE02

Preprocessor

マクロ交換リストを括弧に入れる

PRE10

Preprocessor

do-while ループの multi-statement マクロをラップ

PRE11

Preprocessor

セミコロン付きの一つのマクロ定義を含めない

EXP01

Expressions

pointed-to タイプのサイズを決めるためにポインタのサイズを考慮しない

EXP12

Expressions

function によって戻された値を無視しない

ARR01

Arrays

配列のサイズを考慮している時、sizeof オペレータをポインタに適用しない

MEM00

Memory Management

同じ抽出レベルで、同じモジュール内のメモリを割り当て、解放

MEM08

Memory Management

割り当てた配列のサイズを変更するために realloc() のみ使用

詳細情報

CERT C Programming Language Secure Coding Standard の詳細な情報は、CERT Wiki を参照してください。 

You are reporting an issue with the following selected text and/or image within the active document: