『体系的に学ぶ安全なWebアプリケーションの作り方』――「安全」は開発のプロとしてのたしなみである
体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践 徳丸浩(著) ソフトバンククリエイティブ 2011年3月 ISBN-10: 4797361190 ISBN-13: 978-4797361193 3360円(税込) |
■われわれの生活に根付く「安全神話」
インターネットが生活の基盤になってから久しい。皆さんは今日もどこかのWebサービスにログインし、ユーザー名やパスワードといった個人情報、あるいはクレジットカードの番号を入力したかもしれない。
「生活の基盤」である以上、安全で安心して使えるものである、という前提で考えがちだ。しかし、インターネットの先で運用されているWebサービスは、人が作ったプログラムである。人間の仕事である以上、完ぺきであるはずがない。
これは当たり前の事実であるはずだが、毎日インターネットを使っていると、つい忘れがちだ。そして、何か大きな出来事――それは大体、あまり歓迎できないことだが――によって気付かされる。人間の悲しいところである。
最近、それを痛感させる出来事が立て続けに起きた。
●PlayStation Network大規模個人情報流出事件
ソニー PlayStation Network 情報流出まとめ - 青いなぁ・・・
PlayStation Networkに保持されていた、メールアドレスとパスワード、クレジットカード番号を含む個人情報が、合計で1億件以上流出した。衝撃的すぎる事件の原因は「アプリケーションサーバのぜい弱性」と言われている。
この事件でソニーは大きく株価を落とし、企業価値は大きく損なわれた。
●Evernote XSSぜい弱性事件
Evernote XSS事件のエクスプロイトとその対策過程と顛末 | uuu
Togetter - 「Evernote の XSS 脆弱性に関して mala 氏のつぶやき」
@bulkneets氏がtwitter上でEvernoteのぜい弱性について指摘したところ、翌日にエバーノートの日本法人から呼び出され(@ockeghem氏と一緒だった)、直接セキュリティコンサルティングを行ってきた、という事件。
悪意のあるWebサイトでEvernoteに情報を送る「Webクリッパー」を使用すると、XSSぜい弱性によって任意のコードが実行され、Evernoteのデータに不正にアクセスできる、といぜい弱性だったが、素早い対応により大きな被害は出ていないようだ。
●SQLインジェクションぜい弱性でサーバを止めちゃった事件
Togetter - 「巫女テスター(17歳)、システムの致命的な欠陥を発見しサーバーごとシステムをシャットダウンした一部始終」
Togetter - 「巫女テスター(17歳)、欠陥システムをサーバーごとシャットダウンするに至った顛末とその後のお話」
ペネトレーションテストを委託されたプログラマが、SQLインジェクションのぜい弱性に起因する深刻なセキュリティホールを発見、委託元の対応がのんびりしたものだったことにしびれを切らし、稼働中の本番サーバを止めてしまった、という事件。
SQLインジェクションによって、クレジットカード番号を含むすべてのデータを不正入手できるという深刻な状況を、「半月後に修正するかどうか検討する」などと悠長な対応で片付けられたら、危険性を知っているエンジニアとしてはとても苦しむだろう。「独断でサーバをシャットダウン」という行為が議論を呼んでいるが、同じエンジニアとして気持ちは痛いほど分かる。
この手の事件は、これが最初でもないし、最後でもない。しかし、セキュリティリスクはそのままビジネスのリスクに直結するのは間違いない。プロのエンジニアとして、リスクを混入させないための意識と知識が、ますます要求されるようになるだろう。
■プロとしてのたしなみ
そこで本書の出番である。
●入門書の恐怖
技術書全般の傾向として、「入門書が多く、専門的な内容になるにつれて数が少なくなる」という特徴がある。専門的な知識が要求される度合いを考えれば当然なのだが、特にWebアプリケーションにおいて、その傾向が顕著であるように感じる。
「PHPによるWebアプリケーション開発入門!」みたいな本はたくさん存在するが、その中でぜい弱性について大きく取り上げるケースはまれである。入門書の目的は「初心者がWebアプリケーションを開発できるようになること」である。ぜい弱性とその対策に大きな紙面を割くと、初心者が脱落してしまうから致し方ない。
その本でPHP(など)を学んだプログラマが、やがて仕事してWebアプリケーションを開発するようになるとしよう。ぜい弱性の存在を知らないから、「安全なWebアプリケーションを作ろう」という意識を持たないまま、開発を行う。それが「安全でないWebアプリケーション」をまん延させる遠因になっているのだ。
●プロの開発者ならば
Twitterやブログ、講演などの手段を通じて、このような状況にずっと警鐘を鳴らし続けてきたのが、本書の著者 徳丸浩(@ockeghem)氏だ。先ほど紹介したEvernote事件にも登場している、Webアプリケーションのセキュリティ方面における第一人者である。
私が勉強会に参加するようになった2008年、「WASForum Conference 2008」での講演にショックを受けたのを覚えている。それから3年、やっと徳丸氏のの知見が1冊の本にまとまったことがとてもうれしい。
「体系的に学ぶ」というタイトルどおり、本書は現在知られているWebアプリケーションのぜい弱性について、網羅的にまとめている。ぜい弱性の原因・攻撃手法・防御手法を詳細に解説し、サンプルコードと実証環境で実際に体験できる。
既存のぜい弱性の原因は(おそらく)すべて取り上げられているので、本書を読めばWebアプリケーションの既知のぜい弱性は防げるはずだ。逆に言うと、本書が解説するぜい弱性を作りこんでしまっていた場合、プロのエンジニアとしては怠慢のそしりを免れまい。
また、付属のCD-ROMに実証環境が収録されているのもすばらしい。VMWare Playerのディスクイメージが用意されているので、実際に攻撃と防御を体験できる。手を動かすことで、ぜい弱性を作り込むことの恐ろしさを実感できるのが良い。
さらにもう1つ、第9章「安全なWebアプリケーションのための開発マネジメント」も必読だ。Webアプリケーションの開発プロジェクトをマネジメントする上で、ぜい弱性に対しての理解を持ち、コストを計上、エンジニアに適切な教育を施す。当たり前ではあるが、今まであまり言及されてこなかった視点である。エンジニアの皆さんは、ぜひマネジメント層にも第9章を読んでもらう努力をしてほしい。
●時代は変わる
インターネットの世界は変化の速度が速いので、新しいぜい弱性はこれからどんどん出てくるだろう。
例えば、最近注目を集めている「node.js」は、「Websocket」という新しいプロトコルを使ってリアルタイム通信を行っている。しかし、Websocketにはプロトコルレベルでのぜい弱性がある、として、Firefox4ではWebsocketによる通信がデフォルトでオフにされている。
こういった出来事についてキャッチアップするためにも、既存のぜい弱性に対する学習と対処は、本書のような体系的にまとめられた良書で、“素早く確実に”済ませておこう。先達が切り開いてくれた「知の高速道路」は、有効に活用するべきだ。
■まとめ
本書は読むこと・手を動かすことを通じ、既知のぜい弱性を体系的に学ぶことができる良書である。プロのエンジニアとして必須の知識が詰まっているので、「必読」と言っても過言ではない。新人研修や社内勉強会の教材として、開発チーム全体で学ぶ必要もあるだろう。
安全なWebアプリケーションを開発することは、プロの開発者としての責務であり、利用者や会社、ひいては開発者自身の利益を守ることにもつながる。事故が起きる前に、事故を起こす前に、ちょっと立ち止まって学んでみよう。
■Links
著者である徳丸氏のブログ。ぜい弱性に関する濃密な情報が発信されているので、ぜひ購読をお勧めする。
・CSRF対策のトークンをワンタイムにしたら意図に反して脆弱になった実装例 - 徳丸浩の日記
先日書評した『パーフェクトPHP』に書かれていたCSRF対策へのツッコミ。『パーフェクトPHP』を読んでいれば一読の必要あり。
・wasbookのVMをVirtual Boxで動かす | Kwappa研究開発室7
本書付属のCD-ROMに収録された、体験用VMをVirtual Boxで動かすための手順メモ。
(『Wife Hacks ~仕事と家族とコミュニティと~』
コラムニスト kwappa)