7月19日(金)未明、多くのMicrosoftのWindowsシステムが謎の起動不能に陥ったとの報告が始まった。
航空会社では、発券システムが機能せず、フライトがキャンセルされ、乗客が立ち往生するなどの影響が出た。
銀行は一部の機能を実行できなかった。給与支払いは滞り、報道機関でさえ最新のニュースを伝えることができなかった(皮肉なことに、Microsoftの不可解な問題についてのニュースが多かった)。
州によっては911の緊急通報にさえ影響が出た。
死のブルー・スクリーン」(BSOD)は、一見どこにでもあるように見えた。
短時間のうちに、「史上最大のIT障害」であり、「世界的な混乱」を引き起こしたとの声も聞かれた。
すぐに、「CrowdStrike」というセキュリティ会社のコードが、自動アップデートに失敗してMicrosoftの一部の顧客に配信され、システムが起動できない状態になっていたことが判明した。
問題はすぐに診断され、パッチが作成され配布されたにもかかわらず、被害は拡大し、一部のシステムはダウンしたままだった。7月19日正午の時点で、被害額は180億ドルにのぼると見積もられていた。
最終的には50億ドルから100億ドル程度に調整されたようだが、実際の被害額はまだまだかかるだろう。
なぜこのようなことが起こったのか?誰に責任があるのか?誰が損害賠償を支払うのか?これを防ぐために何ができたのか?これらの疑問にはすべて答えが出るだろう。
CrowdStrikeは、Microsoft(およびその他の)システムへの攻撃を防止しようとするコードを作成する。
システムのカーネルに到達し、ファイルを開くなど多くの機能を見て、ハッカーや他のマルウェアの可能性があるパターンがないかどうかを調べる。
もしそうであれば、アプリケーションをシャットダウンするよう即座に対処する。
今回の問題は、データが存在しないのにデータを探しているプログラムの一部でNULLポインタが発生し、OSがプログラムを強制終了したために起こった。
CrowdStrikeが 「ユーザーレベル 」のプログラムであれば影響は少なかったが、CrowdStrikeはオペレーティングシステムと同じ特権モードで実行する必要があったため、CrowdStrikeはクラッシュし、システム全体がダウンした。システムが再起動し始めると、CrowdStrikeは再び同じ問題に遭遇し、再びクラッシュした。
そしてまたクラッシュした。解決策は、NULLポインタの問題を修正するパッチをCrowdStrikeプログラムに配布することだったが、そのパッチを配布するには、CrowdStrikeのパッチをダウンロードして適用できるように、Microsoftのシステムが稼働していなければならなかった。
キャッチ22。CrowdStrikeはマイクロソフト製ではないし、Microsoftのソフトウェアを実行している(と推定される)世界中の14億台のコンピュータすべてにインストールされているわけでもない。
実際、Microsoft社は、今回の障害で影響を受けたのは800万台のコンピュータだけだと推定している。
もしこれが本当なら、Microsoft社のシステムの約6%しか影響を受けていないことになる。
その800万台は、非常に目立つコンピューターだった。その800万台は、非常に動揺した人々による非常に高価なトランザクションを担っていた。その中には報道機関も含まれていた。
Microsoftはこの障害の直接の原因ではない。
Microsoftは、CrowdStrikeが保護しようとしていた800万台の「以前は非常に有用だった」商用システムへのチャネルに過ぎない。
しかし、Microsoftのモノリシックなアーキテクチャと配信システムは、CrowdStrikeが致命的な打撃を与えるのを助けた。Microsoftのエコシステムをバナナ業界のように考えることができる。かつてバナナには多くの種類があったが、米国でバナナ産業が成長し始めると、バナナ生産企業はラテンアメリカに行き、出荷しやすく、熟す速度が遅く、出荷して腐る前に熟すバナナを標準化し始めた。
彼らは特定の品種のバナナを標準化し、すべてが順調だった。その後、そのバナナの品種は短期間のうちに全滅し、業界は自分たちが望む特性のほとんどを持つウイルス耐性のバナナを必死に探した。
イギリスの温室でそのバナナを見つけた。彼らはキャベンディッシュの栽培を始め、今ではアメリカで出荷され食べられているバナナの大部分を占めている。
その後、別のカビが発生し、キャベンディッシュ・バナナは絶滅の危機に瀕した。幸いなことに、バナナには他にも500種類以上の品種があり、遺伝子組み換え技術もある。
もちろん、それを「GMOフリー」として売るのは難しいだろうが……。つまり、Microsoft・Windowsはバナナに似ているのだ。
とは、ウォーク・ケリーの漫画『ポゴ』の有名な言葉である。この言葉は、この劇における最後の犯人であり、これまでほとんど語られることのなかったもの……つまり最終顧客であることを表している。
正確に言えば、それはシステム管理者であり、何百台ものPCをホストしている会社の高給取りの従業員であろうと、Microsoftのコードを実行しているPOS端末を数台持っている単なる店主であろうと同じである。
いずれの場合も、エンドユーザーは、テストされていないコードやデータがダウンロードされ、彼らの環境にインストールされることを許可し、彼らのシステムを屈服させたのである。
注意喚起だ!さらに悪いことに、これらのシステムは、集中的な目的のために、エンドユーザーの会社がMicrosoftのモノリシックなシステムから機能を引き出すためにお金を注ぎ込むブラックホールとなる。
Appleこの劇には他にも何人か出演者がいるが、一度か二度言及されただけで、その後は忘れ去られている。
AppleとLinuxだ。BSODに不浸透であるとしてマスコミが言及したのは、Apple製品とGNU/Linux(そして完全なAndroidとBSD)である。
「不浸透 「という言葉は強すぎるが、バナナのある系統が他の系統より疫病に強いように、それらの環境にはしばしば大きな違いがあり、それがより 」耐性 “を高めている。
Appleは、よく練られ、よく管理されたシステム・ディストリビューションだ。
モノリシックでもあるが、数は少なく、Appleのエンジニアによってよく吟味されており、彼らはトップダウンでオペレーティングシステムとそのパーミッションとインクルードに関するすべてをコントロールしている。
Appleはまた、公式ストアにあるアプリケーションを管理しており、(私の率直な意見では)膨大な量のテストと管理なしに、システムレベルのアプリケーションとして何かを実行させることはないだろう。
ハードウエアとソフトウエアのモノリシックなシステムで、すべてが1つの団体によって書かれたものは、最もコントロールしやすく、正しく動作させやすいものの1つだと私は思う。
もちろん、多くのオプションがベンダーのみが提供するものに限定されるため、オプションの柔軟性が最も低いもののひとつでもある。
加えて、Apple社のOSの基盤は、Unixライクなシステムの元祖であるバークレー・ソフトウェア・ディストリビューションから派生したFreeBSDの亜種である。
BSDはMicrosoftのシステムとは大きく設計が異なっており、CrowdStrikeの機能のようなものを提供する方法も異なっている。
特に NetBSD は、いくつかの異なるアーキテクチャ上で動作するという、 もうひとつの要素を加えている。
この多様性は、Intel/AMD ISA のような、ひとつのアーキテクチャに依存する マルウェアの攻撃を退けるだろう。
GNU/Linuxは、Unixライクなシステムを完全に再実装したもので、ソースコードが自由に利用でき、(BSDのいくつかのように)さまざまなハードウェアアーキテクチャ上で動作します。
しかし、上記のどれとも異なり、「Linuxオペレーティング・システム」という用語は、ちょっとした誤用です。一般に「Linux」と呼ばれ、より適切には「GNU/Linux」と呼ばれるものは、実際には別々に作られた部分から構成されている: Linux 「と呼ばれるカーネル、」GNU 「と呼ばれるライブラリ、ツール、コンパイラのセット、」パッケージマネージャ “と呼ばれるこれらのパーツをユーザに提供する方法、そしてこれらすべてをシステムにインストールする方法です。
場合によっては、追加のライブラリを使用して「デスクトップ」を作成するグラフィカル・サブシステムがあり、驚くべきことに、KDEとGNOMEという2つの主要な(そして多くのマイナーな)ものが存在する。
これらに加え、Microsoftには通常2つの主要なファイルシステムがある: NTFSとFATだ。Linuxには多くのファイルシステムがある。
マルウェアの多くは、データがディスク上にどのようにレイアウトされているかに依存する可能性があるため、これは重要なことだ。
GNU/Linux」の多様性に加えて、Debian、Slackware、Red Hat、SUSE、Fedora、Rocky Linuxなど、ほとんどの人がプロジェクト名や会社名で知っている「ディストリビューション」もあります。
これらのプロジェクトは、先に述べたものをすべて取り入れ、システム管理プログラムやデータベースプログラムなど、さらにいくつかのものを加えています。
これらのディストリビューション・バイナリは、個々のディストリビューションによってビルドされます。同じソースコードを使っていても、コンパイラや最適化フラグの違いによって、作成されるバイナリに違いが生じることがあります。
ディストリビューションは別のものと同じカーネルバイナリを使うかもしれませんが、カーネルソースは異なるリリースから来たものであり、異なる時間にコンパイルされ、配布されます。
したがって、全体を通して「GNU/Linux」を使っている会社であっても、異なるディストリビューションを使っている場合、通常、それらは異なる時間にアップデートされ、パッチが当てられます。
GNU/Linuxはモノリシックではありません。
GNU/Linuxとほかのオペレーティング・システムのもう一つの違いは、GNU/Linuxがフリーソフトウェアファウンデーションの一般公衆ライセンス(GPL)のもとでライセンスされていることです。
これは、GNUコードのすべてのバイナリ配布が、ソースコードとそれをビルドする方法を、バイナリを受け取ったエンドユーザの顧客が利用できるようにすることを要求しています。
つまり、エンドユーザの顧客は、ソフトウェアがどのように動作するかを見て、自分自身でソフトウェアを修正するか、ソフトウェアを修正するためにサードパーティを雇うことができるのです。
Androidは、アルファベット(グーグル)というオペレーティング・システム・ベンダーが提供するLinuxカーネルとその他のソフトウェアで構成されている。
そのコードは、インターネットを通じてGoogleから直接アップデートされることもあれば、Android OSを携帯電話、タブレット、ネットブック、その他のデバイスに使用しているOEMメーカーからアップデートされることもある。
マルチベンダー・ディストリビューション・システムという観点から見ると、AndroidはMicrosoft/CrowdStrikeのようなアップデートの状況に対してあまりオープンではない。
今回の障害について、誰かの責任を問うのであれば、以下の3つの責任がある:
CrowdStrike:コードのテストと吟味を適切に行わなかったこと
Microsoft:サードパーティのプログラムがシステム全体をダウンさせることを許さないような、より堅牢な環境を作らなかったこと エンドユーザー:悪いコードをテストして停止させる能力も、受け入れられてしまった悪いコードから回復する能力もないまま、新しいコードを本番環境に直接送り込むようなアップグレード戦略をとったこと。私が「エンドユーザー」と言うとき、家庭や中小企業のラップトップ/デスクトップ・ユーザーのことを言っているのではない。航空会社、銀行、報道機関など、まさにニュースで耳にした「エンドユーザー」のことだ。
CrowdStrikeのライセンスを購入するほど自分たちのシステムは価値があると思っていたのに、この単一障害点から自分たちを守るためにお金も時間も使わなかった人たちのことだ。これらのエンドユーザー
まず第一に、ベンダーからあなたの作業環境へ自動的にダイレクト・パスが送られるようなことは決してあってはならない。
少なくとも、マルウェアを配布する他の業者と同様に、ベンダーを疑ってかかること。OSの新しいバージョンや新しいパッチは、まず「サンドボックス」と呼ばれる、OSの新しいアップデートのテスト以外には使用しないシステムにインストールすべきである。
どうしても必要であれば、このシステムを他のことに使うこともできるが、ミッションクリティカルなこと……たとえば給与計算などには使わない。
変更がサンドボックス環境で吟味された後、他のシステムにデプロイすることができる。第二に、ロールバック計画を立てることだ。
システム全体を少なくとも1つ前のバージョンにロールバックできるようにしておくこと。これは、できるだけシンプルで文書化された手順でなければならない。
結局のところ、本番システムが破壊されたときこそ、管理者が最もプレッシャーにさらされ、ミスを犯しやすいときなのだ。
Most, if not all, of the 私が使ってきた(そしてたくさん使ってきた)Linuxディストリビューションには、これに役立つ3つの特徴がある:
シングルユーザーモードで起動する これは、システムが途中で起動することを可能にする。スタートアップルーチンを経由せず、小さな「ルート」パーティション以外のファイルシステムはマウントされず、他のことをするための最小限のシステムである。適切に設計されたシステムでは、「CrowdStrike」のようなアプリケーションはこの段階では起動しない。システムログ(過去のブートで何が起こったかを教えてくれる)を見て、CrowdStrikeのような不正なプログラムがブート前のカーネルを起動するのを止めるのに十分なツールがあります。 Linuxシステムでカーネルが変更されるたびに、ルートディレクトリにバックアップが作成され、ブートに利用できるようになります。カーネル自体にミスがあり、システムが起動しない場合、以前のカーネルが起動に利用でき、プロセスを続行できます。ベンダーのパッチを待つ必要がない
ほとんどのLinuxディストリビューションでは、エンドユーザーがインストール・メディア(CDまたはフラッシュ・ドライブ)からRAMから実行する「ライブ」システムを作成することができます。
このシステムは、影響を受けたシステム上に存在するリソースを必要としないため、ダウンしたシステムに何が起こっても実行することができます。
これにより、システム管理者は、ダウンしたシステムを調査・修復するために必要なすべてのツールを備えた、完全に機能するシステムを持つことができます。
Linux “システムのすべての多様性に対して、これらの多様なシステムの管理は、エンドユーザー・チームが簡単に変更できるオープンソース・ツールによって理解し、実装することができます。
ここからがすごいところなのだが……
エンドユーザーはその代償を払うことになる。私は弁護士ではありませんが(IANAL)、システム会社やソフトウェア会社で働いた経験があり、基本的なソフトウェア保証には価値がないことを知っています。
保証書の価値は紙に書かれたものよりも低く、ほとんどの場合、保証書は紙にさえ書かれていない。
私はまた、世界最大のマルチライン保険会社で4年間働いていたので、保険やアクチュアリーなどについても少しは知っている。
最後に、私は(50年前ではあるが)大学で4学期ビジネス・ローを学んだので、大小の企業を訴えることについては少し理解している。
役に立たない保証には単純な理由がある。ソフトウェア・ベンダーの弁護士たちは、自社のソフトウェアに何の役にも立たない保証書を書かせようとしないのだ。
ソフトウェア・ベンダーは、あなたの会社がどれほどの規模なのか、あるいはあなたが何をしているのか知ることができないのだから、自社のソフトウェアがあなたの会社を破壊するようなことをしないという保証をすることはできない。
私は、ソフトウェアが文字通りハードウェアのモニターを炎上させ、実際に建物を全焼させることができた時代を覚えている。
ソフトウェア会社(あるいはどの会社でも)は、どうやってそれをカバーする保証書を書くことができるでしょうか?というわけで、あなたの弁護士がソフトウェアに良い保証をつけることを許さない3つの要素がある。ソフトウェア・ベンダーは、あなたがそのソフトウェアをどのように使うかを知らない。
ソフトウェア・ベンダーは、1つのシステムでどれだけの損害が発生するのか、その限界を知らない。
ソフトウェアベンダーは、彼らが彼らの責任の限界を知ることができないので、あなたが話しているどのように多くのシステムを知りません。
ソフトウエアの不具合によるビジネスへの損害を補償してもらいたいのであれば、マルチラインの保険会社(大手または引受保険会社グループ)に行き、あなたのニーズをカバーする保険プランに加入することだ。保険会社は、このビジネスを引き受ければ、起こりうる損害の大きさ、それが起こる確率を調査し、保険料がいくらになるかを教えてくれる。
また、この種の損失を抑えるのに役立つ「ベストプラクティス」を教えてくれる。保険料が決まれば、コンピュータの本当の総所有コスト(TCO)を知ることができる。
サイバー保険(私が話しているような包括的な災害保険とは異なる)を扱っている会社もある: https://www.cnbc.com/2024/07/24/crowdstrike-biggest-test-yet-for-cyber-insurance-buffett-warned-about.html クラウドストライクは、おそらくこれらのサイバー保険会社に打撃を与え、将来の保険料が上がることを意味する。
これは「ホールの法則」のひとつである。マーフィーは私に何もしてくれない。そうでなければ、あなたのTCO計算は、クラウドストライク(あるいはそれに類するもの)が決して起こらないふりをしていることになる。そして、それがどれほど悪い結果を招いたかを私たちは見てきた。
だから私たちはお金の流れを追う: 航空会社は乗客に「申し訳ありません、私たちのせいではありません」と言う(これは上記の理由から厳密には正しくない) 銀行は顧客に「申し訳ありません、できるだけ早くお給料の支払いを済ませます」と言う 911番通報が処理されない……そう、申し訳ありません エンドユーザーが支払う……誰も支払わない。
ただし、CrowdStikeの株価は30%下落している。もちろん、株価はいずれ回復するかもしれないが……株価の下落と悪評は痛い。
クラウドストライクの最高経営責任者(マカフィーが同じようなミスを犯したときはCTOだった)は剣を振るわなければならないかもしれないが、この論文を書いている時点で50億ドルから100億ドルの損害賠償にはならない。
ここで広告が入る。
ここで、あなたは無料のホワイトペーパーを読むための代償を支払う。
ここで私はあなたからお金をむしり取り、行動を起こさせる。この問題を解決するためのコストは、システム管理者をよりよく訓練することだ。
そして、会社全体の障害を防ぐより良い方法を調査する時間を与えよう。システム全体の障害とその復旧方法を練習させる。
サンドボックス、ファイアウォール、代替アーキテクチャ、オペレーティング・システムの多様性などを使ってシステムを保護し、ビジネスを実行する方法について、本や記事(オンラインや無料のものもある)を読ませる。
仮想マシン、コンテナ、その他の現代的な方法を使い、ビジネスの厄介な中断を隔離する。
高速リカバリーが可能で、耐障害性に優れたオペレーティング・システムを探す。優れたシステム管理について、またシステム管理を経費としてではなく、資産として捉えるべきことについて、私は何時間でも話し続けることができる。
毎年7月の最終金曜日である「システム管理者の日」だけでなく、毎日システム管理者に敬意を払いましょう。
予防は最善の保険です。最後に、Linux Professional Institute (lpi.org)を見てください。
Linux Professional Instituteは、私が9年間ボランティアで理事長を務めた後、名誉理事長になったことを誇りに思っています。以上、宣伝でした。おそらくCrowdStrikeよりずっと痛くないだろう。
Carpe Diem!(その日を摘め)