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 の項目をクリックします。
チェックを有効にするかどうか(有効にした場合、チェックのレベルを)選択するには、右側のタブのドロップダウンを使用します。以下のオプションを利用できます:
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 コード解析で利用できる 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 | ビットフィールドメンバー、または無効なタイプで |
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 | 全ての |
SIG30 | Signals | シグナルハンドラー内で非同期の安全な function のみコール |
SIG32 | Signals | シグナルハンドラー内から |
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 | 配列のサイズを考慮している時、 |
MEM00 | Memory Management | 同じ抽出レベルで、同じモジュール内のメモリを割り当て、解放 |
MEM08 | Memory Management | 割り当てた配列のサイズを変更するために |
詳細情報
CERT C Programming Language Secure Coding Standard の詳細な情報は、CERT Wiki を参照してください。