• 検索結果がありません。

LAMP スタック:品質およびセキュリティ

N/A
N/A
Protected

Academic year: 2021

シェア "LAMP スタック:品質およびセキュリティ"

Copied!
23
0
0

読み込み中.... (全文を見る)

全文

(1)

LAMP スタック:

品質およびセキュリティ

Rich Cerruto

(2)

Coverity

Coverity

のベーシックなアプローチ

のベーシックなアプローチ

静的ソース

静的ソース

コード解析

コード解析

• セキュリティ上の脆弱性 •システムとプロセスのクラッシュ •無限ループ •パフォーマンスの劣化 •サービス拒否 •権限昇格 •データ、メモリ、およびファイルの破損 •予期しない動作 • コードを実行しない •テスト ケースを作成しない •すべてのパスを解析する 検出できる問題 アプローチ

(3)

オープン オープン ソースソース + + Coverity: Coverity: 静的解析技術の改善 静的解析技術の改善 2002 • 当社の技術を求める要 望が殺到 • 継続する Linux 作 業:2000 以上のバグの 検出 Coverity の設立 -- Linux での強化 2003-06 • 150 以上の顧客 --Juniper、Synopsys、 Symantec、nVidia、 PalmOne、およびその他 多数 • 米国国土安全保障省の 研究 -- 次世代解析技術 の開発とオープン ソース への適用 会社の成長と 拡大 2001 Linux でのソー ス コード静的解 析 • 初期バージョンの Linux における数百のバグの 公表 • Linux コミュニティによる ほとんどの欠陥の修正 飛躍的な 研究所技術 1999 • メタレベル コンパイ ル チェッカー ("スタン

(4)

トピック

トピック

32

32

のオープン

のオープン

ソース

ソース

パッケージの品質とセキュリ

パッケージの品質とセキュリ

ティに関する

ティに関する

Coverity

Coverity

の評価方法

の評価方法

LAMP

LAMP

スタックおよび研究の対象となった他のパッ

スタックおよび研究の対象となった他のパッ

ケージとの比較

ケージとの比較

この研究が開発コミュニティに公表された後の反応

この研究が開発コミュニティに公表された後の反応

(5)

サンプル

サンプル

バグ

バグ

No. 1:

No. 1:

リソース

リソース

リーク

リーク

• Perl: Perl: perl/ext/Storable/Storable.xsperl/ext/Storable/Storable.xs •

(6)

サンプル

サンプル

バグ

バグ

No. 2:

No. 2:

配列のオーバーラン

配列のオーバーラン

• • phpphp--src/ext/standard/ftp_fopen_wrapper.csrc/ext/standard/ftp_fopen_wrapper.c • • off by 1 (1 off by 1 (1 つつ違い違い) ) エラーエラー

(7)

Coverity

Coverity

のアプローチ

のアプローチ

:

:

scan.coverity.com

scan.coverity.com

オープン

オープン

ソース

ソース

パッケージを自動的にスキャンす

パッケージを自動的にスキャンす

るためのインフラストラクチャ

るためのインフラストラクチャ

• • 毎晩スキャン毎晩スキャン •

• Coverity Coverity Prevent 2.4.4Prevent 2.4.4 の使用の使用

結果を

結果を

scan.coverity.com

scan.coverity.com

に自動的に送信

に自動的に送信

始動

始動

• • 2006 2006 年年 3 3 月月 6 6 日日 • • 32 32 パッケージパッケージ • • 今後さらにパッケージを追加今後さらにパッケージを追加

(8)

パッケージ一覧の概要

パッケージ一覧の概要

XMMS XMMS Samba Samba OpenLDAP OpenLDAP Gcc Gcc Xine Xine Python Python NetSNMP NetSNMP GAIM GAIM X X ProFTPD ProFTPD MySQL MySQL FreeBSD FreeBSD WxWidgets WxWidgets PostgreSQL PostgreSQL Mplayer Mplayer Firefox Firefox TCL TCL PHP PHP Linux Linux Firebird Firebird Squid Squid Perl Perl Inetutils Inetutils Ethereal Ethereal SQLite SQLite OpenVPN OpenVPN Icecast Icecast Apache Apache Snort Snort OpenSSL OpenSSL Gnome Gnome Amanda Amanda

(9)

最初の実行結果

最初の実行結果

比較のための主な評価基準として欠陥密度を選択

比較のための主な評価基準として欠陥密度を選択

発表する結果

発表する結果

:

:

• • LAMP LAMP スタックのスタックの “LL およびおよび “PP 部分の詳細データ部分の詳細データ • • パッケージ全体の傾向パッケージ全体の傾向 • • LAMP LAMP スタック全体の比較データスタック全体の比較データ

(10)

生の数字

生の数字

L

L

および

および

P

P

14 14 15 15 16 16 187 187 バッファ バッファ オーバーラン オーバーラン 21 21 26 26 23 23 173 173 メモリ メモリ リークリーク 7 7 8 8 40 40 117 117 予期しない 予期しない 動作 動作 54 54 40 40 126 126 585 585 システム システム//プロセプロセ スのクラッシュ スのクラッシュ 96 96 89 89 205 205 1062 1062 バグ合計数 バグ合計数 Python Python Perl Perl PHP PHP Linux Linux

(11)

欠陥密度

欠陥密度

-

-

L

L

および

および

P

P

.18 .18 Perl Perl .49 .49 PHP PHP .33 .33 Linux Linux 密度 密度 ( (コードコード 1000 1000 行あたりのバグ行あたりのバグ)) パッケージ パッケージ

(12)

傾向

傾向

:

:

欠陥密度の基準

欠陥密度の基準

Distribution of Defect Densities in Open Source Packages 0 2 4 6 8 10 12 0.000-0.061 0.062-0.191 0.192-0.313 0.313-0.434 0.434-0.555 0.556-0.677 0.677-0.798 >= 0.798 Defect Density Range

Nu m b er o f P ackag es

(13)

比較

比較

:

:

LAMP

LAMP

対基準

対基準

How does LAMP stack up?

0.18 0.22 0.25 0.29 0.33 0.35 0.43 0.49 0.10 0.20 0.30 0.40 0.50 0.60 D e fect s p e r K L O C

(14)

PHP

PHP

値が最も高い理由

値が最も高い理由

• • 88 88 のの “FORWARD_NULLFORWARD_NULL バグバグ ((合計合計 205 205 中中)) • • 非標準アサーションによるフォールス非標準アサーションによるフォールス ポジティブポジティブ (10 (10 のサンプルではのサンプルでは 3/10)3/10) 主な問題点 主な問題点 • • コード内のいくつかの部分におけるコード内のいくつかの部分における NULL NULL ポインタの不ポインタの不 適切な取り扱い 適切な取り扱い

(15)

(16)

考慮すべき他の要素

考慮すべき他の要素

0.35 0.35 0.18 0.18 0.49 0.49 0.33 0.33 欠陥 欠陥 5,516 5,516 6,613 6,613 3,928 3,928 4,380 4,380 1.0 1.0 以降の以降の 経過 経過 期間 期間 ((日数日数)) 64 64 846 846 57 57 464 464 保守担当者 保守担当者 数 数 272,118 272,118 495,100 495,100 419,192 419,192 3,171,631 3,171,631 コードの行 コードの行 数 数 Python Python Perl Perl PHP PHP Linux Linux

(17)

L

L

および

および

P

P

の推定される相関関係

の推定される相関関係

経過期間対欠陥密度

経過期間対欠陥密度

• • ほとんど完璧な相関関係ほとんど完璧な相関関係 • • 古いプロジェクトほど欠陥が少ない古いプロジェクトほど欠陥が少ない

LOC (

LOC (

コード行数

コード行数

)

)

対欠陥密度

対欠陥密度

• • 相関関係なし相関関係なし • • 最高密度は最高密度は 419,192 419,192 のの LOC LOC を持つを持つ PHPPHP

• 最低密度は最低密度は 495,100 495,100 のの LOC LOC を持つを持つ PerlPerl

保守担当者数対欠陥密度

保守担当者数対欠陥密度

• • 保守担当者数が多いほど欠陥密度が低い保守担当者数が多いほど欠陥密度が低い • • Python Python はこの限りではないはこの限りではない

(18)

欠陥の公表

欠陥の公表

2006

2006

3

3

6

6

日、欠陥データベースをオンラ

日、欠陥データベースをオンラ

イン化

イン化

すべてのオープン

すべてのオープン

ソース保守担当者に発表を

ソース保守担当者に発表を

通知

通知

反応

反応

(19)

5

5

日後

日後

9 9 (0)(0) 1 1 (1)(1) 0 0 15 15 (1)(1) バッファ バッファ 21 21 (12)(12) 4 4 (2)(2) 0 0 12 12 (1)(1) リソース リソース リーク リーク 6 6 (0)(0) 3 3 (2)(2) 2 2 (0)(0) 43 43 (0)(0) 予期しない 予期しない 動作 動作 46 46 (36)(36) 3 3 (0)(0) 0 0 73 73 (3)(3) システム システム//プロセプロセ ス ス クラッシュ クラッシュ Python Python Perl Perl PHP PHP Linux Linux 確認済み 確認済み ( (修正済み修正済み))

(20)

5

5

日後の勝者

日後の勝者

Python

Python

• • 48 48 のバグを修正のバグを修正 • • 残りの残りの 38 38 のバグのうち、のバグのうち、23 23 はは 影響少影響少 とマーク付けされ、修正とマーク付けされ、修正 に値しないものと判断 に値しないものと判断

(21)

30

30

日後

日後

9 9 (2)(2) 1 1 (1)(1) 14 14 (3)(3) 39 39 (21)(21) バッファ バッファ 21 21 (18)(18) 5 5 (3)(3) 6 6 (6)(6) 31 31 (18)(18) リソース リソース リーク リーク 5 5 (2)(2) 3 3 (2)(2) 10 10 (6)(6) 32 32 (23)(23) 予期しない 予期しない 動作 動作 40 40 (44)(44) 15 15 (12)(12) 27 27 (7)(7) 87 87 (49)(49) システム システム//プロセプロセ ス ス クラッシュ クラッシュ Python Python Perl Perl PHP PHP Linux Linux 確認済み 確認済み ( (修正済み修正済み))

(22)

30

30

日後の概要

日後の概要

4,272

4,272

の欠陥を確認

の欠陥を確認

2,594

2,594

の修正

の修正

2

2

のセキュリティ勧告

のセキュリティ勧告

(

(

X.org

X.org

および

および

NetBSD

NetBSD

)

)

3

3

つの

つの

クリーン

クリーン

なパッケージ

なパッケージ

Amanda

Amanda

Python

Python

XMMS

XMMS

• • Amanda Amanda は初期の欠陥密度が最大は初期の欠陥密度が最大

5

5

つのほとんどクリーンなパッケージ

つのほとんどクリーンなパッケージ

SQLite

SQLite

Ethereal

Ethereal

Icecast

Icecast

Squid

Squid

Samba

Samba

(23)

まとめ

まとめ

オープン

オープン

ソース開発者は品質を重視している

ソース開発者は品質を重視している

LAMP

LAMP

スタックの平均欠陥密度は

スタックの平均欠陥密度は

32

32

OSS

OSS

パッケ

パッケ

ージの基準を下回っている

ージの基準を下回っている

PHP

PHP

には最大の欠陥密度があり、その主な原因は

には最大の欠陥密度があり、その主な原因は

NULL

NULL

ポインタの不適切な取り扱いにある

ポインタの不適切な取り扱いにある

今後の作業

今後の作業

• • パッケージの経過期間、保守担当者数、パッケージの経過期間、保守担当者数、LOC LOC と欠陥密と欠陥密 度との相関関係を調査する 度との相関関係を調査する

参照

関連したドキュメント

先に述べたように、このような実体の概念の 捉え方、および物体の持つ第一次性質、第二次

2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014. 貨物船以外 特殊船

概要/⑥主要穀物の生産量.

本文書の目的は、 Allbirds の製品におけるカーボンフットプリントの計算方法、前提条件、デー タソース、および今後の改善点の概要を提供し、より詳細な情報を共有することです。

昭和三十三年に和島誠一による調査が行われ、厚さ二メートル以上に及ぶハマグリとマガキからな

実験の概要(100字程度)

私たちは、私たちの先人たちにより幾世代 にわたって、受け継ぎ、伝え残されてきた伝

から揚げ粉を付け油で揚げる 通則 1.. ③: 自動車用アルミホイール 第17部