klocwork | 年 月 ソース コード解析で d0-178b への対応を合理化 · 2014. 5....

10
ソース コード解析で D0-178B への対応を合理化 Klocwork Insight™ を使用して ソフトウェア検証の要件に対応 RTCA が 公 開、 導 入 し た DO-178B 規 格「Software Considerations in Airborne Systems and Equipment Certification(空輸システムおよび機器の認定におけるソフトウェアで検討すべき事項)」 は、空輸ソフトウェア システムの安全性と信頼性を確保するための一連のベスト プラクティスです。 DO-178B によってソフトウェア検証ツールと見なされているソース コード解析(SCA)ツールを使 用することで、多数のソース コード検査要件、特にソフトウェア検証とソフトウェア ライフサイクル デー タの要件を自動化できます。 SCA 技術で他の種類のテストの必要性を置き換えることはできませんが、 プロジェクトの検証費用を大幅に削減できます。安全重視のプロジェクトで開発費に占める割合が単 体で最も高いのがソフトウェア検証(解析、レビュー、テスト)です。ソース コード解析を使用する ことで、検証チームはプログラムのバグ修正ではなく、ソフトウェアとソフトウェア要件の検証に集中 的に取り組むことができます。 このホワイトペーパーの目的は、ソース コード解析ツール、特に Klocwork Insight を使用すること で、DO-178B 認証の達成を目指すソフトウェア開発組織による取り組みの合理化をどう支援できるか を明らかにすることです。ここでは、まずソース コード解析技術を紹介し、次にミッションクリティカ ルなソフトウェアの開発で、ソース コード解析技術にどのようなメリットがあるかを紹介します。その 後、DO-178B に関連して活用できる Klocwork Insight の中核機能を要約して説明します。最後に、 Klocwork Insight によって対応可能、または一部対応可能な指針の分野を説明します。 静的ソース コード解析 自動ソース コード解析(SCA)技術は、ソフトウェア ソース コードが弱点とする分野を特定、対処 するために設計されています。このような弱点としては、セキュリティの脆弱性、ロジック エラー、 実装の不具合、並列処理違反、希少な境界条件、または問題を生じさせる多数の他の種類のコード などが挙げられます。SCA 関連で基礎となる技術は静的解析と呼ばれます。現在の世代のテクノロジ ソリューションは、高度、高価値の解析によって、システム クラッシュやハッカーに悪用される原因と なり、ミッションクリティカルなソフトウェアの全体的な信頼性に影響を及ぼす可能性のある、コード の深刻なバグやセキュリティの脆弱性を識別できます。複雑なソフトウェアでこのような問題を識別す るため、最新のソース コード解析ツールでは、手続間制御フロー、データ フロー、値範囲の伝播、 記号論理評価など、複雑な静的解析技術をソース コードに適用しています。 ソース コード解析は、ビルド時に問題のプログラムまたはモジュールのソース コードのみを使用し て実行するもので、ユニット テストや侵入テストなど、従来の動的解析技術とは異なります。このため、 ランタイムに観察される動作という、必然的に制限される一部の側面ではなく、考えられるあらゆる 実行パスを完全に把握して生成された結果が報告されることになります。 この新たなレベルの自動コード解析には、開発コストの削減、生産性の向上、システム テストや QA 検出される不具合の数の飛躍的な減少、最終的にはより信頼性が高く、保守性に優れたソフトウェア製 品という、ソフトウェア開発にとって非常に大きな利点があります。ソース コード解析をチームの開発プ ロセスの標準要素として実装した場合、開発者はチェックインや追加的なダウンストリーム検証手順用に コードを提出する前に、作業しながらコードの明白な脆弱性やあまり明白ではない脆弱性をクリーンアッ プすることができます。 KLOCWORK | ホワイトペーパー | 2009 3

Upload: others

Post on 16-Sep-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: KLOCWORK | 年 月 ソース コード解析で D0-178B への対応を合理化 · 2014. 5. 22. · ソース コード解析で D0-178B への対応を合理化 Klocwork Insight™

ソース コード解析で D0-178B への対応を合理化Klocwork Insight™ を使用して ソフトウェア検証の要件に対応

