高精度静的解析ツール CodeSonar 世界トップレベルの解析能力で不具合や脆弱性の原因となるソースコードのバグを検出

CodeSonarは、C/C++/Javaで書かれたソースコードを、コンパイル時に静的に深く解析し、さまざまな種類の重大なバグとセキュリティ上の脆弱性を検出し、ソフトウェアの品質を向上させる高精度バグ検出ツールです。
従来のコーディングルールチェックタイプの静的解析ツールと比べて精度の高い解析機能を誇り、通常は検出困難な不具合(実行時エラー、セキュリティ脆弱性、マルチスレッドのレース問題など)を徹底的に検出します。
また、CodeSonarは、パス解析、データフロー解析を行い、レポートとして表示します。これにより、不具合情報をより詳細に分析できるため、開発者のコード解析にかける時間の無駄を省き、実際の不具合修正に集中することができます。
※経済産業省 商務情報政策局 サイバーセキュリティ課による「機器のサイバーセキュリティ確保のためのセキュリティ検証の手引き(2021/4/16)」にCodeSonarが掲載されました。 詳しくは こちら
検出できる主な基本的バグクラス一覧
- バッファオーバラン
- バッファアンダーラン
- 危険な関数キャスト
- mallocで確保した領域をdelete[ ]で解放
- newで確保した領域をdelete[ ]で解放
- mallocで確保した領域をdeleteで解放
- new[ ]で確保した領域をdeleteで解放
- ゼロによる割り算
- 二重解放
- フォーマットストリング
(書式指定文字列の脆弱性) - 非ヒープ変数解放
- NULLポインタ解放
- new[ ]で確保した領域をfreeで解放
- newで確保した領域をfreeで解放
- 無視された戻り値
- 型オーバラン
- 型アンダーラン
- メモリリーク
- リターン命令ミス
- NULLポインタ参照
- 参照後のNULLテスト
- 冗長な条件
- ローカル変数へのポインタ戻し
- 解放メモリへのポインタ戻し
- 未初期化変数
- 未到達コード
- 未使用値
- 解放後の使用
- 無意味な割当て
- 可変引数関数キャスト
- キャストによる値変更
- ビット幅を超えるシフト
- 負の値のシフト
- 無意味な分岐命令
- 無意味な関数呼び出し
主な特長
- マルチスレッドでのデータアクセス競合の検出
ロック、アンロック、セマフォなどによる排他制御漏れの検出 - 割り込み干渉問題検出
割り込み処理に起因するデータ競合問題の検出 - Taint(汚染)解析機能
ユーザー入力の値、ネットワークからの値、ファイルからの値などがチェックなしで使用され、割り当てられたサイズを超える問題の検出 - Eclipseインテグレーション
EclipseのUIからCodeSonarの解析およびCodeSonarペーンからワーニングを確認 - レポート機能
HTMLおよびPDFでのカスタマイズ可能なレポートの生成 - ランク機能による結果の精査効率向上
検出されたワーニングに対する80段階の細かな重みづけによる、結果の精査効率向上 - コンパイル時に解析を行い、不具合を検出
- テストケースが不要
- 開発プロセスの早期段階で重大なバグを検出
- 最小のミッシングレート(未検出率)
- フォールスポジティブ(バグの誤検知)を最小限に抑える
- プロシージャ間解析手法により、ファイル全体における解析が可能
- プロシージャ間解析
各プログラム全体に渡り実行フローを追跡することができる解析手法。プロシージャ間解析を行うことで、モジュールを個別に取り扱う解析手法の際に発生するバグの見落としや誤検知を減らすことができます。
- プロシージャ間解析
- データフロー解析を行い、従来の静的解析では対応しきれないコードパスに依存する部分の不具合を検出
データフロー解析:モジュール内の全てのパスの変数を追跡 - Z3 SMTソルバー
Z3 SMTソルバーの使用により、誤検出を軽減 - エンタープライズ対応により、プロジェクト管理やレポートの共有が可能
- Hub(ハブ)
Hubは、結果レポートを保存するデータベース、Webサーバです。Hubでは解析を行いません。 - Analysis Daemon(解析用デーモン)
実際のコード解析は、この解析用デーモンで行います。解析結果は、Hubにアップロードされ、開発チームが効率よく結果をマネージ(調整や修正など)することができます。
- Hub(ハブ)

