クロスサイトスクリプティング脆弱性の検証と法律について

所謂不正アクセス禁止法クロスサイトスクリプティング脆弱性(XSS脆弱性)の検証との関係を考えてみました。昨年秋頃からずっと考えていた事で、何度考えても同じ結果しか出てきません。頭の中だけで考えていると堂々巡りですので思いきって活字にしてみます。

まず最初にいくつか確認しておきます。

私の知るところによればXSS脆弱性を突く攻撃はサーバへの攻撃ではなくブラウザ(あるいはメーラ)への攻撃です。攻撃者はサーバ側のOSやhttpdや各種のCGI、WEBアプリケーションなどが持つ脆弱性を利用してブラウザを攻撃します。あるいは、HTMLメールを利用するかもしれませんが、やはりブラウザへの攻撃をします。ブラウザ自身が持つ欠陥によってもXSS攻撃は成立しますが、やはり攻撃対象はブラウザです。サーバ側のソフトに欠陥があってバッファオーバフローを起こしていたとすると、攻撃者はサーバを攻撃することになりますが、これは、ブラウザを攻撃するXSS攻撃とは反対の方向を向いています。XSS攻撃と似ている手法にコマンドインジェクションやSQLインジェクション等がありますが、これらもまた、サーバ側を攻撃していますのでXSS攻撃とは反対のベクトルを持っています。一番端的なお話をしますと、サーバ側に何の脆弱点も瑕疵もなくブラウザにも何の脆弱点も瑕疵もない状況ですら、巧みな詐術を用いれば(多分にソーシャルエンジニアリングな手法が含まれますが)XSS攻撃をブラウザに対して行う事が可能であるという実例があります。最悪のケースではありとあらゆるサーバのログに攻撃の瞬間の痕跡が残らないことすらあるのです。ブラウザ側にはなんらかの影響はあるのでしょうけれども具体的なログがきちんと取られるかどうかは怪しいところです。ここまで見てきたように、XSS攻撃はブラウザへの攻撃であると言えます。

余談になりますが世間によくあるXSS攻撃の概念を図示する画像について私は常々(つねづね)違和感を感じています。私の感覚では、まず詐術があり、目的はブラウザへの攻撃であり、その為にたまたまサーバ側の瑕疵を悪用すること「も」ある、そのような説明にはなっていないからです。詐術の機械的な自動化としてサーバ側の瑕疵が悪用されるケースが圧倒的に多いものですから、よくある図面は説明としては悪くないのですけれども、私にはなんとなく違和感があるのです。クロスサイトスクリプティング脆弱性の本質部分だけ抽出すれば、victimなブラウザから悪意あるサーバに大事なデータが取られてしまう、このことにつきると思うのです。攻撃者にとってはサーバは踏み台にすぎません。スパムをばらまく者達はしばしば踏み台として脆弱なサーバなりなんなりを選んで第三者不正中継を行う事があります。スパムの中継を行うようなサーバはたちどころに見出されますしそのようなサーバを運営していれば非難にあいます。踏み台として悪用されているのはボンクラだという扱いです。サーバ管理者も自らのサーバに悪い影響がすぐに出るものですから比較的容易に気がつき対処するかもしれません。しかしながらXSS攻撃の踏み台になることに対してはサーバ側管理者は鈍感です。サーバ側の負荷が別に高くなるわけでもありませんし、サーバ側のデータが直接盗まれるというわけでもないので気がつきにくいのでしょう。直接攻撃されるのはあくまでブラウザだということからサーバ側の無関心が発生しているのです。

さて余談はともあれ本題に移ります。私が私のブラウザの挙動を調べて私のクッキーをブラウザに表示させる行為は不正アクセス禁止法に触れるのでしょうか?たとえサーバ側の瑕疵を利用して踏み台にし、XSS攻撃を自分に果たしたとしてもです。本質的にはブラウザへの攻撃ではないでしょうか。私が私のブラウザへ攻撃しているのですが、これは法に違反しますでしょうか。私はこの検証に際してサーバ側で法に規定する「符号」を盗んでいません。

具体例を考えたほうが良いでしょう。ログイン画面があり、私は私のユーザIDとパスワードを使ってログインしました。クッキーの中には直接的にパスワードははいっていないものとします。(はいっていたらおかしいような気がします。)サーバはクッキーの中に認証をすませた証としてセッションIDを含む特殊な符号を設定します。クッキーは何の為にあるというのでしょうか。HTTPはステートレスですからセッションの継続性を保証するものではありません。この為、仮にクッキーをいっさい使わないとすると、セッションの継続性を証明する為の工夫が出てきます。ある場合には、ブラウザに表示されないhidden項目の中にセッションIDを埋めこんでいるかもしれません。そういうアプリの作り方を推奨しているサイトも見たことがあります。クッキーは使わないほうが良いと宣言しているサイトでした。(このことの是非はここでは述べません。)他に方法はあるでしょうか。クッキーを使わず、また、さらにhiddenな項目などでセッションIDを遷移させて行く方法は使えないとすると、ステートレスなHTTPではセッションのトラッキングがほぼ不可能となります。しかしこの困難を逃れる方法はあります。(basic認証を使ったりすることもひとつの手でしょうけれどもここでは考えに入れません。)すなわち、セッションのトラッキングなど一切あきらめて、毎画面ごとにユーザIDとパスワードを入れさせる方法です。HTTPSなどを併用すればほとんど問題はないことでしょう。なぜこの単純な方法が普及しないかといえば、不便で操作性が悪いからです。背後からパスワードを覗き見される危険性もありますが。さてステートレスな時には毎回ユーザIDとパスワードを入れるべきところ、通常よく使われているようにクッキーの使用を許すとするならば、クッキーは、ユーザIDとパスワードの代替でありブラウザはこれをユーザに意識させる事無く入力することと等価であると考えても良いでしょう。