RTCA が公開、導入した DO-178B 規格「Software Considerations in Airborne Systems and Equipment Certification(空輸システムおよび機器の認定におけるソフトウェアで検討すべき事項)」は、空輸ソフトウェア システムの安全性と信頼性を確保するための一連のベスト プラクティスです。DO-178B によってソフトウェア検証ツールと見なされているソース コード解析(SCA)ツールを使用することで、多数のソース コード検査要件、特にソフトウェア検証とソフトウェア ライフサイクル データの要件を自動化できます。SCA 技術で他の種類のテストの必要性を置き換えることはできませんが、プロジェクトの検証費用を大幅に削減できます。安全重視のプロジェクトで開発費に占める割合が単体で最も高いのがソフトウェア検証(解析、レビュー、テスト)です。ソース コード解析を使用することで、検証チームはプログラムのバグ修正ではなく、ソフトウェアとソフトウェア要件の検証に集中的に取り組むことができます。

このホワイトペーパーの目的は、ソース コード解析ツール、特に Klocwork Insight を使用することで、DO-178B 認証の達成を目指すソフトウェア開発組織による取り組みの合理化をどう支援できるかを明らかにすることです。ここでは、まずソース コード解析技術を紹介し、次にミッションクリティカルなソフトウェアの開発で、ソース コード解析技術にどのようなメリットがあるかを紹介します。その後、DO-178B に関連して活用できる Klocwork Insight の中核機能を要約して説明します。最後に、Klocwork Insight によって対応可能、または一部対応可能な指針の分野を説明します。

静的ソース コード解析 自動ソース コード解析(SCA)技術は、ソフトウェア ソース コードが弱点とする分野を特定、対処するために設計されています。このような弱点としては、セキュリティの脆弱性、ロジック エラー、実装の不具合、並列処理違反、希少な境界条件、または問題を生じさせる多数の他の種類のコードなどが挙げられます。SCA 関連で基礎となる技術は静的解析と呼ばれます。現在の世代のテクノロジ ソリューションは、高度、高価値の解析によって、システム クラッシュやハッカーに悪用される原因となり、ミッションクリティカルなソフトウェアの全体的な信頼性に影響を及ぼす可能性のある、コードの深刻なバグやセキュリティの脆弱性を識別できます。複雑なソフトウェアでこのような問題を識別するため、最新のソース コード解析ツールでは、手続間制御フロー、データ フロー、値範囲の伝播、記号論理評価など、複雑な静的解析技術をソース コードに適用しています。

ソース コード解析は、ビルド時に問題のプログラムまたはモジュールのソース コードのみを使用して実行するもので、ユニット テストや侵入テストなど、従来の動的解析技術とは異なります。このため、ランタイムに観察される動作という、必然的に制限される一部の側面ではなく、考えられるあらゆる実行パスを完全に把握して生成された結果が報告されることになります。

この新たなレベルの自動コード解析には、開発コストの削減、生産性の向上、システム テストや QA で検出される不具合の数の飛躍的な減少、最終的にはより信頼性が高く、保守性に優れたソフトウェア製品という、ソフトウェア開発にとって非常に大きな利点があります。ソース コード解析をチームの開発プロセスの標準要素として実装した場合、開発者はチェックインや追加的なダウンストリーム検証手順用にコードを提出する前に、作業しながらコードの明白な脆弱性やあまり明白ではない脆弱性をクリーンアップすることができます。

KLOCWORK | ホワイトペーパー | 2009 年 3 月

Page 2: KLOCWORK | 年 月 ソース コード解析で D0-178B への対応を合理化 · 2014. 5. 22. · ソース コード解析で D0-178B への対応を合理化 Klocwork Insight™

Streamlining D0-178B Efforts with Source Code Analysis | Klocwork White Paper | 2

DO-178B に関連した SCA の活用DO-178B ガイダンスのセクション 6.0「Software Verification Process(ソフトウェア検証プロセス)」とセクション 11.0「Software Lifecycle Data(ソフトウェア ライフサイクル データ)」には、ソース コード解析ツールで対処できる、多数の要件の概略が説明されています。具体的に言えば、Klocwork Insight は、次の機能によってソフトウェア開発チームが具体的なガイドラインの目標を効率的かつ効果的に達成できるように支援します。

動作上のバグとセキュリティの脆弱性の解析Klocwork Insight によって検出される動作上のバグとセキュリティの脆弱性の数は数百件に上る場合がありますが、C/C++ については、以下のように高水準のカテゴリに整理できます。

» メモリおよびリソース管理 » プログラム データ管理 » バッファ オーバーフロー » 同時違反 » プラットフォームのサポート » 無効なユーザ入力 » 脆弱なコーディング » 長期メンテナンスの問題

これらのバグと脆弱性のタイプの詳細については、本書の付録をご覧ください。

スタック オーバーフロー解析潜在的なスタック オーバーフロー エラーは、エントリ関数で開始する Directed Call Graphic を使用する特殊なメトリック(Maximum Acyclic Stack Size)を使用して計算されます。Klocwork Stack Overflow Analyzer では以下が可能です。

