Más contenido relacionado
La actualidad más candente (20)
Similar a 品質と開発スピードの両立と、OSSのリスク低減策のご紹介 / GTMF2019 (20)
Más de Game Tools & Middleware Forum (20)
品質と開発スピードの両立と、OSSのリスク低減策のご紹介 / GTMF2019
- 1. © 2017 Synopsys, Inc. 1
品質と開発スピードの両立と、OSSのリスク低減策のご紹介
日本シノプシス
ソフトウェア・インテグリティ・グループ
シニアセールスエンジニア 吉井雅人
- 2. © 2017 Synopsys, Inc. 2
ゲーム開発における課題
•短期間で高品質なゲームをリリースしなければならない
–リリーススケジュールの遵守
–高品質
•OSSを適正に利用しなければならない
–OSSライセンスリスク
–OSS脆弱性
- 4. © 2016 Synopsys, Inc. 4
バグはどこにあるでしょう?
int simple_example(int c) {
void *p = malloc(10);
if(c)
return -1;
/* ... */
free(p);
return 0;
}
- 5. © 2016 Synopsys, Inc. 5
バグはどこにあるでしょう?
#include <stdio.h>
void print(int srcId, int dstId){
printf("source Id is %d. n", srcId);
printf("destination Id is %d. n", dstId);
}
void test() {
int srcId = 1;
int dstId = 2;
print(dstId, srcId);
}
- 6. © 2017 Synopsys, Inc. 6
早期のバグ修正で後工程の手間を減らします
設計 開発 QA 製品リリース & 管理
5倍のコスト 10倍のコスト 30倍のコスト
Coverity
早い段階で不具合を除去
- 7. © 2017 Synopsys, Inc. 7
静的解析技術の種類
•パターンマッチング系
–バグに陥りやすい書き方を指摘
–予め定義したコーディングルールに対し違反がないかを確認
–PGRelief, QACなど
•ランタイムエラー検出系
–バグ自体を検出
–従来、実行時でないと確認できなかった、メモリリーク、データ破壊、データ競合など
を静的に検出
- 8. © 2016 Synopsys, Inc. 8
コードをより深く解析
• アプリケーション全体にわたって関数呼び
出しを追跡
• 人によるインスペクションではミスする複
雑な不具合を検出
• プログラムの目的を推測し、予期しない動作
を報告
int *p = myfunc(sizeof(int));
if(p != 0) p=&a;
...
int *p = myfunc(sizeof(int));
if(p != 0) p=&b;
int *p = myfunc(sizeof(int));
p=&c;
たぶん正しい
たぶん間違い
統計的な解析プロシージャ間解析&フルパス解析
- 9. © 2017 Synopsys, Inc. 9
Coverityがサポートする言語
言語 セキュリティ
チェッカー
2014 2015 2016 2017 2018
C/C++ ー
Java ○
C# ○
Objective-C ー
JavaScript ○
Python ○
PHP ○
Ruby ○(2018予定)
Fortran ー
Swift ○
Scala ー
VB.NET ー
- 10. © 2017 Synopsys, Inc. 10
Coverityがサポートするコンパイラ / 開発環境 (一部)
• Visual Studio
• GCC
• Clang
• PS4
• Nintendo Switch SDK
• Microsoft Xbox One
• Xcode
• Android Studio
• Unity(Visual Studioが必要)
• Unreal Engine
• Cocos-2d-x
など多数
- 11. © 2017 Synopsys, Inc. 11
C/C++
並列処理の問題
•デッドロック
•競合状態
パフォーマンスの低下
•メモリ・リーク
•スタックの使用度合い
クラッシュの原因
•Null ポインタの間接参照
•ポインタの解放後のメモリ使用
•二重解放
•配列の新規作成と削除の不一致
プログラムの不正な動作
•デッドコード
•未初期化変数
•負の変数の無効な使用
•コピー&ペーストのミス
•異なる分岐に対して同じコードを利用
セキュリティ上の脆弱性
•バッファ・オーバーフロー
Java
並列処理の問題
•デッドロック
•競合状態
パフォーマンス低下/スケーリングの制限
•リソース・リーク
•データベース接続リーク
クラッシュの原因
•Null の間接参照
プログラムの不正な動作
•デッドコード
•未初期化変数
•コピー&ペーストのミス
•異なる分岐に対して同じコードを利用
Webアプリケーションセキュリティ
•SQLインジェクション
•XSS
•CSRF
Androidセキュリティ
•Mobile IDの誤用
検出可能な不具合タイプ(一部)
- 12. © 2017 Synopsys, Inc. 12
JavaScript
クラッシュの原因
•Null の間接参照
プログラムの不正な動作
•デッドコード
•コピー&ペーストのミス
•異なる分岐に対して同じコードを利用
•識別子のタイポ
AngularJS
•AngularJS Express インジェクション
Webアプリケーションセキュリティ
•SQLインジェクション
•XSS
•CSRF
•センシティブなデータのリーク
•脆弱な暗号アルゴリズム
PHP / Python
クラッシュの原因
•Null の間接参照
プログラムの不正な動作
•デッドコード
•コピー&ペーストのミス
•異なる分岐に対して同じコードを利用
•識別子のタイポ
Webアプリケーションセキュリティ
•SQLインジェクション
•XSS
•CSRF
検出可能な不具合タイプ(一部)
- 13. © 2017 Synopsys, Inc. 17
開発者にやさしい、わかりやすい修正方法
• XSS の脆弱性は発生するコンテキストに応じて適切なエスケープ処理が変わります。
• どうすれば正しく直せるのでしょう?
HTML script タグ内の
JavaScript String 用の
エスケープが必要
HTML用のエスケープが必要
- 14. © 2017 Synopsys, Inc. 19
Coverity システムアーキテクチャ
ビルド 解析 コミット
発行リポジトリ
ビルド・解析サーバー
(Coverity Static Analysis)
不具合閲覧サーバー
(Coverity Connect)
Web サーバー
不具合データベース
クライアント
cov-analysis-<Platform>-<Version> cov-platform-<Platform>-<Version>
- 15. © 2017 Synopsys, Inc. 20
Coverity Connect
解析環境
Policy
Manager
コベリティ運用のベストプラクティス
解析環境
- 18. © 2017 Synopsys, Inc. 23
OSSのリスク
• OSS部分の脆弱性を攻撃されるリスク
1.セキュリティ
• ライセンスの条件を遵守していない場合、最悪の
場合は訴訟に至る
ライセンス
• 活発に開発がされていないOSSコミュニテイでは、
脆弱性修正や新機能追加が行われないリスク
運用
- 19. © 2017 Synopsys, Inc. 24
OSSのセキュリティ脆弱性
0
1000
2000
3000
4000
5000
6000
1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017
New Open Source Vulnerabilities per Year
2017年に4898件の
脆弱性
- 20. © 2017 Synopsys, Inc. 25
ソフトウェアに含まれるOSSの脆弱性
のアプリケー
ションは既知
のOSS脆弱性
を含む
個々のアプリケーショ
ンに含まれるOSS脆弱
性の個数
Heartbleed, Poodle,
Freak, Drownを
含む割合
セキュリティ脆弱性
が深刻である割合
個々のアプリケー
ションに含まれる
OSSコンポーネント
の個数
セキュリティ脆弱
性の発見からの平
均経過年数
- 21. © 2017 Synopsys, Inc. 26
OSSの脆弱性への対応
• Heartbleed (2014年4月)
• 大部分の会社が2014年末までに修正対応
• 弊社監査サービスの結果
• 2015年末で10%のアプリに存在
• 2016年末で7%のアプリに存在
• Poodle (2014年10月)
• 大部分の会社が2014年末までに修正対応
• 2015年3月
• 某Anti Virusベンダーが修正対応
• 2016年12月
• 某銀行アプリが修正対応
- 22. © 2017 Synopsys, Inc. 27
OSSのリスクが顕在化した例
•Equifaxの例
–Apache Struts2の脆弱性が原因
–CVE-2017-5638
–1億4300万人の個人情報が流出
–訴訟多数
–CEO、CIO、CSOが辞任
- 23. © 2017 Synopsys, Inc. 28
OSSライセンスに対するよくある誤解
[誤解1]OSSは条件なく無償で使える
⇒無償で利用できるが、利用するためには条件がある
⇒条件はライセンスによる。様々な条件がある
⇒そのソフトウェアの著作権者が決定する
[誤解2]OSSは利用すると訴えられるので使わない
⇒条件を守って利用すれば全く問題ない
⇒現在のソフトウエア開発でOSSを使わないということは現実的ではない
⇒便利なOSSを使わないでいると開発スピードが遅くなり、競合他社に負ける
- 24. © 2017 Synopsys, Inc. 29
OSSライセンスに対する考え方
• OSSはOSSの著作者からのプレゼントである
• そのプレゼントをどのように使ってほしいか、著作者の思いを表現したものがライセンス
• プレゼントを利用する以上、ライセンスを遵守する必要がある
- 25. © 2017 Synopsys, Inc. 30
OSSライセンス概要
OSSライセンスの
類型
代表的な
ライセンス
利用時にユーザーがしなければならないこと
コピーレフト GPLv2
GPL v3
AGPL
• ライセンステキストの添付
• OSSのソースコードの開示
• OSSを改変した部分のソースコードの開示
• リンクした範囲のソースコードの開示
準コピーレフト LGPL 3, LGPL2.1
MPL 2.0
EPL
• ライセンステキストの添付
• OSSのソースコードの開示
• OSSを改変した部分のソースコードの開示
非コピーレフト BSD 2,3-clause
Apache 2.0
MIT License
• ライセンステキストの添付
- 26. © 2017 Synopsys, Inc. 31
OSSライセンス条件はいつ発動するのか
入手
•Webからダウンロード
修正
•ソースコード修正・改変
実行
•コンパイル後実行
頒布
•販売、提供
• 自家使用は頒布にならない
• ゲームソフトウェアは基本的に「配布」という行為が発生する
- 27. © 2017 Synopsys, Inc. 32
GPL違反発覚事例
https://japanese.engadget.com/2007/11/29/ico-gpl/
2007年11月のGPL違反事例。
これにより日本のゲーム業界にOSS管理の取り組みが
急速に広がる。
しかし、10年経ってこの教訓を知らない世代が増えて
いる現状がある。
- 28. © 2017 Synopsys, Inc. 33
OSS管理の課題
OSSを特定することが困難
• SDLC最終段階での集計
• バージョンの特定
• 多大な労力
OSSの一覧表を一覧表で管理
• 日々バージョンアップするOSS
• 精度の欠如、現実との乖離
• 依存関係の把握が困難
コストのかかるOSSコミュニティの監視
• 様々な情報源からの脆弱性情報入手
• ライセンスの変更を検知
• 人海戦術
- 31. © 2017 Synopsys, Inc. 36
OSSの特定
• ファイルハッシュとフォルダ構造をKBと比較
apache-log4j-1.2.17
src
main
java
pattern
varia
xml
Appender.java 4 KB
Category.java 32 KB
Layout.java 7 KB
Logger.java 10 KB
LogManager.java 12 KB
フォルダ構造
ファイルサイズ
ファイル名
ファイル内容 (ハッシュ)
- 32. © 2017 Synopsys, Inc. 37
BlackDuck Hub アーキテクチャ
HTTPS
Open Source Detection
On-Premise
Black Duck
KnowledgeBase
Black Duck Datacenter
Hub Web Application
HTTPS
On-Premise / SaaS
- 33. © 2017 Synopsys, Inc. 38
Black Duck Hub ナレッジベース
15
Years of
OSS Activity
60
Security
Researchers
530
Terabytes
of Content
2M
Open Source Projects
(5M+ Releases)
Data Sources
9,000
2,500
License Types
100,000
Open Source
Vulnerabilities
Black Duck
KnowledgeBaseTM
- 42. © 2017 Synopsys, Inc. 47
OSSの脆弱性が発見された場合のリスク
National
Vulnerability
Database
脆弱性
発見
担当者による
脆弱性の把握
担当者による
脆弱性の修正
脆弱性情報
公開
攻撃者による
攻撃・侵入
攻撃されるリスクが存在
脆弱性
混入
- 43. © 2017 Synopsys, Inc. 48
Black Duck Hub: 新たに発見された脆弱性の通知
• Apache Struts 2 の脆弱性 (S2-045/CVE-2017-5638)
Black Duck Hubの顧客には脆弱
性情報公開の当日に通知
(2017年3月6日)
v2.3.5
脆弱性
混入
National
Vulnerability
Database
NVD
更新
担当者による
脆弱性の把握
2012年10月
攻撃コード
公開
2017年3月7日 2017年3月11日
v2.3.3
2
脆弱性情報
公開
2017年3月6日
担当者による
脆弱性の修正
!
VulnDB
- 45. © 2017 Synopsys, Inc. 50
OSS管理の課題とベストプラクティス
OSSを特定することが困難
• SDLC最終段階での集計
• バージョンの特定
• 多大な労力
OSSの一覧表の管理
• 日々バージョンアップするOSS
• 精度の欠如、現実との乖離
• 依存関係の把握が困難
コストのかかるOSSコミュニティの監視
• 様々な情報源からの脆弱性情報入手
• ライセンスの変更のフォロー
• 人海戦術
自動的なOSSの特定
• 巨大なOSSデータベース
• 高速かつ高精度の検知
• 開発段階でOSSを検知
最新の状態をBOMで管理
• SDLCへの統合
• ポリシー違反の有無
• コンポーネント
• バージョン
• 脆弱性
• ライセンス
自動的なOSSコミュニティの監視
• OSSコミュニティの動向を常に監視
• NVDに登録される前の脆弱性を通知
• 変更されたライセンスの自動的な通知
- 46. © 2017 Synopsys, Inc. 51
まとめ
•短期間で高品質なゲーム
をリリースしなければな
らない
–リリーススケジュールの
遵守
–高品質(不具合が少ない)
•OSSを適正に利用しなけ
ればならない
–OSSライセンスリスク
–OSS脆弱性
Coverity
BlackDuck Hub
Notas del editor
- 11050
- 17666
13056
- セキュリティチェッカーの列を追加
- 一覧表ベースでは依存しているOSSはわからない。
- 一覧表ベースでは依存しているOSSはわからない。