【レポート】

セキュアなWebアプリ実現のために本来やるべきことは? - 高木浩光氏

いわゆる「Webアプリケーション」のセキュリティに関する問題を論議する「Web Application Security Forum(WASF)」が、7月8日に都内で第2回のカンファレンスを開催した。同カンファレンスでは、セキュリティ業界ではもはやおなじみの存在であり、WASFの理事でもある産業技術総合研究所の高木浩光氏が講演を行った。

おなじみ高木浩光氏。この日はWASF理事として登場

キーワードジャーナリズムは世間一般への啓発のために有効

高木氏の講演は「増えつつある疑わしいキーワードを斬る~キーワードジャーナリズムに踊らされるな~」という題名で予定されていたが、高木氏は冒頭でいきなり「この題名は理事会で決められたものだが、私個人はむしろ『キーワードジャーナリズム万歳』という風に思っており、参加者の皆さんこそ『講演の題名に踊らされるな』と言いたい」と述べて会場を笑わせた。

その上で高木氏は「ある脆弱性にわかりやすいキーワードをつけることは、脆弱性の特徴の理解や分類をやりやすくするといった点で有用であり、またマスコミ等がキーワードを用いて一般ユーザに啓発を行うことで対策が進むという面もあるが、一方で弊害もある」と述べ、具体的な例をいくつか挙げて、「キーワード」の利点と欠点を解説した。

まず高木氏が取り上げたのが、いわゆる「クロスサイトスクリプティング(XSS)」。高木氏はこのキーワードについて「元々この脆弱性を最初にCERT/CCが取り上げたときは、スクリプトに限らずタグを埋め込む行為全般を指したものとして表現されていたが、それでは一般には(何が問題なのか)わかりにくいので普及しなかった」と述べた上で、「『クロス』も『サイト』も『スクリプティング』も、いずれも日本語として広く使われている言葉であり、直感的にわかりやすい」と、キーワードをつけることの有用性を示した。

またXSSに関しては「不正アクセス行為を行わなくても、第三者が脆弱性を指摘しやすい」「XSSは受動的攻撃のため、SQL Injectionのような能動的な攻撃に比べ攻撃に必要な前提条件が複雑になる上、仮に脆弱性を指摘したとしてもそのシステムに対する悪影響の範囲は限定される」といった理由から、マスメディアで広くその存在を周知しやすいという背景もあったと高木氏は指摘。この点を同氏は「XSSはSQL Injection等に比べれば脆弱性としての緊急性は低いが、逆に言えば本当にやばいことは人前では言えない」と表現した。

こういった理由からXSSが脆弱性の一類型として広く業界で知られるようになった結果「それまではサーバにパッチを当てるといったレベルの対策にとどまっていたものが、きちんとWebアプリのプログラムの中身を精査する方向に目が向けられるようになった」と高木氏は述べ、「これはキーワードジャーナリズムが成功した一例ではないか」と語った。

誤った解説や必要以上に危機感を煽る報道に不満

続いて高木氏が取り上げたのは、最近はやりの「フィッシング(Phishing)」「ファーミング(Pharming)」といった攻撃手法。これについても高木氏は「こういった偽サイトを用意してユーザを誘導しようとするといった攻撃手法は2000年ごろから存在したが、当時私が銀行などに対し問題を度々指摘し、日銀のセミナーで講演を行ったりしたにも関わらず、銀行は全く対策を行おうとしなかった」「ところが"Phishing"という言葉が一般に広まったとたん、各銀行は一斉に申し合わせたかのように"インターネットバンキングの画面にアドレスバーを表示する"、"URLの確認方法に関する解説ページを用意する"といった対応を行うようになった」と語り、「キーワードがなかったここまでの対策は進まなかっただろう」と、ここでもキーワードジャーナリズムの利点を語った。

ただここで高木氏は「しかし実際のところ、"Phishing"に関する解説にはインチキくさいものが多い」と述べ、その一例としていわゆる「アドレスバーの偽装」問題を取り上げ「既にInternet Explorerの最新版ではアドレスバーの偽装はほとんど行えないように対策がなされているのに、未だに「アドレスバーが偽装される」としておどしをかけるような解説が後を絶たず、一方で真にユーザに注意を呼びかけるべき部分がないがしろにされている」と述べ、自らがこの問題に関してあるテレビ局の取材を受けた体験談なども交え不満を顕わにした。

Phishingに関する怪しい解説の例

Phishing対策を語る際の視点について。エンドユーザの立場から100%問題を防ぐのは不可能だが、責任分界点を明確化することで事業者としてのリスクをほぼ100%回避することは不可能ではないとする

高木氏が主張する、Phishingに対する自衛策