» エントリ関数を指定する、またはデフォルトのエントリ関数を使用する(エントリ関数の呼び出しのないノード) » 各エントリ関数のスタック サイズを指定する » 最大スタック サイズで関数を識別する » スタックのオーバーフローに必要な最大ループ数で、再帰関数を識別する » 選択した関数に関する情報を印刷する » スタック使用率の問題に重点を置いて、アプリケーションのコール グラフを視覚化する

アーキテクチャ解析とフローチャート作成Klocwork Insight では、既存のソース コードから直接、ソフトウェアの構造と構成の正確な表現が抽出されます。Architect のグラフィカル インタフェースによって、ソフトウェア設計者はフローチャートベースの表示によるソフトウェアの制御フローの表示とともに、コンポーネントとサブコンポーネント、インタフェース、およびコンポーネント間の関係というソフトウェア システ

Page 3: KLOCWORK | 年 月 ソース コード解析で D0-178B への対応を合理化 · 2014. 5. 22. · ソース コード解析で D0-178B への対応を合理化 Klocwork Insight™

Streamlining D0-178B Efforts with Source Code Analysis | Klocwork White Paper | 3

ムの側面を理解することができます。これによって、ソフトウェア設計者はシステムに影響を与えることなく、さまざまな最適化モデルでの試行が可能です。この自動コード ディスカバリ機能により、アーキテクトは複雑なコードの相互作用を可視化し、what-if シナリオを作成し、コードを再設計して、より高い最適化、構成、一貫性を実現できます。

さらに、ソフトウェア エンティティ間に望ましい関係のみが存在するようにする、Klocwork Insight のアーキテクチャ ルールを使用することで、希望どおりのソフトウェア アーキテクチャを実現できます。これらは開発者のデスクトップとシステムのビルド レベルの両方で実行できます。

Klocwork Insight を深刻なバグを検出するツールと組み合わせて使用することで、開発チームはより優れた、より保守性の高いコードを記述できます。

ソフトウェア メトリック解析動作上のバグの検出とアーキテクチャ解析機能に加えて、Klocwork Insight では堅牢なソフトウェア メトリック ソリューションが利用できます。Klocwork Insight では、McCabe Cyclomatic Complexity、カップリング、保守性、リスク メトリックなど、100 を超えるソフトウェア メトリックがサポートされています。設定をほとんど必要とせずに使用できるメトリックを複合メトリックと組み合わせれば、多数のカスタム ソフトウェア メトリック プログラムをサポートできます。メトリックのしきい値は、機能の豊富な管理レポート ダッシュボードによって、開発者のデスクトップとシステム ビルド レベルの両方で設定できます。

Klocwork の拡張性お客様が組織や規制、コード ベース独自の要件を満たすカスタム チェッカーを作成して、すぐに利用できるチェッカーのライブラリを拡張できる柔軟性も備えています。この機能はさまざまな種類のチェッカーの生成に使用される、2 種類の高レベルの宣言型言語のフレームワークに基づいています。 1. 抽象構文ツリー(AST)チェッカーは、エラー条件の評価にランタイム状態を必要とせず、ソース ツリー内全体で検出できる場合に使用されます。AST チェッカーの例:クラスは、コンストラクタまたはデストラクタ内の仮想メンバー関数への呼び出しを配置することはできません。

2. 有効な解析を作成するため、データ フロー チェッカーには、コードのランタイム状態と関数呼び出しの境界全体にわたる複雑なデータ フローに関する知識が必要です。データ フロー チェッカーの例:Arrays.asList() メソッドによって返されるコレクションは不変であり、変更できません。変更を試行すると、ランタイム例外がスローされます。

AST チェッカー開発は、Checker Studio 製品モジュールによって可能です。開発者は、このモジュールで次の機能セットを利用できます。

» 使用可能な API の包括的な資料、サンプル チェッカー、新規チェッカー作成のためのチュートリアルによる設計サポート » Klocwork 作成の AST をナビゲートするチェッカー開発ツール チェインを利用した、開発者によるチェッカーの導入を容易にする開発サポート

» 開発者のデスクトップにカスタム チェッカーを導入する自動「プッシュ モデル」を使用した、簡素化された「ワン ボタン」チェッカーによる導入サポート

Page 4: KLOCWORK | 年 月 ソース コード解析で D0-178B への対応を合理化 · 2014. 5. 22. · ソース コード解析で D0-178B への対応を合理化 Klocwork Insight™

Streamlining D0-178B Efforts with Source Code Analysis | Klocwork White Paper | 4

