第10回公判傍聴記録(転載)
(rec*lde**des*さんの詳細な傍聴記録をコメントから転載します。大変貴重な資料です)
本日(5月30日)の公判メモです。被告は、深緑の横縞のシャツとGパン姿。ぼーっとして元気がない。
CSRFの証人として、Ji2 フォレンジック技術本部 副本部長の山崎 輝氏が証言を行った。鑑定書(甲467:鑑定期間H25年5/9〜5/10)に基づくものスライドを用いて証言した。(注:なお説明の都合上、ここでは証人が説明に用いたサーバA、サーバXのアルファベットを逆にして説明する。また、このブログで記載されている情報も加味する。)
CSRF(クロスサイト・リクエスト・フォージェリ)とは、WEBによる攻撃手法の一つである。クロスサイトとはサイトをまたぐこと、リクエストは要求、フォージェリは偽造という意味であり、悪意のあるサイトを閲覧することによりクライアントが意図しないものを実行する。
例えば掲示板にリンクを張り付けるなどの方法によって悪意のあるサーバAに設置しているWEBページにクライアントを誘導する。悪意のあるサーバAでは、JavaScriptを含むデータをクライアントPCに返し、クライアントPCでは、JavaScriptを実行することでサーバXに犯行予告の書き込みを行う。
被告による犯行のCSRFは、悪意のあるサーバはサーバAの他にサーバBによって実行されているが、本証言は、サーバAに関するものだけであった。サーバBにはCSRFを行うためのCSRFプログラムが置かれていると考えられ、サーバAには、CSRFを実行する前の切り替え処理プログラムが置かれている。(サーバBは捜査側でまだ発見されていない模様)
サーバAには、4つのPHPプログラムがアップロードされている。list.php、create.php、del.php、index.phpである。
list.phpは、keyとurlを1組として管理しリスト表示する。
create.phpは、keyで指定した情報をファイル化する。
del.phpは、リストおよび上記ファイルを削除する。
index.phpは、CSRFを実行する前の切り替え処理プログラムのメインプログラムである。
例えば、このブログの3月27日記事(「シロにする捜査」問題)の
http://fragt.freezoy.com/?key=y01を例にとって説明すると、サーバAは、fragt.freezoy.comであり、keyはy01である。このkeyに対して、転送先のurlがリスト管理されている。
クライアントからの要求に対し、このkeyがあるかないか? keyに対応するurlの先頭にxがあるかないか?で、切り替え処理が行われる。おおまかなフローチャートは以下の通り。
URL指定時のkeyパラメータを取得。
(1) keyがない場合、http://www.google.comに転送する文を作成→生成された文をJavaScriptとして実行するHTMLコンテンツを生成→http://www.google.comへ転送。
(2) keyがあり、かつkeyが指定するurlの先頭がxでない場合、この指定urlに転送する文を生成→生成された文をJavaScriptとして実行するHTMLコンテンツを生成→指定urlへ転送。(これは無害な転送)
(3) keyがあり、かつkeyが指定するurlの先頭がxである場合、xを除いた2文字目からのurlを取得、追加処理用の文と連結してURIエンコード処理をした文を生成→生成された文をJavaScriptとして実行するHTMLコンテンツを生成→クライアント(利用者)のブラウザがIEまたはSafariであれば、データの末尾に&flc=1を付加、それ以外のブラウザ(Firefox、Opera、Chrome)では、urlを読み込み、CSRF処理を実行(有害なサーバBに転送)
ブラウザの判定のソースコードの記述では、UserAgentを取得してブラウザが所定のものであるか(TrueかFalseか?)を判定の後、&flc=1を付加している。
(3)の場合は、JavaScriptがURI関数でエンコード処理されている文を含むため、中身が一見ではわからない。これは、解析しにくくする。誤動作防止などの理由が考えられる。
クライアントのブラウザ側では、このURI関数でエンコードされた文がデコードされ、通常の文字列に変換されて処理される。
生成されたHTMLとJavaScriptのソースコード内には、コールバック関数(Function Callback)があり、ラストメッセージとの対比からサーバBに有害な実行プログラムがあると予想される。
2回目の以降アクセスでCSRFが発生しないようにするには、リスト内に記載されたurlからxを外すことや、フラグにより制御することが考えられる。
11:20一旦休廷。
<被告人質問> 11:30再開
佐藤氏:証人の鑑定に間違っているところはあるか?
被告:大体あっている。ただ、証人は、リスト内に記載されたurlからxを外すことで2回目のCSRFの無害化が可能と述べたが、実際にはサーバBにロック機構をつけて、実行ないようロックフラグを立てる。すなわち、1回目の読み込みではCSRFが実行され、その時点でロックがかかるため、2回目からはCSRFが発生しない。
佐藤氏:GさんのPCからは、CSRFの痕跡が発見されなかったがどうしてか?
被告:2度読み込みをさせているのでキャッシュが上書きされるため痕跡が残らない。
佐藤氏:このプログラムはどのくらいの期間で作成したか?
被告:2−3日位
佐藤氏:どのPCで作成したか?
被告:主に自宅、送信は(アップロードのことか?)乙社からした。
以上 |
「日記」書庫の記事一覧
-
2014/6/1(日) 午後 8:51
-
2014/6/1(日) 午後 6:26
-
2014/6/1(日) 午後 1:30
-
2014/6/1(日) 午前 10:09
-
2014/5/31(土) 午後 5:24
-
2014/5/31(土) 午前 11:56
-
2014/5/30(金) 午前 0:16
-
2014/5/29(木) 午後 8:29
-
2014/5/29(木) 午前 7:31
-
2014/5/28(水) 午前 8:13
ブログ主さん。お手数をおかけいたしました。有難うございます。
一点修正をお願いします。公判日は30日ですね。
皆さま。分かりにく点があると思います。コメント頂けたら補足します。
2014/5/31(土) 午前 11:22 [ rec*lde**des* ]
失礼しました。日付修正しました。
2014/5/31(土) 午前 11:49 [ kensyou_jikenbo ]
rec*lde**des*さん
当方にとってはまず「2〜3日で作った」ということが語られたのはやはり大きいです。
ただ、この期間がプログラム作成だけなのか? 作成前の着想や構想、そして作成後のテストはどうしたか?などが今後更に語られることを期待したいと思っています。
ご報告いただいた仕掛けの詳細と合わせて、片山氏のソフト作成能力を推測する手がかりになると思います。
そして、とりあえず片山氏が語った「2〜3日」を基本に考えてみると、少なくとも一ヶ月弱程度は掛かったと考えられるトロイの開発とは大きなギャップがあると思われ、それでもやろうと考えた動機と実際の開発経過も今後早期に明らかになることを期待。
2014/5/31(土) 午後 0:10 [ kensyou_jikenbo ]
rec*lde**des*さん
片山氏は<ぼーっとして元気がない。>とのことでしたが、
被告人質問でCSRFの説明をしていた時の様子はどうだったでしょうか?
(佐藤氏に事件のことを語る時は喜々としていたという話もあるので)
2014/5/31(土) 午後 5:57 [ kensyou_jikenbo ]
ブログ主さん。
証人の説明の間、被告はモニターの方を頭をあげてずっと見ていました。ただ、真剣に見ているという感じではなく、動きは余りなく元気はなかったですね。
被告人質問では、声のトーンは小さかったですが、普通に答えていました。いかにも理系の人間らしく証人の説明と異なる所を説明しました。
2014/5/31(土) 午後 8:32 [ rec*lde**des* ]