これは https://patchchecker.com で動作しているサービスのコードベースです。 要するに、PatchCheckerはFlask上で動作するWebアプリケーションであり、Watsonと同様の出力を提供します。ただし、PatchCheckerを使用すると、ターゲットマシン上でバイナリを実行する必要がありません。 このプロジェクトには、Microsoftサイトに存在する情報を使用してPatchCheckerのデータベースを自動的に更新するWebスクレイパーも含まれています。これにより、Windowsシステムがパッチ適用されている(またはされていない)CVEを見つける問題に対して、よりスケーラブルで使いやすいソリューションが可能になります。 さらに、https://portal.msrc.microsoft.com にエントリがある限り、他のCVEをデータコレクターの入力に追加してチェックすることもできます。これを使用して、Watsonを更新するためのデータを取得することもできます。
このプロジェクトの詳細はこちらをご覧ください。
patchcheckerを使用するには、公開ホストされているウェブサイトこちら(patchchecker.com)にアクセスするか、このリポジトリをgit cloneし、必要なライブラリをインストールし、patches.dbがapp.pyと同じディレクトリにあることを確認してから、python3 ./app.pyでアプリケーションを起動します。
アプリケーションを起動したら、含まれている"index.html"ファイルをブラウザで開いて、実際にサービスを使用し、テスト対象のシステムが脆弱なパッチのリストを取得できます。




代替として、curlコマンドを使用して次のようにすることもできます:
Request:
注:任意の区切り文字を使用できますが、ここではスペースを使用しています。
curl 'https://patchchecker.com/checkprivs/' --data-raw 'wmicinfo=KB1231411 KB1231441 KB1234141&build_num=17763'
Response:
注:一部のダミーKBを使用しているため、すべてに対して脆弱と表示されています(つまり、何もインストールされていません)
注:出力は切り詰められています
{
"total_vuln": 9,
"kbs_parsed": [
"KB1231411",
"KB1231441",
"KB1234141"
],
"total_kbs_parsed": 3,
"build": "17763",
"results": [
{
"refs": [
"https://exploit-db.com/exploits/46718",
"https://decoder.cloud/2019/04/29/combinig-luafv-postluafvpostreadwrite-race-condition-pe-with-diaghub-collector-exploit-from-standard-user-to-system/"
],
"name": "CVE-2019-0836",
"vulnerable": true
}
]
}
このリポジトリのコードを自分で実行するには、python3 -m pip install -r requirements.txtを実行し、python3で実行することを忘れないでください。参考までに、私はPython 3.7.3を使用しました。
patchdata_collector.py スクリプトは、--cve-list 引数ファイルで指定されたCVEの目的のデータを取得するために、複数のMicrosoftサイトを反復処理するpyppeteerスクレイパーです。
期待される形式の例については、samples ディレクトリ内の cves.txt ファイルを参照してください。基本的には、各行に CVE-XXXX-XXXX|https://website.com/resource-pertaining-to-CVE,http://second_resource.com のような形式の行区切りファイルです。結果の出力例は、含まれているpatches.dbファイルにあります。
コードは完璧ではありませんが、データを取得し、当面は機能します。参考までに、9つのCVEの場合、完了まで約11分かかります(環境によって異なります)。
usage: patchdata_collector.py [-h] --cve-list CVE_LIST [--db DB] [--new-db] [-v]
[-vv] [--no-headless] [--json JSON]
optional arguments:
-h, --help show this help message and exit
--cve-list CVE_LIST line and pipe separated list containing CVEs and
related-URLs with information example: CVE-2020-1048|https://github.com/ionescu007/faxhell,https://github.com/ionescu007/PrintDemon
--db DB sqlite database filename
--new-db erases old database (if exists)
-v set output to debug (verbose)
-vv set output to annoying
--no-headless run browser with headless mode disabled
--json JSON json format output, argument should be json filename
time ./patchdata_collector.py --cve-list cves.txt --db antest.db --new-db を実行すると、以下の出力が得られます:
2020-06-05 20:38:49.292 | INFO | __main__:main:181 - Loaded 10 CVEs
2020-06-05 20:38:49.430 | INFO | __main__:parsekb:33 - Parsing KBs for: CVE-2019-0836
2020-06-05 20:40:27.183 | INFO | __main__:parsekb:33 - Parsing KBs for: CVE-2019-1064
2020-06-05 20:41:07.158 | INFO | __main__:parsekb:33 - Parsing KBs for: CVE-2019-0841
2020-06-05 20:41:31.675 | INFO | __main__:parsekb:33 - Parsing KBs for: CVE-2019-1130
2020-06-05 20:42:58.527 | INFO | __main__:parsekb:33 - Parsing KBs for: CVE-2019-1253
2020-06-05 20:43:25.069 | INFO | __main__:parsekb:33 - Parsing KBs for: CVE-2019-1315
2020-06-05 20:44:57.974 | INFO | __main__:parsekb:33 - Parsing KBs for: CVE-2019-1385
2020-06-05 20:45:22.026 | INFO | __main__:parsekb:33 - Parsing KBs for: CVE-2019-1388
2020-06-05 20:46:48.407 | INFO | __main__:parsekb:33 - Parsing KBs for: CVE-2019-1405
2020-06-05 20:48:07.026 | INFO | __main__:parsekb:33 - Parsing KBs for: CVE-2020-1048
finished
real 11m27.793s
user 1m21.632s
sys 0m14.559s