APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

Pythonを使ってNVD(National Vulnerability Database)から脆弱性情報をAPIで抽出してみた

はじめに

こんにちは、エーピーコミュニケーションズiTOC事業部 BzD部 0-WANの岸上です。 セキュリティ分野をメインに、自身のCSIRT及びSOCの経験を活かし、幅広く活動を行うエンジニアです。 今回はタイトルにもある通り日々発生するセキュリティ脆弱性情報をNVDからPythonを使ったAPIで簡単に取得する方法をご紹介したいと思います。

使用Webサイト:https://nvd.nist.gov/developers/vulnerabilities

NVDとは何か

NVD(National Vulnerability Database)とは米国国立標準技術研究所(NIST)が運営する脆弱性データベースです。 公開された脆弱性を数値化し、CVEとして整理し、脆弱性管理やセキュリティ監査などに活用できるよう整備しています。

取得手順

STEP1

上記添付のWebサイトへアクセスし、抽出したい脆弱性の条件を確認する。 今回は下記の"公開日"及び”CVSSv3値”の2つの条件で抽出を試みる。

・公開日:2024年5月1日~2024年5月10日

参考画像:公開日

・CVSSv3値:Critical

参考画像:CVSSv3値

STEP2

必要なモジュールをインポートし、条件を定義したAPI用のURLを変数に代入する。

API用URLを変数に代入

STEP3

URLを代入した変数へのGETリクエスト及びloads関数でJSONデータをPythonオブジェクトへ変更する。

loads関数を設定

STEP4

for文にて”vulnerabilities”キーの配下にある条件に一致した脆弱性の下記情報を抽出しPrintで表示する。 抽出情報:CVEID、CVSSv3スコア、公開日

for文で脆弱性情報を取得、printで表示

STEP5

下記画面の通りにCVE番号、ベーススコア、公開日がそれぞれ表示されていれば成功。

出力結果

補足

STEP4にて取得したい値のデータが出力できない場合の対処法。※参考例としてCVSSv3のスコアが取得できなかった場合 対象のエラー箇所に右クリックでBreakpointを設定する。

Breakpointの設定

その後Run&Debugを実行し自分の取得したいデータの抽出に成功していることを確認。

データの抽出が成功している

baseScoreを右クリックし”Add to Watch”を選択し、対象の値のパスが”cve['cve']['metrics']['cvssMetricV31'][0]['cvssData']['baseScore']”であることを確認したため、先ほどのエラー箇所に同パスを入力する。

”Add to Watch”を選択する

パスの設定が正しく完了し、エラーの解消ができる。

おわりに

以上でPythonを使った脆弱性情報のAPI出力は完了となります。 NVDの情報を活用し、手動で確認をしている脆弱性管理業務効率化の推進が可能です。 最後までお読みいただきありがとうございました。

0-WANについて

私たち0-WANは、ゼロトラスト製品を中心とした、マルチベンダーでのご提案で、お客様の経営課題解決を支援しております。 ゼロトラストってどうやるの?製品を導入したけれど使いこなせていない気がする等々、どんな内容でも支援いたします。 お気軽にご相談ください。

問い合わせ先、0-WANについてはこちら。

www.ap-com.co.jp

一緒に働いて頂ける仲間も募集しています

今までの経験を活かして、私たちと一緒にゼロトラスト分野で活躍しませんか?

www.ap-com.co.jp