Klocwork Insight によってサポートされる DO-178B 規格のセクション以下では、Klocwork Insight を使用することで対処、または部分的に対処可能なセクション 6.0「Software Verification Process(ソフトウェア検証プロセス)」とセクション 11.0「Software Lifecycle Data(ソフトウェア ライフサイクル データ)」の具体的なサブセクションについて説明します。ここで概略するさまざまな DO-178B の目標は、Klocwork の関連機能の目的をお伝えするためにまとめたものです。DO-178B 規格で定められた要件の明確化については、規格を参照し、対象への準拠に関する専門家に相談してください。

6.0 Software Veri�cation Process(ソフトウェア検証プロセス)

6.3.3 Reviews and Analyses of the Software Architecture(ソフトウェア アーキテクチャのレビューと解析) このセクションで、組織には多数の具体的な目標の達成を含めて、開発中の潜在的なエラーに関してソフトウェア アーキテクチャをレビューすることが求められています。Klocwork Insight は、以下 5 つの 6.3.3 の目標をサポートする解析とともに使用できます。

要求される検証 KLOCWORK INSIGHT のチェッカー タイプまたは解析機能 QUAL. PACK

a. 高レベルの要件との互換性 Klocwork Architect

b. 一貫性 Klocwork Architect

c. 対象のコンピュータとの互換性 初期化されていない変数チェッカー P

d. 検証可能性 Klocwork Architect

e. 規格への適合性 Klocwork Architect, Klocwork Metrics Analysis, and Klocwork Extensibility

a. 高レベル要件との互換性 - アーキテクチャのレビューには明確な理解が重要です。レビュー担当者は、Klocwork Insight を使用してアーキテクチャを可視化し、ソフトウェアを構成するコンポーネント間の関係をより深く理解することができます。この知識によって、レビュー担当者はソフトウェア アーキテクチャの高レベル要件との互換性を検証できます。

b. 一貫性 - このレビューでは、ソフトウェア アーキテクチャのコンポーネント間の関係の正確性が確認されます。制御フローとデータ フローとの関係が解析され、レビュー担当者に開示されるため、レビュー担当者は一貫性をより適切に判断できます。

c. 対象のコンピュータとの互換性 - この目標のほとんどはエンジニアによって検証されますが、Klocwork Insight では初期化シーケンスが正しく実行されているかを判断できます。特に、初期化される前のデータの使用は、Klocwork Insight による検出が可能なため、重要な特性です。

d. 検証可能性 - 一般に、検証エビデンスが確立されれば、アーキテクチャが検証可能であることは明白です。ただし、何らかの微妙な制御フロー パスが存在する可能性があり、手動レビューでの検出は困難です。たとえば、間接的な回帰エラーは検査用に分離して、制限の有無を評価できます。

Page 5: KLOCWORK | 年 月 ソース コード解析で D0-178B への対応を合理化 · 2014. 5. 22. · ソース コード解析で D0-178B への対応を合理化 Klocwork Insight™

Streamlining D0-178B Efforts with Source Code Analysis | Klocwork White Paper | 5

e. 規格への適合性 - これは導入するソフトウェア設計規格によって異なります。ソフトウェアに制約を課す規格で、その制約が言語構成要素の使用によって説明されている場合、Klocwork Insight はこれらに対する違反を検証できます。たとえば、複雑度が定められた制限を超えている場合、ツールによって提供されるメトリックで検出できます。あるいは、特定の言語機能が別の言語機能にネストされている場合(割り込みドライバ コード内の動作のブロックなど)、許可されていない特定のコーディング コンストラクタを識別する Klockwork の Extensibility を使用して検出できます。

6.3.4 Reviews and Analyses of the Source Code(ソース コードのレビューと解析)このセクションではソース コードのレビューと解析によって、ソフトウェアのコーディング プロセス中に生じる可能性のあるエラーを識別することが求められます。一番に念頭に置くべきこととして、コーディング規格への適合性とともに、要件およびアーキテクチャに関するコードの正確性が挙げられます。Klocwork Insight は、6.3.4 の 3 つのサブセクションをサポートしています。

b. ソフトウェア アーキテクチャへの準拠

要求される検証 KLOCWORK INSIGHT のチェッカー タイプまたは解析機能 QUAL. PACK

ソフトウェア アーキテクチャへの準拠

Klocwork Architect では、データ フローおよび制御フロー解析がレビュー担当者に開示されるため、レビュー担当者は設計とこの情報を対比してチェックできます。設計は、低レベル要件として表される可能性があります。さらに、データと制御フローの一貫性も自動的にチェックされます。

