coverity scan オープンソースレポート...

19
1 www.synopsys.com © 2015 Synopsys, Inc. Coverity ® Scan オープンソースレポート 2014

Upload: others

Post on 12-Mar-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Coverity Scan オープンソースレポート 2014go.coverity.com/rs/157-LQW-289/images/SynopsysScanReport...4 © 2015 Synopsys, Inc. Coverity®.Scanサービスプロジェクトは2006年、米国国土安全保障省からの支援を得て、オープン

1 www.synopsys.com © 2015 Synopsys, Inc.

Coverity® Scanオープンソースレポート 2014

Page 2: Coverity Scan オープンソースレポート 2014go.coverity.com/rs/157-LQW-289/images/SynopsysScanReport...4 © 2015 Synopsys, Inc. Coverity®.Scanサービスプロジェクトは2006年、米国国土安全保障省からの支援を得て、オープン

2 www.synopsys.com © 2015 Synopsys, Inc.

要旨....................................................................................................................................................................................3

Coverity.Scan:.ここまでの歩み.....................................................................................................................................4

ソフトウェアセキュリティの状況.........................................................................................................................................6

Linux:.品質のベンチマーク..............................................................................................................................................8

インタビュー:Tim.Hudson 氏(OpenSSL)..............................................................................................................10

インタビュー:Mikko.Varpiola 氏(Codenomicon).............................................................................................13

プロジェクトのスナップショット......................................................................................................................................15

まとめ..............................................................................................................................................................................18

目次

Page 3: Coverity Scan オープンソースレポート 2014go.coverity.com/rs/157-LQW-289/images/SynopsysScanReport...4 © 2015 Synopsys, Inc. Coverity®.Scanサービスプロジェクトは2006年、米国国土安全保障省からの支援を得て、オープン

3 www.synopsys.com © 2015 Synopsys, Inc.

オープンソースプロジェクトのソフトウェアのインテグリティを分析したCoverity®.Scan 年間レポートをリリースする運びとなりました。2009 年に初めて刊行して以降、Coverity.Scanレポートは、オープンソースの品質を測定する標準として広く普及しています。2014 年、レポートはこれまでで最大規模のサンプルを扱いました。2,500以上のオープンソースC/C++、Java、C#プロジェクトの100 億行を超えるコードに加え、2014 年の匿名の商用プロジェクトのサンプルも分析したのです。

Coverity.Scanサービスは2006年以来、開発者を支援し、24万件以上の不具合を検出して修正してきました。2014年度単体でも、約 15万 2,000 件の不具合を修正しました。これは、2006年から2013年の間に見つかった不具合の合計を上回っています。

この飛躍的な展開の結果、2014 年度レポートには、独自の新情報が含まれています。商用プロジェクトとオープンソースプロジェクトの比較を詳しく見ると、予想通りのものが見つかります。これまでと同様、オープンソースプロジェクトは、不具合に対処する作業をますます適切にこなしています。同時に、企業もOpen.Web.Application.Security.Project(OWASP)Top.10やCWE-25などの外部のソフトウェアセキュリティ標準をますます確実に順守しています。どちらも異なる方法で改善しています。

要旨

Page 4: Coverity Scan オープンソースレポート 2014go.coverity.com/rs/157-LQW-289/images/SynopsysScanReport...4 © 2015 Synopsys, Inc. Coverity®.Scanサービスプロジェクトは2006年、米国国土安全保障省からの支援を得て、オープン

4 www.synopsys.com © 2015 Synopsys, Inc.

Coverity®.Scanサービスプロジェクトは2006年、米国国土安全保障省からの支援を得て、オープンソースソフトウェアの品質とセキュリティに焦点を置いた民間部門の合同調査プロジェクトとして立ち上がりました。現在はシノプシスが管理している同プロジェクトでは、開発テスト技術を無料サービスとしてオープンソースコミュニティに提供し、ソフトウェア開発プロセスの品質と安全性を確立すべく開発者を支援しています。Coverity.Scanサービスでは、C#、Java、C、C++コードを記述したままの状態でスキャン、つまりテストします。他の手法やマニュアルレビューでは発見しにくい致命的な品質やセキュリティの不具合を把握し、対応可能な情報を開発者に提供することで、不具合を迅速かつ効率的に修正できるように支援します。

6,000

5,000

4,000

3,000

2,000

1,000

0Feb. 2014 Oct. 2014Jun. 2014 Feb. 2014 Jun. 2015

表1:Coverity Scanサービスのプロジェクト総数(2015年3月まで)

プロジェクト数

Coverity Scan サービスは爆発的な伸びを見せ、2015 年 7 月までに 5,100 件を超えるプロジェクトが参加しています。

この伸びは、コードの品質とセキュリティを保証するオープンソースプロジェクトの基本的な技術として、開発テストと静的解析の力と重要性を再確認するものです。

Coverity Scan: ここまでの歩み

「Coverity®.Scanを使用すると、新しい問題が生まれると同時にを発見できるため、以前よりも迅速に問題を解決できます」

– Dave Jones 氏、Linux カーネル開発者

Page 5: Coverity Scan オープンソースレポート 2014go.coverity.com/rs/157-LQW-289/images/SynopsysScanReport...4 © 2015 Synopsys, Inc. Coverity®.Scanサービスプロジェクトは2006年、米国国土安全保障省からの支援を得て、オープン

