セキュリティ製品の信頼性を維持する作業のほとんどは目に見えません。ユーザーはスキャンが完了したこと、脅威がブロックされたこと、夜間にアップデートが適用されたことを目にしますが、その下にあるプラットフォームは目に見えません。ランタイム、マネージドライブラリ、ネイティブドライバ、 Windows 要件はすべて最新の状態に保たれ、数百万ものエンドポイント間で連携して動作する必要があります。.NET 10への移行は、プラットフォームを常に進化させ続けるための取り組みの一例であり、この記事で重点的に取り上げる内容です。
これらのアップグレードをメンテナンス作業と呼んで次に進むのは簡単でしょう。しかし、それは過小評価です。私たちのコードは、最も機密性の高い部分のすぐ隣で、昇格された権限で継続的に実行されます。 Windows 。
ランタイムやサードパーティライブラリからネイティブドライバ、オペレーティングシステムの要件に至るまで、当社のソフトウェアが動作する環境は、スタック内のあらゆる依存関係によって影響を受けます。どれか一つに変更が生じると、それに依存するすべての要素も変更する必要が生じる可能性があります。
問題点:プラットフォームは停滞することで遅れをとる
エンドポイントセキュリティの世界では、状況は常に変化し続けている。 Windows 脅威も進化する。ハードウェアも進化し、ARM64搭載のノートパソコンから、コードが最初に書かれた時代よりもはるかに多くのメモリと高速なストレージを備えたマシンへと進化している。
現状維持のプラットフォームは、決して現状のままではいられません。むしろ、時代遅れになってしまいます。依存関係やランタイムのリリースを一つでもスキップすると、私たちが構築してきたエコシステムと、現在安定しているエコシステムとの間のギャップはどんどん広がっていきます。
最新のランタイム、特に.NET 10は、セキュリティの向上、コード実行速度の向上、メモリ使用量の削減、そしてより充実した診断機能を提供します。また、エンジニアの作業効率を高めるための言語およびツールの改善ももたらします。
セキュリティソフトウェアにとっても、そのリスクは特に高い。
- ウェブアプリケーションはデプロイメント時にロールバックできますが、顧客のエンドポイントに既にインストールされているソフトウェアはロールバックできません。
- 私たちのコードは、カーネルドライバや改ざん防止機能と連携して、高い権限で実行されます。
- ランタイムの不具合は、1台のサーバーだけに影響を与えるものではありません。数百万台のマシンに影響を与える可能性があります。
そのため、ランタイムのアップグレードは、セキュリティ機能と同様に厳格に扱います。
課題:すべてが一緒に動く
Malwarebytes のためにWindows これは単一のプログラムではありません。これは協調システムです。ユーザーインターフェース、複数の長時間実行されるプログラム、 Windows サービス、インストーラー、自己更新パイプライン、プラグインインターフェース、およびサードパーティが管理する依存関係。
これらはネイティブドライバーと検出エンジンの上に位置します。.NET 10 への移行では、管理された部分を対象としました。 Malwarebytes このネイティブコア部分はそのまま残しつつ、異なるレイヤー同士が連携して動作する必要がある。
移行には、複数の要件を同時に満たす必要がありました。
- セキュリティ上重要なコードは、変更前と変更後で全く同じように動作する必要があった。
- ネイティブドライバと改ざん防止レイヤーは、マネージドコードと連携して正しく動作し続ける必要があった。
- インストーラーとアップデートパイプラインは、新しいランタイムファイルをデプロイし、古いファイルをクリーンアップする必要がありました。
- プラグインとサードパーティ製の依存関係は互換性を維持する必要があった。
- 既存Malwarebytes 設備は稼働を続けなければならなかった。
- 自動検証は、すべての経路を手作業で検査しなくても結果を信頼できるほど、十分に広範囲にわたるものでなければなりませんでした。
マネージドコードとネイティブコードの境界は特に注意を払う必要がある。サービス内のマネージドコードは、P/InvokeやCOMなどのインターフェースを介してネイティブコンポーネントと通信する。ランタイムの変更は、これらの異なる部分がどのように動作するかに微妙な影響を与える可能性がある。 Malwarebytes コミュニケーションを取り、協力し合う。
そうした違いはデモでは決して明らかにならないかもしれません。1万台に1台しか存在しない可能性もあります。重要なのは、顧客が気づく前にそれらを見つけ出すことです。
すべてのアップデートが同じように見えるわけではありません
依存関係を更新する主な理由は3つあります。自社で更新する場合、基盤となるプラットフォームの仕様により更新を余儀なくされる場合、または脆弱性によって更新を強いられる場合です。それぞれ更新までの期間は異なります。
任意的な近代化。新機能、バグ修正、セキュリティ強化などを活用するために、新しいランタイム、ライブラリのメジャーバージョンアップ、または新しいプラットフォーム機能への移行を選択する場合があります。
ベースラインの変更。プラットフォームの要件が進化するにつれて、古い互換性の制約が近代化を妨げる場合があります。たとえば、.NET 10 への移行により、アプリケーションのベースラインを更新し、より新しいサポート対象のランタイムを採用することができました。同じ変更の一環として、 Windows 7 サポートは非推奨となりました。
強制パッチ適用。弊社が提供しているライブラリや、弊社が依存しているシステムに脆弱性が発見されることがあります。このような場合、変更はもはや任意ではなく、スケジュールも弊社でコントロールできるものではありません。しかし、弊社がコントロールできるのは、テスト、リリースプロセス、段階的な展開といった準備体制を整え、新たな問題を引き起こすことなく迅速に対応できるようにすることです。
理由は様々で、時期も異なるが、いずれの場合も同じように慎重な対応が必要となる。
.NETへの移行:なぜ移行を行ったのか
.NET 10 に移行すると、 Malwarebytes より安全で、サポートされ、有能な基盤Windowsさらに、いくつかの相乗効果も期待できます。
セキュリティ。最新のランタイムは、より安全なデフォルト設定、より強力な暗号化、メモリや相互運用性のバグに対する対策など、マイクロソフトが継続的に取り組んでいるセキュリティ対策の恩恵を受けています。マイクロソフトが積極的にサポートしているランタイムを使い続けることで、脆弱性が発見された際に修正プログラムを継続的に適用できます。
サポートされている基盤。華やかな理由ではないかもしれませんが、.NET 10 は、サポートされ、積極的に開発されているプラットフォーム上に留まり、新しいバージョンとの整合性が高まります。 Windowsこれにより、将来の修正、機能追加、改善を単発のプロジェクトではなく、日常業務として容易に取り入れることができるようになります。
診断機能と可観測性。最新の.NETには、より強力な組み込みトレース、メトリクス、クラッシュ診断機能が備わっています。セキュリティ製品においては、コードが現場でどのように動作するかを理解することが重要です。より優れた診断機能は、信頼性の問題を特定し解決するのに役立ちます。
パフォーマンスとメモリ効率。最近の.NETリリースでは、ジャストインタイムコンパイラ、ガベージコレクタ、コアライブラリが改善されました。当社のプロセスはバックグラウンドで終日実行されるため、その実行効率とメモリ管理効率は重要です。これらの機能により、効率性を向上させる機会が増えますが、その影響はコンポーネントによって異なります。
.NETへの移行:その方法
基本原則は単純だ。証拠が許容する以上の速さで前進してはならない。
まず、専用のブランチで作業を分離することから始めました。プラットフォームのターゲットを変更し、管理対象の依存関係をすべて更新することで、新しいランタイムとコードベースが、どのコンポーネントを出荷すべきかを正確に認識できるようにしました。
これにより、アップグレードに伴うあまり目立たない影響の一部が早期に明らかになった。例えば、名前が変更されたり、ランタイムに統合されたりしたライブラリ、不要になったファイル、そしてそれらに代わって新たに同梱する必要が生じたファイルなどだ。