いわゆるブラウザの「鍵マーク」偽装問題についても、高木氏は「現在はブラウザ側の脆弱性の対策が進んでおり、アドレスバーがきちんと表示されていてURLが確認できる状態になった上で、SSLの鍵マークが表示され、ブラウザがSSL証明書に関する警告画面を出さなければ、いちいち証明書を開かなくても安全性は確認できるのに、未だに「安全性を確認するには証明書を開く必要がある」といった誤った解説が(それもセキュリティに詳しいとされている記者の記事の中で)なされている」と指摘。その上で「キーワードジャーナリズムは、よりユーザにとって手間のかからない対策手法を紹介すべきだし、Webサイトを運営する事業者側も「ここまでは我々の責任だが、これ以上はユーザ側の責任」という分界点を明確にすべき」と参加者に呼びかけた。

キーワードで脆弱性の影響範囲・重要性が簡単にわかることが大事

高木氏は講演の中で、キーワードジャーナリズムにおいて重要な点として「そのキーワードで表現される脆弱性が影響する場所とその度合い、危険性と対策レベルが一致すること」を挙げている。

例えば前記の「Phishing」と「Pharming」については、解説によってはこの2つを同種のものとしてひとくくりにしているものも少なくないが、高木氏は「"Phishing"は偽サイトを構築してユーザを誘導しようとするものであり、そのような偽サイトと本物のサイトを容易に区別できるようにする必要があるという点で、Webサイトの運営者側に責任があるといえるが、"Pharming"はユーザのローカル側のhostsファイルやDNSなどを汚染して攻撃を行うものなので責任はユーザ側にあるため、この2つは区別されるべきである」と述べ、キーワードによって対策が行われるべき場所を限定するメリットを語った。

また最近話題になりつつある「CSRF(Cross-Site Request Forgery)」についても、高木氏は「一口にCSRFと言っても、実際には昔から存在する掲示板荒らし的なものからアカウントの盗用につながるものまで影響範囲は"ピンきり"であり、単に『CSRF対策を今すぐ進めるべき』というだけでは弊害も大きい」と述べた上で、「脆弱性を指摘するユーザ側も(その脆弱性が)不特定多数に影響を及ぼすかどうかという点まで確かめた上で指摘を行うようにすべき」と語り、あるキーワードによって表現される脆弱性の範囲が広すぎる場合に弊害が発生するとした。

いわゆる「パラメータ改ざん」についても高木氏は「例えばあるショッピングサイトで商品の価格が改ざんできても、それによって影響を被るのはそのサイトの運営者のみだが、一方でユーザIDをパラメータに入れて(何の検証も行わずに)利用していたら全ユーザに影響が及ぶ」「そもそもHTTPの性質上パラメータにどんな値でも入れられるのは当たり前なので、キーワードとしてもよろしくない」と述べ、その脆弱性を放置することによって生まれる影響の度合い毎に状況を切り分け、それぞれに異なるキーワードを与える方が良いとの見解を示した。

事後的な「サニタイズ」ではなく、最初からきちんと動作するプログラム作りが必要

ところでWebアプリの構築において、ユーザからの入力を検証し有害な入力を排除するという観点から「サニタイズ(無害化)」ということが昨今よく言われるようになっているが、高木氏はこれについて「『サニタイズ』はろくな対策をしていないことを一言で表現できる便利な言葉であり、現在『サニタイズって言うな』キャンペーンを行っているところ」と不満をあらわにした。

高木氏は「既存のサイトに対して、そのセキュリティ対策として『サニタイズ』を行うというのは、セキュリティ屋の発想としては極めて自然である」と述べつつも、「そもそも(SQL Injection、Command Injectionなどの)インジェクション系の脆弱性が起こるということは、セキュリティ以前にきちんと(本来処理されるべき)記号のエスケープ化などを行っていないということだし、すなわち本来入力されうる文字列を処理できなくなるということでもある」「Buffer Overflowにしても、センスのあるプログラマは常にバッファ境界等に対して意識しており、あまりそのような問題は起こさない」と、適切にプログラムを記述すればサニタイズの必要性は本来ないはずだ、と主張する。

高木氏はかつてJavaHouse MLなどに開発者の一人として参加していた時代の経験を踏まえ「開発者にとっては綺麗にプログラムを書くことが大命題であり、セキュリティ屋が(セキュリティ関連の)問題を指摘してくると『プログラムが汚くなる』としてそれを嫌う人が多い」と述べた上で、特に新規にシステムを開発するような局面において「『サニタイズ』(のようなプログラムを汚くする対策)ではなく、本来やるべき処理が何かをプログラマにきちんと伝えていくことが必要である」と参加者に訴えていた。

「『サニタイズ』言うなキャンペーン」に至った理由



人気記事

一覧

イチオシ記事

新着記事