5 www.synopsys.com © 2015 Synopsys, Inc.

Coverity Scan 7.6先日、Coverity.ScanをCoverity.Enterprise.Code.Advisor.7.6 バージョンにアップグレードしました。主な機能を次に示します。

•.脆弱な暗号化アルゴリズムのインスタンスを検出する新しいチェッカー

•.戻り値が無視され、それ以外にも認識可能な影響がないため、「役に立たない」関数呼び出しを識別する新しいチェッカー

•.機密データを適切に保護せずに格納、転送、ログに記録するコードを検出する新しい Java.web.アプリケーションセキュリティチェッカー

•.暗号として弱い方法で暗号化ハッシュ関数をパスワードデータに適用するコードを検出する新しいJava.web.アプリケーションセキュリティチェッカー

•.既存のチェッカーに対する複数の機能強化と新しい不具合パターン

Coverity.Scanインフラストラクチャをアップグレードし、オープンソースユーザーが以前より頻繁にビルドを送信できる新しいマシンを追加しました。また、複数のユーザーの要請に基づき、選択したモジュールで見つかった新しい不具合向けにEメールサブスクリプションオプションを追加しました。.

300,000

250,000

200,000

150,000

100,000

50,000

02006-2008 2009 2010 2011 2012 2013 2014

8,500 11,246 15,27821,411

43,383

88,024

240,574

各年で修正された不具合

修正された不具合の総数

表2:これまでに修正された不具合の総数

開発者は 2014 年単体で約 152,000 件の不具合を修正しました。これは、2006 年から2013 年の間に見つかった不具合の合計を上回っています。

Coverity.Scanサービスは、開発テストの普及を推進するベストプラクティスとして「新しい不具合なし」というポリシーを長らく推奨してきました。Coverity.Enterprise.Code.Advisorを初めて実行したときに解析で見つかる不具合の量は、多くのユーザーにとって驚くべきものです。おびただしい数の不具合に直面すると、どこから始めればよいか分からなくなります。「新しい不具合なし」ポリシーはその問題を解決します。新しい不具合に対処するほうがはるかに簡単です。なぜなら、開発者の記憶の中でソースコードがまだ新鮮なため、修正に時間がかからないからです。新しい不具合が生まれないことを確かにしながら、チームは、問題のバックログに取り組むための計画し、最も重要な問題から対応していく必要もあります。

この2014 年版のレポートのために、14,000の商用ソフトウェアと5,100のオープンソースのC/C++、Java、C#のプロジェクトとともに始めました。これらのプロジェクト以外にも、10,000の活発なプロジェクトを選び、C/C++、Java、および C#のプロジェクトの100億行以上のソースコードを解析しました。

「Coverity.Scanは、path_in() 関数のバッファオーバーフロー脆弱性(CVE-2014-0064)を識別しました。これは、8.4まででサポートされているすべてのバージョンに影響するものです」

– PostgreSQL

Page 6: Coverity Scan オープンソースレポート 2014go.coverity.com/rs/157-LQW-289/images/SynopsysScanReport...4 © 2015 Synopsys, Inc. Coverity®.Scanサービスプロジェクトは2006年、米国国土安全保障省からの支援を得て、オープン

6 www.synopsys.com © 2015 Synopsys, Inc.

このレポートのサンプルオープンソースプロジェクトのサイズは、5,000 行に満たないコードから1200万行を超えるコード(FreeBSDの場合)に渡っています。Coverity.Scanサービスで次に最も大きな3つのプロジェクトが、Linux(1,000 万行)、NetBSD(900万行)、LibreOffice(700万行)です。

主な発見1.オープンソースソフトウェアは、商用ソフトウェアよりも大幅に低い不具合密度を持っています。

