前号: No 364 / 次号: No 366 / 一覧(note.com)へ / ブログページに戻る

メールマガジン「がんばりすぎないセキュリティ」No365 (24/07/22)

Windowsのブルースクリーンが起きる理由は?(365号)


2024年7月19日にWindowsがあちこちでブルースクリーン(システム停止)になるという騒動が起きました。

原因はCrowdStrikeという会社が提供するFalconというセキュリティ製品のアップデートだったようです。
このアップデートにバグが残っており、それがクラッシュを引き起こしたようです。

今回は、WindowsのブルースクリーンとCrowdStrikeのバグとの関係についてお話をします。

1. ブルースクリーンとは?

ブルースクリーンというのは俗称です。BSOD(Blue Screen Of Death)と呼ばれることもあります。 この画面はWindowsが処理を続行できなくなったことを示します。 基本的にこの画面が出た場合、利用者にできることはありません。 確かにメモリダンプを取るなどはできますが、それはプログラマのバグ調査用であって、利用者を救うものではありません。 ブルースクリーンが出ると、その時点で行っていた作業は全て失われます。(自動セーブで助かる場合もありますが) とはいえ、ブルースクリーンが出たからといってパソコンが壊れることはまずありません。 通常は再起動すれば、何ごともなかったかのように使えます。 (今回のトラブルではアップデートで更新された一部のファイルを削除しないと再度ブルースクリーンになるようです) ブルースクリーンは、コンピュータプログラムの誤動作(通常はバグ)で起きるものだからです。(かなりレアですが、ハードウェアトラブルの可能性もあります)

2. なぜソフトは異常終了するのか?

皆さんもパソコンを使っていてソフトが突然動かなくなった(異常終了した)経験があるのではないでしょうか。 この理由は通常はバグによるものです。 ですが、バグがあると異常終了するって変な感じがしませんか? バグがプログラマのミスだというなら、処理結果が違うことになるのがスジです。 どうして異常終了なんて妙な結果になるのでしょうか? プログラマのミスにはいくつかのパターンがあります。 一つは仕様の誤解で、処理結果がAとなるべきところを間違ってBとなるようにプログラムを作ってしまった場合です。 この場合は、異常終了はせず期待と違う処理結果になります。 一方、プログラマ本人も気付かずに仕込んでしまうバグがあります。 例えば、10人分のデータしかないのに、処理すべき人数の計算をどこかで間違って11人になってしまっていたとします。 この場合でも、1人目から10人目まではデータはありますから問題は起きません。 ところが、11人目のデータ(そんなのは存在しない)の処理を始めると困ってしまいます。 それでも、プログラムが11人目のデータを取りに行こうとすると、OS(Windows)がそれを監視していて「おっと、そこへのアクセスは許可できないな」とソフトに「待った」をかけます。 「待った」が起きると、Windowsはシステム全体を守るために、そのプログラムを強制的に終わらせます。これが異常終了です。 余談ですが、異常終了となるケースを製品の出荷前に発見して修正することはプログラマの大切な仕事です。異常終了の原因のほとんどは考慮不足や思い違いによるものですが、この原因を見つける作業はホント大変です。筆者も「そういうことか!」と何度叫んだことか...。

3. ブルースクリーンの正体はWindowsの異常終了

ソフトが異常終了したからといって、Windowsはブルースクリーンになりません。 Windows(に限らずOSというもの全般)はかなり特殊なプログラムで、他のプログラムに様々な機構を提供しています。画面への文字表示、キーボードやマウスによる入力を伝える、ファイルを読み書きする、といったことは全てOSがソフトに提供している機構です。 また、他のプログラムの始動や停止を行えるようにするため、通常プログラムよりも上位モード(カーネルモード)で動作しています。 上述の「待った」もそういった上位モードならではの動作となります。 ですが、そんな特別なWindows自身が異常終了したらどうなるでしょうか?誰が「待った」をしてくれるのでしょうか? 実は、Windows自身が自分に「待った」をしているのが、ブルースクリーンなのです。

4. カーネルモード

