ニュース

ブルスクを引き起こしたCrowdStrikeはなぜリスクが高い「カーネルモードドライバ」で動作していたのか

 7月19日にWindows環境において、850万台という世界規模のブルースクリーンを引き起こし、多くのシステムで障害が発生した原因となったセキュリティソリューションの「CrowdStrike」。このたびMicrosoftがセキュリティブログの27日の投稿において、今回ブルースクリーンを引き起こした原因と、Windows向けセキュリティソリューションの仕組みなどについて解説した。

 これによると、Microsotがブルースクリーンを引き起こした際のクラッシュダンプを分析すると、CrowdStrikeが開発したカーネルモードドライバ「CSagent.sys」で、境界外読み取りのメモリ安全性エラーが発生していることが分かった。

 このCSagent.sysは、ファイルの作成や変更といったファイル操作に関する通知を受信するために、マルウェア対策で一般的に使用される「ファイルシステムフィルタドライバ」として登録されており、名前付きパイプ(プロセス間のデータ転送のための仕組み)の作成と実行などを評価する。

 その評価の段階で「センサー設定」を読み込んで参照しているのだが、UTC時間の19日4時9分に配信されたバージョン「291」において問題が起こった。一般的なC2フレームワークによって使用され、新たに発見された悪意のある名前付きパイプをターゲットにするように設計したところ、ロジックエラーが発生してしまったという。このロジックエラーがCSagent.sysによるブルースクリーン発生を引き起こしたわけだ。

7月19日を境に急増したブルースクリーンエラーのレポート

 つまり、セキュリティソリューションも安全な方法に基づいて展開しない限り、今回のような大規模なシステムトラブルに見舞われるようになるわけだが、ではなぜセキュリティソリューションがそんなリスクが高い「カーネルモードドライバとして動作しなければならないのか」疑問に思うユーザーも少なくないだろう。これについてMicrosoftは、カーネルモードドライバとして動作させる“メリット”として以下を挙げている。

セキュリティ関連イベントの可視性と強制性

 カーネルモードドライバはブートの初期にロードされるため、ユーザーモードのアプリケーションが実行する前にロードされる可能性のあるブートキットやルートキットといった脅威を検出できるなど、システム全体の可視性が得られる。

 またMicrosoftは、プロセスおよびスレッド作成用のシステムイベントコールバック、ファイルの作成/削除/変更といったイベントを監視できるフィルタドライバなど豊富な機能を提供している。カーネルアクティビティによってドライバのコールバックがトリガーでき、ファイルまたはプロセス作成といった動作をブロックするタイミングが決定できる。

性能

 高スループットネットワークアクティビティの分析やデータ収集といった分野では、カーネルモードドライバであるという性能上の利点が期待できるため、セキュリティベンダーで多数使われている。ただ、Microsoftは、カーネルモード以外でもカーネルモードと同様の性能を実現できるデータ収集や分析を最適化できるシナリオは多くあるとしている。

改竄防止

 マルウェアや標的型攻撃、悪意のある内部関係者など、たとえ攻撃者が管理者レベルの権限を持っていたとしても、ソフトウェアが無効化されないようにするため、できるだけ早くドライバを読み込み、システムイベントを監視する必要がある。

 このためWindowsはEarly Launch Animalware(ELAM)としてマークされたドライバをブートプロセスの早い段階で起動するメカニズムを提供している。CrowdStrikeのCSbootドライバはこのELAM署名を利用している。

セキュリティと信頼性のバランスを取ったセキュリティ製品アーキテクチャの例

 カーネルモードドライバはWindowsの最も信頼できるレベルで実行されており、封じ込み機能や回復機能が本質的に制限されている。つまりセキュリティベンダーはそのリスクと可視性/性能/改竄防止といったメリットを天秤にかけ、バランスを取る必要がある。CrowdStrikeの今回の件で言えば「メリットを優先した」と言える。

 もっとも、現在では必要最小限の部分だけカーネルモードで動作させ、そのほかの部分は回復が容易なユーザーモードで動作するようなセキュリティ製品アーキテクチャを実現できるとMicrosoftは言う。今後はCrowdStrikeのインシデントを教訓に幅広いエコシステム全体と協力しながら、セキュリティのベストプラクティスに関するガイダンスを継続的に共有していくとしている。