さてそうなると不正アクセス禁止法で禁止しているように、ユーザIDとパスワードを盗んでしまったとするならば、これは問題です。私は他人のコンピュータのブラウザにXSS攻撃をしかけてcookieを盗んではいけません。あたり前ですが。不正アクセス禁止法で言われなくともそんなことはしたことがありませんし、これからもしないでしょう。しかし、自分のコンピュータのブラウサにXSS攻撃をしかけて私のcookieを表示させる行為は不正アクセス禁止法に触れるのでしょうか? 本当に触れますか?

私は容易に結論を出すつもりはありません。司法判断なのかもしれませんし、法の不備について私は述べているだけなのかもしれません。しかし検察の私は無罪を主張する被告たる私と弁護士の私とに言うべきことがあります。「被告と弁護人は誰のパスワードも盗んでいないと言っていますが、不正アクセスであることを論証したいと思います。特定システムのXSS脆弱性の調査およびにその指摘ないし公表は、サーバとクライアントが一体となった特殊な環境下の脆弱性の調査であります。ブラウザの挙動はあらかじめサーバ側のシステムが意図した通りに動作しております。しかるに被告は不正な電子符号を故意にブラウサに入力しユーザIDとパスワードに相当する電子符号を不正入手しました。」「裁判長、意義あり!」「意義を認めません」「被告はサーバとクライアントとの一体性を故意に無視した論法で自己の行為を正当化していますが実際にはそうではありません。仮に被告が自分のコンピュータに秘密の情報を被告自身の手によりパスワードで認証を必要とする方法で閲覧を制限したとします。このデータを被告が閲覧することはいっこうに構いません。パスワードを忘れてしまって、何かのツールでクラックしたとしても不正アクセスにはあたりません。当裁判で問題になっているところのシステムのユーザIDとパスワードとを、たとえばワードやエクセルに書きとめておき、パスワード付きにて保存したとします。そのようなファイルを被告が開きその内容を見たところで不正アクセスには相当しないことは明らかです。なぜならば被告は自身の領域にあるシステムにデータを貯蔵していたに過ぎないからです。しかるに一方、本件のように、被告がサーバとクライアントとの間で綿密に組上げられたセッション追跡の機構の内部、すなわち、システムの内部に侵入してクッキーを盗むのならばこれは不正なアクセスです。サーバとクライアントとの協調により組上げられたひとつのシステムに貯蔵されたユーザIDとパスワードもしくはその代替情報を不当にアクセスしてはならないのです。」

この日記で語っていることはつまらない想像に過ぎません。法律はドシロウトな私がマトモなことを言っているはずがありません。javascriptでalertが出来る事を何かのシステムの脆弱性として見つけたとすると、それは、「何かのシステム」の不都合をあばいているのであって、自分自身のユーザIDなりパスワードなりを盗んでいるとは言えないのかもしれません。XSS攻撃はブラウザに対する攻撃であることは間違いがありません。しかしサーバとブラウザとが一体となってセッション追跡をしているシステムならば、サーバへの侵襲としてでなく、「サーバ・ブラウザ」への侵襲となるかもしれません。「何かの不都合を見つける行為」として不正アクセスをしていることになります。「何かの不具合を見つける行為」が不正アクセスとして認められるならば、XSS脆弱性の指摘は無罪であるとは言いきれないのが現状なのです。

去年の秋からずっと考えていますが堂々めぐりです。

たとえばカスケーディングスタイルの性質を理解していない為に起こるXSS脆弱性を持つシステムへの一般的なexploit例を提示しただけで、不正アクセスの幇助にあたるのではと、危惧されるのです。

私が過去の日記の大部分を消去し過去ログの開示を行わない理由は以上のようなことをも考え合わせてのことなのです。自分の中で折り合いがつくかどうかは、、、不明です。

もっとも、過去ログ封印には別の要因もあります。プライベートな友人や大好きなヒトから「ハッカーなんてやめなさいよ」と言われるからです。間違い無く断言しますが、私はいかなる意味でもハッカーではありません。そのことを説明しても彼らにはわかりません。私の日記を見るにつけ「あやしい」と感じるのだそうです。わはは。

過去ログを閉鎖した最も大きな要因は他にもあるのですが、ここには、今はあえて書きません。プライベートで発生している悲しみは始まったばかりです。終わっていません。だからです。