危険なコード

SourceForge.netのPHPアプリケーションから
大垣 靖男
yohgaki@ohgaki.net

このファイルはPHP Conference 2006のプレゼンテーションファイ
ル
から一般に公開するには不適切な部分を削除したバージョンですセキュリティの話は退屈?
n

同じ話ばっかりで聞き飽きた!

n

本当に問題なところはどこ?
nn

セキュリティ対策に魔法の杖は無い!
n2006/8/19

今日の題材：sourceforge.netのPHPで作成されたアプリケーショ
ンTOP50の危険なコードを検索&解説

アーキテクト・プログラマ、が安全な設計・コーディングを行うしかない

PHP Conference 20062

Webアプリのセキュリティは難しい?
n

プログラミングの基本は簡単
セキュリティリスクはサブシステムとのバウンダリで発生
n バウンダリで「入力時」に確実にバリデーション、「出力時」に確実にエスケープ処理を行えばセキュリティ上の問題は発生しな
いnn

基本的な攻撃手法n

インジェクション
JavaScript,SQL,LDAP,XMLn 概ねコーディング上の問題が原因
n

n

情報漏えい
盗聴（Tapping, AP Phishing),キャッシュ,秘密情報の公開化
n 概ね設計上の問題が原因n

2006/8/19

PHP Conference 20063

Webアプリのセキュリティは難しい?（続き）
n

設計レベルの問題
不適切なセッション管理
n 不適切な認証管理
n 不適切な権限管理
n 不適切なページデザイン
n 不適切な情報管理nn

運用レベルの問題
不適切なバックアップ
n 不適切な設定
n 不適切なデータアクセス端末管理
n 不適切なシステム管理者ID管理nn
2006/8/19

その他多数…
PHP Conference 2006

4

注意事項
n

ソースは全て8/13時点でリリースされていたソースnsf.netのトップ50からPHPアプリを「適当」に選択
n

概ねトップ30～50のアプリケーションn

実際にアプリは使用（動作）していないn

正式な検証作業ではない
ソースコードを全て解読していない
n 全ての脆弱性の可能性を検証していない
n ホワイトボックステストのみ
n

2006/8/19

PHP Conference 20065

注意事項(続き)n「危険なコード」 != 「セキュリティホール」nn

局所的には脆弱でも攻撃可能な経路がない限りセキュリティホールにはならない

例えば、C言語の場合
n「strcpy(dst, src)」の利用は薦められない。安全なコードはstrncpyを使用すべき。
nn

PHPの場合、register_globals=onを前提とするコード（安易なregister_globals=off対応を含む）は「危険なコード」
n2006/8/19

他にもstrcat, memcpy, などバッファオーバーフローセキュリティホー
ルを作る関数は多数ある。しかし、これらの関数を利用する危険コードでも安全なアプリケーションは作成可能。

ただし、「危険なコード」でも「安全なアプリ」は構築可能

PHP Conference 20066

注意事項(続き)2006/8/19

n

本プレゼンテーションの目的は揚げ足取りではありません!

n

危険なコーディングを知る

nより安全なコーディングを知る

n

比較的人気のある(?)アプリケーションのセキュリティレベルを知る

n

できれば危険なコードを読み取れるようになる

n

できればより安全なコードを書けるようになる

PHP Conference 2006

7

Open Computers and Software Inventorynnnnnn

バージョン：1.0RC3­1
サイズ：約4MB
URL: http://ocsinventory.sourceforge.net/
OCS Inventory NG, Open Computers and Software
Inventory Next Generation is an application designed tohelp administrator keep track of the computers
configuration and installed softwares. Low network traffic
HTTP communications between agents and server
インベントリ管理のソフトウェア（らしい）
この手のシステム管理用アプリケーションはセキュリティ対策がずさんなアプリケーションが比較的多いn2006/8/19

通常システム管理者はシステム上のデータへのアクセスができる場合が多いので、あえてセキュアなコードにする必要がない
PHP Conference 2006

8

PHPWebsite 1.0.0RC2nnnnn

2006/8/19

バージョン：1.0.0RC2
サイズ：約23MB
URL: http://phpwebsite.appstate.edu/
Developed by the Web Technology Group at AppalachianState University, phpWebSite provides a complete web site
content management system ( CMS ). All client output is
XHTML 1.0 and meets the W3C's Web Accessibility Initiativerequirements.
コンテンツマネジメントシステム（らしい）

PHP Conference 2006

9

Uber Uploadernnnnn

2006/8/19

バージョン：3.2
サイズ：約56KB
URL： http://sourceforge.net/projects/uber­uploader
Uber Uploader is a web based file upload mechanism that
displays the status of an upload in the form of a progress
bar using AJAX.
ファイルアップローダ（らしい）

PHP Conference 200610

Web Calendarnnnn

2006/8/19

バージョン：1.0.4
URL： http://www.k5n.us/webcalendar.php
WebCalendar is a PHP­based calendar applicationthat can be configured as a single­user calendar, a multi­
user calendar for groups of users, or as an event
calendar viewable by visitors. MySQL, PostgreSQL,
Oracle, DB2, Interbase, MS SQL Server, or ODBC isrequired.
Web用のスケジュール管理ソフト

PHP Conference 2006

11Sitesysnnnnn

2006/8/19

バージョン：0.0.3
サイズ：約280KB
URL： http://sourceforge.net/projects/sitesys/
SiteSys is a website management system in PHP whichallows a web designer to design a site and then hand overcreation of all new content, including pages, news items,
and articles, to the client, reducing their work load.
たぶんCMSPHP Conference 2006

12

Covidennnnn

2006/8/19

バージョン：0.6.1
サイズ：約49MB
URL: http://www.covide.nl/
Covide offers you OpenSource and webbasedGroupware­CRM with possibilities for integrated
usage as firewall, mail­, web­, and fileserver AND
VoIP PBX!
グループウェア+CRMらしいPHP Conference 2006

13

RoundCubeMailnnnn

2006/8/19

バージョン： 0.1 beta2
URL： http://www.roundcube.net/
RoundCube Webmail is a browser­based multilingual IMAPclient with anapplication­like user interface. It provides fullfunctionality you expect froman e­mail client, including
MIME support, address book, folder manipulation
andmessage filters. RoundCube Webmail is written in PHP
and requires the MySQLdatabase. The user interface isfully skinnable using XHTML and CSS 2.
Webメールアプリケーション

PHP Conference 2006

14

まとめn

全てのアプリケーションが不適切なコードを含む
nn

一部アプリには明らかなセキュリティホールもある…
nn

本当に直ぐに攻撃可能な物も…

コードを精査していませんn2006/8/19

つまり参考にしてはならないコードを含む

他にもある（はず）

PHP Conference 200615

安全なコードの書き方
n

脆弱性が発生する原因とリスクを正しく理解n

入力時の完全な検証
nn

出力時の完全なフィルタ処理
n2006/8/19

ホワイトリスト

全て処理

PHP Conference 2006

16

宣伝n

詳しく安全なWebアプリの書き方を知りたい方はn

2006/8/19「Webアプリセキュリティ対策入門」技術評論社

PHP Conference 2006

17

終わり

ご清聴ありがとうございました

2006/8/19

PHP Conference 200618