d. 規格への適合性

要求される検証 KLOCWORK INSIGHT のチェッカー タイプまたは解析機能 QUAL. PACK

ソフトウェア コード規格 セクション 11.8 参照

複雑度の制約 McCabe Cyclomatic Complexity、カップリング、および 100 を超えるソフトウェア メトリック

f. 精度と一貫性

要求される検証 KLOCWORK INSIGHT のチェッカー タイプまたは解析機能 QUAL. PACK

スタックの使用 Stack Overflow Analyzer

初期化されていない変数の使用または制約

初期化されていない変数 P

未使用変数の検出または制約 未使用コード P

6.4.3 Requirements-Based Testing Methods(要件ベースのテスト方法)要件ベースのテストの目標は、ソース コードの解析で置き換えることはできませんが、Klocwork Insight でコードを解析することで、一般的にテスト中に検出されるようなエラーを大幅に削減できます。安全重視のプロジェクトで開発費に占める割合が単体で最も高いのがソフトウェア検証(解析、レビュー、テスト)ですから、コスト削減の大きなチャンスがあります。Klocwork Insight を使用することで、検証チームは開発中に把握できたはずのプログラムのバグの検出、再現、修復ではなく、ソフトウェアと要件の検証に集中的に取り組むことができます。

b. 要件ベースのソフトウェア統合テスト

要件ベースのソフトウェア統合テストに関するこのセクションの目標は、ソフトウェア コンポーネントが正しく相互作用していて、ソフトウェア要件とアーキテクチャを満たしているかを確認することです。Klocwork Insight では、以下に示す複数の不具合検出機能を使用してサポートされています。

要求される検証 KLOCWORK INSIGHT のチェッカー タイプまたは解析機能 QUAL. PACK

変数の不適切な初期化と制約 初期化されていない変数 P

パラメータを渡す際のエラー NULL ポインタのデリファレンス、配列範囲違反、解放されたメモリの使用 P

データ破損、特にグローバル データ

バッファ オーバーフロー、未検証データ P

データ破損、特にグローバル データ

TOCTOU(チェック時から使用時まで)、さまざまな疑わしいコーディング手法

不適切なエンドツーエンド数値分解能

ゼロ除算、精度の消失

Page 6: KLOCWORK | 年 月 ソース コード解析で D0-178B への対応を合理化 · 2014. 5. 22. · ソース コード解析で D0-178B への対応を合理化 Klocwork Insight™

Streamlining D0-178B Efforts with Source Code Analysis | Klocwork White Paper | 6

c. 要件ベースの低レベル テスト

要件ベースの低レベル テストに関するこのセクションの目標は、各コンポーネントが低レベル要件に適合しているかを確認することです。Klocwork Insight では、以下に示す複数の不具合検出機能を使用してサポートされています。

要求される検証 KLOCWORK INSIGHT のチェッカー タイプまたは解析機能 QUAL. PACK

配列制限違反 配列範囲違反 P

不適切な計算シーケンス ゼロ除算

6.4.4.3 Structural Coverage Analysis Resolution(構造カバレッジ解析分解能)規格によって定義される構造カバレッジ解析の目標は、テスト中に実施されなかったコード構造の識別です。静的解析ツールとして、Klocwork Insight はデッド コードつまり未使用コードの識別によって、この目標に貢献できます。デッド コードが識別され、ソース コード レベルで除去されると、カバレッジ解析でアクセスできないコードに対するテストの記述で時間を無駄にすることがなくなります。

要求される検証 KLOCWORK INSIGHT のチェッカー タイプまたは解析機能 QUAL. PACK

c. デッド コード 未使用コード P

11.0 Software Life Cycle Data(ソフトウェア ライフサイクル データ)

11.7 Software Design Standards(ソフトウェア設計規格)このセクションの目標は、ソフトウェア アーキテクチャと低レベル要件の開発に使用されるメソッド、ルール、およびツールの定義です。Klocwork Insight では、このセクションで必要とされる 3 つのサブセクションをサポートできます。

要求される検証 KLOCWORK INSIGHT のチェッカー タイプまたは解析機能 QUAL. PACK

b. 使用する名前付け規則 特定の名前付け規則に適用する Klocwork Extensibility(KAST)の使用

e. 設計に関する制約 設計の問題の識別に使用する Klocwork Extensibility(KAST)の使用

f. 複雑度の制約 McCabe Cyclomatic Complexity、カップリング、および 100 を超えるソフトウェアメトリック