デプロイメントは見落としやすく、間違えるとコストがかさむ。ランタイム移行は、実行されるコードだけに関わるものではない。顧客のディスクに何が書き込まれるかも重要だ。
インストーラーとアップデートサービスは、新しいランタイムのファイル構造を学習する必要がありました。ランタイムが提供するようになった依存関係を削除し、名前が変更されたファイルの配布を停止し、新規インストールとインプレースアップデートの両方において、代替ファイルを正常に配信する必要がありました。
適切な導入を行えるかどうかは、ユーザーが気づかないアップグレードになるか、サポート上の問題を引き起こすアップグレードになるかの分かれ目となる。
ビルドが正常に動作するようになったら、検証に焦点を移した。
今回の移行には以下の内容が含まれていました。
- サービス、インストール、および更新パス全体にわたる広範な自動テスト。
- 実際の構成および過去のインストール環境との互換性検証。
- 起動、メモリ、スキャン動作における不具合を検出するためのパフォーマンスベンチマーク。
- カナリア方式と段階的導入方式を採用し、まずは少数の個体群から開始し、安全性が確認された場合にのみ個体数を拡大する。
- 現場における継続的な監視と自動的な回帰検出。
- プラットフォーム、品質保証、インストールとアップデート、リリースエンジニアリングといった分野を横断する業務。

