はじめに
こんにちは、エーピーコミュニケーションズ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
STEP2
必要なモジュールをインポートし、条件を定義したAPI用のURLを変数に代入する。
STEP3
URLを代入した変数へのGETリクエスト及びloads関数でJSONデータをPythonオブジェクトへ変更する。
STEP4
for文にて”vulnerabilities”キーの配下にある条件に一致した脆弱性の下記情報を抽出しPrintで表示する。 抽出情報:CVEID、CVSSv3スコア、公開日
STEP5
下記画面の通りにCVE番号、ベーススコア、公開日がそれぞれ表示されていれば成功。
補足
STEP4にて取得したい値のデータが出力できない場合の対処法。※参考例としてCVSSv3のスコアが取得できなかった場合 対象のエラー箇所に右クリックでBreakpointを設定する。
その後Run&Debugを実行し自分の取得したいデータの抽出に成功していることを確認。
baseScoreを右クリックし”Add to Watch”を選択し、対象の値のパスが”cve['cve']['metrics']['cvssMetricV31'][0]['cvssData']['baseScore']”であることを確認したため、先ほどのエラー箇所に同パスを入力する。
パスの設定が正しく完了し、エラーの解消ができる。
おわりに
以上でPythonを使った脆弱性情報のAPI出力は完了となります。 NVDの情報を活用し、手動で確認をしている脆弱性管理業務効率化の推進が可能です。 最後までお読みいただきありがとうございました。
0-WANについて
私たち0-WANは、ゼロトラスト製品を中心とした、マルチベンダーでのご提案で、お客様の経営課題解決を支援しております。 ゼロトラストってどうやるの?製品を導入したけれど使いこなせていない気がする等々、どんな内容でも支援いたします。 お気軽にご相談ください。
問い合わせ先、0-WANについてはこちら。
一緒に働いて頂ける仲間も募集しています
今までの経験を活かして、私たちと一緒にゼロトラスト分野で活躍しませんか?