megamouthの葬列

長い旅路の終わり

パラノイアのプログラマと第6感

今だから白状すると、昔、運営していたサービスの一般ユーザーのパスワードをハッシュ化(暗号化)せずに平文でDBに保存していたことがある。

言いわけは、幾つかある。
一つは、今では当たり前のようについているパスワードリマインダーの仕組みが当時は一般的ではなかったこと。
ユーザーがパスワードを忘れた、と問い合わせしてきた時に、最も自然な方法はまさに当人が設定した「パスワード」を一言一句違わず登録メールアドレスに送信することだった。あなたのパスワードは○○○です。ああそうそう、そうだったね。こういう感じだ。
当時のユーザーはそれを不審がらなかった。
またサポートコストの問題があった、パスワードの再発行を、そのためのトークンを含んだ長いURLを、大半のユーザーが嫌がっていた。
サポート部門はOutlookExpressに表示された長すぎるURLのリンクが途中で切れててクリックできない、という苦情にいつもうんざりしていた。だから僕たちは、"taro1234"とか”ilovepoosan"とかそういった間抜けな平文のパスワードを、いつでもメールで送信できるように、そのまま格納していた。
三番目は、僕が入った頃には、もうそのようにシステムが実装されていたことだ。それよりも重要なことは僕たちが、リスクを声高に主張して是正することまではしなかったことだが、それは単に面倒くさかったからである。せいぜい次のバージョンアップでやればいいと思っていたのだ。
とはいえ、そのサービスにバージョンアップの機会はなく、無数の思いが詰まった平文パスワードとともにサービスは終了した。


それから10年ほど時間がたって、宅ファイル便の情報流出があった。
「なんと」パスワードが暗号化されていないことがわかって、コテンパンに叩かれた。
無数のプログラマが呆れてオージス総研のエンジニアたちをTwitterで血祭りに上げている最中、前述の過去がある僕は何も言えなかった。宅ファイル便もけっこう年季の入ったサービスだったから、きっとハッシュ化したかったんだろうけど、できなかったんだろうな、とだけ思った。

品質は死活問題だ。特にセキュリティ品質はサービスの命運を左右することさえある。クソどうでもいいポエム投稿サービスでさえ、セキュリティ品質を疎かにすることはできない。僕たちはそういう教育を受けてきた。

だから、後に大手SIerの孫請けで某政府機関に関わるシステムに関わっていた時も、あらゆるリスクを考慮してプログラミングした。扱うのはポエムではなかった。国や自治体の重要な情報だ。僕たちはパラノイアのようにプログラミングした。


リリース直前、元請けから不思議なExcelファイルがやってきた。セキュリティチェック項目表というシートがあって、簡単に言うと、あなたの作ったシステムで以下のセキュリティホールへの対策をしているか、「はい」か「いいえ」で答えなさい。というものだった。

SQLインジェクションはできないようになっていますか?→はい
XSS脆弱性の対策はしていますか?→はい
CSRF脆弱性の対策はしていますか?→はい

はい、以外に答えようがあるのだろうか、と思った。「CSRFですかーあるかもしんないですねー」と軽い調子で答えてみたらどうなるだろう?と思ったけど、多分一悶着があった後で、「修正してください」と言われるだけだろう、ということは容易に想像できたから、僕は正直に、全ての対策が万全であることをExcelファイルに記入した。そして、本人が見逃した脆弱性の責任は誰が取るのだろうと考えた。

あるいは、このように言質をとっておいて、大手SIerの特別セキュリティ査察チームがペネトレーションテストを行って、僕たちの見込みの甘さを暴く、という演出なのかもしれない。と思った。「意図しない文字コードを混入した場合、SQLインジェクションが成立しますね」と黒いスーツに身を包んだ、いかにもなエリートの外見の美女に個室で説教されるのかもしれないとも思った。

だけど、その可能性は皆無だった。納期は2週間後だし、元請けがコストをかけて自分から納期に間に合わないことをするのもいかにも不合理だったからだ。
だから、言いたくはないが、儀式のようなものなんだろうと思った。何かあった時に、ベンダーが大丈夫だと言ったんです!私たちも騙されたんです!と言いたいための。

ある時などは、明らかに対応していない設備(IDSとかだったと思う)を導入しているかのチェックがあった。
僕は当然言った。
「そんなの見積もりにも入れてないし、もちろん設置されてもないから『いいえ』にしますね」
Excelシートを手渡した。営業が頭を抱えて言った。
「ここ・・・・・・何とか『はい』になりませんか?追加予算はないんですが」
なりませんよ。と僕は冷たく返した。

その後色々あって、チェックは合格して、システムは完成した。IDSは最後まで姿形もなかった。何があったかは察してほしい。

