限りなく暗黒に近いブルー:こうしす! こちら京姫鉄道 広報部システム課 @IT支線(49)
情報セキュリティの啓発を目指した、技術系コメディー自主制作アニメ「こうしす!」の@ITバージョン。第49列車は「ブルースクリーン」です。※このマンガはフィクションです。
「こうしす!」とは
ここは姫路と京都を結ぶ中堅私鉄、京姫鉄道株式会社。
その情報システム(鉄道システムを除く)の管理を一手に引き受ける広報部システム課は、いつもセキュリティトラブルにてんてこ舞い。うわーん、アカネちゃーん。
「こうしす!@IT支線」とは
「こうしす!」制作参加スタッフが、@IT読者にお届けするセキュリティ啓発4コマ漫画。
第49列車:BSOD(Blue Screen of Death)
井二かけるの追い解説
マンガのテーマは「セキュリティ製品によるブルースクリーン」です。
2024年7月19日、日本時間14時ごろ、EDR(Endpoint Detection and Response)製品「CrowdStrike Falcon」を導入したWindows PCが次々とブルースクリーンを表示する不具合が発生しました。これによりCrowdStrike Falconを導入しているさまざまな企業で業務がストップし、一部の航空会社は欠航を余儀なくされ、一般の乗客にも影響が及ぶ事態となりました。
直前に「Microsoft Azure」のシステム障害が起きていたことから「Windows Updateで何かやらかしたのか」「大規模なサイバー攻撃か」などの臆測を呼びましたが、後にクライアントPCにインストールされたCrowdStrike Falconのセンサーが原因であることが明らかになりました。
その後Microsoftも復旧用のツールを公開しました。
本件は、「EDRの導入」や「BitLockerでのディスク暗号化」など推奨されるセキュリティ対策を励行している企業であればあるほど泥沼にはまる事象でした。クライアントPCが原因でシステムが使用できなくなるという事案が比較的珍しいこともあり、「1台1台復旧していかなければならない、しかも金曜日に」という点も併せて情シス泣かせだと話題になりました。
原因は「ぬるぽ」だったのか?
当初、X(旧Twitter)では、nullポインタ参照(いわゆる「ぬるぽ」)や未初期化のメモリ読み取りである可能性が指摘され話題になりました。これらは多くのプログラマーが経験する実装ミスで、メモリアクセス違反でプログラムの異常終了を引き起こしたり、脆弱(ぜいじゃく)性となり得たりします。
EXP34-C. null ポインタを参照しない - CERT セキュアコーディングスタンダード(JPCERT/CC)
EXP33-C. 初期化されていないメモリからの読み込みを行わない - CERT セキュアコーディングスタンダード(JPCERT/CC)
これに対して、CrowdStrikeの公式ブログは、下記のように述べました。
Although Channel Files end with the SYS extension, they are not kernel drivers.(Channel File 291が原因だが、これはカーネルドライバではない)
This is not related to null bytes contained within Channel File 291 or any other Channel File.(Channel File 291や他の Channel Fileに含まれるnullバイトが原因ではない)
Technical Details: Falcon Content Update for Windows Hosts(CrowdStrike)
一見カーネルドライバの問題ではないという説明ですが、異常な「Channel File」を読み込んだ結果カーネルドライバがクラッシュしたのであれば、やはりカーネルドライバの実装に問題があると考えざるを得ません。そして、内部的に関連があるかもしれませんが、一般論では、ファイルに含まれるnullバイトはnullポインタ参照とは何の関係もありません。
従って、この時点での公式発表では、クラッシュの直接の原因がカーネルドライバでのnullポインタ参照や未初期化メモリ参照であったかどうかについては、直接的には言及していませんでした。
そして、2024年7月27日、CrowdStrikeが詳細な情報を発表しました。
> Due to a bug in the Content Validator, one of the two Template Instances passed validation despite containing problematic content data.
> Channel File 291 resulted in an out-of-bounds memory read triggering an exception
この報告によると、当初予想された原因とは異なり、境界外メモリ読み取りが原因であることが明らかになりました。
また、Microsoftの公式ブログでもこれを検証する記事が公開されています。
これによると、NULLチェックが行われているため、原因がnullポインタ参照ではなかったことが改めて確認されています。
> but we can see in the disassembly that there is a check for NULL before performing a read at the address specified in the R8 register:
とはいえ、いずれにしてもプログラマーであればよく経験する不具合には変わりありません。よくあるミスが全世界に重大な影響を及ぼした事例としては、最大級といえるでしょう。
今回はブルースクリーンという形で顕在化しましたが、潜在的に攻撃に利用可能な脆弱性だった可能性もあり得ます。プログラマーとしては背筋が寒くなる事態でした。
カーネル空間でサードパーティーのプログラムを実行するリスク
EDRなどの製品は、アプリケーションの動きを監視するため、自分自身を改ざんされることを防止するために、カーネル空間で実行されるデバイスドライバとしてクライアントPCにインストールされ、早期起動マルウェア対策(ELAM)として、OS起動の早い段階でロードされます。多くの製品で行われる方式で、通常は大きなトラブルは発生しません。しかし、カーネル空間でプログラムを実行することにはリスクが伴います。
カーネル空間で実行されるデバイスドライバは特権モードで動作するため、理論上はシステムに無制限にアクセスできる他、クラッシュすればOSまで巻き込んでしまうなどのリスクがあります。もしデバイスドライバがマルウェアであれば、システムに対して何でもできてしまうことになります。
そこで最近のWindowsは、セキュアブートが有効になっている場合は、Microsoftによるデジタル署名がなければデバイスドライバをロードできない仕組みとなっています。
しかし、仮にドライバ本体にデジタル署名が付与されていても、確認できるのはMicrosoftのデジタル署名以降は改ざんされていないことだけです。もしそのドライバに不具合や脆弱性があれば、引き続きリスクとなり得ます。今回のように異常な外部ファイルをロードした際に異常動作を引き起こすケースはその一つです。
その一方で、EDR製品はパフォーマンスが求められるからこそカーネル空間でアプリケーションの動きを監視しているのであり、そのバランスが難しいのです。
また、現状でもMicrosoft Windows Hardware Quality Labs(WHQL)によって署名されたドライバーは、Microsoftにより一定のチェックが行われているとはいえ、今回の事態を防げませんでした。OS開発元の責任として、万能策とはいえないまでも、メモリ安全な言語でドライバを開発することや、適切に例外処理すること、そして、外部ファイルアクセスに関して一定のポリシーを満たすことなど、より開発に踏み込んだ内容をデジタル署名の要件にするよう、ユーザーから求められるようになるかもしれません。
それぞれの対策
開発者は十分なテストと段階的な展開を
「大いなる力には大いなる責任が伴う」は、IT職種であればよく聞く言葉です。
カーネル空間で実行されるプログラムは、基本的に何でもできてしまう強大な特権を持っています。従って、開発もテストも慎重に行わなければなりません。
確かに、カーネル空間で実行するコードを最小限にすることや、メモリ安全な言語を使用することも有効な対策です。しかし、テストせずして品質は確保できません。
異常な外部ファイルを読み込んだ際に異常動作が起きないようにしなければなりません。たとえWindows UpdateによってWindows側が期待する状態ではなくなっても、起動不能に陥らないようにする必要があります。
それでもテストで全てのバグは検出できません。場合によってはテストをすり抜けてしまうこともあることでしょう。そのときに影響が一気に広まらないようにするための一つの方法が、段階的な展開です。
例えば、まず開発会社内で展開し、次に最速での配信を求める顧客に展開し、最後に一般顧客に配信するなど、時間差で少しずつ範囲を広げて展開することで、影響の範囲を限定できます。
セキュリティ製品の場合、1分1秒を争う場合があるかもしれませんが、顧客全員がリスクをのんでまで最速の展開を求めているとは限りません。その点においても、顧客への説明と合意が重要といえるでしょう。
ユーザー企業が行える自衛策
サードパーティーのセキュリティ製品は、OSに対して後付けとなる都合上、どうしてもインシデントのリスクが純正製品よりも高くなると認識しましょう。トラブルが起きたときに自社で対応できるノウハウを持っておかなければなりません。
今回のトラブルで最も復旧が困難だったのは、BitLockerでのディスク暗号化が有効になっていたケースでした。だからといってBitLockerを無効化するのは得策ではありません。
例えば、「Microsoft Intune」で端末管理をしていれば、BitLockerの回復キーはクラウド上にバックアップされますが、サードパーティー製のMDM(Mobile Device Management:モバイルデバイス管理)製品やIT資産管理製品を用いている場合は、どこにもバックアップされない可能性があります。
そうしたリスクの備えとして、以下の対策が考えられます。
- 使用中のMDM、IT資産管理製品などでBitLockerの回復キーが保管されていることを確認する(保管されていないなら、製品の導入や何らかの手段で収集して保管する)
- 回復できなくても困らないようバックアップする
- そもそもローカルにファイルを保存しない(ローカルデータは諦めて再キッティングで対応する)
端末キッティングの際にBitLockerの回復キーを手動で収集したり、スクリプトで収集を自動化することも可能ですが、人的ミスや情報管理の観点からは、Microsoft Intuneなど、BitLockerの回復キーを取得できるMDM製品やIT資産管理製品を使用する方が望ましいでしょう。
蛇足ではありますが、個人のPCでもバックアップとBitLocker回復キーの保管は重要です。Windows Updateやセキュリティ製品の不具合などでWindowsが起動しなくなることは昔から度々生じてきたからです。
MicrosoftアカウントでWindows PCにログオンしていれば、クラウド上にBitLockerの回復キーが保存されますが、ローカルアカウントで運用している場合は、自分でBitLockerの回復キーを管理しなければなりません。印刷して安全に保管するなどの対策が必要です。
SNSでの情報共有は慎重に
本件はCrowdStrike Falconが原因で発生した不具合のため、「ブルースクリーンで仕事にならない」などとSNS投稿すれば、その会社でCrowdStrike Falconを使用していると明らかになってしまいました。
理想的にはどの製品を使用していてもセキュアであるべきで、それを秘密にする必要があるのかどうかには議論があります。しかし、そのポリシーは組織として決めるべきものです。
脊髄反射的にSNSに投稿すると、うっかり機密情報の漏えいになるかもしれません。その点は注意が必要でしょう。
とはいえ、SNSでの投稿は迅速に情報共有が進むというメリットがあるため、一概に否定できない難しい問題です。本ケースでも誰かが情報を共有しなければ「原因不明の謎のブルースクリーン」として、多数の情シスが途方に暮れていたかもしれません。
本事例は比較的早い段階でSNSで対処法が共有されましたが、会社所有のPCを個人の判断で復旧するのも避けることが望ましいでしょう。操作ミスで事態を悪化させることもありますし、SNSで共有されている情報が正しいとも限りません。自衛のためにも、まずは上司や担当部署に相談するようにしましょう。
ブルースクリーン騒ぎに乗じたサポート詐欺にも注意が必要です。いずれにしても、個人の判断だけで拙速に行動しないことが大切です。
Copyright 2012-2024 OPAP-JP contributors.
本作品は特に注記がない限りCC-BY 4.0の下にご利用いただけます
筆者プロフィール
原作:井二かける
アニメ「こうしす!」監督、脚本。情報処理安全確保支援士。プログラマーの本業の傍ら、セキュリティ普及啓発活動を行う。
著書:「こうしす!社内SE 祝園アカネの情報セキュリティ事件簿」(翔泳社)2020年2月発売
「ハックしないで監査役!! 小説こうしす!EEシリーズ 元社内SE祝園アカネ 監査役編 [1]」(京姫鉄道出版) 2022年6月発売
2024年8月、「こうしす!EE 総集編映画版」上映決定!
- X(Twitter):@k_ibuta
解説:京姫鉄道
「物語の力でIT、セキュリティをもっと面白く」をモットーに、作品制作を行っています。
原作:OPAP-JP contributors
オープンソースなアニメを作ろうというプロジェクト。現在はアニメ「こうしす!」を制作中。
- X(Twitter):@opap_jp、@kosys_pr
- 公式サイト:Open Process Animation Project Japan(OPAP-JP)
- 貢献者一覧:こうしす!/クレジット
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- CrowdStrikeが引き起こした大規模障害の根本原因はメモリアクセス違反、Microsoftが確認
CrowdStrikeが提供するセキュリティプラットフォーム「Falcon」の構成ファイルの不具合により、世界中の多数のWindowsデバイスでブルースクリーン問題が発生した。これを受けてMicrosoftは、この障害の根本原因の技術的概要や、現在のセキュリティ製品がカーネルモードドライバを使用する理由について公式ブログで解説した。 - CrowdStrike、約850万台のWindowsデバイスで発生したブルースクリーン問題を謝罪 原因と対処法を公開
セキュリティベンダーCrowdStrikeが提供する「CrowdStrike Falcon」のWindowsシステム用構成ファイルの不具合により、約850万台のWindowsデバイスでブルースクリーン問題が発生した。同社は謝罪と声明を発表し、大規模障害に至った原因と問題の修正、対処法を特設ページに掲載した。 - サポート詐欺に引っ掛かるためにもIT知識が必要なのね
情報セキュリティの啓発を目指した、技術系コメディー自主制作アニメ「こうしす!」の@ITバージョン。第48列車は「偽セキュリティ警告」です。※このマンガはフィクションです。