Kurt がやられた

Fly.io の公式 Twitter アカウントが乗っ取られた。CEO の Kurt Mackey がフィッシング攻撃を受け、攻撃者がアカウントの制御を奪った。アカウント以外のシステムやデータに被害はないと説明している。

日本語
コピー
插画:一个钓鱼钩挂着一封信,旁边是被钓走的账号

画像 Annie Ruygt

$FLY エアドロップが始まりました!あなたの取り分を受け取ろう——このトークンが、300万以上のアプリを支える Fly.io のグローバルネットワークを動かしています、(🤮) 空を手に入れよう!

わかってる。僕らの Twitter アカウントが乗っ取られた。起きた瞬間にわかった。どうやって起きたかも完全に把握している。危険にさらされたのは僕らの Twitter アカウント(と、Fly.io のある従業員の自尊心)以外に何もない。あと、クソが。

経緯はこうだ。僕らの大胆不敵な CEO、Kurt Mackey がフィッシングに引っかかった。 これが実害のある攻撃だったら、こんな軽い口調では書かない。だがこの件に関しては、他のどんなトーンも芝居がかってしまう。

どうやって Kurt はやられたか

理由は二つ。一つ、かなり巧妙なフィッシングだった。二つ、Twitter は僕らが「真剣に対応する」対象ではなかった。

このフィッシングが効いたのは、僕らの経営陣の深い心理的弱点を突いたからだ。僕らは年を取っていて、今の若い連中から浮いている。

何ヶ月もの間、僕らは下請けかインターンらしき誰かに Twitter で Boosting Our Brand をやらせ、dank な developer meme(そう呼ぶらしい)を投稿させていた。問題は、そういう dank なやつが僕らにはよくわからないことだ。いや待ってくれ——技術的には、その meme が何を意味するかはわかる。なぜ笑えるのかがわからないだけだ。

とはいえ、それに反対するには二つの強い力と向き合わなければならない。

  1. その dank な meme は、僕ら自身が Twitter に投稿するものより反応がいいらしい。
  2. 僕らの Z 世代の子供たちは、こういうことに関して僕らは cringe すぎて信用できないと繰り返し言う。

これが Kurt が受け取ったフィッシングメールだ。

なかなか見栄えのする Twitter の警告

えぐい。メスみたいに、中年男である Kurt の最も深い insecurity を正確に切りにいっている。僕らの冷酷な攻撃者たちは、Kurt の脊髄反射——「やばい、これ何だ、なんで僕らはこれを投稿した?」——を引き出すためにこのメールを丹念に仕立てた。 ATO は流行りの言い方で、「やられた」という意味だ

ここは少し先走りすぎた。X.com アカウントが ATO に遭ったとわかったのは、@flydotio アカウントのメールアドレスが今 achilles19969@gmail.com を指しているという別のメールを、複数人が同時に受け取ったからだ。僕らの最初の反応は、1Password のログイン情報へのアクセス履歴をすべて監査し、最近それを呼び出した全員のアクセスを遮断することだった。こういう場合、最悪の想定は誰かの端末がすでに侵害されていることだからだ。

幸い、誰も長く遮断されずに済んだ。Kurt に電話して、なぜ締め出されているのかを説明したら、5秒で何が起きたか理解した。あそこでは何もクリックするな。

なぜ通ってしまったのか

それが問うべきことだろ? そもそもこんなことがなぜ起きうる?

よくある意見に反して、フィッシングは「クリックするな」と人を訓練しても防げない。もちろん、クリックするなとは伝えるさ! だが結局、継続的な圧力の下では誰もがクリックする。科学的な裏付けもある。本当にわかっている連中は、フィッシングの模擬訓練なんて何年も前からやっていない。

やるべきは、フィッシング耐性のある認証を使うことだ。U2F、FIDO2、Passkeys の背景にある話は、ほぼこれに尽きる。

フィッシング耐性のある認証は、相互認証に依存している(厳密に言うなら、オリジン束縛とチャネル束縛だ)。フィッシングとは、資格情報の悪意ある代理取得だ。FIDO2 のような現代の MFA は、この代理の流れを断ち切る。ブラウザは本物の資格情報を偽サイトには送らない。 細部はもっとあるが、大体こんなところだ。