11.8 Software Code Standards(ソフトウェア コード規格)このセクションの目標は、ソフトウェアのコード化に使用されるプログラミング言語、メソッド、ルール、およびツールの定義です。Klocwork Insight では、このセクションで必要とされるサブセクションのうち 3 つをサポートできます。

要求される検証 KLOCWORK INSIGHT のチェッカー タイプまたは解析機能 QUAL. PACK

a. プログラミング言語、機能、サブセットなど

コードの抽象構文ツリー(AST)に対するチェックに適用する Klocwork Extensibility(KAST)の使用

c. 変数に対する名前付け規則と制約

変数に対する特定の名前付け規則と制約に適用する Klocwork Extensibility(KAST)の使用

d. コーディング規則で許可される条件と制約

カップリング メトリック

Klocwork Insight ツールの適格性静的コード解析ツールとして、Klocwork Insight は、DO-178B ガイダンスに従ったソフトウェア検証ツールと見なされています。ここでは、ツールが通常の状況下で動作要件に一致すると実証できることが、ツールに対する適格性のしきい値とされています(セクション 12.2)。

プロジェクトに対して Klocwork Insight の使用される際に、DO-178B の下での認定への適格性を希望される場合、Klocwork はお客様固有の開発構成に対して、次の成果物の使用を許諾します。

1. ツールの適格性プラン2. ツールの動作要件3. ツールの適格性データ

これらの成果物の目標は、お客様が費用効率の高い、効率的な方法で、認証機関による Klocwork Insight の適格性の実証を行えるようにすることです。

Page 7: KLOCWORK | 年 月 ソース コード解析で D0-178B への対応を合理化 · 2014. 5. 22. · ソース コード解析で D0-178B への対応を合理化 Klocwork Insight™

Streamlining D0-178B Efforts with Source Code Analysis | Klocwork White Paper | 7

付録 - Klocwork Insight によって検出された C/C++ の動作上のバグと 脆弱性の説明Klocwork の静的ソース コード解析ツールは、C および C++ ソフトウェア開発に関する複雑で重大なプログラミングの問題を最も包括的な範囲で検出できます。

メモリおよびリソース管理C および C++ 言語は、低レベルのマシンの相互作用に関連するハードウェアとリソースへの直接アクセスで、開発者に大きなメリットがあります。当然ながら、この柔軟性には、開発者に課せられる要件として、すべてのリソースのライフサイクル全体の管理に完全な責任を負わなければならないというマイナス面があります。

特に、メモリ管理はソフトウェアで最大のバグ発生源の 1 つです。割り当てと割り当て解除の保証は、対処すべき深刻な問題の 1 つですが、メモリの再利用、割り当て API の使用に関する不一致、全体的なライフサイクル管理など、他の問題も存在するため、このカテゴリのチェッカーは Klocwork Insight で最も貴重な機能の 1 つとして挙げられます。

メモリやリソースのリークシンプルなテスト プログラムでは問題になりませんが、メモリやその他のリソースのリークは、特に組み込みソフトウェアなど、制約された環境で寿命の長いアプリケーションを作成する場合は最大の懸案事項の 1 つになります。このファミリのチェッカーは以下のとおりです。

MLK メモリ リークが検出されました

SYM.MLK Symbian 環境に固有のメモリ リークが検出されました

RH.LEAK 一般的なリソース リーク

FREE. INCONSISTENT

関数のコード パスに関するメモリの一貫性のない割り当て解除

CL.MLK デストラクタのメモリ リークを生じさせる脆弱なコーディング パターン

CL.SELF-ASSIGN 演算子「=」のメモリ リークを生じさせる脆弱なコーディング パターン

これらのチェッカーの一部は、必要に応じて、エラーがすべてのコード パスで発生するか、特定のコード パスに関してのみ発生するかを区別します。

割り当てが解除されたメモリの使用割り当てが解除されたメモリを使用すると、すでに別の目的、あるいは別のプロセスに割り当てられている可能性のあるメモリを使用して実行される操作に基づく、幅広い異常な状況に至ることが知られています。このファミリのチェッカーは以下のとおりです。

UFM.DEREF 割り当てが解除されたメモリに対するポインタのデリファレンスの試行

UFM.FFM すでに割り当てが解除されたメモリに対する割り当て解除の試行

UFM.PARAMPASS 割り当てが解除されたメモリを関数に渡す試行

UFM.RETURN 関数から割り当てが解除されたメモリを返す試行

UFM.USE 割り当てが解除されたメモリを使用しようとする一般的な試行

LOCRET 関数からローカル変数のアドレスを返す試行

CL.FFM クラス構成における潜在的な脆弱性

