[和訳] Dropboxアカウントのせいで胃潰瘍になった

こちらのReddit投稿 (https://www.reddit.com/r/sysadmin/comments/eaphr8/a_dropbox_account_gave_me_stomach_ulcers/) の和訳記事です。[**本番環境でやらかしかった人シリーズ**](https://qiita.com/advent-calendar/2019/yarakashi-production)が盛り上がっていたので波に乗って（？）Twitterにヤバすぎる恐ろしい話が流れてきたのをすかさず和訳してみました。やらかしちゃった人というよりは**やらかされちゃった人**目線ですがいずれにせよそこら辺の怪談話より**よっぽど怖い**です。

## Dropboxのアカウントのせいで胃潰瘍になった。

皆は誰もが触れたがらない、会社を靴紐やガムやクリップでつなぎとめている「例のアレ」を見つけたことってある？そういうのって往々にして大型連休前の金曜午後4:45に落ちるし、般若のような様相を呈した上司が「このままだと第二のスターリングラード攻防戦が勃発するぞ」と言って存在を知りもしなかったドキュメントも存在しない「例のアレ」を復旧させるように迫ってくる。それについてのエキスパートにメールをしても2099年まで不在だって返事が来るし、そいつの責任者に連絡をしてみるとオバマの一期目の頃にはもうその会社とは関わってないという自動返信メールが帰ってくるんだ。最近「そういうの」を一つ見つけた。

ここでは「狂った保護施設」と呼ぶけど、我々の業界で使っているソフトウェアを開発しているある会社を買収したことがすべての始まりだった。うちはあえてぼかすけど製造業に関係していてそのソフトウェアを買収することは競争的な利益があったんだ。当然のように上層部は開発チームがどういう問題を抱えているかなんていうことについては１ミリも興味がない。最初に何かがおかしいと感じたのは「狂った保護施設」の職員にパソコンを支給している時だった。淡々と処理が進む中で開発チームが要求してきたスペックだけが明らかにおかしかった。ストレージを**4TB積んだノートパソコンを40台よこせ**という要求で、それはどう考えてもオーバースペックだし確実に予算を大幅に超えてしまう。なぜそんなにたくさんのローカルストレージが必要なのかがどうしてもわからなかったので開発チームのリーダーに連絡して説明を求めたけど、どうもうまくはぐらかそうとしてくる。そんな大規模リソースが必要ならクラウドサービスを使えばいいじゃないかと思いつつも最終的には「必要なストレージを削減するよう尽力する」ということで決着したので「なぜこんな要求を出してきたのか」についてはわからずじまいだった。よくわからないまま電話を切ってジャマイカ人（この後で出てくるジャマイカ特有の表現が面白い以外に他意はない）の同僚に「質問したのに黙秘権を要求しているみたいだね」と言われた。本当にただ助けになろうとしているだけなのに。買収プロセスには関わってなかったけど資源の購入前に監査は通っていたので、仕事がこれ以上積まれるのも面倒なので忘れることにした。

時は進み三ヶ月後。金曜日の午後4時、日々のセキュリティ関連の業務をまとめてアマゾンのセールスミーティングの準備を進めてた時だった。12月中は変更やプロジェクトを一旦凍結するように指示を出していた。みんなが休暇でいない最中にシステム障害が発生するという状況は避けたかった。そんなわけで1月3日までの連休に向けて準備は万端だったのに、「狂った保護施設」の連中のせいで気が休まらなかった。というのも基本的なメンテナンスのようなことでも「あと数日......」という具合にスケジュールを伸ばし続けていて、それに関する説明が一切されずにいた。このあたりで**キーボードを叩いてるのがカタツムリか何かなんじゃないか**という気になってきた。ところが**惨状は想像を遥かに超えていた**。例のジャマイカ人の同僚がセールスミーティング中に届いたチケットを発見した。ヘルプデスクからエスカレーションの要求で内容は以下の通り。

> 新しい開発チームが変なことをやっている。アプリケーションが定期的に落ちるし、レスポンスは遅いし、ネットワークのログによると何GBものデータを転送しようとしてる。ASAPで連絡してくれ。

かわいそうな同僚が開発チームを問いただすとようやく全容が見え始めた。開発チームによると「狂った保護施設」の古株のIT人材は多くが買収された時に辞めていて、その中にはアプリケーションのストレージ担当も含まれていた。どうやらこの仕事は我々が替わりにやっているものだと思いこんでいたらしい。それなら単純に新しいVPSなりアマゾンの追加ストレージを要求するなりしてひとまずやり過ごして、ミーティング後に改めて長期プランを立てればいいだろうと提案した。ところが突然相手方が「それは必要ない、**Dropboxのサポートに電話してもらえばいい**」と言い出した。同僚はひどく混乱して一体全体どうしてDropboxに情報を送ったり情報を保存したりしているんだ、大規模の情報漏えいだぞと追求した。続けてアプリやWebサイトのどの情報をDropboxに載せているんだと訪ねたところ最大級の爆弾が投下された。**「データーベース全体がDropboxに保存されている」と言うのだ**。この時点で同僚は1917年に**塹壕から転げだした兵士ような顔をしていた**らしい。意味がわからなかったので詳しく説明するように要求したところ、データベースだけでなく**アプリケーションやWebサイトのすべてがDropbox上にあるらしい**。アプリケーションは実際にはHerokuのサーバインスタンスで、アップデートのたびに起動してはハードコードされたデータベースファイル群に対して**Dropboxアカウントに鬼のようなAPIコールを出していたのだ**。同僚はすぐさまDropboxのサポートに電話して状況を確認したところ、いくつかのエスカレーションの末にアクセス権を入手し、**500 TBのうち497 TBが使用済みという衝撃の事実**を発見してしまった。これでなぜ、最初にあんなに大量のストレージを要求されたのか、更新のたびに時間がかかっていたのかがわかった。変更を加えるたびにDropboxと大量のデータをやりとりするのに数日かかる上に開発チームがローカルのDropboxインスタンスを同期しないといけなかったのだ。この唯一のDropboxアカウントは同時にVCSでもあった。

クソ津波が来ることを予知した同僚は突然「blood of Jesus, the blood of Jesus, lord no the blood of Jesus」と叫び始めた。これはたぶんカリブで言うところの「holy f\*cking sh\*t」という意味だったんだろうと思う。不幸なことにその場にいたCISOが同僚の**メンタルブレイクダウン**を見ておりキリスト再臨の準備でもしたほうがいいのかと聞いてきた。このCISOは日々の仕事のニュアンスをよく理解していないのでいつもであれば緊急時は要点やアクションアイテムをまとめてから連絡するようにしていた。現場目線で説明されたCISOは頭が爆発してしまった。そんな中、未曾有の大災害に向かって突き進んでるなどとは夢にも思わずミーティングで寝そうになっていたところにマラトンの戦いで崩れ落ちる直前のピリッピデスの如く突入してきたアナリストに叩き起こされた。そして「機密漏えいの可能性があり、それが事前通達なしにCISOの耳に入り、更に技術リーダーたちがこの無意味なセールスミーティングに参加していたせいで動物園の動物たちが一斉にオフィスに放たれている」と告げられた。全身の血の気が引いてあわてて階下に降りると三つ巴の政治サーカスが繰り広げられていた。CISOがCFOや「狂った保護施設」の職員に「たとえDropboxのストレージを増やして復旧できたとしても、これは起動された時限爆弾であり、以前の職員や第三者がこのDropboxのアカウントにアクセスした形跡があるかどうかただちに調べる必要がある」と説いていた。監視は一切されておらず、**アクセスはチーム全体で共有されていた、全員が読み書きの権限を持って**。この政争に負けてチーム全体がこの怪物の尻拭いをするはめになるという事態を回避すべくCISOは法務部にこの件のリスクについてまとめたメールを送るという核弾頭を発射した。このコズミック・ホラー、あるいはこのクソ爆弾を法務部の休暇中に投げ込むという行為によって真の地獄が始まった。今までに出てきた情報をまとめて「まだ情報漏えいは起きていない」と説得するための策を一晩中練っていた。本来であれば翌日も仕事をしているはずだったが、不安による悪夢に苛まれながら迎えた朝、あまりの激痛に襲われたため病院に行ったところ胃潰瘍を起こしていた。確実とは言えないまでも、この事件とIT悪魔の介入によって体が限界を超えてしまったんだと思う。解決策は未だ見えていないし、まだデベロッパを射殺してないのが奇跡だと思う。

この一件から学べることは色々あるけれど、本番環境にこんな恐ろしいスティックのりや画鋲を使ったようなその場しのぎがあるのかと思い知らされた。世の中には標準化された手続きを、誰も、何も知らずに進めている企業がたくさんあるんじゃないかと不安になる。

P.S. 息子にITベテラン仲間が一杯おごってくれることを期待していると書いたほうがいいって言われた。



## 追記1

1. Dropboxにお金を払ってストレージをアップグレードすることになった。納得はしてないけど反対だけして解決策を出さないと敵を作ることになるので仕方がないと割り切ることにした。
2. このDropboxストレージの運用コストに数万ドル（数百万円）かかってる。このことをメールを見て初めて知ったんだけど、CFOはこれが年単位なのか月単位（可能性は低い）なのかは明らかにしなかった。
3. データを掘って何が起きているのかを確認するために四人が休日出勤してる。（少なくとも賃金5割り増しにはしてやってほしい）
4. 情報漏えいがあった場合これが法的な事案なのかどうかが気がかり。現在進行系で誰がアクセスしたかを調べてる。悪意のある履歴がないことを祈ってる。
5. もし履歴やログが確認できなかった場合、法務部は情報の機密性が確認できないとみなして顧客に通達を送るほかないだろうと言っている。
6. 監査には説明責任があるだろう。
7. 胃潰瘍の治療と口内炎が引くのに数日かかってる。この問題は明日起きたら消えてるなんてことはないので復帰したら地獄が待ってることは覚悟してる。
8. メールと電話の通知が止まない。


## 追記2

1. 人の休暇が中断されてるのは気の毒だけど仕方がない。
2. ストレージの追加ではすべての問題は解決してないので常に警戒してる。
3. シニアエンジニアのうち「狂った保護施設」の職員じゃない二人（もちろん賃金5割増、一人は休暇を一日返上した）が介入してドキュメントを作成しはじめた。Webアプリは専門外なのでこの案件は自分含む何人かのセキュリティ担当の頭上を飛び越えていった。
4. 関わった開発者二人はこんなことが行われていたことを信じられないようだった。片方は26か27歳だけどこのご時世にこんなやり方がまともなバージョン管理だと思われていることがおかしいと言っていた。年配の同僚はソビエトの出身でこれほどの地獄は共産主義が崩壊するさなかに大学・軍隊に従事していてロシア語のコンピュータでローカルな言語で書かれた英語のソフトウェア・ガイドしかないプログラムを扱っていた時以来だと語ってくれた。彼（以後ソビエト）の人生で一番長い一年半だったそうだ。



## 追記3

1. 数時間前に電話で話したところソビエトが解決策を提案したらしい。ストレージを増やしても全部の問題は解決しなかった。すべての更新を凍結して個別に手動でファイルをVPSにダウンロードしてプライベートなgitレポジトリにコミットさせるらしい。恐ろしく時間も手間もかかるけど確実な手段だとも言える。この貧乏くじをひかされる哀れなエンジニアに神のご加護があらんことを。
2. 開発チームによるポストモーテム[^1]兼ジーザスミーティング[^2]が月曜に行われることになった。まだ快復してないので出席できないけどソビエト、CISO、IT関連の責任者、それから専門家が集まって情勢を把握するのが目的らしい。もしDropboxインスタンスにアクセスすることを拒んだりしたら誰かを撃ち殺す（たぶん冗談じゃない）とソビエトが言ってた。そのせいで土曜に作業をすることになったらしい。
3. ジャマイカ人の同僚はたぶん大丈夫だと思う、しばらくいじられるとは思うけど。セキュリティが関わると人は冷静さを失うからね。
4. 捜査は続いてるけどいくつか深刻な懸念事項がある。旧チケットシステムが停止していたので埋立地を掘り返してアーカイブを入手した。一年半前に発行されたチケットによるとどうやら元職員の一人がファイルを削除しようとしていたらしい。それほど大事ではないにしろ職員がDropboxのファイルを自宅のコンピュータにダウンロードしてから去った可能性も否定できない。潜在的なセキュリティリスクが多い。
5. 未確認だけどどうやらエンタープライズ向けアカウントらしい、個人向けアカウントでこんなことができるわけがない。恐ろしいのが、ある人は同じアカウントを使いまわしていて、またある人は個別にアカウントを作ってアクセス権を共有していたらしい。人間って面白い。
6. 開発陣によるとWebアプリはすごいハックが満載らしい。恐らく大量の脆弱性がある上に、フラットなCSVファイルを参照していたりSQLiteデータベースにもクエリを投げていて、これがパフォーマンスを下げている上にSQLiteの実装が間違っているっぽい。

[^1]: プロジェクトの最後に行う振り返り手法の一つ。参考: https://kyabatalian.hatenablog.com/entry/2018/12/03/202551
[^2]: 大きな失敗や遅延が発生した際に実行されるミーティング。参考: http://getreadyforpmp.blogspot.com/2013/03/come-to-jesus-meeting.html


## 追記4

1. そのうちIT昔話・怪談集でも書こうかな。誰も読まないと思うけど。
2. 怪談自体はまだあるし面白おかしく書くのは楽しいけど、ちゃんと議論する場所にしたいし投稿は真面目な内容にしたい。笑える怪談話だとしても裏にある真意や学びがあったことをきちんと伝えたい。こういう法話を垂れ流すsubredditってあるのかな。
3. 胃潰瘍の時に抗生物質を飲むと世界が変わる。

## 最後の追記

1. ソビエトは誰も撃たずに済んだ。
2. 念の為、怒りは人に見せず文章としてぶちまけてるよ。事が進んでいる間は平静を装いつつ解決策を探し続けてた。論理的に人を説得するためには冷静でないといけないからね。でもフラストレーションを溜めた結果として健康を害してしまったのであんまり真面目に対応しすぎるのも考えものだね。
3. ちゃんとした解決のためには休暇が明けからも1,2ヶ月くらい必要になりそう。今は全部Gitレポジトリに入っていてまともな解決に向けて作業してる。ソビエトじゃない方のシニアエンジニアはどうしてDropboxで500 TB使うことがよしとされたのかカウンセリングをすることになった。
4. アカウント内のセンシティブな部分がDropboxを通してまだ動作していることは確認できた。
5. もう一つ現在進行系で火消し作業中の炎上案件に関してものちのち投稿しようと思ってる。今年は弊社のITスタッフにとって大変な一年だったからもうすぐ終わりそうでほっとしてる。
6. ITホラー小噺集をまとめることも検討してるけどちょっと考える時間がほしい。