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)が公開されていることが分かります.
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 > < p> Information published.< /p> </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.SessionPS C:\Windows\system32> $Searcher = $Session .CreateUpdateSearcher()PS C:\Windows\system32> $Searcher .search("IsInstalled=0 and Type='Software'" ).UpdatesTitle : 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.SessionPS C:\Windows\system32> $Searcher = $Session .CreateUpdateSearcher()PS C:\Windows\system32> $Searcher .search("IsInstalled=1 and RebootRequired = 0 and Type='Software'" ).UpdatesTitle : 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 > の更新履歴を表示する
の画面で適用済みの更新プログラムを確認すると,上記の検索では取得できていない更新プログラムがあることが分かりました.
これらを回避するために,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.SessionPS 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
をどのように取得するかです.
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の置き換え情報を完全に取得することが難しいことから,内側へと探索する方法は過検知のリスクが大きいと判断しています.
FutureVulsでは前者の対策として 前者の適用済みKBID
や表示されない未適用KBID
が完全に取得できない場合に備えて,FutureVulsの画面上からKBIDを登録できるように対応しました.
仕上げ これまでに,Windows APIの結果と更新プログラムの置き換え情報からすべての未適用な更新プログラムのKBIDを取得できました. 最後に,それらのKBIDに紐づくCVE-IDを求めることで,Windowsに潜む脆弱性が検知できます.
まとめ この記事では,Windowsにおける脆弱性検知として,更新プログラム(KBID)の情報を使った手法を紹介しました.
これからもFutureVulsが正確な脆弱性検知を提供できるようにContributionしていきます.