不正アクセス関係あれこれ

30秒でofficeになる方法には、多数のリンクやコメントをいただきました。それについて、自分なりにもう一度整理してみて、まとめてお答えします。

短期的な問題意識と長期的な問題意識

上記の記事以外にも、これと前後してセキュリティに関していろいろ書いています。そこでの論点はいろいろあって、まとめて言うとどういうことなんだ?と思う方も多いでしょう。自分でも、書きながら考えているので、そう簡単には答えられない所もありますが、大きく次の二つに分けて考えてください。

  • 短期的、技術的、法的、社会的な問題意識
  • 長期的、心理的、宗教的な問題意識

ひとつの文章の中に両方出てきてるのもありますが、大きく分けてこの二つの問題意識に分かれています。後者の部分については結論も出ないし、批判されても論理的に議論したり簡単に答えることはできません。そういうことが嫌いな人は「電波」として放置しておいてください。

前者の部分については、なるべく批判には答えて、間違いは間違いとして(それなりの)結論を出したいと思います。この文章は、短期的な問題意識についての(とりあえずの)総括です。

お前は何がいいたいのか?

私が言いたいことは二つです。

  • 脆弱性を発見したらどうすればいいのか、というフローがどこにも明文化されて存在していない
  • マスコミがおかしい

最初のポイントはid:NOMURAさんの記事から言葉を借りました。言いたいことはこれだけと言ってもいいです。officeさんが悪いのはわかった、じゃあどうしたらよかったのか?それがわからない。誰でもいいから、どうしたらいいのかフローにして示してほしいっていうのが第一。

それで、「それを一番邪魔してるのがマスコミだ」っていうのが第二。これは、馬鹿だからとか何も知らないからというより意図的なものだと思っています。議論を歪めて変な方に持っていく動機があって故意にやっていると考えている。だからこれは許せません。

それで重要なのは第一の問題だから、馬鹿はほっといて第一の問題を詰めようという考え方もあるし、それは大事なことだと思いますが、私は第二の問題に重点を置いています。自分の得意分野も個人的な動機もそっちにあります。

ですから、マスコミを批判しながらその毒を中和する薬を流しているつもりです。薬は使い方によっては毒であるので、その毒が議論を混乱させるという批判もあるかもしれません。

HTTPリクエストをどう見るか

CGIプログラム等のWEBアプリケーションとは何かと言うと、簡単に言えば「クリックして結果を返すプログラム」です。もうちょっとかっこよく言うと、「HTTPリクエストに対してHTTPレスポンスを返すプログラム」

つまり、クリックするとHTTPリクエストというものがサーバに送信されます。それに対して、HTTPレスポンスというものが返されてその結果が画面に出るわけです。

HTTPリクエストの中身はユーザの操作によってブラウザが生成します。リクエストの中には、URLのようにユーザが簡単に中身を指定できる部分もあるし、どうやってもブラウザが勝手に作ってしまって、ユーザの思うようには変更できない部分もあります。

そして、一連の会話の中では、前回のレスポンスから次のリクエストが生成されますから、サーバ側のアプリケーションは間接的に次のリクエストを操作することができます。あるページを表示して、そこに二つのリンクしかなかったら、次のリクエストをその二つのリンクに限定していることになります。

ですから、サーバ側から見ると大半のリクエストはある程度「こんなリクエストが来る」と予想することができます。「ピッタリこれ」という形ではなくて「これかこれかこれ」という感じで、複数のリクエストの中からどれかが来るという予想になったり、リクエストの特定に部分には何が来るか想像もつかないが、その他の部分はまずこういう風になる、という予想になったりします。部分的な予想ではあるが、実際の運用において99%のリクエストは予想の範囲内です。

しかし、それは絶対ではありません。サーバからブラウザを誘導することはできるし、大半(99%)のブラウザがそれに従うのも事実ですが、サーバがブラウザの動作を強制したり制限したりすることはできません。技術的にも無理だし、法的にもそんな権利はないし、慣習としてもそうなってない。

WEBブラウザというのはたくさんあって、どれを使っても自由です。実際、技術者はだいたい人と違う変なブラウザを使っています。また、ブラウザを自分で作ったり改造したりしてもいいのです。もちろん、完璧なブラウザを作ることは大変な作業ですが、特定用途の「俺ブラウザ」は簡単に作れます。一番いい例がアンテナというソフトで、画面に表示する機能は省いて更新チェックだけに専念した「俺ブラウザ」です。もっと言えば、スクリプト言語というツールを使うと、5行くらいのプログラムで「俺ブラウザ」が作れます。

「俺ブラウザ」を使えば、リクエストの中身が全て自由になります。普通のブラウザでは好きにできなかったフィールドも簡単に変更できる。というか、IEモジラと同じリクエストを生成する方がむしろ面倒です。

