Windows Vulnerability Scan

Windows Vulnerability Scan

こんにちは,普段はOSSのVulsへContributeしているMaineK00nです.
今回は,Windowsに潜む脆弱性をどのようにして検知するのかについて解説していきたいと思います.

Windows Updateについて

Windows Updateは累積更新という仕組みとなっており,
最新の更新プログラムを適用すると,最新の更新プログラムが包含する過去の未適用な更新プログラムまで適用されるようになっています.
また,各更新プログラムには,Microsoftが提供するサポート情報(KB; Knowlge Base)がリンクされており,それぞれの更新プログラムをKBIDで識別することができます.

以下の画像に示した更新プログラム(KB5010351)について見てみます.
この更新プログラムは、次の更新プログラムを置き換えます:という部分に注目すると,画像の更新プログラム(KB5010351)を適用したとき,{KB5007266, KB5008218, KB5009557, KB5010196, …}の更新プログラムまで適用されるということを示しています.
また,この更新プログラムは、次の更新プログラムで置き換えられました:という部分からは,画像の更新プログラム(KB5010351)を含む,より最新な更新プログラム(KB5010427)が公開されていることが分かります.
KB5010351 Windows Update Catalog

ref: https://www.catalog.update.microsoft.com/ScopedViewInline.aspx?updateid=76bd9595-6785-4156-8e14-53a1a2174599

後述する脆弱性検知の中で,どの更新プログラムが未適用か判断するために,この置き換え情報が非常に重要となります.

更新プログラムの置き換え情報をどうやって集めるのか?

現在は,CVRFやMicrosoft Security Bulletin Dataにある情報から更新プログラムの置き換え情報を得ています.
ちなみに,CVRFやMicrosoft Security Bulletin Dataなどでは,置き換える更新プログラムを示すKBIDと置き換えられる更新プログラムを示すKBIDをノードとしたとき,それらを結ぶエッジが提供されているため,ある更新プログラムが置き換えるすべての更新プログラムを求めるには,エッジを辿りノードを整理することが必要です.

脆弱性情報の取得

Windowsの脆弱性情報は,CVRFフォーマットで月毎に分割されて提供されています.
例えば,2022年2月の脆弱性情報を取得する場合,次のリクエストによって取得できます.

1
$ curl -X GET --header 'Accept: application/xml' 'https://api.msrc.microsoft.com/cvrf/v2.0/cvrf/2022-Feb'

ref: https://api.msrc.microsoft.com/cvrf/v2.0/swagger/index

それでは,取得した2022年2月の脆弱性情報から,CVE-2022-22715についての定義を見てみます.(一部省略しています)
影響のあるプロダクトに対して,それぞれCVSSスコアやSeverityなどが記述されています.
脆弱性検知に使用する部分は,Remediationに記述されています.

Descriptionにはこの脆弱性を修正する更新プログラムのKBIDが記述されていて,この場合はKB5010351です.
また,この更新プログラム(KB5010351)によって置き換えられる更新プログラムはSupercedenceに記述されていて,更新プログラム(KB5009557)を置き換えることが分かります.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
<prod:ProductTree>
<prod:Branch Type="Vendor" Name="Microsoft">
<prod:Branch Type="Product Family" Name="Windows">
<prod:FullProductName ProductID="11568">Windows 10 Version 1809 for 32-bit Systems</prod:FullProductName>
<prod:FullProductName ProductID="11569">Windows 10 Version 1809 for x64-based Systems</prod:FullProductName>
<prod:FullProductName ProductID="11570">Windows 10 Version 1809 for ARM64-based Systems</prod:FullProductName>
<prod:FullProductName ProductID="11571">Windows Server 2019</prod:FullProductName>
<prod:FullProductName ProductID="11572">Windows Server 2019 (Server Core installation)</prod:FullProductName>
<prod:FullProductName ProductID="11712">Windows 10 Version 1909 for 32-bit Systems</prod:FullProductName>
<prod:FullProductName ProductID="11713">Windows 10 Version 1909 for x64-based Systems</prod:FullProductName>
<prod:FullProductName ProductID="11714">Windows 10 Version 1909 for ARM64-based Systems</prod:FullProductName>
</prod:Branch>
</prod:ProductTree>