たまに、コンサルを雇えるぐらいの金持ちクライアントがやってきて、外部機関によるセキュリティ診断が実施されることもあった。いよいよ僕たちも年貢の納め時かな?と様々なマニアックなハックに対する準備を進めていると、60ページぐらいのPDFが送られてくる。
立派な装丁の「セキュリティチェック診断結果(社外秘)」に目を通すと、URLごとに自動生成されたレポートページが飽きる事も無く続いていて、主な問題は、Webサーバーが脆弱なDESを含む暗号化スイートをサポートしていることを教えてくれる。なにしろ全ページにわたって同じ指摘があるのだ。
もちろん大事なことなのだが、僕たちにではなく、IE8サポートしろっていったクライアントに言ってくれるのが一番なのは間違いなかった。

大手のシステムになればなるほど、こういった儀礼的なことが増えていった。多くの場合、システムのセキュリティを担保しているのは現場のエンジニアの経験と勘のように思えた。彼らがボトムアップしなければ、致命的な問題が最後まで残っただろう、ということを幾つか見聞きした。
だけど、そういったセキュリティに強いエンジニアが長持ちすることはなかった。彼らもまた十把一絡げのエンジニアとともに契約を終了され、現場を渡り歩いて、そのうちどこかにいなくなった。代わりに入ってくるのは新米で、僕たちは彼らをパラノイアに育てあげようとするのだが、彼らの大半はパラノイアになる前に、もっと割のいい仕事を求めて辞めてしまう。

僕はこの調子でまともなエンジニアがいなくなったら、今に「大変なこと」になると思った。実際、ここ数年の話だけでも、あらゆる仮想通貨取引システムがハックされたし、大量の個人情報が漏洩してしまった。絶対に安全だった銀行の口座から他人に金を引き出されるようなことまで起こっている。マジに「大変なこと」だ。

だが同時に気づいてしまってもいた。「大変なこと」はしょっちゅう起こっている。でも、それで世界が終わってしまったかというと、全くそんなことはなかった。やらかした企業の屋台骨すら、揺らいでいない。実際に起こったことは役員が記者会見で頭を下げ、被害者に500円のクオカードを配って、それで全部だった。そう、それで、終わりなのだ。

僕としては「大変なこと」が起こったら、サービスは終了、経営者は引退に追い込まれ、PMはじめエンジニアたちもまた相応の責任をとらされる、そういうイメージを持っている。そういう気持ちでプログラムを書いている。
でも実際にそれが起こったら、決してそうはならない。最近は特にそうだ。宅ファイル便が終わったのだって、責任を取った結果ではなくてリプレースできないレガシーシステムを切り捨てる口実にされたように見える。

なぜこれほどまでに致命的なことが許されてしまうのだろうか、と思う。やらかした会社はみんな、精一杯がんばったけど、悪い奴に裏をかかれた、どうしようもなかったみたいな顔をする。でも内情を知っている僕が推測するに、普通のITエンジニアの考えるギリギリ及第点のセキュリティ基準すら、満たしている会社はわずかだろう。彼らは往々にしてシステムを1行書き換えるのに3つの判子が必要な体制を誇るが、もちろんそんなものには欠片も意味がない。

一つ推論をたてることはできる。資本主義と競争の観点でセキュリティリスクを評価すればまずまず説明ができるのだ。

ある会社のセキュリティ品質がめちゃくちゃだとしよう。事故も起こったとしよう、しかし、その会社は潰れない。経営者が1ヶ月ほど頭を下げて回って、切腹最中を取引先に配った以外、特に何もしなかったが、すぐに日常が戻ってくる。
それは大なり小なり、全ての会社で似たようなことが起こっているからだ。競争相手の内情も似たり寄ったりだからだ。
コ○ンチェックがヤバいからって他の業者が安全な保証はまるでないし、Adobeが気が遠くなるほどの数のパスワードを漏洩しても、僕たちがみんなCreative Cloudを解約して、コーレルのPaintShopProを買うわけじゃない。
会社として、経営として本当に「大変なこと」というのは、ドメスティックな競争に敗れて市場から退場させられることであって、実社会に取り返しのつかないダメージを与えようが、何十億もの金が闇に消えようが、それ自体は経営的には「大変なこと」でも何でも無いのだ。

僕の見当違いはここにあった。僕が見逃したシンプルな事柄は、ある品質の宇宙が縮小しつづけたところで、その収縮が著しく偏在しない限りにおいては、特に何の問題もない、という事実だ。デフレ世代の僕でも、そんなシュールな原則は認めたくないが、それが真実なのだ。


一介のプログラマがセキュリティに関してパラノイアになる意味あいはあるのだろうか?もちろん、セキュリティコンサルタントや、その手の職業につくなら意味のあることだと思う。しかし、そうでない場合、あまりにも心的負担と労力が釣り合ってないのではないだろうか?

世界が、母なる海に向かって流れる水死体のように、まどろみながら、どんどん下流に落ちていく。
僕たちは安いサラリーで、自尊心を守って、命を削っている。それはまるで夢の中で徒手空拳を繰り出すみたいで手応えがない。
それでもやるべきなんだろうか?それは報われる仕事なんだろうか?

そんな時、徳丸先生ならどうしますか?