このファミリのすべてのチェッカーは、必要に応じて、エラーがすべてのコード パスで発生するか、特定のコード パスに関してのみ発生するかを報告します。 .

メモリの不正な割り当て解除誤った、または一貫性のない割り当て解除に関連するバグは、クラッシュを生じさせるシナリオだけでなく、長期的なメンテナンスの問題を生じさせる可能性があります。特に不都合が大きいのは、多言語コード(C と C++ の混在など)に生じた場合で、これらのエラーはデバッグとリテール アロケーション ライブラリが混在する場合にも生じる可能性があります。

Page 8: KLOCWORK | 年 月 ソース コード解析で D0-178B への対応を合理化 · 2014. 5. 22. · ソース コード解析で D0-178B への対応を合理化 Klocwork Insight™

Streamlining D0-178B Efforts with Source Code Analysis | Klocwork White Paper | 8

このファミリのチェッカーは以下のとおりです。

FMM 割り当て/割り当て解除が一致しない

CL.FMM 潜在的なクラス構成の脆弱性

FNH ヒープ以外のメモリに対する割り当て解除の試行

FUM 割り当てられていないメモリに対する割り当て解除の試行

このファミリのすべてのチェッカーは、必要に応じて、エラーがすべてのコード パスで発生するか、特定のコード パスに関してのみ発生するかを報告します。

プログラム データ管理プログラム内で使用される変数は、実行コンテキストの重要な要素です。これらの変数がどのような状況でも有効であるようにすることは、寿命の長い、貴重なアプリケーションを作成するために重要な鍵の 1 つです。C/C++ 開発者にとって特に興味深いのは、以下に記載された 2 つのクラスのチェッカー、つまり、ポインタと無効な値を仮定できる状況、そしてあらゆる種類の初期化されていないデータです。

NULL ポインタのデリファレンス使用するプロセッサ アーキテクチャ、および動作環境のセマンティックスによっては、NULL ポインタのデリファレンスが、セグメンテーションの欠陥や、その他の急を要するシナリオに至る可能性があります。ポインタがいつどのように NULL 値を仮定するかを理解するには、複雑なデータと制御フローの解析が必要とされ、他のファミリに存在する一連のチェッカーの種類より、さらにきめ細かな解析が必要となります。

このファミリに属するトップ レベルのチェッカーは以下のとおりです。解析中にそれぞれがさらに適格化され、エラーが実際に障害に対してどのような意味を持つかに関するコンテキストを提供します。

NPD.GEN NULL ポインタに対するデリファレンスの試行

NPD.FUNC 関数呼び出しから返された NULL ポインタがデリファレンスされます

NPD.CHECK ポインタは NULL がチェックされてからデリファレンスされます

NPD.CONST 定数の NULL 値で初期化されたポインタがデリファレンスされます

RNPD ポインタはデリファレンスされてから、NULL をチェックされます

このファミリのすべてのチェッカーが、以下を含む詳細をさらに報告します。 » エラーがすべてのコード パスで発生するか、または特定のパスでのみ発生するか » NULL ポインタがローカルでデリファレンスされるか、または関数呼び出しによってデリファレンスされるか

初期化されていないデータの使用厳密に初期化されていないデータの使用は、多数のプログラム エラーの原因としてよく知られています。最近の悪用では、初期化されていないデータが複数の重要なセキュリティ脆弱性の根本原因であることも示されています。このファミリのチェッカーは以下のとおりです。

UNINIT.STACK スタック常駐データが初期化されていません

UNINIT.HEAP ヒープ常駐データが初期化されていません

UNINIT.CTOR C++ クラスのメンバー データがコンストラクタによって初期化されていません

UNINIT.STACK.ARRAY スタック常駐配列型が初期化されていません

UNINIT.STACK.ARRAY.PARTIAL

スタック常駐配列型が一部しか初期化されていません

すべてのチェッカーでは、初期化が一部の有効なコード パスについてのみ実行されているか、または有効なコード パスではまったく実行されていないかについても報告されます。

バッファ オーバーフロー通常、データがあるべきでないバッファに移動される可能性があると、品質に関する問題が生じ、これによってバッファ オーバーフローが生じます。最近の調査では、このようなオーバーフローがコード インジェクションの悪用によるセキュリティの脆弱性に至る可能性があることが示されています。

Page 9: KLOCWORK | 年 月 ソース コード解析で D0-178B への対応を合理化 · 2014. 5. 22. · ソース コード解析で D0-178B への対応を合理化 Klocwork Insight™

Streamlining D0-178B Efforts with Source Code Analysis | Klocwork White Paper | 9

