Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
[19Jun] 静的コード解析による高品質・セキュア・スピーディなソフトウェア開発
Search
Sho Kawahara
June 11, 2019
Technology
15
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
[19Jun] 静的コード解析による高品質・セキュア・スピーディなソフトウェア開発
Sho Kawahara
June 11, 2019
More Decks by Sho Kawahara
See All by Sho Kawahara
[19Sep] 静的コード解析による高品質・セキュア・スピーディなソフトウェア開発
kawasho
0
21
帯域外リモート管理の継続を可能にするVMマイグレーション
kawasho
0
16
The Continuity of Out-of-band Remote Management Across Virtual Machine Migration in Clouds
kawasho
0
20
Other Decks in Technology
See All in Technology
ボーイスカウトルールでメモリやスキルを改善しよう
azukiazusa1
4
1.1k
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.4k
CSに"SLO"は要らない、経営層に"99.9%"は伝わらない - SREを全社に"翻訳"する3原則
cscengineer
PRO
1
4.6k
DMM.com 購入改善推進チーム におけるCodeRabbitを用いた レビューフロー改善の一例
ysknsid25
2
630
ローカルLLMとLINE Botの組み合わせ その3 / LINE DC Generative AI Meetup #8
you
PRO
0
130
Claude Codeとハーネスについて考えてみる
oikon48
19
9.5k
ソニー銀行におけるビジネスアジリティ向上のためのクラウドシフト戦略
srenext
0
240
Devsumi 2026 Summer 人もAIも使える共通基盤を事業の加速装置にする~デザインシステム運用に学ぶ組織レバレッジ~ 渡辺 凌央
legalontechnologies
PRO
0
130
誤解だらけの開発生産性 / Myths and Misconceptions about Developer Productivity
i35_267
2
600
SRE Next 2026 何でも屋からの脱却
bto
0
710
LLM/Agent評価:トップ営業の発言を「正解」にする 〜暗黙的正解による評価を営業資産に変える〜
takkuhiro
1
220
しぶいSRE: サーバから見えない障害にどう向き合うか。ラストワンマイルのデバッグ実践 / Shibui SRE
kanny
13
6.1k
Featured
See All Featured
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.5k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
Designing Experiences People Love
moore
143
24k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
630
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
150
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
410
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.7k
Transcript
日本シノプシス合同会社 ソフトウェアインテグリティグループ セールスエンジニア 川原 翔 2019年6月11日 (火) 静的コード解析による 高品質・セキュア・スピーディなソフトウェア開発
© 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
© 2019 Synopsys, Inc. 3
© 2019 Synopsys, Inc. 4 膨大・複雑化し続けるソフトウェア 現代の自動車に含まれるコード行数 1億5000万行 高度化する自動車制御に加え、市場の要求に 応えたナビゲーション・エンターテイメントシステム
等の高付加価値機能を搭載。 はどれくらいでしょうか。
© 2019 Synopsys, Inc. 5 膨大・複雑化し続けるソフトウェア •新しいビジネス価値の追求/市場の要求 –高機能・高付加価値の提供 –ネットワークとの融合 –ユーザーの利便性の向上
•ソフトウェア開発現場にのしかかる 品質とセキュリティの課題 –システムの複雑化 –コード行数の増加 –テスト工数の増大 Facebookの バックエンドコード Microsoft Office 2013 ボーイング787 米軍の戦闘機 スペースシャトル 平均的な現代の乗用車に 含まれるコード行数
© 2019 Synopsys, Inc. 6 多種多様化・複雑化するソースコードの「源流」 GPL等のライセンスに従う フリーオープンソース ソフトウェア(FOSS) 認可されていない
潜在的な悪意のあるコード 偽造されたコードの混入 古くなった、脆弱なコード アウトソース開発によるコード 追いつかない最終チェック 源流のわからない 最終成果物の放流!! ネット等からコピーペーストされたコード 自社開発のコード 購入したサードパーティーコード
© 2019 Synopsys, Inc. 7 バグ修正のタイミングとコスト 設計 開発 テスト 製品リリース
& 管理 (基準コスト) 手戻りの発生 10倍のコスト パッチ配信・リコール 30倍のコスト
© 2019 Synopsys, Inc. 8 狙われるアプリケーション脆弱性 84% サイバー攻撃全体の84%が アプリケーションの脆弱性を標的に実行。 *SAP社調査結果
© 2019 Synopsys, Inc. 9
© 2019 Synopsys, Inc. 10 お客さまの製品開発の課題を解決します。 市場への製品の一日でも早い早期投入 外部からの脅威増加への対応 品質とセキュリティを担保する開発ライフサイクルの実現
© 2019 Synopsys, Inc. 11 シノプシスが高品質・セキュア・迅速なソフトウェア開発を実現します。 シノ プシスが提供するソフトウ ェアセキ ュリティ
&品質 製品・サービスポートフォリオ 統合ツール マネージド サービス プロフェッショナル サービス 戦略と計画 Coverity 静的解析 Black Duck ソフトウェア構成要素解析 Seekers & Defensics 動的検証 静的解析テスト ペネトレーション テストサービス モバイル アプリケーション セキュリティテスト ネットワーク セキュリティテスト アーキテクチャと設計 セキュリティ トレーニング DevSecOps の導入・統合 クラウド セキュリティ 業界・産業別 ソリューション BSIMM ソフトウェア開発セキュリティの成熟度モデル評価 Maturity Action Plan ソフトウェア開発セキュリティ成熟度向上プランニング 動的アプリケーション セキュリティテスト
© 2019 Synopsys, Inc. 12
© 2019 Synopsys, Inc. 13 •静的コード解析 –ソフトウェアを動作させることなく、ソースコードそのものの動作や構造を解析して、不具合や脆弱性を発見す る手法です。 静的コード解析でソフトウェアの品質・セキュリティを改善
© 2019 Synopsys, Inc. 14 静的解析ソリューションを選択する際のキーとなるポイント • 検出された結果が 信頼がおけるものかど うか。
• 誤った検知が少なく、 実用性があるか。 精度 • 検出結果が直観的に 理解できるものかどうか。 • バグを一意に認識し、 トラックし続けることが できるか。 使いやすさと 汎用性 • 開発に使用している プログラミング言語や フレームワークの解析 に対応しているかどうか。 • 不具合チェックに加え、 セキュリティチェックに 対応しているか。 • 開発ライフサイクルや 自動化プロセスに組み 込めるものか。 カバー領域と 拡張性
© 2019 Synopsys, Inc. 15 Coverityの特長 正確・高精度な不具合検出 素早い問題の把握・是正 既存ワークフローへの統合
© 2019 Synopsys, Inc. 16 Coverityの特長 正確・高精度な不具合検出 素早い問題の把握・是正 既存ワークフローへの統合
© 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); } • スケーラビリティ • 一貫性 • 柔軟性 オーバーフロー 目視では発見困難な不具合を検出 クラス、関数、ファイルの境界を超えて解析
© 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; }
© 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 • メモリ破壊 • 危殆化した暗号化アルゴリズム
© 2019 Synopsys, Inc. 20 Coverityの特長 正確・高精度な不具合検出 素早い問題の把握・是正 既存ワークフローへの統合 独自手法により、誤検知
<15% を実現
© 2019 Synopsys, Inc. 21 Coverityの特長 正確・高精度な不具合検出 素早い問題の把握・是正 既存ワークフローへの統合 独自手法により、誤検知
<15% を実現
© 2019 Synopsys, Inc. 22 不具合管理 Web アプリケーション 開発者が同時に解析結果を確認
© 2019 Synopsys, Inc. 23 理解しやすい結果表示
© 2019 Synopsys, Inc. 24 •CID : 不具合に割り当てられるユニークな ID –関数名
–発生位置 –不具合種類 から割り当て ー> 同じソースコードを何度解析しても、同じ不具合には同じ CID が割り当てられる “この不具合はいつ混入したのか?” 一度見た不具合はマークすることで、解析結果のレビューを高速化
© 2019 Synopsys, Inc. 25 レポーティング プロジェクトの状況を俯瞰的に確認
© 2019 Synopsys, Inc. 26
© 2019 Synopsys, Inc. 27 (例) null 戻り値の間接参照 <NULL_RETURNS> null
が返される可能性がある関数 null 戻り値の参照 nullチェックをして利用している箇所の表示
© 2019 Synopsys, Inc. 28 (例) SQLインジェクション <SQLI>
© 2019 Synopsys, Inc. 29 (例) コピーペーストエラー <COPY_PASTE_ERROR>
© 2019 Synopsys, Inc. 30
© 2019 Synopsys, Inc. 31 Coverityの特長 正確・高精度な不具合検出 素早い問題の把握・是正 既存ワークフローへの統合 独自手法により、誤検知
<15% を実現 不具合の原因を視覚的・直観的に把握可能
© 2019 Synopsys, Inc. 32 Coverityの特長 正確・高精度な不具合検出 素早い問題の把握・是正 既存ワークフローへの統合 独自手法により、誤検知
<15% を実現 不具合の原因を視覚的・直観的に把握可能
© 2019 Synopsys, Inc. 33 幅広い技術のサポート 言語対応 セキュリティ 標準規格 SDLC
© 2019 Synopsys, Inc. 34 Coverity サポート言語 / 環境
© 2019 Synopsys, Inc. 35 Coverity サポート言語 / 環境 2019.06版にてGo言語に追加対応!
今後もお客様ニーズに併せて、 対応言語・プラットフォームを強化いたします。 ★NEW★本日リリース
© 2019 Synopsys, Inc. 36 セキュリティ解析は、アプリケーションの脆弱性の悪用につながるコードベース内の領域を検索します。 Coverityセキュリティチェッカーは、以下のようなセキュリティ問題を検出をします。 •ウェブ アプリケーション セキュリティ
–SQLインジェクションやクロスサイトスクリプティング、OSコマンドインジェクション、危険な設定から発生する可 能性のある情報開示といった、一般的なウェブアプリケーションの脆弱性の問題に繋がる可能性のある、 Java や C#のセキュリティ問題の検出や修正が可能になります。 •ソースコード アプリケーション セキュリティ –バッファオーバーフローや整数オーバーフロー、フォーマット文字列のエラーといった ソースコードにおける、重大 なセキュリティ問題を検出し、修正することが可能になります。 •Android アプリケーション セキュリティ –Java Android アプリケーションでセキュリティ問題を検出して修正できます。 Coverity セキュリティ解析機能
© 2019 Synopsys, Inc. 37 •Coverity Connect 内の情報にアクセス Web Service
API coverityConfigService 設定情報 coverityDefectService 不具合情報 選別情報 バグトラッキングシステムとの同期 不具合レポートの自動生成 ユーザー情報の一括管理 プログラム
© 2019 Synopsys, Inc. 38 Coverityの特長 正確・高精度な不具合検出 素早い問題の把握・是正 既存ワークフローへの統合 独自手法により、誤検知
<15% を実現 不具合の原因を視覚的・直観的に把握可能 幅広い技術に対応し、開発環境にスムーズに統合
© 2019 Synopsys, Inc. 39 Coverityの特長まとめ 正確・高精度な不具合検出 素早い問題の把握・是正 既存ワークフローへの統合 独自手法により、誤検知
<15% を実現 不具合の原因を視覚的・直観的に把握可能 幅広い技術に対応し、開発環境にスムーズに統合
© 2019 Synopsys, Inc. 40 早期のバグ修正で後工程の手間を減らします 設計 開発 QA 製品リリース
& 管理 基準コスト 10倍のコスト 30倍のコスト 静的解析 Coverity 早い段階で不具合を除去
© 2019 Synopsys, Inc. 41
© 2019 Synopsys, Inc. 42 •解析自動化 お客様での解析自動化事例 コード作成・修正 最新コード取得 ビルド自動化環境の構築サービスも
ご提供しております。(Appendix参照)
© 2019 Synopsys, Inc. 43 •全コードの解析なしに担当のコード(1ファイル)のみを解析可能に •中央ビルドで検出した不具合の 98% を識別できるため、2度手間を防ぐことが可能 •コマンドラインベースのデスクトップ解析も可能
•Visual Studio、Eclipse/CDT、Emacs scripts、VIM等 “コミット前に自分のコードをチェック” デスクトップ解析
© 2019 Synopsys, Inc. 44
© 2019 Synopsys, Inc. 45 •Coverityのトライアルはシノプシスのエンジニアがお客さま先に訪問させていただき、 結果報告会を実施、一緒に検出結果をご覧いただきます!(出張トライアル。) Coverityをお客さまのソースコードでお試ししませんか?
© 2019 Synopsys, Inc. 46 Coverity トライアルのステップ ご依頼 • トライアルご希望の旨のご連絡をいただきます。
(本セミナーのアンケートからご希望依頼いただけます!) ヒアリング • ヒアリングシートにご記入いただきます。(言語や行数、ビルドコマンド等をお聞きします。) ご回答内容に基づき、Coverityで解析可能か確認させていただいた後、次のステップへ進みます。 発行・準備 • お客様に解析対象を1-2個ご選択いただき、ネイティブビルド環境をご用意いただきます。 • シノプシスが1カ月間有効なCoverityライセンスを発行します。 解析作業 • お客様に事前にダウンロード・ビルド・解析作業を行っていただき、結果のログをご送付いただきます。 (手順はとても簡単で、ガイド資料をお送りさせていただくほか、シノプシスのエンジニアがご導入をサポートさせていただきます。) 結果報告 • 結果報告会の日程を2~5時間(ご状況と環境に依ります)ご用意いただき、シノプシスのエンジニアがお客様先にお伺いいたします。 • 事前準備 :最初の1~2時間で弊社エンジニアが最終作業と特に着目すべき深刻な不具合をピックアップいたします。 • 結果報告会 :事前準備の完了後、解析したソフトウェアの品質状況・不具合の詳細をご説明させていただきます。 結果報告会の際には開発者の方とツール購入のご決定者様にもご出席をお願いします。
© 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 トライアルに関してのご留意事項
© 2019 Synopsys, Inc. 48
© 2019 Synopsys, Inc. 49 バグ・脆弱性についてもっとよく知るために…
© 2019 Synopsys, Inc. 50 活発な学習体験を促進する シノプシスのeLearningシステム
© 2019 Synopsys, Inc. 51 Synopsys eLearning プラットフォーム お客様の環境に合わせ、クラウド・オンプレをご選択いただけます。
© 2019 Synopsys, Inc. 52 - 46コース提供中(2019年6月現在) - SDLCの様々な役割に対応したコースを提供 -
ロール、チーム、またはプロジェクト単位でカリキュラムを割り当て可能 - 自由度の高い採用コースの選択・購入 - モジュール化、ゲームを利用した課題で受講者のモチベーションを高めます。 eLearning コース フロントエンド開発者 バックエンド開発者 QAエンジニア エンタープライズ開発者 モバイル開発者 アーキテクト
© 2019 Synopsys, Inc. 53 eLearningコース一覧 2019年2月現在 https://securitylearning.synopsys.com/
© 2019 Synopsys, Inc. 54 - 日本語、英語、中国語(Mandarin)、ドイツ語サポート (2019年1月23日現在) - 社内、社外パートナーの技術底上げ
- 開発製品・サービスの品質統一化 多言語対応(もちろん、日本語も!)
© 2019 Synopsys, Inc. 55 - Coverityを含むシノプシスのツールとeLearningコースの連携が可能 - 開発レポートツールとの連携で受講者の知識が正しく反映されているか確認 -
ダッシュボードで受講者の管理、進捗確認を一元化 - 独自の修了証を設定して発行が可能 - eLearning管理者・受講者間でディスカッションの場を提供 もっと便利に
© 2019 Synopsys, Inc. 56 •eLearning Webサイト(コースのリスト等) https://www.synopsys.com/ja-jp/software-integrity/training/elearning.html •お問い合わせ(トライアルご依頼はこちらから) –
[email protected]
– 本日のアンケートでも承っております。 eLearningもお試しいただけます!
ありがとうございました!
© 2019 Synopsys, Inc. 58
© 2019 Synopsys, Inc. 59
© 2019 Synopsys, Inc. 60 •各種テストでPCI DSSの要件にも備えることができます。 •詳しい対応内容についてはデータシートをご覧ください。 – https://www.synopsys.com/content/dam/synopsys/sig-assets/datasheets/coverity-pci-dss-ds.pdf
PCI DSS要件への対応の観点でのチェック
© 2019 Synopsys, Inc. 61
© 2019 Synopsys, Inc. 62 (例) 非常に弱いパスワード ハッシング <WEAK_PASSWORD_HASH>
© 2019 Synopsys, Inc. 63
© 2019 Synopsys, Inc. 64 •お客様環境への組み込みや、トレーニング等を実施させていただくサービスです。 •例えば以下の内容を実施させていただきます。 –お客様ビルド自動化環境への組み込み(ビルド自動化環境の新規構築も承ります。) –開発者・管理者向けトレーニング –導入構成のドキュメント化
–その他、お客様のご希望される内容 •ご要望の内容に基づいて、お見積りをさせていただきます。 スムーズなご導入を支援するプロフェッショナルサービスのご提供
© 2019 Synopsys, Inc. 65
© 2019 Synopsys, Inc. 66 •既存顧客 12 社からの調査結果 – 医療機器、ISV
金融サービス、製造メーカ、テレコム、モバイル •バグ修正工数の平均 – 手動:16人時間/件 – コベリティ:2人時間/件 (14人時の削減) 自動化による工数削減 Coverity 導入による費用対効果
© 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日として換算