「当てれば安全」なのか？－パッチ適用に関する 2 つの誤解について

※本記事は[網屋 Tech Blog Advent Calendar 2024](https://qiita.com/advent-calendar/2024/amiya)の 12 月 17 日分の記事です。

## はじめに

こんにちは。[@Fukucchi](https://qiita.com/Fukucchi) です。みなさんのパッチ当ての調子はいかがですか？

ソフトウェア脆弱性が明らかになると、ベンダーは問題箇所を修正するパッチ（修正プログラム）を公開し、攻撃者がその穴を突く前に対処することが定石とされています。しかし、「パッチさえ当てれば後は安心」という認識には、落とし穴が潜んでいます。

本記事では、『[はじめて学ぶ最新サイバーセキュリティ講義](https://www.amazon.co.jp/dp/429607069X)』pp. 58, 346-347 を主な参照軸としながら、パッチ適用をめぐる 2 つの代表的な誤解を取り上げます。それは、「**パッチが提供されれば即問題解決**」という誤解と、「**パッチを当てれば完全に安全**」という誤解です。これらの誤解を具体的なインシデント事例に即しながら紹介します。

### 1. 「パッチが提供されれば即問題解決」という誤解

脆弱性が公表され、ベンダーがパッチをリリースした瞬間に問題が解消されると考えられがちですが、実際にはそう単純ではありません。パッチが存在しても、組織内で速やかに適用されず結果的に長期間放置されてしまうケースがあります。

#### ケース 1: Heartbleed（CVE-2014-0160）

2014 年に発覚した OpenSSL ライブラリの「Heartbleed」脆弱性は、インターネット通信を暗号化する SSL/TLS プロトコルの「ハートビート（Heartbeat）」拡張機能に起因していました[^10]。この拡張は、SSL/TLS 接続を維持するために定期的な「鼓動」のようなデータ送信を行う仕組みです。Heartbleed とは、この処理に欠陥があり、攻撃者が無関係なメモリ領域から機密情報（パスワード、秘密鍵など）を読み取れるようになるという問題でした。

パッチは早期に提供されましたが、**5 年経っても約 14 万 4,000 基もの機器が修正を当てず放置**されていたことが後の調査で報告されています[^16]。

#### ケース 2: Log4Shell（CVE-2021-44228）

2021 年 12 月、Java アプリケーションで広く用いられるログライブラリ「Apache Log4j」に深刻な脆弱性（Log4Shell）が発覚しました[^1]。この脆弱性は「ゼロデイ」に分類されます。ゼロデイとは、公表時点で有効な対策が間に合わない状態を指し、攻撃者は防御側が対策ゼロ日の段階で攻撃可能となります。Log4Shell はリモートコード実行（RCE: Remote Code Execution）を許し、攻撃者がネットワーク越しに任意のプログラムをサーバー上で実行できるため、サーバー乗っ取りや情報漏えいを容易にしてしまいました。

パッチは比較的早期に提供されたにもかかわらず、Contrast Security の調査によれば、**3 年が経過した時点でも Java アプリケーションの約 12 %が依然として脆弱な Log4j バージョンを使用**していると報じられています[^17]。

#### まとめ

「パッチが出たから即解決」とはならない現実を、これらの事象は象徴的に示しています。パッチ提供はインシデント対応の終わりではなく始まりなのです。

### 2. 「パッチを当てれば完全に安全」という誤解

もう 1 つの誤解は、パッチを当てればその脆弱性が完全に解消されると信じてしまうことです。実際には、パッチそのものが不十分で新たな問題を生んだり、後から別の脆弱性が発覚するなど、一度の修正で事態が片付かないケースが珍しくありません。

#### ケース 1: USBドライバ脆弱性（CVE-2010-2568）

2010 年代初頭に浮上した USB ドライバ脆弱性（CVE-2010-2568）は、「Windows Shell LNK 脆弱性」として知られる問題で、Windows がショートカットファイル（.LNKファイル）の表示処理に起因する欠陥を悪用されると、USB メモリなどの外部ストレージを接続してエクスプローラーで閲覧するだけでマルウェアが自動実行されうる深刻なリスクをはらんでいました[^23][^24]。

この問題に対処するため、Microsoft は緊急対応として MS10-046 による初回修正プログラムをリリースしましたが、この一度の修正のみではすべての攻撃手法を封じ込めませんでした。LNK ファイルは多様な属性を内包する複雑な内部構造を持ち、Windows Shell という OS 基盤に深く根ざしたレガシーコンポーネント上で動作しているため、**想定外の攻撃パターンが後から続々と発覚**したのです。その結果、Microsoft は追加のパッチ適用を余儀なくされ、段階的な改善サイクルを通じて防御態勢を強化していきました[^28]。

このケースは、OS 基盤に深く組み込まれたレガシー要素や多面的な利用形態が、単一のパッチでは十分な対処を困難にすることを示しています。

#### ケース 2: Log4Shell（CVE-2021-44228）

上でも述べた Apache Log4j における Log4Shell (CVE-2021-44228) は、2021 年末にセキュリティ界隈を震撼させた重大なリモートコード実行脆弱性でした[^1]。

初回パッチ（Log4j 2.15.0）では、JNDI Lookup 機能という外部参照機能を無効化することで主たる攻撃経路を封じることが意図されました。しかし、**関連する脆弱性**（[CVE-2021-45046](https://nvd.nist.gov/vuln/detail/CVE-2021-45046)、[CVE-2021-45105](https://nvd.nist.gov/vuln/detail/CVE-2021-45105)）**が立て続けに明らかとなり**、複数回のアップデートを経てようやく包括的な対策に近づきました。これは、広く使われるミドルウェアやライブラリにおいて、一度のパッチで全てを解決することがいかに難しく、段階的な修正サイクルが不可避であるかを示す顕著な例です。

#### まとめ

あるリサーチでは、適用済み**パッチの約 7 %が不完全**で新たな不具合を誘発する可能性があると報告されています[^12]。パッチを当てた後も引き続き監視・検証が求められ、必要に応じて追加措置を講じる姿勢が不可欠になります。

### 現実的な対処策：多層防御と自動化

「パッチが出たからすぐ解決」でも「パッチを当てたら完全終了」でもない現実に対処するにはどうすればよいのでしょうか？

ここで詳細を述べることはしませんが、多層防御（Defense-in-Depth）と自動化が鍵となります。

多層防御は、単一のセキュリティ対策で全てを防ぎ切るのは困難であることを前提とし、複数の防御層を重ねる考え方です。たとえば、WAF（Web Application Firewall）や IDS/IPS（侵入検知・防御システム）を導入すれば、パッチ適用が遅れているシステムに対しても攻撃を一時的にブロックすることが可能です。これらは「仮想パッチ」として機能し、正式なパッチを適用するまでの**猶予を確保する手段**となります[^31]。

また、脆弱性の影響度や深刻度に基づいて優先順位を付け、重要な脆弱性から迅速に修正する運用を行いやすくする各種**自動化**ツールも存在します[^33]。

### おわりに

これまで紹介してきた事例が示すように、パッチ適用は単純ではなく、運用上の制約や不完全な修正という現実的な課題がつきまといます。
パッチそのものが絶対的な解決策ではないからこそ、多層防御やパッチ管理の自動化など、さらなる対策の検討が必要になります。

[^1]: Apache Log4j Security Vulnerabilities
      <https://logging.apache.org/log4j/2.x/security.html>

[^10]: NVD: CVE-2014-0160 (Heartbleed)  
       <https://nvd.nist.gov/vuln/detail/CVE-2014-0160>

[^12]: Li, Frank, and Paxson, Vern, "A Large-Scale Empirical Study of Security Patches," *Proceedings o the 2017 ACM SIGSAC Conference on computer and Communications Security (CCS '17)*. Association for computing Machinery, New York, NY (2017): 2201-2215; <https://dl.acm.org/doi/10.1145/3133956.3134072>.

[^16]: Heartbleed 発覚から 5 年後の調査報告 (Security Ledger)  
       <https://securityledger.com/2017/07/heartbleeds-heartburn-why-a-5-year-old-vulnerability-continues-to-bite/>

[^17]: Contrast Securityによる2024年時点のLog4j脆弱性分析
       <https://www.contrastsecurity.com/security-influencers/log4shell-vulnerability-log4j-still-being-exploited-contrast-security-adr>

[^23]: Microsoft Security Bulletin MS10-046 - Critical,  
     <https://learn.microsoft.com/en-us/security-updates/securitybulletins/2010/ms10-046>

[^24]: The Stuxnet USB flaw was never properly patched in 2010, but is now - Graham Cluley,  
     <https://grahamcluley.com/stuxnet-usb-flaw/>

[^28]: Palo Alto Networks Traps Prevents Exploitation of CVE-2010-2568…,  
     <https://www.paloaltonetworks.com/blog/2015/03/palo-alto-networks-traps-prevents-exploitation-of-cve-2010-2568cve-2015-0096-stuxnet-zero-day/>

[^31]: Virtual Patching - VERITI
<https://veriti.ai/glossary/virtual-patching/>

[^33]: 8 Best Patch Management Tools for 2024 - Syncro
<https://syncromsp.com/blog/patch-management-tools/>