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
© Copyright 2024