Windows スキャンで検知した脆弱性には、解決済みのものがある?

thumbnail

まえがき

こんにちは、踊るエンジニア木戸俊輔です。
脆弱性管理サービス「FutureVuls」の開発からユーザサポート、営業まで幅広く担当しています。

読者の皆さまは Windows の脆弱性をどのように管理していますか?
Windows Update は定期的に実施していますか?
企業システムで利用している Windows には、セキュリティパッチをあてられず放置されているものもあるかもしれません。
FutureVuls は、Windows にまだ適用されていない更新プログラム情報から残存する脆弱性を検知し、そのトリアージや対策検討までサポートしてくれるため、手間なく Windows のリスク管理を実現できます。
しかしながら、FutureVuls で検知された Windows の脆弱性には、稀に解決済みのものが紛れ込む場合があります。

本記事では、そのような解決済みの脆弱性が検知されてしまう原因、存否の判断方法、および FutureVuls 上での管理方法について詳しく紹介します。

前提

なぜ解決済みの脆弱性が検知されてしまうのか

これにはいくつかの原因があります。

原因1: 更新プログラムで管理されていない脆弱性である

原因の 1 つ目は、更新プログラムで管理されていない脆弱性が存在するからです。

Windows および Windows 上の Microsoft 製品は、Microsoft Update で配布される更新プログラムにてアップデートされます。
更新プログラムは、特にセキュリティアップデートの場合は、公開されている既知の脆弱性を修正するものが多いです。
更新プログラムごとにどの脆弱性を解決するかが情報として紐づいており、更新プログラムの適用状況を見れば、その脆弱性が残存するか否かが判断できます。

なお、FutureVuls で検知した脆弱性に対して、それを解決する更新プログラムが公開されているか否かは、脆弱性タブのアドバイザリ名列に KB 番号があるかどうかで確認可能です。

kb_exist

しかし、特に Windows OS 以外の Microsoft 製品に関しては、脆弱性に対してそれを解決する具体的な更新プログラムが公開されていない場合があります。

例えば、CVE-2021-21182 は Microsoft Edge に関連する脆弱性として「公開されています」が、それを解決する更新プログラム情報は公開されていません。

no_kb

代わりに、FAQ 形式で Edge における修正バージョンが公開されています。

fixed_version

上記の修正バージョン情報を基に、インストールされている Edge のバージョンを照会すれば、本脆弱性が本当に残存するか否かが判断できます。
しかしながら、これらの情報は機械処理が難しく、また、更新プログラム情報を基に脆弱性を検知するというロジックを採用している FutureVuls では、本脆弱性は解決していないと判断され、残存する脆弱性として無条件で検知されてしまいます。

そのため、このような脆弱性については、その存否の妥当性を人手で確認する必要があります。
(FutureVuls チームでは、本パターンの検知精度を向上させるべく試行錯誤しております。)

原因2: 更新プログラムが提供されているが置き換え情報が欠損している脆弱性である

原因の 2 つ目は、「更新プログラムは提供されているが、置き換え情報が欠損している脆弱性」が存在するからです。
Windows の更新プログラムは、累積更新という仕組みになっており、最新の更新プログラムを適用すると、最新の更新プログラムが包含する過去の未適用な更新プログラムまで適用されるようになっています。

脆弱性情報は、同じ累積更新プログラムの系統の中で、その脆弱性が初めて解決された更新プログラムに紐づきます。
そのため、残存する全ての脆弱性を洗い出すには、まず適用されていない全ての更新プログラムを洗い出し、それぞれに紐づく脆弱性情報を確認する必要があります。

適用されていない全ての更新プログラムを洗い出すためには、各更新プログラムがどの更新プログラムによって置き換えたか、あるいはどの更新プログラムを置き換えるか、といった置き換え情報を辿る必要がありますが、データソースの不備等によってこれらの置き換え情報が欠損している場合があります。
この時、本来他の更新プログラムに包含される形で適用されているはずの更新プログラムが未適用だと判断され、それに紐づく脆弱性が検知されてしまいます。

(上記検知ロジックについての詳細は次の記事を参照ください: Windows Vulnerability Scan

このような脆弱性に関して、その存否を判断する方法は次の 2 つがあります。

  1. Windows Update で未適用な更新プログラムが無いかを確認する
  2. 実際に関連する更新プログラムをインストールする

1 つめの方法は、「Windows Update で未適用な更新プログラムが無いかを確認する」です。
対象の脆弱性は更新プログラムにて解決できるものであることから、Windows Update サービスによって未適用な更新プログラムの存在が確認できない場合は、既に該当の更新プログラム適用済みであると判断し、関連する脆弱性も存在しないと判断できるでしょう。

check_windows_update

この際、他の最新更新プログラムは未適用なものがあったが、該当の更新プログラム自体は未適用だと表示されなかったので適用済みであると判断するのは早計です。
なぜなら、最新の累積更新プログラムをあてさえすれば該当の更新プログラムが含まれているため表示されなかっただけであり、実際には該当の更新プログラムはまだ適用されていない、といったパターンがあるからです。
そのため、この判断方法は、適用されていない更新プログラムが 0 になったときに使えます。
また、Windows 端末の管理にローカルな WSUS を使用しており、かつ WSUS が該当の更新プログラムを配信していない場合は、本確認方法は使えませんのでご注意ください。

2 つめの方法は、「実際に関連する更新プログラムをインストールする」です。
Microsoft Update Catalog」では、更新プログラムを指定してインストールを実行できます。実際に該当の更新プログラムをKB番号で指定してインストールし、その可否によって判断が可能です。

解決済みの脆弱性の管理について

さて、ここまで FutureVuls の Windows スキャンにて起こりうる、解決済み脆弱性の検知パターンとその存否判断について解説しました。
検知した脆弱性について、もし解決済みであることが分かった場合は、次の手順を参考に脆弱性をクローズしてください。

  1. FutureVuls のサーバタブにて該当サーバをクリックする
  2. 脆弱性×タスクタブを開く
  3. 解決済みと判断できた脆弱性を一括選択しタスクを編集ボタンをクリックする
  4. ステータスをNOT_AFFECTEDに変更して送信する

task_update

上記手順によって該当の脆弱性が既に解決済みであることを適切に管理できます。
可能であれば、更新時、その根拠となる調査結果をタスクコメントにて残しておくとよいでしょう。

番外編: インストールされていると思っていた更新プログラムが、インストール完了されていない場合がある

「更新プログラムをインストールしたはずなのに、FutureVuls にて該当する脆弱性情報がクローズされない」といったご相談を受けることがあります。よくある理由としては、「更新プログラムのインストールが完了していない」です。

Windows Update インストールを完了するために OS の再起動を必要とするものがあります。
そのような理由からインストールしたと思っていた更新プログラムが、実は適用されていない場合があります。
FutureVuls では、実際にインストールされている更新プログラムの情報を、コンソール上で確認できます。

applied_kb

更新プログラムのインストールが完了しているかを確認する場合は、上記画面を参考にしてください。

あとがき

以上、Future Vuls における Windows の脆弱性判断について解説しました。
Windows 上の脆弱性は存否の判断が難しく、FutureVuls でも精度向上のため、日々改良中です。
本記事が読者の皆さまの一助となれば幸いです。