このファミリのチェッカーは以下のとおりです。

ABR バッファ オーバーフロー

ABV 配列範囲違反、またはインデックス オーバーフロー

NNTS 非 NULL 終端文字列でオーバーフローの可能性が生じています

SV.STRBO オーバーフローを生じさせる可能性のある文字列ライブラリの脆弱性

無効なユーザ入力アプリケーションを介した不正データの流れは、アプリケーションにコード インジェクション、文字列インジェクション、コマンド インジェクションなどによる悪用に対する脆弱性があるかどうかの理解に重要です。同様に、不正データは、簡単にサービス拒否、クラッシュ、その他の望ましくない結果に至る可能性があります。

このファミリのチェッカーは以下のとおりです。

SV.TAINTED さまざまな種類の不正データ フローの解析

SV.CUDS 相対パス名の潜在的に安全でない使用

SV.STR-PAR ファイル パスのコンテキストでの潜在的な文字列インジェクション

脆弱なコーディング脆弱なコーディングは、アプリケーションを悪用に対して無防備にする可能性のある、コードの構成、または設計上の欠陥です。特定の脆弱性は微妙で直ちに明白なものではないため、これらのバグには、多くの場合、慎重な手動レビューが必要です。

このファミリのチェッカーは以下のとおりです。

SV.WEAK_CRYPTO 機密データに使用される、既知の脆弱な暗号化

SV.PCC 既知の脆弱なシステム API 呼び出しの使用

SV.BFC DNS スプーフィング攻撃に脆弱なコード

SV.PAIRS 無視された戻り値(および関連するシステム エラー API)

SV.RVT 既知の無効な値に対して、関数の戻りがチェックされていません

SV.BRM 既知の脆弱なシステム レジストリ操作

同時違反特定のランタイム状況下やアプリケーションの負荷が非常に高い状況で発生する場合、デッドロックに至る可能性のあるコードは、特にデバッグが大変困難です。

このファミリのチェッカーは以下のとおりです。

CONC.NO_UNLOCK ロックがかけられ、解放されません

CONC.SLEEP ロックがかけられ、操作に停止を生じさせるように使用されています

プラットフォームのサポート有用な SCA ツールには、特定のプラットフォーム上でアプリケーションを検証する機能があります。ここで言うプラットフォームには、Windows や Linux のような O/S プラットフォーム、STL のような言語プラットフォーム、または特定のコンパイラや言語拡張で具体化されるハードウェア プラットフォームなどが含まれます。

この機能の多くは、それ自体が SCA エンジンに組み込まれますが、以下のとおり、これに関連して呼び出す価値のあるチェッカーのクラスがいくつかあります。

BSTR データ型の使用このチェッカーのファミリの目的は、COM コード内の BSTR データ型の使用を検証することです。残念ながら、開発者が不注意で BSTR をゼロ終端 C 文字列データ型に、あるいはその逆に置き換えてしまうことはよくあります。

Page 10: KLOCWORK | 年 月 ソース コード解析で D0-178B への対応を合理化 · 2014. 5. 22. · ソース コード解析で D0-178B への対応を合理化 Klocwork Insight™

米国:15 New England Executive ParkBurlington, MA 01803

カナダ:30 Edgewater Street, Suite 114Ottawa, ON K2L 1V

t: 1.866.556.2967f: 613.836.9088www.klocwork.com

© Klocwork Inc. All rights reserved. Klocwork and Klocwork Truepath are registered trademarks of Klocwork Inc.

このファミリのチェッカーは以下のとおりです。

BSTR.IA 無効な初期化、または BSTR 変数の割り当てです

BSTR.OPS 一致しない、または無効なタイプが演算子に使用されています

BSTR.FUNC BSTR 固有の関数への呼び出しに非 BSTR 型が使用されています

BSTR.CAST C、または C++ セマンティックスを使用した、ゼロ終端の文字列への無効な型変換です

CCOMBSTR.OPS 無効な状況での CComBSTR ラッパー クラスの使用

Klocwork についてKlocwork® は安全で信頼性の高いソフトウェアの開発を支援します。Klocwork のツールはソース コードの解析をオンザフライで実行し、ピア コード レビューの簡素化と複雑なソフトウェアの寿命の延長に貢献します。モバイル デバイス、家庭用電化製品、医療技術、通信、軍事、航空宇宙産業の大手企業を含む 900 社以上が、ソフトウェア開発プロセスに Klocwork のツールを取り入れています。数千人のソフトウェア開発者、設計技術者、開発マネージャが、ソフトウェアの品質改善と生産性の向上に向けて、これらのツールを日々利用しています。