Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[19Jun] 静的コード解析による高品質・セキュア・スピーディなソフトウェア開発

[19Jun] 静的コード解析による高品質・セキュア・スピーディなソフトウェア開発

Sho Kawahara

June 11, 2019
Tweet

More Decks by Sho Kawahara

Other Decks in Technology

Transcript

  1. © 2019 Synopsys, Inc. 2 シノプシス - シリコンからソフトウェアまで、 お客さまの迅速かつセキュアな開発を支援します。 売上高:

    31.2億ドル 従業員: 13,600人 取得特許数: 3,149 カナダ チリ 日本 303 韓国 ロシア 中国 1,212 インド 2,847 アルメニア イスラエル 欧州 2,576 東南アジア 2,981 台湾 米国 4,671 拠点数: 120 $ ソフトウェアセキュリティと品質 – ‘Leader’ (ガートナー社MQ) 回路設計支援(EDA)ツール – 世界シェア No.1 IP(知的財産)コア – 世界シェア No.1
  2. © 2019 Synopsys, Inc. 5 膨大・複雑化し続けるソフトウェア •新しいビジネス価値の追求/市場の要求 –高機能・高付加価値の提供 –ネットワークとの融合 –ユーザーの利便性の向上

    •ソフトウェア開発現場にのしかかる 品質とセキュリティの課題 –システムの複雑化 –コード行数の増加 –テスト工数の増大 Facebookの バックエンドコード Microsoft Office 2013 ボーイング787 米軍の戦闘機 スペースシャトル 平均的な現代の乗用車に 含まれるコード行数
  3. © 2019 Synopsys, Inc. 6 多種多様化・複雑化するソースコードの「源流」 GPL等のライセンスに従う フリーオープンソース ソフトウェア(FOSS) 認可されていない

    潜在的な悪意のあるコード 偽造されたコードの混入 古くなった、脆弱なコード アウトソース開発によるコード 追いつかない最終チェック 源流のわからない 最終成果物の放流!! ネット等からコピーペーストされたコード 自社開発のコード 購入したサードパーティーコード
  4. © 2019 Synopsys, Inc. 7 バグ修正のタイミングとコスト 設計 開発 テスト 製品リリース

    & 管理 (基準コスト) 手戻りの発生 10倍のコスト パッチ配信・リコール 30倍のコスト
  5. © 2019 Synopsys, Inc. 11 シノプシスが高品質・セキュア・迅速なソフトウェア開発を実現します。 シノ プシスが提供するソフトウ ェアセキ ュリティ

    &品質 製品・サービスポートフォリオ 統合ツール マネージド サービス プロフェッショナル サービス 戦略と計画 Coverity 静的解析 Black Duck ソフトウェア構成要素解析 Seekers & Defensics 動的検証 静的解析テスト ペネトレーション テストサービス モバイル アプリケーション セキュリティテスト ネットワーク セキュリティテスト アーキテクチャと設計 セキュリティ トレーニング DevSecOps の導入・統合 クラウド セキュリティ 業界・産業別 ソリューション BSIMM ソフトウェア開発セキュリティの成熟度モデル評価 Maturity Action Plan ソフトウェア開発セキュリティ成熟度向上プランニング 動的アプリケーション セキュリティテスト
  6. © 2019 Synopsys, Inc. 14 静的解析ソリューションを選択する際のキーとなるポイント • 検出された結果が 信頼がおけるものかど うか。

    • 誤った検知が少なく、 実用性があるか。 精度 • 検出結果が直観的に 理解できるものかどうか。 • バグを一意に認識し、 トラックし続けることが できるか。 使いやすさと 汎用性 • 開発に使用している プログラミング言語や フレームワークの解析 に対応しているかどうか。 • 不具合チェックに加え、 セキュリティチェックに 対応しているか。 • 開発ライフサイクルや 自動化プロセスに組み 込めるものか。 カバー領域と 拡張性
  7. © 2019 Synopsys, Inc. 17 プロシージャ間の解析 file-1.c char *duplicate(char *data,

    int len) { void *buf = malloc(len); memcpy(buf, data, len); return buf; } file-2.c char *unauthorized_access() { return duplicate(“ECHO”, 4096); } • スケーラビリティ • 一貫性 • 柔軟性 オーバーフロー 目視では発見困難な不具合を検出 クラス、関数、ファイルの境界を超えて解析
  8. © 2019 Synopsys, Inc. 18 全パス解析 cond2 *a = b

    free(a) *a = b free(a) cond2 b = 10 a = malloc(10) cond1 if (cond1) { a = malloc(10); } else { b = 10; } if (cond2) { free(a); } else { *a = b; } cond2 *a = b free(a) *a = b free(a) cond2 b = 10 a = malloc(10) cond1 柔軟な構成 低ノイズ 起こりえない 洗練された手法により、パフォーマンスとスケーラビリティを実現 全ファイル、関数、パスを解析して問題を特定 if (cond1) { a = malloc(10); } else { b = 10; } if (cond2) { free(a); } else { *a = b; }
  9. © 2019 Synopsys, Inc. 19 Coverityで検出可能な不具合・欠陥の一例 ランタイムエラー 並列処理の問題 •デッドロック •競合状態

    •ブロック呼び出しの誤用 パフォーマンスの低下 •メモリ・リーク •スタックの使用度合い クラッシュの原因 •Null ポインタの間接参照 •ポインタの解放後のメモリ使用 •二重解放 セキュリティ上の脆弱性 •バッファ・オーバーフロー •外部入力値の不適切な利用 API などの不適切な使用 •API エラー処理 プログラムの不正な動作 •デッドコード •未初期化変数 •コピー&ペーストのミス コーディングルール MISRA • MISRA-C 2012 (Amd1含む) • MISRA-C 2004 • MISRA-C++ 2008 CERT-C • 2016版Rulesのみ(一部未対応) セキュリティ OWASP Top10 • 各種インジェクション • クロスサイトスクリプティング(XSS) CWE/SANS Top 25 • メモリ破壊 • 危殆化した暗号化アルゴリズム
  10. © 2019 Synopsys, Inc. 24 •CID : 不具合に割り当てられるユニークな ID –関数名

    –発生位置 –不具合種類 から割り当て ー> 同じソースコードを何度解析しても、同じ不具合には同じ CID が割り当てられる “この不具合はいつ混入したのか?” 一度見た不具合はマークすることで、解析結果のレビューを高速化
  11. © 2019 Synopsys, Inc. 27 (例) null 戻り値の間接参照 <NULL_RETURNS> null

    が返される可能性がある関数 null 戻り値の参照 nullチェックをして利用している箇所の表示
  12. © 2019 Synopsys, Inc. 35 Coverity サポート言語 / 環境 2019.06版にてGo言語に追加対応!

    今後もお客様ニーズに併せて、 対応言語・プラットフォームを強化いたします。 ★NEW★本日リリース
  13. © 2019 Synopsys, Inc. 36 セキュリティ解析は、アプリケーションの脆弱性の悪用につながるコードベース内の領域を検索します。 Coverityセキュリティチェッカーは、以下のようなセキュリティ問題を検出をします。 •ウェブ アプリケーション セキュリティ

    –SQLインジェクションやクロスサイトスクリプティング、OSコマンドインジェクション、危険な設定から発生する可 能性のある情報開示といった、一般的なウェブアプリケーションの脆弱性の問題に繋がる可能性のある、 Java や C#のセキュリティ問題の検出や修正が可能になります。 •ソースコード アプリケーション セキュリティ –バッファオーバーフローや整数オーバーフロー、フォーマット文字列のエラーといった ソースコードにおける、重大 なセキュリティ問題を検出し、修正することが可能になります。 •Android アプリケーション セキュリティ –Java Android アプリケーションでセキュリティ問題を検出して修正できます。 Coverity セキュリティ解析機能
  14. © 2019 Synopsys, Inc. 37 •Coverity Connect 内の情報にアクセス Web Service

    API coverityConfigService 設定情報 coverityDefectService 不具合情報 選別情報 バグトラッキングシステムとの同期 不具合レポートの自動生成 ユーザー情報の一括管理 プログラム
  15. © 2019 Synopsys, Inc. 38 Coverityの特長 正確・高精度な不具合検出 素早い問題の把握・是正 既存ワークフローへの統合 独自手法により、誤検知

    <15% を実現 不具合の原因を視覚的・直観的に把握可能 幅広い技術に対応し、開発環境にスムーズに統合
  16. © 2019 Synopsys, Inc. 39 Coverityの特長まとめ 正確・高精度な不具合検出 素早い問題の把握・是正 既存ワークフローへの統合 独自手法により、誤検知

    <15% を実現 不具合の原因を視覚的・直観的に把握可能 幅広い技術に対応し、開発環境にスムーズに統合
  17. © 2019 Synopsys, Inc. 40 早期のバグ修正で後工程の手間を減らします 設計 開発 QA 製品リリース

    & 管理 基準コスト 10倍のコスト 30倍のコスト 静的解析 Coverity 早い段階で不具合を除去
  18. © 2019 Synopsys, Inc. 46 Coverity トライアルのステップ ご依頼 • トライアルご希望の旨のご連絡をいただきます。

    (本セミナーのアンケートからご希望依頼いただけます!) ヒアリング • ヒアリングシートにご記入いただきます。(言語や行数、ビルドコマンド等をお聞きします。) ご回答内容に基づき、Coverityで解析可能か確認させていただいた後、次のステップへ進みます。 発行・準備 • お客様に解析対象を1-2個ご選択いただき、ネイティブビルド環境をご用意いただきます。 • シノプシスが1カ月間有効なCoverityライセンスを発行します。 解析作業 • お客様に事前にダウンロード・ビルド・解析作業を行っていただき、結果のログをご送付いただきます。 (手順はとても簡単で、ガイド資料をお送りさせていただくほか、シノプシスのエンジニアがご導入をサポートさせていただきます。) 結果報告 • 結果報告会の日程を2~5時間(ご状況と環境に依ります)ご用意いただき、シノプシスのエンジニアがお客様先にお伺いいたします。 • 事前準備 :最初の1~2時間で弊社エンジニアが最終作業と特に着目すべき深刻な不具合をピックアップいたします。 • 結果報告会 :事前準備の完了後、解析したソフトウェアの品質状況・不具合の詳細をご説明させていただきます。 結果報告会の際には開発者の方とツール購入のご決定者様にもご出席をお願いします。
  19. © 2019 Synopsys, Inc. 47 • トライアルにあたっては以下のマシンをご用意いただく必要があります。 – Coverity Analysis(解析ソフトウェア)をインストールしたお客様ビルド環境

    – Coverity Connect(解析結果閲覧用サーバ)用のマシン(Coverity Analysisと同一で可能) – CPU デュアルコア以上 – メモリ 8GB以上 – ストレージ 20GB以上の空き – OS 64bitのLinuxまたはWindows – ブラウザ Internet Explorer 11以降、Firefox、Google Chrome、Safari • 解析対象は1~2個でお願いしております。 – トライアルでは結果のコミット(アップロード)は弊社エンジニアのみが可能となっておりますので、 結果報告会の際に作業を行わせていただき、以降結果の確認が可能となります。 • 結果報告会後、ライセンス有効期限内はご自由に結果の閲覧が可能です。 • トライアル(製品お試し)の性質上、トライアルの結果で発見された不具合の修正は ご遠慮いただいております。予めご了承ください。 Coverity トライアルに関してのご留意事項
  20. © 2019 Synopsys, Inc. 52 - 46コース提供中(2019年6月現在) - SDLCの様々な役割に対応したコースを提供 -

    ロール、チーム、またはプロジェクト単位でカリキュラムを割り当て可能 - 自由度の高い採用コースの選択・購入 - モジュール化、ゲームを利用した課題で受講者のモチベーションを高めます。 eLearning コース フロントエンド開発者 バックエンド開発者 QAエンジニア エンタープライズ開発者 モバイル開発者 アーキテクト
  21. © 2019 Synopsys, Inc. 55 - Coverityを含むシノプシスのツールとeLearningコースの連携が可能 - 開発レポートツールとの連携で受講者の知識が正しく反映されているか確認 -

    ダッシュボードで受講者の管理、進捗確認を一元化 - 独自の修了証を設定して発行が可能 - eLearning管理者・受講者間でディスカッションの場を提供 もっと便利に
  22. © 2019 Synopsys, Inc. 66 •既存顧客 12 社からの調査結果 – 医療機器、ISV

    金融サービス、製造メーカ、テレコム、モバイル •バグ修正工数の平均 – 手動:16人時間/件 – コベリティ:2人時間/件 (14人時の削減) 自動化による工数削減 Coverity 導入による費用対効果
  23. © 2019 Synopsys, Inc. 67 <ROI測定> 想定されるプロジェクト行数に対して導入効果を算出してみます。 • 想定される不具合件数: 15,000(K行)

    x 0.76(*不具合密度)/1,000 = 11,400件 *平均的な商用ソフトウェアの不具合密度を適用 • 想定される修正件数 : 11,400(行) x 0.9(誤検知率) x 0.5(要修正対応バグ) = 5,130件 • 上記より、約448人月の工数削減が期待できます。 • 開発者費用単価:6,300円/時 X 8時間 X 20日=1,008,000円/人月 • 448人月× 1,008,000円/人月= 451,584,000円 の費用対効果を得ることが可能 Coverity 導入による費用対効果 Confidential 不具合修正数 5,130件 コベリティを使用せずに修正する場合の工数 16 人時間/件 コベリティを導入し、修正する場合の工数 2 人時間/件 コベリティ導入前 5,130(件)x 16(人時間) = 82,080人時間 (約513人月) コベリティ導入後 5,130(件)x 2(人時間)= 10,260人時間(約64人月) 1日8時間 1ヶ月を20日として換算