C-RUN - ランタイム コードエラーチェック

C-RUN
- ランタイム
コードエラーチェック
www.iar.com
AGENDA
• バックグラウンド
• 古典的な脆弱性と
良くあるエラー
• C-RUNを使って
ランタイムに致命的な
エラーを発見
www.iar.com
2
バックグラウンド
•
•
•
•
ソフトウェアにエラーはつきもの・・・
開発の後期に問題が見つかるほど、修正工数が
肥大化することが知られています
従来の開発サイクルでは、問題の発見と修正が大きな部分
を占めています
この資料では、下記の2つを区別します
• 仕様問題テストのゴール
正しく機能を実装した?
• データ操作問題
これから、この種の問題について、取り組んでみます
www.iar.com
3
データ操作に関する問題
•
CWE listのTop 40 (Common Weakness Enumeration (cwe.mitre.org)
Rank 3
CWE-120
Buffer Copy without Checking Size of Input ('Classic
Buffer Overflow')
Rank 24
CWE-190
Integer Overflow or Wraparound
Rank 32
CWE-822
Untrusted Pointer Dereference
Rank 35
CWE-681
Incorrect Conversion between Numeric Types
C/C++の良くある問題・・
• 危険なバッファコピーはC/C++が助けてくれない領域外エ
ラーの一つ
• C/C++言語の仕様として、int型変数の誤変換やオーバーフ
ロー/ラップアラウンドが重大なソースの間違い
• ヒープ管理、ポインター参照管理なども、難しい点
www.iar.com
4
データ操作に関する問題
•
数値演算の問題
• Cコードで流行している問題…
• 通常でない実行シナリオで発生しうる
• 運が良ければ、出力結果の異常で検出可能、運が悪ければ、不定
の状態やクラッシュ
•
int i,j;
...
ch = (char)(i*10);
j=0;
i = i/j;
領域外の問題
• 異常データを書き込むことでシステムのクラッシュを起こしうる
• 単体テストや統合テストを行っても、異常系データテストをしな
い限り見逃されうる
•
int i=Arr[ArrI + 1];
i += Arr[ArrI + 2];
return i;
メモリ不整合の問題
• 通常でない実行シナリオで発生しうる
 バッファをあるコードで上書きし、その
上書きされたデータを別の箇所で参照  症状は、いつどこで発
生するかわからない
• 追跡が非常に難しい
www.iar.com
5
char *p = malloc(10);
…
free(p + 200);
共通のテーマ
データ操作に関数する問題は、網羅的な異常系テスト
が実施されないかぎり、静的テスト、単体足すと、統
合テストを通しても、見逃されうる
エラー状況は起こりうる、がテストフェーズでエラー
として現れてくれるとは限らない
www.iar.com
6
処方箋
自動エラーチェックツールをなるべく早く
導入しよう
•
ポインタ演算などを含む
領域チェック
変換、オーバフローなど
の数値演算エラー
ヒープ、メモリ管理
•
C-RUN !
•
•
www.iar.com
7
処方箋– C-RUN
C-RUN – ランタイムエラーチェック
コンパイラ、デバッガのエキスパートが開発
秀逸なパフォーマンスと小さなフットプリント
www.iar.com
8
処方箋– C-RUN
•
•
ポインタ演算などを含む領域チェック
数値演算エラーチェック
•
•
•
•
•
•
オーバーフロー/アンダーフロー
誤ったシフト演算
0での除算
スイッチ構文でのcaseラベルの不足
デバッグ機能を含むヒープ、メモリ管理チェック
効果的な評価コード
www.iar.com
9
処方箋– C-RUN
•
•
•
チェック項目は個別に
ON/OFF可能
プロジェクトレベル、コー
ドレベルなどモジュールご
とに設定可能
オーバーヘッドは
•
•
設定したチェック項目
アプリケーションの属性
に依存
www.iar.com
10
処方箋– C-RUN
•
•
•
•
IAR Embedded Workbenchに完全統合
日々のコーディング、テストサイクルでの即時のフィードバック
何が問題か、詳細なフィードバック
様々なコードレベルでのメッセージ取り扱いの柔軟なルール
www.iar.com
11
C-RUNに一番乗りしましょう
Register at
www.iar.com/
jp/crun
www.iar.com
12