今回、CrowdStrikeのFalconが原因でブルースクリーンになったと報道がされています。 ですが、どうしてWindowsはFalconというソフトに「待った」をかけて異常終了させられなかったのでしょうか? 通常のソフトは他のソフトの状態を覗いたり、監視したりはできません。 そんなこと出来ると危ないですし、そんなことができる必要もないですしね。 今回、問題となったFalconはマルウェア対策ソフトです。 このマルウェア対策ソフトというのはWindowsのソフトの中でもかなり特殊です。 なぜなら、他のプログラムの挙動を監視することが必要だからです。 そのため、マルウェア対策ソフトは特別にWindowsと同じ上位モードで他のソフトを監視できるのです。 この上位モードのことをWindowsではカーネルモードと呼びます。 これに対して、一般のプログラムはユーザモードで動作しています。 だから、上位のカーネルモードで動いているWindowsはユーザモードのプログラムに「待った」をかけることができるのです。 余談:管理者権限 (かなり難しい話になります。わからなければ無視して大丈夫) Windowsをよく使っている方なら「管理者権限」というものをご存知だと思います。 管理者権限というのは、Windowsのアクセス管理機能のことを示します。 それに対して、カーネルモードはCPUが提供するプログラムの動作モードのことで、他のプログラムの動作を制御する権限を持ちます。

5. カーネルモードで落ちると救えない

「待った」をかけられるのは、ユーザモードで動いているプログラムだけです。 Windowsと言えど、カーネルモードで動いているプログラムに「待った」はできません。 (やってしまうと、Windowsそのものが終了してしまいます) それでも「待った」となった時の最後の手段として、Windowsが用意しているのがブルースクリーン、というわけです。

6. 結局何が起きていたのか?

既に報道などでご存知の方も多いでしょうが、今回の騒動はFalconのカーネルモード部分で異常終了が発生したのが原因です。 具体的には、アクセス権のないメモリ領域にアクセスしようとしたのが原因です。 もちろん、これはブルースクリーンになった直接原因であって、真の原因(直接原因を引き起こしたきっかけ)は現在も調査中です。

7. CrowdStrikeの対応はかなり良い

今回は相当数のパソコンでブルースクリーンになったようですので、テスト工程に何らかの問題があったように思いますが、それでも事後対応はさすがセキュリティで食ってる会社だなと思いました。 問題を含んだファイルを公開したのが、4:09で、配布を停止したのが5:27ですので、配布を始めてから、実に1時間17分で配布を止めています。(時刻はいずれも世界標準時) これは明らかに事故発生マニュアルが整備され、それに従って全メンバが動くように十分な訓練が行われていることを示しています。 また、発生日(7/19)の翌日(7/20)には概要を伝えるブログを公開しておりこちらも好印象でした。 実際にブルースクリーンに巻き込まれた方は大変だったと思いますが、事後対応は優秀ではないでしょうか。

8. まとめ

2024/7/19(金)にCrowdStrike社のFalconというマルウェア対策ソフトのアップデート(パターンファイル更新)を行うとブルースクリーンで落ちるという現象が各地で起きたようです。 筆者も最初にニュースを見た時は何かのジョークイベントかと思いました。 (全員がブルースクリーンになったパソコンの前で苦笑いしている) 調べてみると、Falconの監視機能がデバイスドライバ(Windowsの一部として動作する機構)となっていて、その中で不適切なメモリ領域へのアクセスを行い、結果としてWindows自身が処理を続行できなくなり、ブルースクリーンになったというものです。 提供元では1時間強でスグに配布を停止したようですが、既に大量のダウンロードが行われてたようで、各地でブルースクリーンが発生していたようです。 提供元は、回復手順もスグに公開し、状況報告も翌日にはブログで行うなど、いかにもセクリティ対策のベンダーらしく手堅い動きを見せています。 筆者としては、この事象がなぜ避けられなかったのかが気になります。 特に、出荷前テストで検出できなかった理由は興味津々です。 CrowdStrike社からの最終報告を待つこととなりますが、これが興味深いものでしたら改めてご報告仕様と思います。 今回はCrowdStrike社が引きおこしたブルースクリーンのお話でした。 次回もお楽しみに。

前号: No 364 / 次号: No 366 / 一覧(note.com)へ / ブログページに戻る