CERT C とは

CERT C は、ソフトウェア開発者向けのガイドライン集です。C 言語でセキュアコーディングを行うために使用されます。CERT コミュニティの Wiki 上で、コミュニティベースの開発プロセスに従って開発され、初版が 2008 年、第 2 版が 2014 年にリリースされました。

このガイドラインは、たとえば、非確定的な実行時の動作につながり、セキュリティの脆弱性を外部にさらす可能性のある、未定義の動作を含むコンストラクトを除外するのに役立ちます。では MISRA とはどこが違うのでしょうか?

この 2 つのガイドラインは、どちらも基礎となる非確定的な動作に対処することを目的としているため、重複する部分があります。しかし、MISRA C は安全性と信頼性、CERT C はセキュリティにそれぞれ重点が置かれている点で異なります。

MISRA C、CERT C、CWE などさまざまなガイドラインの比較や適用性については、Wiki の CERT C セクションを参照してください。

CERT C ガイドラインは、ルールと推奨事項の形式で記載されており、MISRA-C:2012 などの MISRA C コーディングルールへの更新に類似しています。CERT C ルールとしてガイドラインをラベル付けするために使用される主な基準は、そのガイドラインが静的に適用可能かどうかの判断です。また、これらのルールは手動でもチェックが可能ですが、現実的ではないため、CERT C は静的解析ツールの使用を推奨しています。違反を正当化するための逸脱のメカニズムも備えています。

Polyspace を使用した CERT C への準拠

上記の理由から、静的解析ツールを使用することで CERT C 規約への準拠が大幅に簡素化されるうえに、開発およびビルドツールチェーンの一部として自動化できます。

さらに、Polyspace Bug Finder は汚染データなどのさまざまなセキュリティ関連の欠陥に加え、静的および動的なメモリの欠陥、数値的な欠陥、データフローの欠陥などの基礎となるソフトウェアの脆弱性を検出できます。これらの基礎となる欠陥は、セキュリティ侵害の根本原因です。

CERT C ルール EXP33-C に違反する初期化されていないポインター
CERT C ルール EXP33-C に違反する初期化されていないポインター

Polyspace Bug Finder 欠陥チェックのすべてのカテゴリーのリストを確認してください。

Polyspace Bug Finder によって検出された欠陥は、CERT C ルールにマッピングされるため (上図参照)、どのルールに違反しているかを特定できます。これらの違反をレビューすることで、セキュリティへの影響を推定できます。たとえば、重大度、脆弱性が悪用される可能性、および修復コストに応じて、各ルールに適したスコアリングの優先度を使用できます。

CERT C ルールに起因する優先順位とレベル
CERT C ルールに起因する優先順位とレベル

CERT C ルール以外にも、Polyspace は、その解析エンジンの詳細なセマンティック解析機能を活用して、一部の CERT C 推奨事項への準拠もチェックできます。

Polyspace Code Prover を使用すると、アプリケーション実行時のいかなる条件下でも CERT C ルールのサブセットに違反しないと証明することもできます。これは、偽陰性 (検出漏れ) なしで実行時の動作を検証することによって証明されます。偽陰性は、コードに実際に存在する欠陥の報告に失敗したことを意味し (通常最も深刻な解析エラーとみなされます)、ユーザーにセキュリティに関する誤った認識を与えてしまう可能性があるため、これは重要です。

CERT C ルール ARR30-C に違反するバッファ オーバーフロー

CERT C ルール ARR30-C に違反するバッファ オーバーフロー

Polyspace のチェック、CERT C ルール、および推奨事項間のマッピングについてはドキュメンテーションを参照してください。