すべてを壊したCrowdStrikeのファイル、null文字で埋め尽くされていた? (twitter.com/jeremyphoward) 1 ポイント 投稿者 GN⁺ 2024-07-21 | 1件のコメント | WhatsAppで共有 関連記事 WindowsのCrowdStrike製品の不具合で大規模なブルースクリーン障害が発生 6 ポイント · 4件のコメント · 2024-07-20 CrowdStrike CSAgent.sysクラッシュ原因の初期詳細 1 ポイント · 1件のコメント · 2024-07-22 マイクロソフトによるCrowdStrike事案の技術分析 1 ポイント · 1件のコメント · 2024-07-29 CrowdStrikeの危機、競合各社に攻勢の機会を与える 5 ポイント · 5件のコメント · 2024-07-20 CrowdStrikeが数か月前にDebian・Rocky Linuxも破損させていた件 1 ポイント · 3件のコメント · 2024-07-22 1件のコメント GN⁺ 2024-07-21 Hacker Newsの意見 これほどクリティカルパス上にあるシステムなら、まともなCIパイプラインを通っていないはずがない 自動テストにはそこまで厳格な方ではないが、こういう重要度のシステムでは状態管理が例外的にしっかりしているべきだ サポートを謳うすべての環境に対する統合テストなしに本番デプロイしてはいけないし、この規模と重要性の会社がサポート対象イメージ全体を検証するステージングや開発用テストサーバーすら持っていないというのは考えにくい 情報が足りないのに仮定が多すぎる。たとえば実際には正常なファイルがあり、失敗箇所が検証済み成果物をCDNにアップロードするコードだった可能性もある そうなら、デプロイ前に多くのチェックを通過したあとで問題が起きたことになる。Windowsへの出力をまったくテストしていないと早急に断定したくはない そんな環境がないと誰が言ったのか? そうしたテストを全部通過していないと誰が言ったのか? 今は仮定が多すぎる 数年前、カーネル上で動く言語を担当するチームと面接したとき、CIで2万〜4万のマシン/OSの組み合わせと設定を回していると言っていたのを覚えている その中には当然、標準的なWindowsも入っていたはずだ 受け入れ基準が「不正なデータ署名があればマシンの起動を止める」だったなら、破損した配布物やネットワーク障害を意味する可能性があるので、起動しないのは結果論では正しい挙動だったのかもしれない 有効な署名付きファイルがダウンロードされるまで、マシンが完全には起動しない設計だった可能性もある 全面がヌル文字で埋まったファイルが自動ビルドパイプラインの成果物だったとは考えにくい 何かがビルドされてCIテストを通過したあと、配布準備のためにファイルをコピーする後段の工程でシステムが壊れた可能性に賭ける。ただ、今のところは全部推測にすぎない 関連して言うと、史上最大級の技術的惨事のうち二つ(CrowdStrikeと数年前のSolarWindsハッキング)がどちらも暴走したセキュリティソフトウェアから生じたのは偶然には思えない セキュリティソフトウェア会社を始めたがるハッカー気質の人たちは、プロセス重視の文化の退屈な部分を実装することには最も関心が薄いのではないかと思う。SolarWindsでは社内のセキュリティ文化がひどかったことが明らかになったし、今回も根本原因が判明すれば、速くて緩いデプロイプロセスだった可能性が高そうだ 同意しない。セキュリティ企業は「大きすぎて潰れない」症候群に陥り、顧客はチェックボックスを埋めたがるので金が簡単に入ってくる セキュリティは購入する製品ではなく文化であり、初日から積極的な努力と骨の折れる作業によって根付かせる必要がある。市場にはセキュリティを提供してくれる製品はなく、問題が起きたときに責任転嫁できる製品があるだけだ CrowdStrikeはもともとカリフォルニア州アーバインで創業し、本社を置いていた会社だった 初期のエンジニアリング組織の大半はリモート/在宅勤務かアーバイン勤務で、規模拡大に伴ってSunnyvaleのオフィスを追加し、その後正式な本社をテキサス州オースティンへ移した ここ数年は海外のエンジニアリング運営も拡大しており、これにはオフショアリングも含まれていた可能性がある 別の仮説だが両立は可能だ。セキュリティソフトウェアにはたいてい広範で強力なアクセス権限が必要だ そのため、ミスや侵害が起きると影響がはるかに大きくなりやすい 業界の前歴としてはかなり独特ではある。ぱっと思いつくだけでもCrowdStrike、SolarWinds、Kaspersky、https://en.wikipedia.org/wiki/John_McAfeeがある まだ何か忘れていそうだ。合法大麻産業を悩ませる自己選択問題と似た構造なのかもしれない セキュリティソフトウェアにはカーネルレベルのアクセスが必要だ。何か壊れると起動ループやクラッシュにつながる ほとんどの他のソフトウェアはそんな低レベルのアクセスを必要とせず、クラッシュしてもシステム全体を巻き込まず、高速な自動アップグレードも可能だ この災害の数少ない前向きな面を無理に探すなら、組織がカーネルレベルのアクセスを見直すのではないかというごく小さな希望がある どんなゲーム会社でもカーネルレベルのアンチチートソフトウェアを使うだけの力量があるとは言えない Microsoftが非常に強く取り締まらない限り、ゲームソフトウェアが影響を受けることはなさそうだ それでもMicrosoft傘下にゲーム会社があるので、ゲーム向けフックは今後も減っていく可能性が高い。企業組織はRiotのアンチチート慣行に眉一つ動かさないだろうが、それは業務用マシンにLoLをインストールしないからだ 戦うべき相手は「無作為なカーネルレベルのドライバー? 問題なし!」と言うチート購入者たちだ アンチチートは大半がサーバー側の行動ベースであるべきだと思う macOSでは少なくともカーネルアクセスは不可能だと理解しているので、その点だけは救いだ これは、QA担当者が空ファイルと最小限の有効ファイルの次に、2番目か3番目に試しそうなテストファイルに見える。ここで露呈した全方位的な無能さの度合いには衝撃を受ける 非技術系の役員にプレゼンで感銘を与えることが重視される競争市場では、技術的に有能な会社が無能な会社より優位に立てないのも不思議ではない 最近、Craig Wrightの判決文 https://www.judiciary.uk/judgments/copa-v-wright/ を読んだが、サトシ・ナカモトだと虚偽の主張をしていた彼は、自分が世界的専門家だとしていた分野ですら基本的な技術力がなかった。証言台では unsigned が何を意味するのかも知らず、90年代から大企業のセキュリティ業務に携わりつつ、専門用語や細工されたデモ、偽造文書で人々をだましてきたように見えた CrowdStrikeの創業者兼CEOであるGeorge Kurtzは、14年前にMcAfeeがほぼ同じことをしたときCTOだった: https://old.reddit.com/r/sysadmin/comments/1e78l0g/can_crowd... https://en.wikipedia.org/wiki/George_Kurtz CrowdStrike自体も3か月前、Debian stableで同じ問題を起こしていた: https://old.reddit.com/r/debian/comments/1c8db7l/linuximage6... PCIコンプライアンスの規定が、CrowdStrikeやアンチウイルスを今日のITインフラのほぼ至る所に押し込んだことは恐ろしい コンプライアンスが巨大な単一障害点として最大の脆弱性を生み出したのも皮肉だ まあ、政府規制とはそういうものだが 今回の事故の最悪な点は、国家主体が今や大規模インフラ攻撃の明確な設計図を手にしたことだ リンク先の人たちがこれを「Microsoft障害」と呼ぶことに腹を立てて、「CrowdStrikeのせいだ」と言っているのは面白い だが、これはMicrosoftの失敗でもある。もっと大きく見れば、またしても業界全体の失敗だ 私たちが70年も研究してきた、安全で信頼できるシステムを作れるようにする業界改革が起きるには、こういうことがあと何回繰り返されなければならないのか。1988年がまた繰り返されているように感じる Craig Wrightが、デジタル証明書を一か所のコンピュータやクラスターに発行させるのではなく、ブロックチェーンに載せようと提案していたのはかなり皮肉だ 一か所にあれば標的になるが、ピアツーピアネットワークは攻撃にはるかに強靭だ 今回の問題が、すべてのコンピュータのルート証明書がCrowdStrikeに置き換えられていたことと関係していたなら、ブロックチェーンに登録された証明書が解決策になるかもしれない。暗号の専門家ではないが、もっともらしくは見える 付け加えると、Craig Wrightのブロックチェーン説明を聞いて初めて、ビットコイン白書がかなり理解できるようになった。彼は最高のコーダーではないかもしれないが、数学者がセキュリティで役に立たないわけではないだろう? 陰謀論めいて聞こえたくはないが、まだハンロンの剃刀だけで悪意を排除するには早すぎる気がする たいていのミスは、こんな世界規模のとんでもないものにはならない。これまでで最大のミス、つまり実際には起きなかったY2Kのように見える この記事は間違っているし、フロントページから下ろすほかの方法がないのでフラグを立てた 壊れたコンピュータで全ゼロのファイルが見つかったからといって、そのファイルが最初から全ゼロで配布されたことを意味するわけではない https://x.com/craiu/status/1814339965347610863 https://x.com/cyb3rops/status/1814329155833516492 CrowdStrikeは、ネットワークソケットで転送中のファイルがマルウェア署名と一致すると、そのファイルをゼロで置き換える動作をする これらのファイル自体がマルウェア署名ファイルだったのなら、一致が出ても驚きではない CrowdStrikeがついに自ら確認した: https://www.crowdstrike.com/blog/tech-analysis-channel-file-... このバグについて、CrowdStrikeで働く人を知っている友人から聞いた話と一致する バグは何年もカーネルドライバの中に潜んでおり、不正なデータが入り込んだことで発火した。そのデータは設定アップデートの後処理段階で追加され、テスト後ではあるが、クライアントが取得するアップデートサーバーにコピーされる前のことだった CrowdStrikeのテスト構成は、設定データそのものについては問題なかったようだが、本番に出る前には検出できなかった。間違ったものをテストしていたからだ 事後分析を出すのなら、この問題を認め、もう一つの世界規模の影響を及ぼすプロセス障害を防ぐために何をするのか説明してほしい ようやくある程度筋の通る説明になった 有能なシステム管理者なら、今ごろGreenlandからNew Zealandまで全員、自動更新機能を切り、ファイアウォールで遮断し、サーバー資産からこの製品をできるだけ早く外す計画を立てているだろう 競合製品のマーケティング予算は今四半期に増えそうだ CrowdStrikeは、単に「認める」だけでは済まないはずだ 契約書に「責任制限」があったとしても、真剣な調査と罰金、法的追及が行われてほしい この事故が生んだ被害の規模は計算するのも難しく、企業や一般人が浪費した時間まで含めればさらに大きい。たとえば航空便に乗ろうとしていた人たちも含まれる このような不注意には必ず代償があるべきだ MastodonでKevin Beaumontが受け取ったファイルは、顧客ごとに異なるという主張がある https://cyberplace.social/@GossiTheDog/112812454405913406 少し下へスクロールすれば見られる Windowsはすべてのカーネルモジュール署名を要求するものだと思っていた 単なるテスト流出ではなく、破損したコピーが複数あるのなら、どうやって署名検証を通ってカーネルがロードできたのか疑問だ これは元のファイル内容ではなく、被害を止めようとする手動対応の結果だった可能性もある 誰かが誤ったファイルを同じサイズの全ゼロのファイルで上書きすれば、アップデートが無害になると期待したのかもしれない あるいは「重大な脆弱性のためにQAを迂回した」という仮説に従うなら、実際のパッチ配布を止めたのは、本物のデータへのアクセスを減らし、脆弱性のリバースエンジニアリングを遅らせようとする試みだった可能性もある 4chanの技術掲示板に投稿された説明によれば、問題は2段階だった CSAgent.sysという署名済みカーネルドライバがCrowdStrikeのウイルス定義ファイルをパースし、malformedな定義ファイルが不正なメモリアクセスを引き起こす場合を適切に処理していなかった 正常な定義ファイルとともに何カ月も問題なく動いていた時限爆弾カーネルドライバがあり、ある時点で定義ファイルを配信するWebサーバーやCDNが、空ファイル、任意のバイト列、別のソフトウェアのファイルといった誤った内容を返し始めた 更新クライアントがこれを C:\Windows\System32\drivers 配下にダウンロードし、CSAgent.sysがそれを再び読み込んでパースしようとして PAGE_FAULT_IN_NONPAGED_AREA でブルースクリーンと再起動ループに陥った、という説明だ CSAgent.sys_18511.sysとCSAgent.sys_18513.sysの差分を見ると、サイズチェックとバッファサイズを変更し、今後は不正な定義ファイルがクラッシュを引き起こさないようにした痕跡が見られるという 定義ファイルを配信するサーバー上で、何らかのウイルス保護機能がディスク読み取りを妨げ、エラーを返す代わりに出力データを0で埋めたようにも聞こえる 実際に何らかのアンチウイルスパッケージが原因だったなら、かなり皮肉だ こうしたことが複数回起きていたのなら、ずさんに書かれたカーネルドライバを狙ったハッカー攻撃だった可能性もある 特に今のような選挙の時期や、Trumpが好む企業という文脈では、力の誇示だったのかもしれない 以前にもセキュリティソフトがファイル全体を0に置き換えて、ソフトウェアのコンパイルを壊したことがあった 今回がそうだと言っているわけではないが、それでも驚きではない 基本的にはWindowsでリンカーがファイルを開けなかったのだが、別プロセスがスキャンのためにロックしていたからだ。ところがエラーを返さず、リンクされるはずのオブジェクトコードを0に置き換えてしまった 人々は原因を突き止められず、デバッガを開いて初めてオブジェクトコードの大きな塊が0に置換されているのを確認した Visual Studioがたった今コンパイルしたファイルに書き込めない問題には、あまりにも何度も遭遇している アンチウイルスが新しく生成されたバイナリを、ちょうどmt.exeが書き込むべきその瞬間に捕まえてしまうので、リトライを追加したmt.exeラッパーまで作ってある。CIビルドもこのせいでランダムに失敗することがある
1件のコメント
Hacker Newsの意見
これほどクリティカルパス上にあるシステムなら、まともなCIパイプラインを通っていないはずがない
自動テストにはそこまで厳格な方ではないが、こういう重要度のシステムでは状態管理が例外的にしっかりしているべきだ
サポートを謳うすべての環境に対する統合テストなしに本番デプロイしてはいけないし、この規模と重要性の会社がサポート対象イメージ全体を検証するステージングや開発用テストサーバーすら持っていないというのは考えにくい
そうなら、デプロイ前に多くのチェックを通過したあとで問題が起きたことになる。Windowsへの出力をまったくテストしていないと早急に断定したくはない
その中には当然、標準的なWindowsも入っていたはずだ
有効な署名付きファイルがダウンロードされるまで、マシンが完全には起動しない設計だった可能性もある
何かがビルドされてCIテストを通過したあと、配布準備のためにファイルをコピーする後段の工程でシステムが壊れた可能性に賭ける。ただ、今のところは全部推測にすぎない
関連して言うと、史上最大級の技術的惨事のうち二つ(CrowdStrikeと数年前のSolarWindsハッキング)がどちらも暴走したセキュリティソフトウェアから生じたのは偶然には思えない
セキュリティソフトウェア会社を始めたがるハッカー気質の人たちは、プロセス重視の文化の退屈な部分を実装することには最も関心が薄いのではないかと思う。SolarWindsでは社内のセキュリティ文化がひどかったことが明らかになったし、今回も根本原因が判明すれば、速くて緩いデプロイプロセスだった可能性が高そうだ
セキュリティは購入する製品ではなく文化であり、初日から積極的な努力と骨の折れる作業によって根付かせる必要がある。市場にはセキュリティを提供してくれる製品はなく、問題が起きたときに責任転嫁できる製品があるだけだ
初期のエンジニアリング組織の大半はリモート/在宅勤務かアーバイン勤務で、規模拡大に伴ってSunnyvaleのオフィスを追加し、その後正式な本社をテキサス州オースティンへ移した
ここ数年は海外のエンジニアリング運営も拡大しており、これにはオフショアリングも含まれていた可能性がある
そのため、ミスや侵害が起きると影響がはるかに大きくなりやすい
まだ何か忘れていそうだ。合法大麻産業を悩ませる自己選択問題と似た構造なのかもしれない
ほとんどの他のソフトウェアはそんな低レベルのアクセスを必要とせず、クラッシュしてもシステム全体を巻き込まず、高速な自動アップグレードも可能だ
この災害の数少ない前向きな面を無理に探すなら、組織がカーネルレベルのアクセスを見直すのではないかというごく小さな希望がある
どんなゲーム会社でもカーネルレベルのアンチチートソフトウェアを使うだけの力量があるとは言えない
それでもMicrosoft傘下にゲーム会社があるので、ゲーム向けフックは今後も減っていく可能性が高い。企業組織はRiotのアンチチート慣行に眉一つ動かさないだろうが、それは業務用マシンにLoLをインストールしないからだ
これは、QA担当者が空ファイルと最小限の有効ファイルの次に、2番目か3番目に試しそうなテストファイルに見える。ここで露呈した全方位的な無能さの度合いには衝撃を受ける
非技術系の役員にプレゼンで感銘を与えることが重視される競争市場では、技術的に有能な会社が無能な会社より優位に立てないのも不思議ではない
最近、Craig Wrightの判決文 https://www.judiciary.uk/judgments/copa-v-wright/ を読んだが、サトシ・ナカモトだと虚偽の主張をしていた彼は、自分が世界的専門家だとしていた分野ですら基本的な技術力がなかった。証言台では
unsignedが何を意味するのかも知らず、90年代から大企業のセキュリティ業務に携わりつつ、専門用語や細工されたデモ、偽造文書で人々をだましてきたように見えたCrowdStrikeの創業者兼CEOであるGeorge Kurtzは、14年前にMcAfeeがほぼ同じことをしたときCTOだった: https://old.reddit.com/r/sysadmin/comments/1e78l0g/can_crowd... https://en.wikipedia.org/wiki/George_Kurtz
CrowdStrike自体も3か月前、Debian stableで同じ問題を起こしていた: https://old.reddit.com/r/debian/comments/1c8db7l/linuximage6...
PCIコンプライアンスの規定が、CrowdStrikeやアンチウイルスを今日のITインフラのほぼ至る所に押し込んだことは恐ろしい
まあ、政府規制とはそういうものだが
だが、これはMicrosoftの失敗でもある。もっと大きく見れば、またしても業界全体の失敗だ
私たちが70年も研究してきた、安全で信頼できるシステムを作れるようにする業界改革が起きるには、こういうことがあと何回繰り返されなければならないのか。1988年がまた繰り返されているように感じる
一か所にあれば標的になるが、ピアツーピアネットワークは攻撃にはるかに強靭だ
今回の問題が、すべてのコンピュータのルート証明書がCrowdStrikeに置き換えられていたことと関係していたなら、ブロックチェーンに登録された証明書が解決策になるかもしれない。暗号の専門家ではないが、もっともらしくは見える
付け加えると、Craig Wrightのブロックチェーン説明を聞いて初めて、ビットコイン白書がかなり理解できるようになった。彼は最高のコーダーではないかもしれないが、数学者がセキュリティで役に立たないわけではないだろう?
たいていのミスは、こんな世界規模のとんでもないものにはならない。これまでで最大のミス、つまり実際には起きなかったY2Kのように見える
この記事は間違っているし、フロントページから下ろすほかの方法がないのでフラグを立てた
壊れたコンピュータで全ゼロのファイルが見つかったからといって、そのファイルが最初から全ゼロで配布されたことを意味するわけではない
https://x.com/craiu/status/1814339965347610863
https://x.com/cyb3rops/status/1814329155833516492
これらのファイル自体がマルウェア署名ファイルだったのなら、一致が出ても驚きではない
このバグについて、CrowdStrikeで働く人を知っている友人から聞いた話と一致する
バグは何年もカーネルドライバの中に潜んでおり、不正なデータが入り込んだことで発火した。そのデータは設定アップデートの後処理段階で追加され、テスト後ではあるが、クライアントが取得するアップデートサーバーにコピーされる前のことだった
CrowdStrikeのテスト構成は、設定データそのものについては問題なかったようだが、本番に出る前には検出できなかった。間違ったものをテストしていたからだ
事後分析を出すのなら、この問題を認め、もう一つの世界規模の影響を及ぼすプロセス障害を防ぐために何をするのか説明してほしい
有能なシステム管理者なら、今ごろGreenlandからNew Zealandまで全員、自動更新機能を切り、ファイアウォールで遮断し、サーバー資産からこの製品をできるだけ早く外す計画を立てているだろう
競合製品のマーケティング予算は今四半期に増えそうだ
契約書に「責任制限」があったとしても、真剣な調査と罰金、法的追及が行われてほしい
この事故が生んだ被害の規模は計算するのも難しく、企業や一般人が浪費した時間まで含めればさらに大きい。たとえば航空便に乗ろうとしていた人たちも含まれる
このような不注意には必ず代償があるべきだ
MastodonでKevin Beaumontが受け取ったファイルは、顧客ごとに異なるという主張がある
https://cyberplace.social/@GossiTheDog/112812454405913406
少し下へスクロールすれば見られる
単なるテスト流出ではなく、破損したコピーが複数あるのなら、どうやって署名検証を通ってカーネルがロードできたのか疑問だ
これは元のファイル内容ではなく、被害を止めようとする手動対応の結果だった可能性もある
誰かが誤ったファイルを同じサイズの全ゼロのファイルで上書きすれば、アップデートが無害になると期待したのかもしれない
あるいは「重大な脆弱性のためにQAを迂回した」という仮説に従うなら、実際のパッチ配布を止めたのは、本物のデータへのアクセスを減らし、脆弱性のリバースエンジニアリングを遅らせようとする試みだった可能性もある
4chanの技術掲示板に投稿された説明によれば、問題は2段階だった
CSAgent.sysという署名済みカーネルドライバがCrowdStrikeのウイルス定義ファイルをパースし、malformedな定義ファイルが不正なメモリアクセスを引き起こす場合を適切に処理していなかった
正常な定義ファイルとともに何カ月も問題なく動いていた時限爆弾カーネルドライバがあり、ある時点で定義ファイルを配信するWebサーバーやCDNが、空ファイル、任意のバイト列、別のソフトウェアのファイルといった誤った内容を返し始めた
更新クライアントがこれを
C:\Windows\System32\drivers配下にダウンロードし、CSAgent.sysがそれを再び読み込んでパースしようとしてPAGE_FAULT_IN_NONPAGED_AREAでブルースクリーンと再起動ループに陥った、という説明だCSAgent.sys_18511.sysとCSAgent.sys_18513.sysの差分を見ると、サイズチェックとバッファサイズを変更し、今後は不正な定義ファイルがクラッシュを引き起こさないようにした痕跡が見られるという
実際に何らかのアンチウイルスパッケージが原因だったなら、かなり皮肉だ
特に今のような選挙の時期や、Trumpが好む企業という文脈では、力の誇示だったのかもしれない
以前にもセキュリティソフトがファイル全体を0に置き換えて、ソフトウェアのコンパイルを壊したことがあった
今回がそうだと言っているわけではないが、それでも驚きではない
基本的にはWindowsでリンカーがファイルを開けなかったのだが、別プロセスがスキャンのためにロックしていたからだ。ところがエラーを返さず、リンクされるはずのオブジェクトコードを0に置き換えてしまった
人々は原因を突き止められず、デバッガを開いて初めてオブジェクトコードの大きな塊が0に置換されているのを確認した
アンチウイルスが新しく生成されたバイナリを、ちょうどmt.exeが書き込むべきその瞬間に捕まえてしまうので、リトライを追加したmt.exeラッパーまで作ってある。CIビルドもこのせいでランダムに失敗することがある