Vercelの違反行為と、「機密性のない」秘密でギャンブルをしない理由
Vercelが攻撃を受け、ピボットポイントはサードパーティのAIツールでした。Sweentの厳格なセキュリティプロトコルが、他の企業がパニック状態で鍵をローテーションしている間、クライアントの安全を守ることができたのはこのためです。
Vercelが撃たれたというニュースで目が覚めました。ウェブ開発の世界にいるなら、銀行のメイン金庫がちょうど選ばれたと聞いたようなものです。Vercel は単なる運営者ではありません。Next.js エコシステムを含む何百万ものサイトのバックボーンとなっています。しかし、利便性がセキュリティとの綱引きに勝ち始めると、巨人でさえつまずくことがあります。
この侵害は、Vercelのサーバーへの直接攻撃から始まったわけではありません。そのきっかけは、Context.ai というサードパーティーの AI ツールでした。あるVercelの従業員は、このツールをOAuth経由でGoogleワークスペースに接続していました。攻撃者は Context.ai にアクセスし、その OAuth 接続を利用して従業員の Google アカウントにアクセスし、そこから内部の王国への地図を入手しました。これは昔ながらのサプライチェーンのピボットであり、厄介です。
しかし、Sweentで本当にわかったのは、攻撃者が「機密」とマークされていない環境変数を読み取ることができたということです。Vercelには、変数を機密にするかどうかを開発者が選択できるシステムがあります。このボックスにチェックが入っていないと、シークレットは攻撃者が内部に侵入しても読み取り可能な方法で格納されます。Sweentでは、その設計上の選択を見て、巨大で不必要なリスクがあることに気づきました。利便性のために開発者にセキュリティを弱める選択肢を与えるべきだとは考えていません。
##「機密性のない」秘密の誤り
Vercel ダッシュボードでは、機密環境変数と非機密環境変数が区別されています。つまり、公開 API キーや重要ではない設定文字列など、データベースパスワードのように高度な暗号化を必要としないものがあるということです。しかし実際には?開発者は忙しい。彼らは午前 2 時にコードを発送します。彼らは最も抵抗の少ない道をたどります。デフォルトが「最大限のセキュリティ」でないと、秘密が漏れてしまいます。問題なのは、「もし」ではなく、「いつ」ということです。
私たちは、このようなことが私たちのところに来る前に何十ものプロジェクトで起こるのを見てきました。開発者は、特定のトークンは「リスクが低い」と考えているので、追加の保護層を気にする必要はありません。その後、侵害が発生し、その「低リスク」トークンがシステム全体の乗っ取りの要点になります。
Sweentのプロトコルはシンプルです。機密性のない環境変数というものは存在しません。「.env」ファイルや CI/CD パイプラインにある変数であれば、重要な秘密として扱われます。ピリオド。キーを非表示のままにする「便利な」トグルは提供していません。すべての変数を暗号化して制限するという厳格なポリシーを適用することで、Vercel事件におけるデータ流出につながった人為的ミスを排除しています。攻撃者が同様の侵害の最中に当社のいずれかの環境に侵入した場合、攻撃をエスカレートさせるために使用できる「機密性のない」鍵のリストではなく、読み取ることができない暗号化されたデータの壁が見つかったでしょう。
プロトコルによる AI アクセラレーション攻撃者との戦い
VercelのCEOは、攻撃者は「驚くほどの速さ」で動き、AIによって加速された可能性が高いと述べています。これが新しい現実です。私たちはもはや、パーカーを着た男が手動でコマンドを入力するのを防ぐだけではありません。私たちは、システムアーキテクチャの分析、脆弱性の特定、エクスプロイトの実行を数秒で行うことができる自動エージェントから身を守っています。
攻撃者がマシンスピードで動いている場合、どのチェックボックスをクリックするかは人間が判断するだけでは防御できません。それをインフラストラクチャーに組み込む必要があります。だからこそ、セキュリティ侵害はいつでも起こり得ると想定した社内ワークフローを構築したのです。私たちは侵入を監視するだけではありません。攻撃対象領域を減らして、いったんドアを通り抜けてAIが見つけられないようにしています。
Vercelの侵害における最大の問題の1つは、OAuth接続でした。OAuth は信じられないほど便利ですが、極度の規律をもって管理しなければ、大きなセキュリティホールになります。ボタンを 1 つクリックして新しい AI 生産性向上ツールを試してみると、突然、そのツールが Google Workspace 全体への読み取り権限を持つようになりました。Context.ai がハッキングされたように、そのツールがハッキングされると、組織全体が危険にさらされます。
Sweent のチームは、サードパーティーインテグレーションについてはゼロトラストポリシーを実施しています。完全なセキュリティ監査なしに、「ピカピカの新しいツール」をコアシステムに接続させないようにしています。その場合でも、対象範囲は最小限にとどめています。ツールが 1 つのカレンダーのみを読み込む必要がある場合、そのツールはワークスペース全体にアクセスできません。大変な作業のように思えますが、実際はそうです。しかし、それは小さな事件と、ShinyHuntersのようなグループからの200万ドルの身代金要求との違いです。
24時間シークレットローテーションルール
最善の防御策を講じても、事態は悪化する可能性があります。プロフェッショナルチームの特徴は、侵害をどのように防ぐかだけでなく、侵害にどのように対応するかにあります。Vercelは、顧客に認証情報をすぐにローテーションすることを推奨しました。しかし、「直ちに」というのは企業の世界では曖昧な言葉です。一部の企業にとっては、来週という意味です。他の人にとっては、長い週末の後という意味です。
Sweent には、セキュリティ侵害の疑いがある場合、すべてのシークレット、API キー、データベース文字列が 24 時間以内にローテーションされるという厳しいルールがあります。完全な事後分析を待つことはありません。データが「実際に」漏洩したかどうかを見るのを待つ必要はありません。私たちは攻撃者よりも速く動きます。
攻撃者が鍵を持っていることに気付く頃には、その鍵はすでに使われていません。この処理には、自動化されたスクリプトとコードとしてのインフラストラクチャを使用します。この侵害の最中にVercelを使用していたら、主要な技術系ブログにニュースが流れる前に、クライアントの鍵は循環して保護されていたでしょう。AI 主導の速度で動く攻撃者に対する唯一の防御手段は速度です。
サプライチェーンのセキュリティと 7 日間ルール
Vercelの侵害は、NPMサプライチェーンに関する懸念も引き起こしました。Vercel は Next.js を所有しているため、適切なトークンを持っている攻撃者が、何百万人もの開発者に「毒された」リリースを送信する可能性があります。これはサイバー戦争における核攻撃という選択肢です。新しいバージョンがリリースされるたびに依存関係をやみくもに更新しているのであれば、コードベースを使ってロシアンルーレットをプレイしていることになります。
弊社では、重要ではない依存関係の更新にはすべて強制的な遅延を設けることでお客様を保護しています。私たちは通常、主要ライブラリの新バージョンを導入するまで少なくとも7日間待ちます。なぜ?なぜなら、ほとんどのサプライチェーン攻撃は、その最初の1週間以内に特定され、無力化されるからです。すべてのマイナーパッチの「アーリーアダプター」にならないことで、パッケージがハイジャックされたときに最初に攻撃を受けたのがクライアントにならないようにしています。
過度に警戒しているように感じるかもしれませんが、代替案を検討してください。シャイニーハンターズは、ヴェルセルの内部データベースを200万ドルで売却したとされている。同社には 580 件の従業員記録、内部ダッシュボード、およびソースコードがあります。これは壊滅的な失敗であり、内部プロトコルを厳格化し、秘密管理に「不便な」アプローチをとることで軽減できたはずです。
##「難しい」部分をスキップしない理由
セキュリティは往々にして摩擦点として捉えられがちです。これは開発を遅らせます。新しいツールを試すのが難しくなります。デプロイプロセスにステップが追加されます。そしてそれこそが、多くのスタートアップが難しい部分をスキップしている理由です。彼らは速く動き、物事を壊したいと思っています。しかし、顧客の信頼が壊れてしまうと、それを修正する機会が得られない可能性があります。
私たちは、デジタル変革はセキュリティを犠牲にして実現すべきではないという考えのもと、Sweentを構築しました。私たちはその摩擦に対処するので、クライアントはそうする必要がありません。AI ツールのセキュリティ監査を行うのは私たちです。すべての環境変数に強制暗号化を実施しているのは私たちです。業界の他の企業がまだニュースを読んでいる間に、24 時間以内に鍵のローテーションを行うようにしているのは私たちです。
今Vercelを使っているなら、ダッシュボードを確認したほうがいいでしょう。すべての変数を監査します。すべて機密項目としてマークしてください。絶対に必要でない OAuth 接続はすべて切断してください。しかし、開発者が午前 2 時に適切なチェックボックスをオンにしたかどうか心配するのをやめたいなら、セキュリティをオプション機能として扱わないパートナーが必要です。
結局のところ、Vercelはここから回復する可能性が高いです。彼らにはエリートエンジニアと十分な資本があります。しかし、中小企業にとって、このような違反は死刑判決です。「機密性のない」変数が負債であることに気付くのは、次の大きな見出しを待ってはいけません。攻撃者はマシンスピードで動いています。あなたは?
よくあるご質問
攻撃者はヴェルセルを直接追跡しませんでした。彼らは、Vercelの従業員が OAuth 経由で Google Workspace に接続していたサードパーティの AI ツールである Context.ai に侵入しました。その OAuth 権限を付与した攻撃者は、その従業員の Google アカウントに侵入し、そこから Vercel の内部システムへの地図を入手しました。これは従来のサプライチェーンのピボットです。チームメンバーが「許可」をクリックしたインテグレーションの中で、最も監査の少ないインテグレーションだけが安全です。
開発者に「暗号化された」シークレットと「読み取り可能な」シークレットを切り替えられるようにすることは、配送の圧力を受けて午前2時に安全なオプションを選択するすべての開発者が毎回賭ける設計上の選択です。彼らはそうしません。Vercelの侵害がそれを裏付けました。攻撃者は、厳密には「機密ではない」とマークされた値を使用して出て行きましたが、他の調査結果と組み合わせると非常に機密性が高いことが判明しました。私たちのポリシー:機密性のない秘密というものは存在しません。.env や CI/CD パイプラインのすべては同じ方法で暗号化され、切り替えは行われません。
すべてのキーは24時間以内に回転し、完全に停止します。データが実際に漏洩したかどうかを事後分析で確認するのを待つ必要はありません。明らかになる頃には、攻撃者は盗んだものをすでに使用しています。コードとしてのインフラストラクチャーと自動ローテーションスクリプトにより、このようなことが英雄的というよりは機械的なものになっています。攻撃者が鍵を持っていることに気付く頃には、その鍵はすでに無効になっています。
npm エコシステムにおけるほとんどのサプライチェーン攻撃は、悪意のあるリリースから最初の 1 週間以内に検出され、無効化されます。これは、より厳密に Canary を実行している他のチームが問題を発見し、レジストリがそのパッケージを取り出すためです。新しいメジャーバージョンが導入されるまで 7 日間待っているということは、人気のあるパッケージがハイジャックされても、最初に攻撃を受けるのはクライアントではないということです。これには若干の遅延が発生し、ある種の攻撃を完全に回避できます。
別の方法で証明されるまで、すべての OAuth グラントを境界の恒久的な穴として扱ってください。ツールを接続する前に、ツールのセキュリティ監査を実施してください。スコープを最小限にとどめてください。ツールが必要とするカレンダーが 1 つだけの場合、ワークスペース全体は取得されません。有効な助成金は四半期ごとに見直し、使用されていないことが明らかになった場合は切り捨ててください。シングルクリック統合の便利さが、Context.ai が Vercel へのピボットになった理由です。コストが最も低く、最も節約できるところに意図的に摩擦を適用してください。