ですから、WEBアプリケーションはいかなるHTTPリクエストもうまく捌けないといけません。

と言っても、ボール玉まで打つ必要はありません。ボール(不正なHTTPリクエスト)が来たら見送れば(エラー表示)いいのです。ストライクはちゃんと打って、ボールは見送る。それでいいのですが、どんなボールが来てもいいように構えていないと駄目です。相手はどんなボールを投げてくるかわからない。

それで、2/5の例で私が最初に説明しようとしたのは、「HTTPリクエストは操作できる」ということです。サーバの誘導に逆らって、期待されてないHTTPリクエストを送ることはできるということです。?の後を書きかえるのは、HTTPリクエストを操作する一番簡単な方法です。これによって変更できるのは、HTTPリクエストのごく一部です。office氏が操作したのは、別の部分です。これには別の手段が必要ですが、HTTPリクエストを変更するという点では同様の操作です。

意図されてないリクエストと禁止されているリクエス

さてこれを少し形式的に言うと、HTTPリクエストには無限の種類がありますが、ある局面において以下のように分類されます。

  1. 誘導されているリクエス
  2. 禁止されているリクエス
  3. 意図されてないリクエス

誘導されているリクエストとは、一番単純なのが画面上にあるリンクをクリックすることで生成されるリクエストです。あるいは、画面にフォームが表示されている時に、そのフォームを埋めてボタンを押すことで生成されるリクエストです。この場合は、各フィールドに入る値はどんな値が入っていても誘導されているリクエストに含まれます。もっと特殊な例をあげれば、JavaScriptによってクライアント側でフォームの入力値チェックしてから送信するような場合には、JavaScriptのチェックをパスしたもののみが誘導されているリクエストになります。

禁止されているリクエストとは、「管理者用」としてパスワードつきで「編集」等のリンクがあるような状態です。この場合に、正しいパスワードを入れて「編集」ボタンをクリックしたら、データの修正を行なうことができます。これは、通常のブラウザ操作で生成することが可能なリクエストですが、一般ユーザには実行することが許されていないので、禁止されているリクエストになります。

そして、それ以外のリクエストは全て「意図されてないリクエスト」です。「俺ブラウザ」にバグがあって、不正なHTTPリクエストを送信してしまった場合とか、?の後を操作して特定のフィールドを変更した場合とかが、これにあたります。

それぞれについてWEBアプリケーションが満たすべき条件はこうなります。

  1. 誘導されているリクエストには正常な結果かエラーを返す
  2. 禁止されているリクエストには正常な結果かエラーを返す
  3. 意図されてないリクエストにはエラーを返す

「エラーを返す」が三種類ありますが、その親切さ加減はそれぞれ違います。誘導されているリクエストに対しては、ユーザが何を間違えていて次にどうしたらいいかわかりやすいような画面を返す必要があります。意図されてないリクエストにはそこまで親切にする必要がなくて、「不正なリクエストです」くらいのそっけないメッセージで充分です。

重要なのは、意図されてないリクエストに対して、意図されてない結果を起こしてはいけないということです。どういう出鱈目なリクエストに対しても、WEBアプリケーションは意図されてない動作をすることなく「正常な異常処理」を行わなくてはいけません。

不正アクセスの分類

WEBアプリケーションに対する、不正アクセスには二種類あると思います。

  1. 禁止されているリクエストを生成して不正な結果を得る
  2. 意図されてないリクエストによって意図されてない結果を引き起こす

禁止されているリクエストが(正しいパスワードつきで)送られて来た場合は、データ修正にしろ管理者向けの特殊な操作にしろあるいはコンピュータセンターの自爆にしろ、それを実行するしかありません。それが、WEBアプリケーションの正しい動作です。

ですから、禁止されているリクエストを守るのは人間の仕事です。禁止されているリクエストにはパスワード等の容易に推測できない要素が含まれていなくてはいけません。その「容易に推測できない要素」を推測して送信することが一番目の不正アクセスになります。

これと別に、意図されてないリクエストの中で、「正常な異常処理」で対応できないものがあった場合に、それを送信して意図されてない結果を引き起こすのは二番目の不正アクセスです。

両者は外形的に区別できると思います。

どちらか片方だけが不法行為になるとか、どちらかは放置していいとかそういう単純な結論にはなりません。両者を区別してそれぞれについて慎重に考えることが必要です。

ふじさんによると、不正アクセス禁止法における不正アクセスの要件は

  • 対象にアクセス制御機能が存在していたこと
  • 行為者がアクセス制御機能の存在を認識してそれを回避する意図を有していたこと
  • 行為者がアクセス制御機能を回避するための行為をおこなったこと
  • 行為者がアクセス制御機能を回避したこと

