本記事について
EPSS(The Exploit Prediction Scoring System)について、ローカルで分析ができるようにmysqlにすべてのデータを保管するための、docker imageを作りました。これの使い方を簡単に解説します。
waht is EPSS?
FiRSTが管理する、脆弱性悪用スコアリングのシステムです。
使い方の説明記事であるため、EPSSを知っていることを前提としています。
- 今後、弊勉強会である"脆弱性対応勉強会"でも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
-
--name
やMYSQL_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で作れ)というものです。
必要な人が手間をかけずに使える、が目的です。
とりあえず使ってみるとよいかもしれません。
以上。