Skip to main content
⽇本シノプシス合同会社
Software Integrity Group
松岡正⼈
オープンソース開発で
フリー静的解析ツールを使ってみる
© 2019 Synopsys, Inc. 2
• Synopsysのご紹介
• 脆弱性によって何が起こったか?
• 無償利⽤可能な静的解析ツール”Coverity scan”
• 商⽤製品”Coverity“との⽐較
• まとめ
アジェンダ
© 2019 Synopsys, Inc. 3
Synopsysのご紹介
© 2019 Synopsys, Inc. 4
シノプシス:市場と技術のリーダー
シリコン設計
および検証
シリコン
IP
ソフトウェア
インテグリティ 新興市場のリーダー
広範なポートフォリオ
15〜20%の成⻑率
世界 2位のIPベンダー
2桁の成⻑率
業界のリーダー
1桁後半の成⻑率
6年
約10%の売り上げ
16年
約20%の売り上げ
31年
約65%の売り上げ
© 2019 Synopsys, Inc. 5
FY19 売上⾼:
~$3.4B
従業員数:
~14,200
保有特許数:
~3,250
“Silicon to Software™”
半導体設計からソフトウェア開発に⾄る領域をカバー
Canada
Chile
Japan
303
S. Korea
Russia
China
1,212
India
2,847
Armenia
Israel
Europe
2,576
Southeast Asia
854
Taiwan
USA
4,671
電⼦設計⾃動化(EDA)ツール
およびサービスで業界1位
広範な半導体設計資産(IP)
ポートフォリオ
インタフェース、アナログ、組
み込みメモリーおよび物理IPで
業界1位
Gartnerʼs Magic Quadrant for
application security testingにお
けるリーダー
事業所数:
~130
$
0
500
1,000
1,500
2,000
2,500
3,000
3,500
4,000
'10
'11
'12
'13
'14
'15
'16
'17
'18
'19
'20E
*
$Millions
© 2019 Synopsys, Inc. 6
• 2015年
• Heartbleedを発⾒した
技術とチーム
• 2014年
• セキュリティと品質、
静的解析のリーダー
• 2016年
• 400⼈以上の
セキュリティ専⾨家
• マネージドサービスと
プロフェッショナルサー
ビス
• 2017年
• OSSセキュリティと
リスク管理ツールと
専⾨家
セキュリティと品質はシノプシスのDNA
• 2020年
• 先進的なDAST技術
• Web API のセキュリティ
© 2019 Synopsys, Inc. 7
ソフトウェア開発・セキュリティ市場でのポジション
ソフトウェア静的解析、コンポジション解析、総合セキュリティテストでリーダーの評価
Forrester Wave
Static Application Security Testing
Forrester Wave
Software Composition Analysis
Gartner Magic Quadrant
Application Security Testing
https://www.synopsys.com/software-integrity/resources/analyst-
reports/2020-gartner-magic-quadrant.html
https://www.synopsys.com/software-integrity/resources/analyst-
reports/forrester-software-composition-analysis-2019.html?cmp=pr-
sig
© 2019 Synopsys, Inc. 8
多彩な業界でソフトウェアのセキュリティと品質を牽引
モバイルおよび
コンシューマ機器
エンタープライズ
ソフトウェアおよび
ネットワーク
⾼信頼性システム ⾦融サービス
© 2019 Synopsys, Inc. 9
脆弱性によって何が起こったか?
© 2019 Synopsys, Inc. 10
脆弱性を悪⽤されるサイバーインシデントは最⼤のビジネスリスク
サイバーインシデントは最⼤のリスクに
https://www.agcs.allianz.com/content/dam/onemarketing/agcs/agcs/reports/Allianz-Risk-Barometer-2019.pdf
© 2019 Synopsys, Inc. 11
プリンターのハッキング
• 記事では、可能な攻撃について解説
• Shodanでインターネットからアクセス可能
なプリンターは「30,532ノード」;
– 318@オーストラリア
– 8910@⽶国
• 「PRET」を使えば、プリンターに保存され
た⽂書にアクセスできる
– https://www.youtube.com/watch?v=DwKzSO4yA_s
• DoS攻撃含めたプリンターへの攻撃だけでな
く、プリンターを介しての攻撃に悪⽤される
ことが⼤きなリスク
オフィスプリンターもホームプリンターもネットワークにつながっている
https://www.csoonline.com/article/3502543/could-you-be-hacked-by-your-printer.html
© 2019 Synopsys, Inc. 12
URGENT/11、組み込みOSの致命的な脆弱性
医療機器にも⼤きな影響、FDA(⽶国⾷品医薬品局)が警告
https://www.fda.gov/news-events/press-announcements/fda-informs-patients-providers-and-manufacturers-about-potential-cybersecurity-vulnerabilities
• 影響のあった組み込みOS
– VxWorks (by Wind River)
– Operating System Embedded (OSE) (by
ENEA)
– INTEGRITY (by GreenHills)
– ThreadX (by Microsoft)
– ITRON (by TRON)
– ZebOS (by IP Infusion)
• CVE⼀覧
– CVE-2019-12256、CVE-2019-12255、CVE-
2019-12260、CVE-2019-12261、CVE-2019-
12263、CVE-2019-12257
– CVE-2019-12258、CVE-2019-12262、CVE-
2019-12264、 CVE-2019-12259、CVE-2019-
12265
© 2019 Synopsys, Inc. 13
Ripple20、TCP/IPライブラリの重⼤な脆弱性
数億台の組み込み機器に影響
https://blog.kaspersky.co.jp/ripple20-vulnerabilities/28699/
• イスラエルのJSOF社が発⾒
– Black Hat USA, August 2020にて公開予定
• CVE⼀覧
– CVE-2020-11896〜11914(19個)
• 影響のあるメーカーの⼀覧
– https://www.jsof-tech.com/ripple20/#ripple-
whitepaper
• ⽇本では図研エルミック社の「KASAGO」が
対象
– https://www.elwsc.co.jp/news/4136/
© 2019 Synopsys, Inc. 14
GDPR規制とIoT(ネットワーク化された機器)
• GDPRは機器に対するセキュリティ対策を規定
していないが、個⼈情報取扱規程に準ずる必要
がある
• Global Privacy Enforcement Networkの調査で
は300台以上の機器から以下の課題が⾒つかっ
た(2016年)
– 59% は個⼈情報の取得、使⽤、開⽰の説明が不適
当
– 68% はデータ格納の説明が不適当
– 72% はデータの消去⽅法の説明が不適当
– 38% はプライバシーの懸念についての問い合わせ
先が⽰されていない
• 違反した場合の制裁⾦
– 1000 万ユーロ以下、または、 直前の会計年度の
全世界の売上総額の2%以下の⾦額のいずれか⾼
額の⽅
– https://www.ppc.go.jp/enforcement/infoprovision/laws/GDPR/
IoT化された機器が増えることで個⼈情報やデータ漏洩のリスクは増⼤している
https://eugdprcompliant.com/internet-of-things-era-of-gdpr/
© 2019 Synopsys, Inc. 15
無償利⽤可能な静的解析ツール”Coverity scan”
© 2019 Synopsys, Inc. 16
そもそも静的解析ってなんだっけ?
静的解析とは、ソースコードを解析して以下
のことを調べる:
• コーディング・エラー
• セキュリティ上の問題
• テストが不⼗分な⾏、ファイル、関数
© 2019 Synopsys, Inc. 17
そもそも静的解析ってなんだっけ?
1. 最初に、コードをスキャン
2. 次に、呼び出しや依存関係を計算
© 2019 Synopsys, Inc. 18
そもそも静的解析ってなんだっけ?
3. 続いて、コード内のすべての可能なパスを計算
• ⾔語によるが、if-else、caseあるいはswitchなどによってパスが
ノードとともに追加される
4.最後に、すべてのパスを通って⽋陥(バグ)を探す
© 2019 Synopsys, Inc. 19
• 例:
char buf[10], cp_buf[10];
fgets(buf, 10, stdin);
strcpy(cp_buf, buf);
• ⼀部の関数の戻りを確認する必要がある。
• チェックに失敗すると、プログラムのクラッシュ、ハッカーによる深刻なセキュリティの悪⽤、
または意図しないプログラムの動作が発⽣する可能性がある。
主なバグ ‒ CHECKED_RETURN (11%)
静的解析でどんなことがわかるか?
fgets()でエラーが発⽣した場合、
また、bufがnullで終了していない場合は
「バッファオーバーフロー」
© 2019 Synopsys, Inc. 20
静的解析でどんなことがわかるか?
• デッドコードは、実⾏されないコードブロッ
クがある場合に発⽣する。
• 開発者にプログラミングエラーがあり、その
原因となる条件がfalseであることが保証さ
れていることがわかる。
• 開発者は誤った仮定をすることもできる。
主なバグ ‒ デッドコード
© 2019 Synopsys, Inc. 21
静的解析でどんなことがわかるか?
• i2c_read()にエラーがあるとどうなるか?
• チームは何が適切かについてどのように同意
するか?
• bufは常に0x0に初期化されるか?
CHECK_RETURN ‒ どのように処理するか(CID17995)
© 2019 Synopsys, Inc. 22
例えば、Pythonの開発者達は使っている
• Coverityの静的コード分析はコードを実⾏せず、
代わりに、抽象的な解釈を使⽤して、コードの
制御フローとデータフローに関する情報を取得
する。
• プログラムが取る可能性のあるすべてのコード
パスをたどることができる。
• たとえば、アナライザーは、malloc()が後で
free()で解放する必要があるメモリを返すこと
を理解している。
• すべての分岐と関数呼び出しをたどって、考え
られるすべての組み合わせがメモリを解放する
かどうかを確認する。
• アナライザーは、リソースリーク(メモリ、
ファイル記述⼦)、NULL逆参照、解放後の使
⽤、未チェックの戻り値、デッドコード、バッ
ファーオーバーフロー、整数オーバーフロー、
初期化されていない変数など、あらゆる種類の
問題を検出できる。
Coverity scanを使ってCコードを解析している
https://devguide.python.org/coverity/
© 2019 Synopsys, Inc. 23
Coverity scanにアカウントを作成
webブラウザーでscan.coverity.comへアクセス
https://scan.coverity.com/
アカウントを作るには、
右上の「Sign Up」ボタンをクリックする 名前、メール、パスワー
ドを⼊⼒して「Sign Up」
をクリック
GitHubのアカウントでもOK
© 2019 Synopsys, Inc. 24
プロジェクトを選択する
“contributor” じゃないとスキャンできません!
Coverity scanを使っているプロジェクト
はここから選択できる
試しに”tomcat”を検索してみる
© 2019 Synopsys, Inc. 25
スキャンレポートを⾒てみる
Tomcatのプロジェクトのスキャン結果レポート
検索結果の⼀覧から、
Apache Tomcatのプロジェクトのリンク(左端)を
クリックしてレポートを表⽰
プロジェクトのスキャンをいつから始めた
か、最後のスキャンしたビルド、⾔語、リ
ポジトリなどの基礎情報
© 2019 Synopsys, Inc. 26
スキャンレポートを⾒てみる
メトリクスは全体とコンポーネント毎で確認できる
対象バージョン、スキャンした⽇付、⾏数、バグ密度、
新たに発⾒されたバグ、総数、修正済みなど
コンポーネントごとの⾏数やバグ密度
© 2019 Synopsys, Inc. 27
スキャンレポートを⾒てみる
CWEトップ25ごと、コンポーネントごとの内訳
CWEのIDをクリックするとMITREのページ
へジャンプ!
© 2019 Synopsys, Inc. 28
スキャンのためのビルドツールを使う
• ⾔語を選択してビルドツールをダウンロード
• ビルドツールでアップロード⽤のパッケージ
を作成
– MacOSだと右の画⾯のようになる
ビルドツールをダウンロードして環境を構築する
© 2019 Synopsys, Inc. 29
スキャンのためのビルドツールを使う
ビルドツールをダウンロードして環境を構築する
• パッケージの作成に成功したかどうか念のた
めに”tail cov-int/build-log.txt”で確認してお
く
• ビルドで⽣成される”cov-int”の中⾝はこんな
感じ
• ”cov-int“をzipで圧縮して出来上がり
© 2019 Synopsys, Inc. 30
スキャンのためのビルドツールを使う
ビルドツールをダウンロードして環境を構築する
• Coverity scanにビルドをアップロードするに
は、マニュアルでやってみる
– コマンドラインから⾃動実⾏もできる
• ビルドの設定に失敗するとこのあと”failed”
メールが⾶んでくる
• ⾔語の指定やライセンスの種別の指定に注意
すること
© 2019 Synopsys, Inc. 31
スキャンのためのビルドツールを使う
スキャン成功!バグを⾒てみよう
• メトリクスを確認する
• 最終解析⽇は2020年8⽉14⽇
• バグは11
• スキャンしたコードは7464⾏
• バグ密度は”1.48”
• “View Defects”をクリックして詳細を確認
© 2019 Synopsys, Inc. 32
バグを確認する
• 212175 DOM-ベース・XSS
• 別のユーザーが表⽰またはアクセスしたWebペー
ジ上で任意のJavaScriptを実⾏できます。セッ
ションのハイジャック、DOMでの機密データの開
⽰、キーボードとマウスのイベントの表⽰が可能
になる可能性があります。
• xmlHttp.onreadystatechange:信頼できないユー
ザー提供のデータが、JavaScriptを実⾏できるコ
ンテキストに挿⼊されます。(CWE-79)
バグの詳細が表⽰される(ただし英語)
© 2019 Synopsys, Inc. 33
商⽤製品”Coverity“との⽐較
© 2019 Synopsys, Inc. 34
商⽤版Coverity v.s. 無償版Coverity scan
• ⾔語サポートの豊富さ • フレームワークのサポート
当然のことながらできることに⼤きな差がある
© 2019 Synopsys, Inc. 35
商⽤版Coverityのメリット
• 商⽤版はIDEから直接呼び出すことができる
• もちろん各種コンパイラーをサポート
• JenkinsでCI/CDパイプラインに統合可能
• JIRAなどと連動も容易
• CERT、MISRAなどのコーディング規約に基
づいたコーディングエラーも調べてくれる
• もちろん、UIやヘルプなどのドキュメントも
⽇本語版が提供されている
• 技術サポートが得られる(無償版にはないの
で基本⾃⼰解決)
IDEやJenkins、JIRAなどといった開発環境との統合が容易
© 2019 Synopsys, Inc. 36
まとめ
© 2019 Synopsys, Inc. 37
• そもそも静的解析は開発者の作業、コードがちゃんと書けているか教えてくれる
– ⾃分の書いたコードが既知の脆弱性を抱えているかどうかを教えてくれる
– コードレビューにかかる時間を劇的に短縮してくれる
– 機能が正常に動作することをテストするものではないので、単体テストはもちろん必要
• 商⽤版の静的解析ツールを使ったことがないなら、Coverity scanのようなツールは便利
– でも、OSSにしか使⽤できないので、商⽤コードのスキャンはこれではできない
• それでも、IDEから直接利⽤できるなど商⽤版のメリットは⼤きい
– 業界ごとの規定や規制、認証制度などに沿ったコードの品質であることを⽰すためのチェッカーやレ
ポート機能
– すぐに使える各種ツールとの連携の⾃動化機能
まとめ