- ビルド環境やソースコードの変更不要
ソースコードやビルドスクリプトに修正を加えることなく、CodeSonar側には使用するコンパイラの実行ファイルをWizard画面に指定します。その後は、通常のビルドプロセスを行うだけで解析が可能です。また、特定のコマンドを書いて、お客様のビルドシステムにフックさせて解析を行うこともできます。 - コード規模が大きいプログラムも解析可能
高いスケーラビリティ性 - 300種類以上のオープンソースを解析した実績
- Linuxカーネルへの実績
- 約 600万行のC++アプリケーションなど

CodeSonarが出力する解析結果レポートについて
1.プロジェクトごとに管理可能
解析されたプロジェクトごとにスクリーン表示されます。

2.検出された不具合のテーブル表示
このスクリーンは解析ページと呼ばれ、CodeSonar により検出された不具合がテーブルに表示されます。

3.検出した不具合を分析し、レポートとして詳細に表示

4.バグトラッキング機能
解析結果レポートのChange Warning欄を使用することで、開発チーム内で不具合の共有・管理が可能です。
CodeSonarが検出した不具合について、各不具合のステータスを開発チーム内で特定し、修正すべき不具合の優先順位や報告を行うことができます。

5.解析結果レポートのチャート図式表現機能
ワンクリックで、解析結果レポートをテーブル表、チャート図、折れ線グラフで表示することができます。

6.ビジュアライゼーション機能
関数の呼び出し関係をグラフィカルに表示することができます。

ターゲット製品 / 対応製品 / 互換性など
対応ホスト環境 | Windows Linux Solaris |
---|---|
対応言語 | C/C++/Java |
対応コンパイラ | Microsoft Visual C++ gcc g++ Renesas SH/H8 Compiler CubeSuite+ Sun C compiler Green Hills C Compiler ARM compiler(ADS/RVDS) Wind River Compiler Intel C compiler Hi-Tech TI CodeComposer/CodeComposer Studio CodeWarrior IAR Compiler ※その他のコンパイラ、バージョンの詳細に関しましては別途ご相談ください。 |
ユーザーメリット
- 通常のテストでは何週間もかかって検出されるようなバグを、コンパイル時にピンポイントで検出
- ユーザは通常のビルドを行い、CodeSonarにはそのビルドプロセスに対するWatchを指示するだけで解析が可能
- バグ結果をブラウザ上で調べることが可能
開発チームの開発者全員がCodeSonarをインストールする必要はなく、各自のウェブブラウザをポイントするだけでバグを調べることができます。それぞれのバグについて、どのパスを通って問題が発生したかなどをトレース可能です。これにより、ユーザーは、バグの原因をすばやく理解し、修正することができます。
主な用途(アプリケーション例など)
- 航空宇宙
- 防衛
- テレコム&ネットワーク機器
- 民生機器
- 産業機器
- その他各種組込ソフトウェア
採用事例
NASAでの使用例:
アメリカ航空宇宙局(NASA)の火星探索機キュリオシティの制御ソフト検証にCodeSonarが使用されました。
米国食品医薬品局での使用例:
医療機器向けソフトウェアの解析に関して、新技術の調査を行っている米国食品医薬品局 (FDA:Food and Drug Administration) にCodeSonarが採用されました。
※「組込みプレス Vol.13(技術評論社 刊 )」から一部抜粋
産業用ロボット:
川崎重工業株式会社様
「バッファオーバランといった組込みソフトウェアの問題を、開発者による機能作成段階で除去することができ、品質向上に一定の効果がある。」
技術サポート体制
電話、FAX、E-mailによるサポート、有償トレーニング、コンサルティング。