「我々は、証拠が許容する以上のスピードで前進することは決してなかった。すべてのゲートは、自ずと青に変わる必要があったのだ。」
.NETへの移行:トレードオフ
これらは全て無償ではなく、選択には意図的なトレードオフが伴った。
このブランチにおけるトレードオフは、コードベースの乖離でした。移行を分離することでメインのコードベースは保護されましたが、ブランチの存在期間が長くなるほど、実際の開発状況から乖離する可能性が高まりました。私たちは、リスクの高い大規模なマージを最後にまとめて行うのではなく、頻繁な統合を行うことで、このリスクを管理しました。
展開におけるトレードオフはスピードでした。段階的な展開では、顧客がアップデートを受け取る時期が、一斉リリースの場合よりも遅くなります。私たちはそのトレードオフを受け入れました。小規模なユーザー集団からのデータは、アップデートがより多くのエンドポイントに到達する前に問題を発見する機会を与えてくれます。
AOT(事前コンパイル)のトレードオフは柔軟性でした。事前コンパイルは起動パフォーマンスを向上させる一方で、動的な動作を制約する可能性もあります。そのため、デフォルトで全てに適用するのではなく、コンポーネントごとに選択的に適用しました。
.NET 10への移行が顧客にもたらす意味
インフラ整備事業の最良の成果は、顧客が意識することなくその恩恵を受けられることである。
.NET 10 では、これらの利点はMalwarebytes 顧客には以下が含まれます:
- 完全サポート体制が整った、積極的にメンテナンスされているランタイム環境における信頼性の向上。
- プラットフォームの継続的なセキュリティ改善の恩恵を受ける、より安全な基盤。
- 新しい.NET機能と修正プログラムへのアクセス。
- 新しいバージョンに対するサポートの改善Windows 。
- 最新の.NETツールを使えば、新しいセキュリティ対策をより迅速に開発・提供できます。
心に留めておくべき教訓
ランタイム、ベースライン、セキュリティパッチといったこれらのアップデートの一つ一つが、チームの信念をより確固たるものにしている。
プラットフォームのアップグレードは、その上に構築されるすべてのものに対する戦略的な投資です。また、近代化は継続的に行うことで最も効果を発揮します。プラットフォームが時代遅れになる期間が長くなるほど、最終的なアップグレードは困難になる可能性があります。
これほど大規模な変更においては、自動化が特に重要です。同様に、コンポーネント間の明確な境界を維持することや、出荷する製品を正確に把握できるビルドプロセスを持つことなど、何年も前に下された地味で小さな決定も重要です。
そうした基盤こそが、より大きな変化を可能にするものなのだ。
「技術的負債は、金融負債と同じように膨れ上がる。最も安価なアップグレードは、決して先延ばしにしなかったアップグレードだ。」
次に何が起こるのか
アップグレードはゴールではありません。それぞれが、より長いプロセスにおける一歩です。プラットフォームが時代遅れにならないよう、計画的なステップで継続的に近代化を進めていきます。ベースラインは再び変更されるでしょう。脆弱性は予告なく発生するでしょう。いずれの場合も、同じ規律が適用されます。同じテスト、同じ段階的な展開、そして同じ検証結果に基づいて、私たちは前進します。
その規律こそが、毎日、あらゆるマシンで、何の疑いもなく動作すると信頼される製品を構成する要素なのです。
.NET 10 に対応したMalwarebytes for Windowsがバージョン 5.6.0 でリリースされました。これは、製品の基盤となるプラットフォームへの投資を長年続けてきた取り組みの一環であり、その上に構築される保護機能を継続的に向上させることを目的としています。





