CSRFとReferer(続き)
昨日の図は、「市民からの提案」ページへの正常なアクセス例を示したものである。
想定としては以下の(1)~(4)の流れの内、(1)を除くページを記載した図になっている。
(2)検索結果ページで横浜市役所の「トップページ」をクリック
(3)トップページの「ご意見・ご提案」をクリックする
(4)「市民からの提案」投稿フォームに書き込む
現在の横浜市役所のHPでは(3)と(4)の間にも幾つかページがあるが、説明用に省略して簡略化した。
また(1)と(2)は必須なルートではなく、流れをわかりやすくするために付加したもので、(3)に至るまでは別のルートでも構わない。
ポイントは本来の画面遷移設計上で、「(4)投稿フォームへは(3)トップページにある「ご意見・ご提案」のクリックで遷移するルートしか想定していない」と云うことである。
ユーザーは、(4)へ直接遷移する必要はなく、常に(3)から遷移することで操作上の問題はない。
また、別サイトからのアクセスではrefererを変更することは基本的に困難であるが、変更する方法も存在する模様。
だが、重要なことは横浜CSRF事件では、referer無しや変更は関係ないということである。
何故なら神奈川県警の報告書にあるように、サーバーログ中に正常ルートではないアクセスを示すrefererが送られてきていたからである。
神奈川県警では以下の3つがたまたま揃ったのでCSRFと気が付かなかった。
(ⅰ)解析担当者がrefererの知見がなかった
(ⅱ)同じくCSRFも知らなかった
(ⅲ)サイバーセンターには両方を知っている人がいたのに伝わらなかった
サイバー捜査をやったにも関わらず、よくこのようなことが起きたものである。
<より高度な専門性と知見を有する情報通信部と問題点を共有し、解決策を
容易に思い至る問題点を早期に認識し、的確な対策が図られていた可能性がある。>
実際は「比較的」も不要で、サイバー捜査では初期段階で疑う項目だろう。
報告書は他にも「なりすまし」を発見できなかった要因を書いているが、ごく普通に捜査していれば250文字2秒問題等に至る前になりすましを判定できていたのである。
そしてもっと驚くのは犯人の認識の方。
基本中の基本と云えるrefererがそのままでは、肝心の部分の考慮が抜けている。
ただ、CSRFで他人のPCから犯行予告させるだけなら充分成功の部類と云えるだろう。
しかし、犯人は誤認逮捕を狙っていた。
これでは被害者は任意で聴取されることはあっても誤認逮捕には至らない。
たまたま捜査側のミスの重なりで目論見通りになっただけなのに、犯人はラストメッセージで分かってみれば無意味な工夫を長々と説明したことになる。
犯人はそこまで大間抜けな人物なのか。
つまり、犯人はrefererについて知見があったと想定されるのである(但し当方見解)。
それなのに「referer対策しないで何故誤認逮捕が可能と考えたのか?」という大きな疑問が出てくる。
調べれば調べるほど犯人の意図が不明になってきてしまう。
以上
[追記]
サーバー側ログではないが、当方が横浜市役所にアクセスしてみてPC側で取ったログを参考に示す。
基本的にはPC側から送った内容からサーバーログに記録されるので、当方のログとサーバーログは同じような内容になると考えられる。
・ログの様子(1行毎にログが次々と記録されている)
・一つの行を取り出してみる
----------------------------------------
2014-04-xx- xx:xx:xx,xxxxxx,xxxxxxxxxTCP_DATAv4,PSH+ACK,xxxxxxxx…,http(80),xxxxxxx,xxxxx,WindowSize=65535
HttpMethod=GET
HttpProtocol=HTTP/1.1
HttpReferer=http://www.city.yokohama.lg.jp/front/welcome.html ・・・②
----------------------------------------
1行中の①と②はサーバー側ログでは以下に相当し、ログ行数が多くても犯行予告が書き込まれた時刻は正確に分かるから、その付近を文字列検索等でrefererは容易に調べられる。
① 現在ページのURL
② 一つ前のページのURL(referer)
CSRFでは②が海外サイトのURLになっていたということになる。
追記以上