Save 37% off PRO during our Black Friday Sale! »

20200824-it-kaidan-3

 20200824-it-kaidan-3

真相・本当にあったITエンジニアの恐怖の現場 #3

【オンライン】ITエンジニア怪談 ~背筋も凍る、ゾッとする話Night~ #3
https://gaiax.connpass.com/event/185144/
の発表資料です。

スライドの中で使わせていただいたフォントは、
g_コミックホラー恐怖(R)-有料版
https://material.animehack.jp/font_gcomichorrorall.html
になります。

58758490105b10d8cee797179bc0d1cc?s=128

Shigeki SUGAI

August 24, 2020
Tweet

Transcript

  1. 真 相 ・ 本 当 に あ っ た I

    T エ ン ジ ニ ア の 恐 怖 の 現 場 # 3 2 0 2 0 - 0 8 - 2 4 I T エ ン ジ ニ ア 怪 談 ~ 背 筋 も 凍 る 、 ゾ ッ と す る 話 N I G H T ~ # 3 # I T エ ン ジ ニ ア 怪 談 @ t e c k l
  2. 自 己 紹 介 @teckl(てっくる) - 某ブログ系サービスを中心に10数年やってます - サーバサイドエンジニア -

    Perl、DevOps - ログのtail -F, ワンライナー - インターネット考古学などが好物
  3. 自 己 紹 介 @teckl(てっくる) - 稲川淳二ファンクラブ会員 - 怪談ナイト、ツアー真っ最中です! -

    今年で28周年目! - 楽しいのでぜひ一度ご参加を! - YouTube公式チャンネルも開設されました!
  4. 自 己 紹 介 昨年に引き続き、今年も第3回がある とのお話をいただきましたので、これ まで紹介出来なかった他の怪談を紹介 させていただきます。 
 今回はオンライン開催ということでか

    なりビビっておりますが、 軽い気持ちで聴いていただければと考 えております。
  5. 本 日 の お 話 一、HTMLパーサーの怨念 二、禁じられたコメント 三、ラックサーバの呪い

  6. None
  7. 一 、 H T M L パ ー サ ー

    の 怨 念
  8. H T M L パ ー サ ー の 怨

    念 これは、私の友人でもって、仮にS君としましょう かね、 その彼から聴かせてもらったお話なんですが…
  9. H T M L パ ー サ ー の 怨

    念 かつてあるブログサービスがあったんですが、 あるデータを、新システムに合わせてデータ移行 するというものでした。 旧 シ ス テ ム D B 新 シ ス テ ム D B データコンバート
  10. H T M L パ ー サ ー の 怨

    念 別システムのため、独自記法と言いますか、 結構独特な記法になっていたそうです。 ブログ記事やコメントなどは以下のような感じで した。
  11. H T M L パ ー サ ー の 怨

    念 ઌिɺຊ੘ބͷϦϯΫIUUQTLPVBONPUPTVLPDPNߒ҇Ωϟϯϓ৔ϦϯΫʹ େιϩΩϟϯϓେʹߦͬͯདྷ·ͨ͠ʂ ࠷ॳͣͬͱಶ͍ͬͯ·͕ͨ͠ɺ໷ʹ͸Ӣ΋্͕ͬͯ͘Εͯɺ ݟࣄͳ\෋࢜ࢁ^΋ݟ͑·ͨ͠\ΩϥΩϥ^ ބ൞Ωϟϯϓ৔͸ຊ౰ʹ࠷ߴͰ͢Ͷʂ 旧システムのコメント本文(独自記法) こんなコメント内容のDBレコードが合った場合、 移行タイミングに合わせて、 以下のようにHTMLでの表現に置換する事を考えま した。
  12. H T M L パ ー サ ー の 怨

    念 ઌिɺຊ੘ބͷϦϯΫIUUQTLPVBONPUPTVLPDPNߒ҇Ωϟϯϓ৔ϦϯΫʹ େιϩΩϟϯϓେʹߦͬͯདྷ·ͨ͠ʂ ࠷ॳͣͬͱಶ͍ͬͯ·͕ͨ͠ɺ໷ʹ͸Ӣ΋্͕ͬͯ͘Εͯɺ ݟࣄͳ\෋࢜ࢁ^΋ݟ͑·ͨ͠\ΩϥΩϥ^ ބ൞Ωϟϯϓ৔͸ຊ౰ʹ࠷ߴͰ͢Ͷʂ ઌिɺຊ੘ބͷBISFGIUUQTLPVBONPUPTVLPDPNߒ҇Ωϟϯϓ৔Bʹ TQBOTUZMFGPOUTJ[FιϩΩϟϯϓTQBOʹߦͬͯདྷ·ͨ͠ʂCS CS ࠷ॳͣͬͱಶ͍ͬͯ·͕ͨ͠ɺ໷ʹ͸Ӣ΋্͕ͬͯ͘ΕͯɺCS ݟࣄͳJNHTSDJNHFNPKJGVKJTBOHJG΋ݟ͑·ͨ͠JNHTSDJNHFNPKJ TQBSLMFTHJGCS ބ൞Ωϟϯϓ৔͸ຊ౰ʹ࠷ߴͰ͢Ͷʂ 旧システムのコメント本文(独自記法) 新システムのコメント本文(HTML)
  13. H T M L パ ー サ ー の 怨

    念 こんな時にはHTMLパーサーに任せるのが一番だろ うということで、PerlのHTML::Parser のモジュー ルを継承したクラスを用意して、置換するスクリ プトの実装を行ったそうです。
  14. H T M L パ ー サ ー の 怨

    念 で、そういったあれこれがありましたが、 移行当日も問題なく行きまして、 S君、安心して別の作業をしていたそうです。
  15. H T M L パ ー サ ー の 怨

    念 数日後… こんな問い合わせがあったそうです。
  16. H T M L パ ー サ ー の 怨

    念 「なんか以前のコメントがちょっと内容が違う気 がするんですが…」
  17. H T M L パ ー サ ー の 怨

    念 あれ? そんな筈はない、独自のタグもちゃんとhtmlに なって表示されてるし、 ユーザさんのコメントを見てみても、きちんと表 示されている・・・。
  18. H T M L パ ー サ ー の 怨

    念 「うーん、気のせいかな・・・ システムが変わって、CSSとか見た目も変わってる ので、きっとユーザさんも勘違いしてるんだろう なぁ」 S君、そう思っていたんですね。
  19. H T M L パ ー サ ー の 怨

    念 リンクも絵文字も含めてHTMLに変わっているし、 見た目もおかしくないので、そんなはずはないと 思いながらも、もう少し見ていきました… ・・・すると、S君ある事に気づいたんですねぇ
  20. H T M L パ ー サ ー の 怨

  21. H T M L パ ー サ ー の 怨

    念 最後の行だけが無い… よく見ると、コメントの最後の1行が無くなってい るようでした…! 旧システムの表示 新システムの表示
  22. H T M L パ ー サ ー の 怨

    念 「うわあ、やだなぁ、なんだこれ、こんな事やっ たおぼえが無いぞ・・」 …と思いつつも、気を取り直して調査を行ったと ころ、原因が分かったそうです。
  23. H T M L パ ー サ ー の 怨

    念 今回利用したHTML::Parserですが、元々はHTMLタ グを解析してパースするためのモジュールなの で、 ユーザさんが入れたコメントはHTMLとしての仕様 を満たしてないため、 最終行はテキストノードではなく、HTMLの終わり とみなされて、切り捨てられてしまっていたんで すねえ・・
  24. H T M L パ ー サ ー の 怨

    念 HTMLパーサーが悪いわけではなく、 コメントの最後に改行があるか、 AAAIUNM ބ൞Ωϟϯϓ৔͸ຊ౰ʹ࠷ߴͰ͢Ͷʂʻ͜͜ʹվߦίʔυʼ AAA もしくは、htmlのタグで囲まれていれば、 AAAIUNM IUNMઌिʢলུʣ ބ൞Ωϟϯϓ৔͸ຊ౰ʹ࠷ߴͰ͢ͶʂIUNM AAA 問題なく最終行を失わずに変換できていたという 事なんですねぇ・・・
  25. H T M L パ ー サ ー の 怨

    念 ブログ記事については一通り置換のテストしてい たのですが、 コメントの方は「ほげほげ」とか、 例の独自記法ばかりの機械的な文章しか仕込めて いなかったため、 パッと見では分からず、この現象が発覚するのが 遅れてしまったんですねぇ。。
  26. H T M L パ ー サ ー の 怨

    念 そんな事があって、S君、この件でだいぶ絞られた そうですねぇ・・ 「こんな事になるんなら、 まともな意味のあるコメントをテストで仕込んで おけば良かったよ、純ちゃん…」 ・・・彼、そう言ってましたねぇ…
  27. None
  28. 二 、 禁 じ ら れ た コ メ ン

  29. 禁 じ ら れ た コ メ ン ト このお話も、以前S君がある別のシステムを移行し

    た時に遭遇した、 やはりブログのコメントにまつわる霊体験になり ます。
  30. 禁 じ ら れ た コ メ ン ト この時の案件では、

    タイミング的なものもあって、 これまであまりやっていなかった技術にもいくつ かチャレンジしてみたそうです。
  31. 禁 じ ら れ た コ メ ン ト Varnish

    Cache その一つとして、Varnish Cacheの組み込みがあり ました。 SquidのようにリバースプロキシとしてHTTPのアク セスをキャッシュし、 ページ表示を高速にさせるといったものでした。
  32. 禁 じ ら れ た コ メ ン ト 組み込みにいろいろとハマったりもしつつも、

    なんとか移行リリースの日を迎えたそうです。
  33. 禁 じ ら れ た コ メ ン ト 移行も無事完了し、

    記事やコメントが正常に移っていること、 基本的な操作なども問題ないこと、 DB負荷も落ち着いてしばらくしたところで、 S君安心してその日は眠りについたそうです。
  34. 禁 じ ら れ た コ メ ン ト 翌日、出社してみると、

    ユーザさんから複数の小さなバグ報告の中に混 じって、 奇妙な問い合わせがありました。
  35. 禁 じ ら れ た コ メ ン ト 「コメント投稿で500エラーが頻発する」

    「一度コメントが500エラーになると何度リトライ しても同じように500エラーになる」 …かと思えば、 「しばらく間をおいたら全く問題なくコメントが 行えるようになった」 とのことでした。
  36. 禁 じ ら れ た コ メ ン ト おかしい、

    DBもアプリケーションサーバも空いているし、自 分の方でコメント投稿は何度も試してみました が、まったくそのような現象は再現しなかったん ですね。
  37. 禁 じ ら れ た コ メ ン ト 「やだなぁ、

    おかしいなぁ、 きっとユーザさんのブラウザや環境でもって、何 か悪さしてるとかじゃないかなあ…」 と思いつつも、 その時は 「再現させられたら教えてください」 ということで一旦は終わったのでした。 (他に優先すべき課題が多いというのもあり、ご く一部ユーザだけの報告のため、たまたまだろう と優先度を低くしていました)
  38. 禁 じ ら れ た コ メ ン ト その翌日、

    また 「コメント投稿で500エラーが頻発する」 かと思ったら、 「しばらく時間を置いたら直っていました」 という問い合わせがありました。
  39. 禁 じ ら れ た コ メ ン ト うーん、やっぱり手元では問題なくコメントでき

    てるし、 DBを見ても大半のブログでは正常にコメント出来 ているな… やっぱりごく一部のブログだけで問題が起きてい るようです。
  40. 禁 じ ら れ た コ メ ン ト 「いやだなぁ…、

    今日もまた同じ問い合わせかー、 なんかパーソナルファイアウォールやブラウザの アドオンソフトなんかが悪さしてるんじゃない か、ユーザさんも勝手に直ったって言ってるし なぁ…」 って最初は別のタスクをやっていたんですが、 S君、どうも嫌な予感がしたので、 今回はちゃんとアプリケーションログを全部漁っ て見てみたそうです。
  41. 禁 じ ら れ た コ メ ン ト すると・・・

    エラーログには、このようなログが出ていまし た。 "CSRF Error”
  42. 禁 じ ら れ た コ メ ン ト ユーザから申告のあった時間帯でも、やはりこの

    CSRFエラーが出ていました。 「あらー、本当に500エラーが出ているな、 でもまぁきっとユーザの環境か、いつもの海外IP のスパムコメントあたりだろうなぁ」 と、S君思ったそうです。
  43. 禁 じ ら れ た コ メ ン ト で、念の為自分でも500エラーが起きないかどう

    か、実際に申告のあったユーザさんの記事に対し てコメントのテストをしてみたそうです。 と、、
  44. 禁 じ ら れ た コ メ ン ト ・・・問題なくコメントが行えたそうです。

    あれ、問題ない、やっぱりユーザさんの環境のせ いかな… S君安心して別のタスクに戻ろうとしたそうです が、少し気になったのでその後もログを tail し ていると、
  45. 禁 じ ら れ た コ メ ン ト "CSRF

    Error" のログが同じブログで延々と出てきました。 「ああ、また例のユーザさんか、それともスパ マーが来ているのかな?」 と思って、もう一度念の為、、と先ほどと同じ記 事に対して自分のブラウザでコメントをしてみた そうです。 すると…
  46. 禁 じ ら れ た コ メ ン ト "CSRF

    Error"
  47. 禁 じ ら れ た コ メ ン ト 自分のブラウザでも、再現したんですねぇ…

    S君、びっくりしてちゃんとロジックを追ってみた そうです。
  48. 禁 じ ら れ た コ メ ン ト CSRF(クロスサイト・リクエストフォージェリ)

    というのは、 ユーザの意図しないタイミングで、更新系の操作 をされてしまうという脆弱性の一つなんですが、 古くは某SNSにおいて 「こんにちはこんにちは!!」 という意図しない投稿をされたりして、ニュース になって注目を浴びたりもしていました。
  49. 禁 じ ら れ た コ メ ン ト ブログのコメント投稿というのも、構成にもよる

    んですが、このCSRF対策をしていないと、 スパマーに利用されて大量のコメント投稿を投げ られてしまうんですね。 このS君のサービスでも、コメントフォームに対し てCSRF対策であるトークンの埋め込みを行ってい ました。
  50. 禁 じ ら れ た コ メ ン ト <form

    action="/comment" method="post"> <input type="hidden" name="csrf_token" value="DiTs5WJFU6yoXAKbOLzreKA"> 名前<input type="text" name="name"> コメント<textarea name="body"></textarea> </form> 閲覧したユーザ毎に、 ユーザのセッションを元にしたユニークなトーク ンを埋め込むようにしてるんですが、 それが自分のセッションのトークンと違う…! そんなことあるわけないんだ。
  51. 禁 じ ら れ た コ メ ン ト これまで何度となく実際にコメントをテストして

    いたし、 なんだろう、そんなはずない、 怖いな、怖いなぁ…、 ガタガタガタガタ・・・ S君、片隅で恐怖に震えながらもデバッグしてみた ところ、 ようやく原因がわかったそうです。
  52. 禁 じ ら れ た コ メ ン ト 高速化を行うために導入したリバースプロキシ

    Varnish Cacheによって、 他人のセッションのトークンも含めたhtmlコンテ ンツとして、 Varnishにキャッシュされてしまっていたんです ねぇ。。
  53. 禁 じ ら れ た コ メ ン ト その記事にコメント投稿が正常に行えていたの

    は、はじめにキャッシュを作ったリクエストを投 げたユーザだけだったんですねぇ・・ A君 B君 C君 コメント可能 CSRF Error CSRF Error
  54. 禁 じ ら れ た コ メ ン ト CDNの設定ミスによって個人情報が流出してしまっ

    た、 というニュースを時々見かけたりしますが、それ と同じ問題だったんですねぇ。。
  55. 禁 じ ら れ た コ メ ン ト S君急いで

    ``` cache-control: no-cache ``` のHTTPヘッダーを追加して、コメントページが キャッシュされないようにしたそうなんですが ね。。
  56. 禁 じ ら れ た コ メ ン ト それまでの複数人のテストでは、各自、自分のテ

    ストブログにしかテスト投稿を行っていなかった ので、常に自分のトークンしか入らず、どうやっ ても再現ができなかったんですねぇ。。 また、報告のあったユーザさんのブログへのテス トコメントでは、たまたまブログオーナさんが キャッシュクリアを行っていたので、 S君自身で作成したセッションで問題なくコメント が投稿できていたんですねぇ。
  57. 禁 じ ら れ た コ メ ン ト 「純ちゃん、俺なんでもかんでもキャッシュして

    早くすれば良いもんだと勘違いしてたよ…」 って、彼、寂しそうに言ってましたねぇ。。 ・・・そんな話を、聞かせてもらいました。
  58. None
  59. 三、ラックサーバの呪い

  60. ラ ッ ク サ ー バ の 呪 い 最後は、短いお話になりますので、軽く聞いてい

    ただければと思います・・。 これはその昔の、S君が入社して間もない頃の事で す。
  61. ラ ッ ク サ ー バ の 呪 い 当時は「クラウド」「Saas」といった単語すら無

    い、まだまだ牧歌的な時代だったので、 インターネットデータセンターに自前で購入した サーバをラックにマウントして、 OSのインストール、キッティング作業などはほと んど自前で行っておりました。 オートスケールなんて夢のまた夢の時代だったん ですねえ。
  62. ラ ッ ク サ ー バ の 呪 い サービスも順調に増え、サーバーの大幅増強が必

    要になってきたため、 社員総出でクルマにサーバを積んで、データセン ターに向かったそうです。
  63. ラ ッ ク サ ー バ の 呪 い S君、データセンターに入るのなんて人生で初めて

    だったので、 テンションが上ったのか、大はしゃぎしていまし た。 で、先輩に教わるまま、1Uのラックサーバを所定 の場所に運んで、 いよいよラックにマウントしていったそうです。
  64. ラ ッ ク サ ー バ の 呪 い で、この1Uサーバですが、結

    構重いんですねえ。 10キロは超えていると思いま すが、 そんなわけで見た目以上に重 いんで、 ラックのレールに沿って慎重 にサーバを差し込んでいった そうです。
  65. ラ ッ ク サ ー バ の 呪 い 普段あまり力を使うような作業をしないものなの

    で、結構な重さをなんとか支えて、サーバをラッ クの奥の方までツーッと押し込んでいきました。 ・・・と、向かい側で、同僚からの 「もう離していいよ」 、との声が聞こえたので、 あー、良かった、やっとこの重さから開放される んだなぁ、と思ってS君自然に手を離したそうで す。 すると、
  66. ラ ッ ク サ ー バ の 呪 い

  67. ラ ッ ク サ ー バ の 呪 い ラックサーバですが、気がつくと床下に落ちてい

    たんですねぇ… 下に落ちた衝撃で側面が見事にベコッとへこんで しまい、 S君そのショックでフロアの片隅で、背中を丸めて ガタガタガタガタ震えていたそうです。
  68. ラ ッ ク サ ー バ の 呪 い が、そうしてもいられないので、

    S君顔面蒼白で上司に 「このサーバ、いくらくらいするんでしょう か・・。」 と聞いたところ、
  69. ラ ッ ク サ ー バ の 呪 い 「あー、S君よくやってくれちゃったね、このサー

    バ、1000万はするよ…!」 …と言われたそうです。
  70. ラ ッ ク サ ー バ の 呪 い …その後はもう意識がスーッとなってほとんど記

    憶が無いようなんですが、 なんだかんだでサーバの増設作業も完了し、近所 のお店に打ち上げに行ったそうなんですが、 S君、もう血の気が引いちゃって、食事も喉を通ら なかったそうです。
  71. ラ ッ ク サ ー バ の 呪 い そうしてあまりにも凹んで、

    お店の片隅で 「もう辞表でも書いて辞めよう…」 と思いつめていたところ、 さきほどの上司から
  72. ラ ッ ク サ ー バ の 呪 い 「あのサーバ、量産型の安いモデルなんで1000万

    なんてするわけないじゃんw 大量購入したんで1台8万円だよww あまりにも凹んでたのでからかっただけだよw」 と、笑いながら言ったそうです・・・。
  73. ラ ッ ク サ ー バ の 呪 い それ以来、S君はデータセンターの物理作業からは

    外され、 リモートでメンテナンスのオペレーションをする 論理作業専門になったそうです。 ・・・そして、 それから10年以上経った今でも、 データセンターには出入り禁止にされている、と いうお話なんですねぇ・・・
  74. ラ ッ ク サ ー バ の 呪 い 「純ちゃんさあ、俺、あの時何故レールにサーバ

    がハマってる事を確かめないで手を離したのか、 自分でも本当に分からないんだよ…」 S君、そう言ってましたね…。 データセンターには、そういった霊的な何かが潜 んでいるのかも、しれませんねぇ…
  75. None
  76. 終 わ り に

  77. 終 わ り に 本日お話した霊障(インシデント)は、 いずれもちょっとした確認漏れや、相互チェック体制、テ ストコードの整備、適切なレビューなどによって、 未然に防ぐことが出来たことばかりです。 時代が進むにつれて、日々新しい技術が生まれ、 新しいものに入れ替わっていきます。

  78. 終 わ り に オンプレサーバはすっかりクラウドの時代になり、 みんな静的ファイル配信だったサービスは、動的配信の CDNで返すような時代になりました… しかし、霊障(インシデント)はいつの時代もちょっとし た油断によって、その牙を向いてきます。

  79. 終 わ り に 「怪談」は、ただ怖いだけじゃなく、過去の人からの現代 の人々への教訓や、当時の時代背景、戒めとなる話も多く ある、と言うことを稲川さんはいつも言われています。 何かの際にこういう話もあったんだなぁ、と笑っていただ ければ幸いです。 ※なお、文中の稲川淳二さんの画像につきましては、

    例によって稲川さんの事務局に使用させていただく旨、 予め連絡を行わせていただいております。
  80. ご清聴、ありがとうございました