だそうですが、これは私の分類で言うと「禁止されたリクエスト」を対象にしていて、意図されてないリクエストにはあてはまりません。

意図されてないリクエストによっても重大な被害が生じ得るので、これを取り締まることは必要ですが、上記の要件にあてはめて罰するのは無理だと思います。

毎日新聞のロジック

毎日新聞の記事(消えてしまいましたが、ここに一部引用あり)は「誘導されてないリクエストは全て不正アクセス」あるいは「office氏は誘導されてないリクエストを送信したから逮捕」と誤解されやすい記事です。

これには以下のような誤解につながるという点で、非常に問題だと思います。

  • WEBアプリは誘導されたリクエストだけを処理していればよい
  • 意図されてないリクエストに「正常な異常処理」ができなくてもサーバ側の瑕疵ではない
  • office氏が禁止されたリクエストによって不正アクセスしたように誤解させる
  • これを前例として、意図されてないリクエストを送信した者全てに逮捕の口実を与える

パラメータの書き換え(HTTPリクエストの書き換え)を「プログラムの書き換え」と呼んでいたのは、この記事に対する批判を意図してのことです。誘導されてないリクエストを全て「プログラムの書き換え」として一括して批判するのは明かな間違いだし、社会的に大きな問題があると思います。

私の試みの自己評価

よかった点は、以下のことを専門的な知識の無い人にわかりやすく示した点です。

  • 誘導されたリクエスト以外のリクエストは簡単に生成できる
  • 誘導されたリクエスト以外のリクエストを送信することが即不正アクセスになるのはおかしい

また、問題のパラメータを推測する難易度として、office氏にとってのACCSと、一般の人にとっての ?date=yyyymmdd は同じくらいで、その点でも「これくらいの穴が開いてたんだよ」という意味ではよかったと思います。(3分クラッキングを見ても、私はそう思いましたが、この記事をはじめ、この点には異論が多いようです)

悪かった点は以下の点の違いを同一と見なすような混乱の可能性。

言いわけをすれば、「意図されてないリクエストによる意図されない動作」を意図的に作って擬似的に体験してもらうのは難しい(不可能な)ので、その代わりに文章による禁止によって代用したということです。

もし、毎日新聞が暗示したように、「office氏は誘導されてないリクエストを送信したから逮捕」だとして、この違いを無視して「誘導されてないリクエストを送信する行為」に着目すれば、office疑似体験としての意味はあると思います。つまり「新聞の言う通りなら私はあんたを告発できるよ」「そんなことはあり得ないから新聞が間違っている」というロジックです。

ですから、言わばこれは「背理法による毎日新聞批判」であって、その部分の意図がわかりにくいという批判はもっともです。

粘着的新聞批判の理由

私は、マスコミというものは、意図的な悪意を持っているか、集団的な精神病のようなものにかかっているという仮説を持っています。断片的にはそれについて何度か触れています。

ですから、こういうミスは単純な過失や調査不足だとは思えない。過失や不注意によって何かが露呈したと見ます。そして、こういうミスの中にそういうものの痕跡を探り、その根本を批判したいと思っています。その正体を探る為に、最も質の低い記事に注目しています。

また、そういう社会心理的な分析とは別のレベルで、実体としてなんらかの特定の勢力の利益を新聞は代弁しようとしているのではないか、という疑いも強く持っています。

ヨセフアンドレオンの声明について

私は、これはどちらかと言えば、いい方に評価します。

まず、以下のように問題点を明記している点。

  • 個人情報の安全が完全に保障されたというわけではありません
  • 当社の運営上の瑕疵が今回の事件の一因であることに変わりはありません

これは当然のことですが、当然のことができてないケースも多いので、これを明言したことはプラスに評価すべきだと思います。

もちろん、office氏の非難には同意できませんが、「個人情報を盾に、われわれを脅迫した」という点も含め、具体的に問題点を指摘した上で非難しています。

これはいかに間違っていても嘘があっても、議論の出発点にはなるものなので、こういうきっぱりとした声明を出したことは評価すべきだと思います。

おそらくひっこめてしまったのは、そういう具体的な議論を拒否するどこかからの圧力であって、むしろそちらを批判すべきだと私は考えます。

また、「セキュリティの専門家やセキュリティ技術に依存しないセキュリティのあり方、セキュリティに依存しない情報社会のあり方」という表現も、当事者として言うべきことではないし直接的には無茶苦茶な意見なんですが、言いたいことはわかる気がする。それが「セキュリティは退却戦」になりました。

それでアドレスは公開するのか?

まだ決めてません。

公開すると違法になるとか、こういう問題があるというがもしあったら教えてください。