LoginSignup
0
0

EPSS分析環境を作る、hogehuga/epss-dbの使い方

Posted at

本記事について

EPSS(The Exploit Prediction Scoring System)について、ローカルで分析ができるようにmysqlにすべてのデータを保管するための、docker imageを作りました。これの使い方を簡単に解説します。

waht is EPSS?

FiRSTが管理する、脆弱性悪用スコアリングのシステムです。

使い方の説明記事であるため、EPSSを知っていることを前提としています。

概要

github.com/hogehuga/epss-db で作ってありますが、DockerHubにイメージを用意しました。通常はDockerHubのイメージを使ってください。

  • イメージを自分で作りたい人は、docker/ 内にDockerfileが置いてあるので、これを修正してbuildしてみてください。
    • $ docker build -t customImage ./

Docker上でmysqlコンソールから使う想定であり、状況によりcsvなりでデータを出すことになると思います。その為、share/ ディレクトリを擁してあります。

  • docker container run--mountオプションで、ホストと共有するディレクトリを指定してください。

データ数がそれなりに多いので、遅いかも。indexを張った後に"1日分のデータ"を追加すると、10分くらいかかります。

  • index無しだと2分くらいでした。弊環境では。
  • 以前のSQLite3バージョンだと、2時間くらいかかってました。mysqlで速度は改善しましたね。

簡単に使う

説明便宜上、共有ディレクトリの説明は面倒なので、mount自体を省略します。実際に使う時にはmountしておいた方が楽だと思います。

1. Docker imageを使ってrunする

$ docker container run --name <yourContainerName> -e MYSQL_ROOT_PASSWORD=mysql -d hogehuga/epss-db

  • --nameMYSQL_ROOT_PASSWORDはご自由に設定ください。

2. 対象containerにログインする

$ docker exec -it <yourContainerName> bash

  • そんなに頻繁に使うものでもないので、containerにログインして使います。

3. EPSSデータをmysqlに入れる

# cd /opt/epss-db
# ./epss-init-getdata.sh(25分程度かかる)
# ./epss-init-preprocess.sh(15分以下程度かかる)
# ./epss-init-import.sh(30分程度かかる)

  • github.com/hogehuga/epss-db/opt/epss-db にcloneしてあります。
  • ./epss-init-getdata.shは、FiRSTのサイトから*.csv.gzのオリジナルデータをwgetし、/opt/epss-db/epss-data以下に配置します。
    • 時期によりデータ構造が違うので、1st``2nd``3rdのディレクトリ事で分けています。詳細はスクリプトを見て。
  • ./epss-init-preprocess.shは、ダウンロードしたデータを、現在の項目一覧に標準化します。
    • 1stはCVE-ID/epss、2ndはCVE-ID/epss/Percentile、3rdはCVE-ID/epss/Percentile/model_versionが含まれています。一番データ項目の多い3rdに合わせてデータ補完しています。
  • ./epss-init-import.shは、mysqlにデータを入れています。
    • それなりにデータ数が多いので、indexの無い状態でデータを入れ込みます。

4. indexを付ける

# ./epss-init-createindex.sh

  • 大量データ投入が終わったら、indexを張ります。
    • indexが無いと検索に耐えられないので、indexは必要です。ですが、indexがある状態だとデータ投入に時間がかかるため、import後にindexを張ります。
  • 利用するクエリに合わせて調整してください。
    • 一般的に必要と思われる、各カラムに対してindexを付けています。

5.使う

$ docker -it <yourContainerName> bashでログイン後にmysql --defaults-extra-file=/opt/epss-db/my.cnf -u root epssdbなどで対話的に。

  • 適当に使ってみてください。
  • おそらく、これを必要とする人は少ないと思います&目的があると思うので、思い思いに使ってください。
    • 必要ならSIEMに入れてグラフ化してもいいかもしれません。講演などでは使えそう。

6.前日のデータを入れる

$ ./epss-add.sh -d "2023-12-31"

  • 2022-02-04以降のデータは、このコマンドで日付指定で追加可能です。
  • 用途としては、epss-db構築後、FIRSTで毎日公開される*.csv.gzをmysqlに追加することを目的としています。
    • といいながら、cronでのバッチ処理は意識していない、対話的な作りです。勝手に弄ろう&PullRequest下さい。

終わりに

EPSSのデータはどう使えるのか、を考えるには、EPSSデータの分布や状況を核にする必要があります。その為のツールとして作りました。必要な人には有用ですが、そうでない人にはどうでもいい(むしろSIEMで作れ)というものです。
必要な人が手間をかけずに使える、が目的です。

とりあえず使ってみるとよいかもしれません。

以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0