<vuln:Vulnerability Ordinal="52">
<vuln:Title>Named Pipe File System Elevation of Privilege Vulnerability</vuln:Title>
<vuln:Notes>
<vuln:Note Title="Description" Type="Description" Ordinal="0"/>
<vuln:Note Title="Windows Named Pipe File System" Type="Tag" Ordinal="20">Windows Named Pipe File System</vuln:Note>
<vuln:Note Title="Issuing CNA" Type="CNA" Ordinal="30">Microsoft</vuln:Note>
</vuln:Notes>
<vuln:CVE>CVE-2022-22715</vuln:CVE>
<vuln:ProductStatuses>
<vuln:Status Type="Known Affected">
<vuln:ProductID>11568</vuln:ProductID>
<vuln:ProductID>11569</vuln:ProductID>
<vuln:ProductID>11570</vuln:ProductID>
<vuln:ProductID>11571</vuln:ProductID>
<vuln:ProductID>11572</vuln:ProductID>
<vuln:ProductID>11712</vuln:ProductID>
<vuln:ProductID>11713</vuln:ProductID>
<vuln:ProductID>11714</vuln:ProductID>
</vuln:Status>
</vuln:ProductStatuses>
<vuln:Threats>
<vuln:Threat Type="Impact">
<vuln:Description>Elevation of Privilege</vuln:Description>
<vuln:ProductID>11568</vuln:ProductID>
</vuln:Threat>
<vuln:Threat Type="Impact">
<vuln:Description>Elevation of Privilege</vuln:Description>
<vuln:ProductID>11569</vuln:ProductID>
</vuln:Threat>
<vuln:Threat Type="Impact">
<vuln:Description>Elevation of Privilege</vuln:Description>
<vuln:ProductID>11570</vuln:ProductID>
</vuln:Threat>
<vuln:Threat Type="Impact">
<vuln:Description>Elevation of Privilege</vuln:Description>
<vuln:ProductID>11571</vuln:ProductID>
</vuln:Threat>
<vuln:Threat Type="Impact">
<vuln:Description>Elevation of Privilege</vuln:Description>
<vuln:ProductID>11572</vuln:ProductID>
</vuln:Threat>
<vuln:Threat Type="Impact">
<vuln:Description>Elevation of Privilege</vuln:Description>
<vuln:ProductID>11712</vuln:ProductID>
</vuln:Threat>
<vuln:Threat Type="Impact">
<vuln:Description>Elevation of Privilege</vuln:Description>
<vuln:ProductID>11713</vuln:ProductID>
</vuln:Threat>
<vuln:Threat Type="Impact">
<vuln:Description>Elevation of Privilege</vuln:Description>
<vuln:ProductID>11714</vuln:ProductID>
</vuln:Threat>
<vuln:Threat Type="Severity">
<vuln:Description>Important</vuln:Description>
<vuln:ProductID>11568</vuln:ProductID>
</vuln:Threat>
<vuln:Threat Type="Severity">
<vuln:Description>Important</vuln:Description>
<vuln:ProductID>11569</vuln:ProductID>
</vuln:Threat>
<vuln:Threat Type="Severity">
<vuln:Description>Important</vuln:Description>
<vuln:ProductID>11570</vuln:ProductID>
</vuln:Threat>
<vuln:Threat Type="Severity">
<vuln:Description>Important</vuln:Description>
<vuln:ProductID>11571</vuln:ProductID>
</vuln:Threat>
<vuln:Threat Type="Severity">
<vuln:Description>Important</vuln:Description>
<vuln:ProductID>11572</vuln:ProductID>
</vuln:Threat>
<vuln:Threat Type="Severity">
<vuln:Description>Important</vuln:Description>
<vuln:ProductID>11712</vuln:ProductID>
</vuln:Threat>
<vuln:Threat Type="Severity">
<vuln:Description>Important</vuln:Description>
<vuln:ProductID>11713</vuln:ProductID>
</vuln:Threat>
<vuln:Threat Type="Severity">
<vuln:Description>Important</vuln:Description>
<vuln:ProductID>11714</vuln:ProductID>
</vuln:Threat>
<vuln:Threat Type="Exploit Status">
<vuln:Description>Publicly Disclosed:No;Exploited:No;Latest Software Release:Exploitation More Likely;Older Software Release:Exploitation More Likely;DOS:N/A</vuln:Description>
</vuln:Threat>
</vuln:Threats>
<vuln:CVSSScoreSets>
<vuln:ScoreSet>
<vuln:BaseScore>7.8</vuln:BaseScore>
<vuln:TemporalScore>6.8</vuln:TemporalScore>
<vuln:Vector>CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C</vuln:Vector>
<vuln:ProductID>11568</vuln:ProductID>
</vuln:ScoreSet>
<vuln:ScoreSet>
<vuln:BaseScore>7.8</vuln:BaseScore>
<vuln:TemporalScore>6.8</vuln:TemporalScore>
<vuln:Vector>CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C</vuln:Vector>
<vuln:ProductID>11569</vuln:ProductID>
</vuln:ScoreSet>
<vuln:ScoreSet>
<vuln:BaseScore>7.8</vuln:BaseScore>
<vuln:TemporalScore>6.8</vuln:TemporalScore>
<vuln:Vector>CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C</vuln:Vector>
<vuln:ProductID>11570</vuln:ProductID>
</vuln:ScoreSet>
<vuln:ScoreSet>
<vuln:BaseScore>7.8</vuln:BaseScore>
<vuln:TemporalScore>6.8</vuln:TemporalScore>
<vuln:Vector>CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C</vuln:Vector>
<vuln:ProductID>11571</vuln:ProductID>
</vuln:ScoreSet>
<vuln:ScoreSet>
<vuln:BaseScore>7.8</vuln:BaseScore>
<vuln:TemporalScore>6.8</vuln:TemporalScore>
<vuln:Vector>CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C</vuln:Vector>
<vuln:ProductID>11572</vuln:ProductID>
</vuln:ScoreSet>
<vuln:ScoreSet>
<vuln:BaseScore>7.8</vuln:BaseScore>
<vuln:TemporalScore>6.8</vuln:TemporalScore>
<vuln:Vector>CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C</vuln:Vector>
<vuln:ProductID>11712</vuln:ProductID>
</vuln:ScoreSet>
<vuln:ScoreSet>
<vuln:BaseScore>7.8</vuln:BaseScore>
<vuln:TemporalScore>6.8</vuln:TemporalScore>
<vuln:Vector>CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C</vuln:Vector>
<vuln:ProductID>11713</vuln:ProductID>
</vuln:ScoreSet>
<vuln:ScoreSet>
<vuln:BaseScore>7.8</vuln:BaseScore>
<vuln:TemporalScore>6.8</vuln:TemporalScore>
<vuln:Vector>CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C</vuln:Vector>
<vuln:ProductID>11714</vuln:ProductID>
</vuln:ScoreSet>
</vuln:CVSSScoreSets>
<vuln:Remediations>
<vuln:Remediation Type="Vendor Fix">
<vuln:Description>5010351</vuln:Description>
<vuln:URL>https://catalog.update.microsoft.com/v7/site/Search.aspx?q=KB5010351</vuln:URL>
<vuln:Supercedence>5009557</vuln:Supercedence>
<vuln:ProductID>11568</vuln:ProductID>
<vuln:ProductID>11569</vuln:ProductID>
<vuln:ProductID>11570</vuln:ProductID>
<vuln:ProductID>11571</vuln:ProductID>
<vuln:ProductID>11572</vuln:ProductID>
<vuln:AffectedFiles/>
<vuln:RestartRequired>Yes</vuln:RestartRequired>
<vuln:SubType>Security Update</vuln:SubType>
<vuln:FixedBuild>10.0.17763.2565</vuln:FixedBuild>
</vuln:Remediation>
<vuln:Remediation Type="Vendor Fix">
<vuln:Description>5010345</vuln:Description>
<vuln:URL>https://catalog.update.microsoft.com/v7/site/Search.aspx?q=KB5010345</vuln:URL>
<vuln:Supercedence>5009545</vuln:Supercedence>
<vuln:ProductID>11712</vuln:ProductID>
<vuln:ProductID>11713</vuln:ProductID>
<vuln:ProductID>11714</vuln:ProductID>
<vuln:AffectedFiles/>
<vuln:RestartRequired>Yes</vuln:RestartRequired>
<vuln:SubType>Security Update</vuln:SubType>
<vuln:FixedBuild>10.0.18363.2094</vuln:FixedBuild>
</vuln:Remediation>
</vuln:Remediations>
<vuln:Acknowledgments>
<vuln:Acknowledgment>
<vuln:Name>Kunlun lab (https://www.cyberkl.com) via TianfuCup (https://www.tianfucup.com)</vuln:Name>
<vuln:URL/>
</vuln:Acknowledgment>
</vuln:Acknowledgments>
<vuln:RevisionHistory>
<vuln:Revision>
<cvrf:Number>1.0</cvrf:Number>
<cvrf:Date>2022-02-08T08:00:00Z</cvrf:Date>
<cvrf:Description>&lt;p&gt;Information published.&lt;/p&gt;
</cvrf:Description>
</vuln:Revision>
</vuln:RevisionHistory>
</vuln:Vulnerability>

脆弱性検知の方針

CVRFのデータを見ると,CVE-IDに対して,更新プログラムのKBIDやProduct IDが結びついていることが分かりました.
Product IDだけでは,バージョン情報がなく,比較ができないため,Product IDからの検知は難しそうです.
今回は,修正されていない脆弱性を探すので,未適用な更新プログラムのKBIDを求め,そのKBIDに紐づくCVE-IDを求めることにします.

未適用な更新プログラムのKBIDを求める

では,未適用な更新プログラムのKBIDを求める方法について考えます.
PowerShellでWindows APIを使うと,次のようにして求められます.
この場合では,TitleよりKB5011267が未適用だと分かりました.(Title以外にもKBArticleIDsでも調べることができます)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
PS C:\Windows\system32> $Session = New-Object -ComObject Microsoft.Update.Session
PS C:\Windows\system32> $Searcher = $Session.CreateUpdateSearcher()
PS C:\Windows\system32> $Searcher.search("IsInstalled=0 and Type='Software'").Updates

Title : 2022-02 Cumulative Update Preview for .NET Framework 3.5, 4.7.2 and 4.8 for Windows Server 2019 for x64 (KB5011267)
AutoSelectOnWebSites : False
BundledUpdates : System.__ComObject
CanRequireSource : False
Categories : System.__ComObject
Deadline : DeltaCompressedContentAvailable : False
DeltaCompressedContentPreferred : True
Description : Install this update to resolve issues in Windows. For a complete listing of the issues that are included in this update, see the associated Microsoft Knowledge Base article for more information. After you install this item, you may have to restart your computer.
EulaAccepted : True
EulaText :
HandlerID :
Identity : System.__ComObject
Image :
InstallationBehavior : System.__ComObject
IsBeta : False
IsDownloaded : False
IsHidden : False
IsInstalled : False
IsMandatory : False
IsUninstallable : False
Languages : System.__ComObject
LastDeploymentChangeTime : 2/15/2022 12:00:00 AM
MaxDownloadSize : 83366731
MinDownloadSize : 0
MoreInfoUrls : System.__ComObject
MsrcSeverity :
RecommendedCpuSpeed : 0
RecommendedHardDiskSpace : 0
RecommendedMemory : 0
ReleaseNotes :
SecurityBulletinIDs : System.__ComObject
SupersededUpdateIDs : System.__ComObject
SupportUrl : http://support.microsoft.com
Type : 1
UninstallationNotes : This software update can be removed by selecting View installed updates in the Programs and Features Control Panel.
UninstallationBehavior : System.__ComObject
UninstallationSteps : System.__ComObject
KBArticleIDs : System.__ComObject
DeploymentAction : 1
DownloadPriority : 2
DownloadContents : System.__ComObject
RebootRequired : False
IsPresent : False
CveIDs : System.__ComObject
BrowseOnly : False
PerUser : False
AutoSelection : 1
AutoDownload : 2

...

ref: https://docs.microsoft.com/en-us/windows/win32/api/wuapi/nf-wuapi-iupdatesearcher-search

しかし,この方法によって得られる未適用な更新プログラムは,コマンド実行時における最新の未適用な更新プログラムのみが表示されるようです.
最新の更新プログラムによって置き換えられた過去の未適用な更新プログラムについては表示されないため,
脆弱性スキャナを実装する上では,スキャン実行時のタイミングによって,
ある更新プログラムが表示されず,その更新プログラムのKBIDに紐づくCVE-IDを検出することができないという問題があります.

この問題を解決するために,更新プログラムの置き換え情報を使って,すべての未適用な更新プログラムを得る必要があります.
更新プログラムの置き換え情報から,どの更新プログラムによって置き換えられ,どの更新プログラムを置き換えたかということは分かるので,
どこまでの更新プログラムが適用済みかということが分かれば,すべての未適用な更新プログラムは取得できそうです.

先程,最新の未適用な更新プログラムを求める方法で紹介したものを少し変更して,適用済みの更新プログラムを取得してみます.
実行結果より,KB3193497が適用済みであることが分かりました.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
PS C:\Windows\system32> $Session = New-Object -ComObject Microsoft.Update.Session
PS C:\Windows\system32> $Searcher = $Session.CreateUpdateSearcher()
PS C:\Windows\system32> $Searcher.search("IsInstalled=1 and RebootRequired = 0 and Type='Software'").Updates

Title : LanguageFeatureOnDemand - Windows Server 2016 for AMD64-based Systems - (KB3193497) [en-GB]
AutoSelectOnWebSites : False
BundledUpdates : System.__ComObject
CanRequireSource : False
Categories : System.__ComObject
Deadline :
DeltaCompressedContentAvailable : False
DeltaCompressedContentPreferred : True
Description : You may need to restart your computer. See the associated Microsoft Knowledge Base article for more info about this update.
EulaAccepted : True
EulaText :
HandlerID :
Identity : System.__ComObject
Image :
InstallationBehavior : System.__ComObject
IsBeta : False
IsDownloaded : True
IsHidden : False
IsInstalled : True
IsMandatory : False
IsUninstallable : True
Languages : System.__ComObject
LastDeploymentChangeTime : 9/26/2016 12:00:00 AM
MaxDownloadSize : 19487497
MinDownloadSize : 0
MoreInfoUrls : System.__ComObject
MsrcSeverity :
RecommendedCpuSpeed : 0
RecommendedHardDiskSpace : 0
RecommendedMemory : 0
ReleaseNotes :
SecurityBulletinIDs : System.__ComObject
SupersededUpdateIDs : System.__ComObject
SupportUrl : http://support.microsoft.com/kb/3193497
Type : 1
UninstallationNotes : To uninstall this feature, go to Settings > System > Apps & features, and select Manage optional features.
UninstallationBehavior : System.__ComObject
UninstallationSteps : System.__ComObject
KBArticleIDs : System.__ComObject
DeploymentAction : 1
DownloadPriority : 2
DownloadContents : System.__ComObject
RebootRequired : False
IsPresent : True
CveIDs : System.__ComObject
BrowseOnly : False
PerUser : False
AutoSelection : 0
AutoDownload : 0

...

しかしながら,私達の調査の中で,以下の画像のように,設定 > 更新とセキュリティ > Windows Update > の更新履歴を表示するの画面で適用済みの更新プログラムを確認すると,上記の検索では取得できていない更新プログラムがあることが分かりました.

GUI Windows Update

これらを回避するために,Windows Updateの履歴からも適用済み更新プログラムを取得するようにします.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
PS C:\Windows\system32> $Session = New-Object -ComObject Microsoft.Update.Session
PS C:\Windows\system32> $Searcher = $Session.CreateUpdateSearcher()
PS C:\Windows\system32> $HistoryCount = $Searcher.GetTotalHistoryCount()
PS C:\Windows\system32> $Searcher.QueryHistory(0,$HistoryCount)

Operation : 1
ResultCode : 2
HResult : 0
Date : 3/8/2022 4:02:23 AM
UpdateIdentity : System.__ComObject
Title : Security Intelligence Update for Microsoft Defender Antivirus - KB2267602 (Version 1.359.1554.0)
Description : Install this update to revise the files that are used to detect viruses, spyware, and other potentially unwanted software. Once
you have installed this item, it cannot be removed.
UnmappedResultCode : 0
ClientApplicationID : UpdateOrchestrator
ServerSelection : 2
ServiceID :
UninstallationSteps : System.__ComObject
UninstallationNotes :
SupportUrl : https://go.microsoft.com/fwlink/?LinkId=52661
Categories : System.__ComObject

...

ref: https://docs.microsoft.com/en-us/windows/win32/api/wuapi/nf-wuapi-iupdatesearcher-queryhistory

おまけ: 適用済み更新プログラムのKBIDを取得するその他の方法

適用済み更新プログラムのKBIDを調べる方法は他にもこのような方法があります.

すべての未適用な更新プログラムのKBIDを求めるために

ここまでを整理すると,Windows APIを使って,適用済み更新プログラムのKBIDと最新の未適用な更新プログラムのKBIDが取得できました.
さらに,更新プログラムの置き換え情報が分かるので,すべての未適用な更新プログラムのKBID(以下の画像の表示されない未適用KBID表示される未適用KBIDより最新な未適用KBID)を取得できそうです.
ここで,問題となるのは表示されない未適用KBIDをどのように取得するかです.

KB relation

1つは,適用済みKBIDの外側へ探索する方法と,もう1つは表示される未適用KBIDの内側へ探索する方法です.
前者の場合,すべての適用済みKBIDが取得できていない場合,もしくは適用済みKBIDがない場合には表示されない未適用KBID部分の取得が不完全になります.
後者の場合,ある表示される未適用KBIDに対する適用済みKBIDの取得が完全でない場合は,適用済みKBID部分が過検知されます.
今回は,過検知のリスクを考え,前者の方法で表示されない未適用KBIDを取得することにしています.

表示される未適用KBIDの内側へ探索する方法はなぜ難しい?

なぜ,表示される未適用KBIDの内側へ探索する方法が難しいかという点について,以下に示すKB4480056の置き換え情報を見ながら,考えます.
例えば,表示される未適用KBIDとして{KB5009823, KB5010580},適用済みKBIDとして{KB4598499}が与えられる場合を仮定します.
この場合では,表示されない未適用KBIDは{KB5009718, KB5007298, KB5006765, KB5004870, KB5004228, KB5003778, KB5001879, KB4601887}となります.
そして,取得漏れした適用済みKBIDに{KB5007298}があるとすると,表示されない未適用KBIDは{KB5009718, KB4601887}となります.
つまり,取得漏れがある場合,{KB5007298, KB5006765, KB5004870, KB5004228, KB5003778, KB5001879}に紐づくCVE-IDを過検知してしまうことになります.
適用済みKBIDがすべて正確に取得できていることを保証することは難しいことと,
後述するKBの置き換え情報を完全に取得することが難しいことから,内側へと探索する方法は過検知のリスクが大きいと判断しています.

KB4480056 Tree

FutureVulsでは前者の対策として

前者の適用済みKBID表示されない未適用KBIDが完全に取得できない場合に備えて,FutureVulsの画面上からKBIDを登録できるように対応しました.

FutureVuls KBID Manual Registration

仕上げ

これまでに,Windows APIの結果と更新プログラムの置き換え情報からすべての未適用な更新プログラムのKBIDを取得できました.
最後に,それらのKBIDに紐づくCVE-IDを求めることで,Windowsに潜む脆弱性が検知できます.

まとめ

この記事では,Windowsにおける脆弱性検知として,更新プログラム(KBID)の情報を使った手法を紹介しました.

これからもFutureVulsが正確な脆弱性検知を提供できるようにContributionしていきます.