実際、Fly.io のインフラはすべてこの方式で守られている。具体的には、すべてを一つの IdP の背後に置き(僕らは Google を使っている)、フィッシング耐性のある MFA を必須にしている。ここでログを見たり、Stripe で顧客の請求を返金したり、インフラのメトリクスを見たりするのは、フィッシングではまず無理だ。どれも Google 経由の SSO ログインが必要だからだ。

Twitter となると、まあ、これだよ。何年か前に Twitter でいろいろあったのは聞いたことがあるだろう。Fly.io の多くの人間は Mastodon に移り、その後 Bluesky に移った。2023年から2024年にかけてのある時期、Twitter は僕らにとって長期的な選択肢ですらないかもしれないと思われていた。 † (この人物には心から謝りたい。端末が侵害され、今回の侵入の直接原因だと決めつけてしまったからだ)

そういうわけで、Twitter は僕らにとって昔から共有アカウントのような扱いで、資格情報は 1Password に置き、Z 世代の外注先†と共有していた。

だから Kurt は alerts-x.com からのメールを受け取った後、1Password から資格情報を取り出し、members-x.com にログインできた。 とはいえ、これは基本的な衛生習慣で避けられたはずだ。Kurt は「x.com」が極めてフィッシングされやすいドメインだとぼやいていて、それはその通りだが、もう一つある。1Password のブラウザ拡張は、「members-x.com」が「x.com」のホストではないと気づくべきだった。

なぜこんなに時間がかかったのか

攻撃者はすぐにすべてのトークンを失効させ、2FA を再設定した。だからパスワードのリセット自体はすぐにできたが、X.com の介入なしには攻撃者をアカウントから締め出せなかった。その介入に約15時間かかった。

(これは X.com への文句ではない。2FA リセットの処理に15時間というのは、業界的に普通の範囲だ。)

今はこうして大々的に話しているが、当時はかなり静かにしていた(「分かってる。45秒後には分かってた。どうやられたかも完全に把握してる。Twitter のいつものアレだ。」という一言を除けば)。

大局的に見れば、この攻撃はかなりおとなしかった。お粗末な暗号通貨詐欺で、攻撃者の収入はおそらく0ドル、15時間以上のbrand damage、そして警戒待機で追加のセキュリティエンジニアリング時間を焼いただけだ。ユーザーは攻撃されておらず、アカウントが他の顧客アカウントをさらに乗っ取るために使われることもなかった。一瞬、攻撃者が私たちの Twitter 履歴を全部消したように見えたが、まあ、いいことを脅しに使わないでほしい。なので翌朝アカウントを取り戻すまで、そのままにしておいた。

この話から分かること

「私にとって一番の収穫は、Kurt が自分のメールを読むということだった。」

もちろん Kurt はコミット権限を失った。どの CEO にもその日は来る。今回は彼の番だった。

ちなみに、次の SOC2 でようやく「インシデント対応」のサンプルデータが手に入る。

もしかしたら Twitter にもう少し投稿するかもしれない。Z世代のミームにもっと力を入れるかもしれない。分からない。ソーシャルメディアは今ほんとうに変だ。ともあれ、私たちの Twitter アクセスは今 Passkeys を使っている。 本気で言うが、あのページのものは何もクリックしないでほしい

あのとき心が動いて、私たちの Fly.io の「エアドロップ」に参加して、それを支える「トークン」を「受け取り」たくなったなら、サイトは今も開いている。ウォレットを接続できる!全額失うだろう。でも、たとえ本当に ICO をやっていたとしても、同じく全額失っていた。

この攻撃を企てた誰かが「空をひとつ持とう!」というコピーを考え出さなければならなかった。それだけで十分な罰だと思う。

あなたが動かしているものが何であれ、その背後にフィッシング耐性のある MFA がないなら、あるいはもっといいのは、フィッシング耐性 MFA を要求する SSO IdP がないなら、それはいつかフィッシングされる。私たちの惨事の道化の火を眺めたいなら、どうぞ。でも私たちを教訓にしてほしい。

出典: Fly.io← ホームへ戻る