2014 年、すべての言語(C/C++、Java、C#)で累積した不具合密度(1,000 行のコードごとの不具合の数)を見ると、オープンソースソフトウェアの状態(不具合密度 0.61)は、静的解析の結果から、商用ソフトウェア(不具合密度 0.76)を大幅に上回っています。

添付資料

総コード行数(単位:100 万行) 総プロジェクト数 総不具合密度 *

オープンソース 500 2,650 0.61

商用ソフトウェア 9,100 8,776 0.76

2.オープンソースソフトウェアと商用ソフトウェアの不具合密度は、年ごとに改善し続けています。

昨年と今年のC/C++、Java、C#全般の不具合密度を比較したところ、この改善が顕著に見られました。

添付資料

オープンソース(今年)

商用ソフトウェア(今年)

オープンソース(昨年)

商用ソフトウェア(昨年)

スキャンしたコード行数(100 万) 500 9,100 260 700

平均不具合密度 0.61 0.76 0.66 0.77

3.企業向け商用webアプリケーションソフトウェアは、オープンソースソフトウェアよりもOWASPTop10に準拠しています。

Javaプロジェクトはwebアプリケーションと非webアプリケーションの組み合わせであり、OWASPは Java.web.アプリケーションのセキュリティにより注力していますが、OWASP.Top.10は、すべての Javaプロジェクトの全般的なセキュリティ状態を測定するための包括的なコンプライアンス標準であると私たちは考えています。

用語集

不具合密度:コード1,000 行ごとの不具合の数。

OWASP:Open.Web.Application.Security.Project(OWASP)は、webアプリケーションセキュリティに特化したオンラインコミュニティです。OWASP.Top.10は、プロジェクトで識別された、最も重要なwebアプリケーションセキュリティの脆弱性のリストです。

CWE:Common.Weakness.Enumeration(CWE)は正式なソフトウェアの弱点のリストです。CWE.Top.25は、最も普及している致命的なエラーのリストです。このエラーは、ソフトウェアの深刻な脆弱性につながるおそれがあります。

ソフトウェアセキュリティの状況

* 98%の信頼度で、サンプルとなる全てのプロジェクトの平均的な不具合密度は +/-0.09 の誤差があります。

Page 7: Coverity Scan オープンソースレポート 2014go.coverity.com/rs/157-LQW-289/images/SynopsysScanReport...4 © 2015 Synopsys, Inc. Coverity®.Scanサービスプロジェクトは2006年、米国国土安全保障省からの支援を得て、オープン

7 www.synopsys.com © 2015 Synopsys, Inc.

OWASP.Top.10の視点からJavaの不具合密度データを見ると、商用ソフトウェアがオープンソースソフトウェアよりも大幅に安全であることが分かります。商用プロジェクトとオープンソースプロジェクトのどちらも、問題を修正するための平均時間が同じ(6か月の)場合、オープンソースソフトウェアよりも早めのペースで、商用ソフトウェアがこうしたセキュリティ脆弱性に取り組んでいることが分かります。これは、商用ソフトウェアプロジェクトがこのカテゴリの不具合を解決するコンプライアンスとポリシーによって促進されていることを示している可能性があります。

添付資料プロジェクトの総コード行数

(100 万) 不具合の数 10 万行ごとの不具合†

オープンソース 14 84 8.61

商用ソフトウェア 52 86 0.56

主に分かったこと1.オープンソースソフトウェアと商用ソフトウェアは継続的に改善していますが、改善の道筋は異なっています。

このレポートの静的解析の不具合密度データを見て分かることは、オープンソースソフトウェアも商用ソフトウェアも常に改善しているということです。また、どちらも明らかに異なる方法で進化しています。

•.オープンソースソフトウェアは、以前のバージョンと比較すると、機能が豊富になり、向上しています。オープンソースプロジェクトの開発作業を促す要素は、ソフトウェアがその処理してくれることを求めている人です。そのため、機能の追加がバグの修正よりも優先されます。

•.商用ソフトウェアは、コンプライアンス規格に基づいて安定性とセキュリティを強化しています。商用開発を促す要素は、競争と業界規格へのコンプライアンスです。これは、安定性、セキュリティ、バグ修正よりも優先されます。

2.ツールと手法の組み合わせにより、最善の結果を出すことができます。

商用ソフトウェアの最近のセキュリティ問題を見ると、開発企業の大半が規格順守のためのコンプライアンスチームを備えていますが、ほぼ毎週のように重大な脆弱性が発見されます。業界は、セキュリティと開発速度のバランスを取る必要があります。特に、ソフトウェアプロジェクトでアジリティが求められ、市場投入までの時間がかつてないほどに重視されている現状ではそうです。ソフトウェアツール、コンプライアンス規格、ソフトウェア開発ライフサイクルの原則に対する順守を健全に組み合わせることが、あらゆるソフトウェアのセキュリティと品質を向上させる最善の方法です。シノプシスは3つの前線すべてに尽力し、もっともセキュアになるように開発者を支援します。

「Coverity.Scanを使用すると、ソフトウェアの不具合を検出できます。開発後 10年経った今でも、もちろん見つけることができます」– Mangos zero

† 98% の信頼度で、サンプルとなる全てのプロジェクトの 10 万行ごとの OWASP Top 10 の不具合の量は +/-0.08 の誤差があります。

Page 8: Coverity Scan オープンソースレポート 2014go.coverity.com/rs/157-LQW-289/images/SynopsysScanReport...4 © 2015 Synopsys, Inc. Coverity®.Scanサービスプロジェクトは2006年、米国国土安全保障省からの支援を得て、オープン

8 www.synopsys.com © 2015 Synopsys, Inc.

Synopsys.Coverity.ScanサービスとLinuxは、コード品質の向上について長らく連携してきました。始まりは2000年代初頭、Coverity.Scanサービスがまだスタンフォード大学のコンピュータサイエンス研究所の研究プロジェクトだった頃です。以来、Coverity.Scanサービス(2014 年にシノプシスが買収)とLinuxは、驚異的な成長を遂げました。しかし、どちらも変わらないことがあります。それは品質への取り組みです。

10,000,000

9,000,000

8,000,000

7,000,000

6,000,000

5,000,000

4,000,000

3,000,000

2,000,000

1,000,000

0

解析した行数

6,000

5,000

4,000

3,000

2,000

1,000

0

新しく見つかった不具合

修正された不具合

2006 2007 2008 2009 2010 2011 2012 2013 2014

Linuxの解析結果 2006-2014

Coverity.Scanサービスの静的解析の精度を高めるために、LinuxチームはCoverity.Scanモデリング機能を利用し、解析アルゴリズムが Linuxコードのパターンと行動をより正確に把握できるようにしています。この解析により、ソースコードに基づくモデルが自動的に組み立てられますが、事態を常に正確に推測できるわけではありません。おそらく、ダイナミックライブラリなどの場合は、ソースコードがありません。あるいは、リモートプロシージャコールなどの外部の影響は予測できません。

Linux: 品質のベンチマーク

「レガシーコードを多く含んだ大規模プロジェクトでも、Coverity.Scanはコードの品質を把握する上で役立ちます。もちろん、高品質を維持できるように支援してくれるため、各領域の保守管理を向上させることができます」

– QEMU

Page 9: Coverity Scan オープンソースレポート 2014go.coverity.com/rs/157-LQW-289/images/SynopsysScanReport...4 © 2015 Synopsys, Inc. Coverity®.Scanサービスプロジェクトは2006年、米国国土安全保障省からの支援を得て、オープン

9 www.synopsys.com © 2015 Synopsys, Inc.

0 200 400 600 800 1,000 1,200

変数の未初期化

リソースリーク

メモリ - 破損

安全でないデータハンドリング

メモリ - 不正アクセス

不適切なエラー処理

NULL ポインタの間接参照

不適切な制御フロー

不適切な整数処理

カテゴリ

未解決

解決済み

項目および影響度別に示した未修正および修正済みのLinuxの不具合(2014年) 影響度

HIGH

HIGH

HIGH

MEDIUM

HIGH

MEDIUM

MEDIUM

MEDIUM

MEDIUM

2013 年 8月、Dave.Jones 氏(Linux の Coverity.Scan 管理者)が Coverity.Scanサービスに初めて参加したとき、彼は管理を簡便化するためにLinux 用の新しいより小さなコンポーネントを定義しました。彼がもたらした主な変化としてはもう1つ、新たに検出した不具合に着目する姿勢が挙げられます。彼の考えは、新しい不具合の方が簡単に解決できるというものでした。なぜなら、開発者の記憶の中ではソースコードがまだ新鮮であり、新しいコードが古いコードを書き換えることで従来の不具合の多くは消えるためです。下記のグラフに、どのように進歩したかを示します。

未修整の不具合

10,000

7,500

5,000

2,500

0Jul 2013 Oct 2013 Jan 2014 Jul 2014Apr 2014 Oct 2014 Jan 2015 Apr 2015

修正済みの不具合

Linuxの未解決と修正済みの不具合

Page 10: Coverity Scan オープンソースレポート 2014go.coverity.com/rs/157-LQW-289/images/SynopsysScanReport...4 © 2015 Synopsys, Inc. Coverity®.Scanサービスプロジェクトは2006年、米国国土安全保障省からの支援を得て、オープン

10 www.synopsys.com © 2015 Synopsys, Inc.

OpenSSLは、堅牢で商用にも耐えるフル機能のオープンソースツールキットを開発する共同プロジェクトです。セキュアソケットレイヤー(SSL.v2/v3)およびトランスポートレイヤーセキュリティ(TLS.v1.0/v1.1/v1.2)プロトコルに加え、強力な汎用暗号化ライブラリを実装しています。世界中に広がるボランティアのコミュニティが、コミュニケーション手段としてインターネットを使用しながら、このプロジェクトを管理し、OpenSSLツールキットと関連マニュアルを計画、開発しています。

OpenSSLプロジェクトは、Heartbleedバグ後の統合開発プロセスの一環としてCoverity®.Scanを当初から積極的に活用していました。私たちは、OpenSSLプロジェクトの共同設立者であるTim.Hudson 氏を招きました。Hudson 氏は、このレポートのためにCoverity.Scanに関する考えを語ってくれました。

1.CoverityScanサービスにここまで関わってこられ、どのような感想をお持ちですか。

Coverity.Scanは、効果的な商用静的解析ツールを利用できるという点で、私たちのプロジェクトに役立っています。レポートの情報も、レビューにとって具体的な指針となっています。OpenSSLは、静的解析ツールにとって確かに困難なコードベースですが、誤検知が発生した場合でも、Coverity.Scanサポートチームはすばやく対応してくれます。このレベルのベンダーサポートがあれば、コード解析ツールを使用する場合に大きな違いを生んでくれます。

2.CoverityScanサービスに参加したことで、OpenSSLが得られた最も大きなメリットは何でしょうか。

Coverity.Scanツールがアップデートされ、新たに見つかった問題を捕捉し、同様のコードが見つかる可能性がある領域に焦点を当てるときの対応の早さです。これは、提供されているセキュリティツールキットや各種インターフェースを処理する際に役立ちます。基本的に、新しい問題が見つかった場合、Coverity.Scanツールを使用すれば、同種の問題を見つけることができます。

3.組織として、Heartbleedの不具合にはどのように対応しましたか。

解決する必要がある問題が明らかに存在していたため、アップデートを使用して、報告されている具体的な問題を修正しました。また、ツールをアップデートした後でCoverity.Scanレポートを使用し、他の領域でバグが発生しないかどうかを確認しました。それにより、チームメンバーはレビューに集中できました。セキュリティ修正リリースにおける取り組みの大半は、プロジェクトチームとエンドユーザーの間に位置する下流のベンダーとの調整に費やされます。

インタビュー:Tim Hudson 氏(OpenSSL)

Page 11: Coverity Scan オープンソースレポート 2014go.coverity.com/rs/157-LQW-289/images/SynopsysScanReport...4 © 2015 Synopsys, Inc. Coverity®.Scanサービスプロジェクトは2006年、米国国土安全保障省からの支援を得て、オープン

11 www.synopsys.com © 2015 Synopsys, Inc.

4.Heartbleed バグの発見とメディアの注目は、OpenSSLプロジェクトの開発姿勢をどのように変えましたか。

Heartbleedの後、昨年になってプロジェクトは大きく変わりました。世間の注目をあびることで、OpenSSLプロジェクトのリソースがどれほど不足しているのか、あらためて思い知らされたのです。さまざまなスポンサーの寄付と Linux.Foundation.Core. Infrastructure. Initiative.(http://www.linuxfoundation.org/programs/core-infrastructure-initiative) からのサポートにより、OpenSSLにフルタイムで専念するチームメンバーが 4人できました。また、積極的なリクルートも行った結果、以前よりも多くのボランティアが参加してくれるようになりました。このため、問題のバックログにさらに取り組み、長期的な目標に取り組むことができるようになりました。現在、プロジェクトのロードマップを発表しており、ロードマップ内の各目標を順調に達成しています。

5.(非暗号コードと比較して)セキュアな暗号コードを開発し保守する上でのチャレンジはありますか。

アプリケーションの不具合は不運というだけですが、セキュリティツールキットの不具合は破滅的な結果をもたらす可能性があります。このため、コードベースへの追加に際しては、より慎重なアプローチが必要になります。セキュリティは機能よりも優先されるのです。

6.セキュリティを確保するための専用チームはいますか。

チームは、リリース前に積極的なコードレビューに参加しています。メインソースレポジトリに変更を加えるたびに、レビューしてからコミットします。コードベースの複数のブランチを維持する中で、次のメジャーリリースの保留中の変更が上げられ、コミュニティのフィードバックを受けられるように提示されます。私たちは、多くのフィードバックを受けています。その多くは相反するものですが、これもオープンソースプロジェクトの一部なのです。誰でも自由に意見を述べ、検討材料にすることができます。また、OpenSSLコードベースの独立した監査も積極的に推奨しています。これは現在、(Linux.Foundationのスポンサーのもとで)進行中です。

7.コード品質とコードセキュリティを、異なるプロセスと優先順位を備えた2つの独立した問題として見ていますか。それとも不具合は不具合として捉え、最も重要な項目や新しい項目に最初に着目するのですか。

不具合は不具合です。私たちは、セキュリティ面の影響を考慮して優先順位を決めます。不具合追跡システムで必要な変更の大部分は、機能または移植性に関連するもので、従来の優先順位は低めです。プロジェクトチームが拡大するにつれ、項目のバックログをクリアする作業は大幅に進歩しています。同時に、ロードマップに記載されている機能の進捗も改善しています。

「何分もしないうちに、存在していることさえ気付かなかった重要なリソースリークをいくつか絞り込み、修正できました。Coverityを仕事で使用してきましたが、今では自宅でも使用できます」

– Crane (C# オープンソースプロジェクト)

Page 12: Coverity Scan オープンソースレポート 2014go.coverity.com/rs/157-LQW-289/images/SynopsysScanReport...4 © 2015 Synopsys, Inc. Coverity®.Scanサービスプロジェクトは2006年、米国国土安全保障省からの支援を得て、オープン

12 www.synopsys.com © 2015 Synopsys, Inc.

8.オープンソースの世界で、コードの品質と安全性を維持する際に直面する問題は何でしょうか。また、どのようにすればその問題を克服できますか。

人がセキュリティソフトウェアに真摯な関心を寄せるのは、何かが壊れたときのようです。そのせいで、素っ気なく直截な意見をもらう可能性もあるため、言葉の表現を気にしない鈍感さが必要になります。プロジェクトにとって幸いなことに、バランスの取れた物の見方ができるユーザーもメーリングリストにいます。私たちのユーザーは互いに助け合いながら、問題に対処しています。

9.ここで議論されていますが、「目玉を増やせば、どのバグもつぶせる」という、再三繰り返されている格言について考えをお聞かせください。コードをレビューする目玉(または自動ツール)を増やすには、どうすればよいでしょうか。

大規模なコードベースをレビューすることは、決して胸躍る体験ではありませんし、外の世界にある「インターネットの無限の目」にそれほどさらされる領域でもありません。私たちは開発の履歴とプロセスを常にオープンにしてきました。(私的なものでも、公的なものでも)あらゆる人からの建設的なフィードバックを歓迎しています。ロードマップの項目数は、ソースツリーに取り組み、貢献に興味がある人々がコードベースにアプローチしやすくすることに力点を置いています。OpenSSLは、多くのアカデミックな研究の対象となっており、ツールを開発しているさまざまなベンダーの注目を集めていますが、最終的には、特定の項目を詳細かつ慎重に解析することになります。

私たちは、最近通知された(Linux.Foundation のスポンサーによる)セキュリティ監査を楽しみにしています。これにより、多くの目を集めても達成できない細部をレビューできるのではないかと考えています。

「Coverityは、他のソリューションでは気付かれない問題を検出し続けています。.私たちの開発者も、存在している可能性があるNULL 間接参照や初期化されていない値により深い注意を払おうとしています」

– Trinity Core

Page 13: Coverity Scan オープンソースレポート 2014go.coverity.com/rs/157-LQW-289/images/SynopsysScanReport...4 © 2015 Synopsys, Inc. Coverity®.Scanサービスプロジェクトは2006年、米国国土安全保障省からの支援を得て、オープン

13 www.synopsys.com © 2015 Synopsys, Inc.

Codenomicon®は、全体的な防御をより効果的に実現する次世代ソリューションのスイートを提供します。各ソリューションは、セキュリティテスト、堅牢性、インテリジェンス、コラボレーション、およびセキュリティの新しいレイヤーを提供します。また、Codenomiconは、セキュリティプロファイルを進化および強化する方法を探している企業を支援するために、テスト、監査、トレーニング、検証サービスを含む一連のサービスも提供します。Codenomiconは最近、シノプシスに買収されました。Codenomiconの共同設立者であるMikko.Varpiola氏に質問し、現在の考えを引き出しました。

1.我がチームにようこそ。

ありがとうございます。Coverity®チームに参加できて嬉しいです。将来のさまざまなチャンスを考えると、わくわくしてきます。

2.顧客がCoverityScanを使用して私たちのソースコードを見ている場合、サードパーティコンポーネントの脆弱性について認識していないのでしょうか。

そうとも限りません。多くのプロジェクトが、バイナリ形式でのみサードパーティコンポーネントを取り入れているため、そのソースコードはCoverity.Scanでは利用できません。AppCheckTMは、含まれているサードパーティコンポーネントを識別するために、製品にX線を当てるのと同じ静的バイナリスキャンを実行します。

さらに、ビルドプロセスにより、ソースコード検証時には明らかでないサードパーティコンポーネントが導入される可能性もあります。

3.例を挙げて説明していただけますか。

最近、AppCheckを使用し、有名なクロスプラットフォームオフィスアプリケーションスイートを調べました。Linux、OS.X、Windowsのビルドの結果は、サードパーティコンポーネントの構成においても、そのコンポーネントに関連する既知の脆弱性においても、驚くべき違いがありました。次の表では、共通脆弱性評価システム(CVSS)で測定した、最も深刻度の高い脆弱性も示しています。

Linux OS X Windows

コンポーネント 37 30 36既知の脆弱性を含むコンポーネント 7 6 6既知の脆弱性 28 28 32もっとも重要な脆弱性(共通脆弱性評価システム) 10 10 7.5

AppCheckであなたの製品の実行コードを確認すると、バイナリ解析によってこのような知見を得ることができます。

「Coverity.Scanでコードを実行した結果、今後起こりうるセキュリティの問題が明らかになりました。私たちはCoverity.Scanのきめ細かなサービスに満足しています」– PowerDNS

インタビュー:Mikko Varpiola 氏(Codenomicon)

Page 14: Coverity Scan オープンソースレポート 2014go.coverity.com/rs/157-LQW-289/images/SynopsysScanReport...4 © 2015 Synopsys, Inc. Coverity®.Scanサービスプロジェクトは2006年、米国国土安全保障省からの支援を得て、オープン

14 www.synopsys.com © 2015 Synopsys, Inc.

4.Heartbleedについて話しましょう。CodenomiconはHeartbleedをどのように発見したのですか。

Defensics®ファズテストソリューションを強化している最中でした。具体的には、SafeGuardという機能をDefensics.TLSテストスイートに追加しようとしていました。

ファジングは、意図的に悪質なメッセージを対象のソフトウェアに送信する動的なテスト手法です。故障が発生すると、脆弱性があることになるわけです。

攻撃者はファジングを使用して未知の脆弱性を特定し、見つかった脆弱性に向けたエクスプロイトを作成します。ファジングを利用すれば、脆弱性を特定して修正できるので事前に防御策を講じることができるのです。

「従来型のファジング」とでも言うべきものでは、ファジング機能が、テスト中に対象のソフトウェアでクラッシュ、ビジーループ、リソースリークの原因となる不具合が発生しないかどうかを監視します。SafeGuard 機能は、動作異常、つまり上記の故障モードから外れる故障がないかどうかを確認してこれを補強します。たとえば、認証迂回チェック機能では、ファジング機能が不正な認証情報を提供したにも関わらず認証された場合や、信頼境界を何らかの形で越えることができた場合に故障のフラグを立てます。

2014 年 3月、私たちの開発チームは、データリークおよびアンプリフィケーションというSafeGuardチェック機能をTLSテストスイートに追加していました。これらのチェックは、送受信メッセージの内容と比率を調べ、異常な動作があるかどうかを確認します。私たちはopensslを参照ターゲットとして使用していたところ、一部の不正なTLSハートビートメッセージに対してSafeGuardがフラグを上げていることに気付きました。これが Heartbleedだったのです。

5.Heartbleedなどの脆弱性をどうすれば防ぐことができるのでしょうか。

ひとえに「より良いテスト」にかかっています。最初のステップは、ソフトウェアのサプライチェーンを管理することです。これで、既知の脆弱性を効果的に抑えることができます。深刻な脆弱性が発生したら(というより実際に発生するでしょうが)、冷静に素早く対処できます。Heartbleedの問題の一部は、どの製品が影響を受けるか開発者には分からず、どの資産が影響を受けるかバイヤーには知りようがないという点にあります。

未知の脆弱性を効果的に管理するには、それを見つける必要があります。静的ソース解析とファズテストは、未知の脆弱性のハンティングには強力な組み合わせです。

6.コードのセキュリティを強化するために、開発者はどのようなセキュアなコーディングを取り入れるべきでしょうか。

これは、開発者というよりも、彼らを取り巻くプロセスの問題と言えます。コード記述のテクニックを磨くために開発者をトレーニングすることはできますし、そうするべきですが、最高レベルの開発者でもミスは犯します。

最も重要な点は、適切なコントロールを備え、サプライチェーンマネジメントと未知の脆弱性管理を組み込んだ、セキュアな開発プロセスを導入するということです。

「私たちのコードベースには、多くのコピーペーストのミスがあるため、それを検出できるCoverity.Scanのようなツールはありがたい存在です。人間には、そうした作業を完璧にこなすのはほぼ不可能ですから」

– OpenTechBFG

Page 15: Coverity Scan オープンソースレポート 2014go.coverity.com/rs/157-LQW-289/images/SynopsysScanReport...4 © 2015 Synopsys, Inc. Coverity®.Scanサービスプロジェクトは2006年、米国国土安全保障省からの支援を得て、オープン

15 www.synopsys.com © 2015 Synopsys, Inc.

C/C++FreeRADIUSは、世界で最も人気があり、最も普及しているオープンソースRADIUSサーバーです。一般的な認証プロトコルすべてをサポートしており、PHPベースのwebユーザー管理ツールを装備したFreeRADIUSは、ネットワークアクセスコントロールやWiMAXをサポートしている組み込みシステムやRADIUSアプライアンスなど、多くの商用RADIUS製品およびサービスの基礎となっています。多くのFortune.500企業、電話会社、Tier.1.ISPのニーズを満たしているほか、アカデミックなコミュニティでも広く普及しています。このサーバーは高速で、豊富な機能を備え、モジュラー式に設計されていて、スケーラブルです。FreeRadiusは、コア部分がC++書かれているオープンソースのプラットフォームです。

0 5 10 15 20 25

NULL ポインタの間接参照

データへの同時アクセス違反

リソースリーク

不適切な制御フロー

安全でないデータハンドリング

不正な記述

コードメンテナンス性の劣化

コントロールフローの問題の可能性

安全でないデータハンドリング

経験則上のセキュリティ違反

不適切なエラー処理

メモリ - 不正アクセス

APIの誤使用

変数の未初期化

メモリ - 破損

その他

プログラムのハングアップ

項目及び影響度別に示した未修正及び修正済みのFreeRADIUSの不具合

未修正

修正済み

影響度

MEDIUM

MEDIUM

HIGH

MEDIUM

MEDIUM

MEDIUM

LOW

LOW

MEDIUM

LOW

MEDIUM

HIGH

MEDIUM

HIGH

HIGH

HIGH

MEDIUM

未修正の不具合

600

450

300

150

0Jul 2013 Oct 2013 Jan 2013 Jul 2014Apr 2014 Oct 2014 Jan 2015 Apr 2015

修正済みの不具合

FreeRADIUS未修正および修正済みの不具合

プロジェクトのスナップショット

191,579解析したコード行数

0.12不具合密度

537総不具合数

486修正済みの不具合数

Page 16: Coverity Scan オープンソースレポート 2014go.coverity.com/rs/157-LQW-289/images/SynopsysScanReport...4 © 2015 Synopsys, Inc. Coverity®.Scanサービスプロジェクトは2006年、米国国土安全保障省からの支援を得て、オープン

16 www.synopsys.com © 2015 Synopsys, Inc.

JavaApache.CloudStackは、仮想マシンの大規模ネットワークをデプロイおよび管理するために、高可用性、きわめてスケーラブルな Infrastructure.as.a.Service(IaaS)を備えた、クラウドコンピューティングプラットフォームとして設計されたオープンソースソフトウェアです。さまざまなサービスプロバイダが、パブリッククラウドサービスを提供するためにCloudStackを使用しています。また、各種企業もオンプレミス(プライベート)クラウドサービスを提供するため、またはハイブリッドクラウドソリューションの一環として提供するためにCloudStackを使用しています。CloudStackは主にJavaで記述されており、品質とセキュリティを向上させるためにCoverity.Scanを使用しています。

未修正の不具合

2,250

2,000

1,750

1,500

1,250Apr 2014Jan 2014 Jul 2014 Oct 2014 Jan 2015

修正済みの不具合

CloudStackの未修正と修正済みの不具合

300,570解析したコード行数

2.81不具合密度

3,045総不具合数

2,225修正済みの不具合数

Page 17: Coverity Scan オープンソースレポート 2014go.coverity.com/rs/157-LQW-289/images/SynopsysScanReport...4 © 2015 Synopsys, Inc. Coverity®.Scanサービスプロジェクトは2006年、米国国土安全保障省からの支援を得て、オープン

17 www.synopsys.com © 2015 Synopsys, Inc.

C#Subtitle.Edit は、動画字幕用のフリー(オープンソース)エディタです。主にC#で開発されています。Subtitle.Edit プロジェクトのメンバーは、プロジェクトの不具合を見つけるためにCoverity.Scanを定期的に使用しています。

0 20 40 60 80 100 120 140 160 180 200

コントロールフローの問題の可能性

クラス階層の一貫性欠如

コードメンテナンス性の劣化

不正な記述

不適切な整数処理

不適切な制御フロー

リソースリーク

データへの同時アクセス違反

NULL ポインタの間接参照

例外的なリソースリーク

項目及び影響度別に示した未修正及び修正済みのSubtitle Editの不具合

未修正

修正済み

影響度

LOW

MEDIUM

MEDIUM

HIGH

MEDIUM

MEDIUM

MEDIUM

LOW

MEDIUM

LOW

未修正の不具合

500

375

250

125

0Aug 2014 Oct 2014 Dec 2014 Feb 2015 Apr 2015

修正済みの不具合

Subtitle Editの未修正と修正済みの不具合

186,398解析したコード行数

0.85不具合密度

570総不具合数

406修正済みの不具合数

Page 18: Coverity Scan オープンソースレポート 2014go.coverity.com/rs/157-LQW-289/images/SynopsysScanReport...4 © 2015 Synopsys, Inc. Coverity®.Scanサービスプロジェクトは2006年、米国国土安全保障省からの支援を得て、オープン

18 www.synopsys.com © 2015 Synopsys, Inc.

2014 年、Coverity®.Scanサービスは、驚異的な成長とオープンソースユーザーへの普及を実現し、現在進行形のプロジェクトを5,100 以上抱える規模へと膨れ上がりました。Coverity.Scanレポートは今年、年間規模ではこれまでで最大のサンプルサイズを解析し、重要な不具合を複数検出しました。

•2014 年、商用コードベースは、オープンソースよりもセキュリティ規格を順守しています。

静的解析の不具合密度に基づき、2013年度レポートでは、オープンソースコードが品質において商用コードを超えていることが明らかになりました。この傾向は2014 年も続いています。ただし、今年は、OWASP.Top.10とCWE.25などのセキュリティコンプライアンス規格を比較し、商用コードがオープンソースよりもこうした規格を順守していることを明らかにしました。

•2013 年以降、オープンソースソフトウェアも商用ソフトウェアも、不具合密度は改善しています。

2013 年と2014年の不具合密度の数を比較したところ、オープンソースソフトウェアも商用ソフトウェアも不具合密度は改善しています。オープンソースの不具合密度は2013 年の 0.66から2014 年の 0.61に、商用コードも0.77から0.76に改善しています。

•CoverityScanはHeartbleed 後の調査でOpenSSLを支援しました。

OpenSSL の共同設立者 Tim.Hudson 氏によれば、新たに見つかった問題を捕捉し、同様のコードが見つかる可能性がある領域を特定できるCoverity.Scanサービスの機能は、2014 年のHeartbleed バグの影響を軽減する上で大いに役立ったとのことです。

•Linuxは、現在も静的解析の不具合密度のベンチマークとなっています。

2006 年にCoverity.Scanサービスに参加してから、Linuxは品質への取り組みを現在でも最優先項目に置いています。2014年、LinuxはCoverity.Scanサービスを利用し、リソースリーク、メモリ破損、変数の未初期化など、500件以上の影響の大きな不具合を検出および修正しました。

今年度のレポートでは、ソフトウェア業界全体がセキュリティと開発のスピードと機能強化の間でより適切にバランスを取るようになっていると述べています。また、開発者はツール、コンプライアンス規格、ベストプラクティスの主導者を組み合わせて、品質とセキュリティを高いレベルで両立させたソフトウェアを作成する必要があります。

CoverityScanサービスへの関心と支援について、CoverityScanの全メンバーとオープンソースコミュニティに感謝します。新しいプロジェクトの登録、既存のプロジェクトへの貢献、または調査について興味をお持ちの場合は、https://scan.coverity.com/にアクセスしてください。

まとめ

Page 19: Coverity Scan オープンソースレポート 2014go.coverity.com/rs/157-LQW-289/images/SynopsysScanReport...4 © 2015 Synopsys, Inc. Coverity®.Scanサービスプロジェクトは2006年、米国国土安全保障省からの支援を得て、オープン

19 www.synopsys.com © 2015 Synopsys, Inc.

Coverity Scan についてシノプシスCoverity Scanサービスは、2006 年にコベリティが、オープンソースソフトウェアの品質とセキュリティを対象にした政府 / 民間共同調査プロジェクトとして、米国土安全保障省と共同で立ち上げたものです。Coverity.Scanは現在プロジェクトを管理し、オープンソースコミュニティに属する開発者がソフトウェア開発プロセスの中に品質とセキュリティを組み込むのを支援するため、デベロップメントテスト技術を同コミュニティに対して無料で提供しています。オープンソースプロジェクトをCoverity.Scanサービスに登録してください。また最新情報については Twitterで弊社をフォローしてください。

シノプシスについてSynopsys,. Inc.(Nasdaq 上場コード:SNPS)は、我々が日々使用しているエレクトロニクス機器やソフトウェア製品を開発する先進企業のパートナーとして、半導体設計からソフトウェア開発に至る領域(Silicon.to.Software ™)をカバーするソリューションを提供しています。電子設計自動化(EDA)ソリューションならびに半導体設計資産(IP)のグローバルリーディングカンパニーとして長年にわたる実績を持ち、ソフトウェア品質 /セキュリティテストの分野でもCoverity®ソリューションで業界をリードしており、世界第 15位のソフトウェアカンパニーとなっています。シノプシスは、最先端の半導体を開発しているSoC(system-on-chip)設計者、最高レベルの品質とセキュリティが要求されるアプリケーションソフトウェアの開発者に、高品質で信頼性の高い革新的製品の開発に欠かせないソリューションを提供しています。更に詳しい情報はCoverity のwebサイト(http://www.coverity.com/html_ja/index.html)をご覧ください。