Vuls動作検証 - JDK その2

## 目的

前回 : [Vuls動作検証 \- JDK \- Qiita](https://qiita.com/witchcraze/items/cf7a8c3e67e006df191f) で脆弱性情報を取得してみたけどうまく行っている気がしなかった。

CPEスキャンはOracleが告知しているデータがベースだと思われる。
今回はOne Liner Scan ModeでRedHatの提供するOVALデータを使って脆弱性情報を取得してみる。

## 方法

1. CPEを確認していくつかピックアップ
    - Google
    - [NVD \- Search](https://nvd.nist.gov/products/cpe/search)
    - [vulsio/go\-cpe\-dictionary: Build a local copy of CPE\(Common Platform Enumeration\)](https://github.com/vulsio/go-cpe-dictionary#how-to-search-cpe-name-by-application-name)
1. CPE情報をもとに脆弱性情報を取得
    - [Server · Vuls](https://vuls.io/docs/ja/usage-server.html#applicationjson)

### One Liner Scan Modeでで必要なデータを確認

> -H "X-Vuls-OS-Family: `awk '{print tolower($1)}' /etc/redhat-release`" 
-H "X-Vuls-OS-Release: `awk '{print $4}' /etc/redhat-release`" 
-H "X-Vuls-Kernel-Release: `uname -r`" 
-H "X-Vuls-Server-Name: `hostname`" --data-binary "`rpm -qa --queryformat "%{NAME} %{EPOCHNUM} %{VERSION} %{RELEASE} %{ARCH}\n"`" 

それぞれのコマンド結果

```
# awk '{print tolower($1)}' /etc/redhat-release
centos

# awk '{print $4}' /etc/redhat-release
7.9.2009

# rpm -qa --queryformat "%{NAME} %{EPOCHNUM} %{VERSION} %{RELEASE} %{ARCH}\n" |grep "openjdk "
java-1.8.0-openjdk 1 1.8.0.322.b06 1.el7_9 x86_64
```

必要なJSONは、[Server · Vuls](https://vuls.io/docs/ja/usage-server.html) に例示されている。
ディストリビューションによって記載項目が違い、中には必須とされる項目が記載されていないこともある。
もしかしてかなり省略可能なのだろうか？

また、コマンドラインだと%{EPOCHNUM}があるがJSONだと指定項目がない。
いろいろ試していたところ、代わりに1:をversionの前につけると期待通りの動作をするようになった。（後ほど要検証）

最終的にはこんな感じのJSONで通った
この内容だとOSのマイナーバージョンを変更しても結果に影響はなさそうだった
```json
{
  "family": "centos",
  "release": "7",
  "packages": {
    "jdk": {
      "name": "java-1.8.0-openjdk",
      "version": "1:1.8.0.XXX",
    }
  }
}
```
```json
{
  "family": "centos",
  "release": "7",
  "packages": {
    "jdk": {
      "name": "java-11-openjdk",
      "version": "1:11.0.4",
    }
  }
}
```

## 11系

| Version | vuls server (OS:7) |vuls server (OS:8)|
|:-:|:-:|:-:|
|11.0.0|95|87|
|11.0.2|95|87|
|11.0.3|88|87|
|11.0.4|85|85|
|11.0.5|78|78|
|11.0.6|63|63|
|11.0.7|56|56|
|11.0.8|43|43|
|11.0.9|36|36|
|11.0.10|29|29|
|11.0.11|29|29|
|11.0.12|28|28|
|11.0.13|25|25|
|11.0.14|15|15|
|11.0.15|0|0|

8系は11.0.4あたりからスタートだと思うので、かなり妥当な数値の遷移をしているように見える。

## 8系

| Version | vuls server (OS:6) | vuls server (OS:7) |vuls server (OS:8)|
|:-:|:-:|:-:|:-:|
|1.8.0.0|226|239|81|
|1.8.0.10|226|239|81|
|1.8.0.20|226|239|81|
|1.8.0.30|226|239|81|
|1.8.0.40|212|239|81|
|1.8.0.50|204|231|81|
|1.8.0.60|188|215|81|
|1.8.0.70|170|197|81|
|1.8.0.80|162|189|81|
|1.8.0.90|162|189|81|
|1.8.0.100|156|183|81|
|1.8.0.110|148|175|81|
|1.8.0.120|142|169|81|
|1.8.0.130|131|158|81|
|1.8.0.140|125|152|81|
|1.8.0.150|103|130|81|
|1.8.0.160|89|116|81|
|1.8.0.170|74|101|81|
|1.8.0.180|63|90|81|
|1.8.0.190|62|89|81|
|1.8.0.200|55|82|81|
|1.8.0.210|54|81|81|
|1.8.0.220|51|78|78|
|1.8.0.230|45|72|72|
|1.8.0.240|31|58|58|
|1.8.0.250|24|51|51|
|1.8.0.260|14|41|41|
|1.8.0.270|7|34|34|
|1.8.0.280|0|27|27|
|1.8.0.290|0|27|27|
|1.8.0.300|0|26|26|
|1.8.0.310|0|23|23|

6系は途中でEOLを迎えたために新規脆弱性がレポートされず、7系と27件のずれが発生していると予想される。
こちらも、CPEベースのスキャンと比較して数値の推移に妥当性が見られる。

マッチング処理だと思うので、実際にスキャンする際はしっかり細かいリリースバージョンまで使うこと。（恐らく最後の方の修正情報がマッチングできなくなる）

過去のパッケージ一覧も確認可能
```
# yum update -y centos-release
# yum list java-1.8.0-openjdk --showduplicates --enablerepo=C7.*
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
Available Packages
java-1.8.0-openjdk.x86_64       1:1.8.0.31-2.b13.el7           C7.1.1503-base
java-1.8.0-openjdk.x86_64       1:1.8.0.31-7.b13.el7_1         C7.1.1503-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.45-30.b13.el7_1        C7.1.1503-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.51-1.b16.el7_1         C7.1.1503-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.60-2.b27.el7_1         C7.1.1503-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.65-2.b17.el7_1         C7.1.1503-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.65-3.b17.el7           C7.2.1511-base
java-1.8.0-openjdk.x86_64       1:1.8.0.71-2.b15.el7_2         C7.2.1511-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.77-0.b03.el7_2         C7.2.1511-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.91-0.b14.el7_2         C7.2.1511-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.91-1.b14.el7_2         C7.2.1511-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.101-3.b13.el7_2        C7.2.1511-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.102-1.b14.el7_2        C7.2.1511-updates
java-1.8.0-openjdk.i686         1:1.8.0.102-4.b14.el7          C7.3.1611-base
java-1.8.0-openjdk.x86_64       1:1.8.0.102-4.b14.el7          C7.3.1611-base
java-1.8.0-openjdk.x86_64       1:1.8.0.111-1.b15.el7_2        C7.2.1511-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.111-1.b15.el7_2        C7.3.1611-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.111-2.b15.el7_3        C7.3.1611-updates
java-1.8.0-openjdk.i686         1:1.8.0.121-0.b13.el7_3        C7.3.1611-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.121-0.b13.el7_3        C7.3.1611-updates
java-1.8.0-openjdk.i686         1:1.8.0.131-2.b11.el7_3        C7.3.1611-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.131-2.b11.el7_3        C7.3.1611-updates
java-1.8.0-openjdk.i686         1:1.8.0.131-3.b12.el7_3        C7.3.1611-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.131-3.b12.el7_3        C7.3.1611-updates
java-1.8.0-openjdk.i686         1:1.8.0.131-11.b12.el7         C7.4.1708-base
java-1.8.0-openjdk.x86_64       1:1.8.0.131-11.b12.el7         C7.4.1708-base
java-1.8.0-openjdk.i686         1:1.8.0.141-1.b16.el7_3        C7.3.1611-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.141-1.b16.el7_3        C7.3.1611-updates
java-1.8.0-openjdk.i686         1:1.8.0.141-2.b16.el7_4        C7.4.1708-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.141-2.b16.el7_4        C7.4.1708-updates
java-1.8.0-openjdk.i686         1:1.8.0.144-0.b01.el7_4        C7.4.1708-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.144-0.b01.el7_4        C7.4.1708-updates
java-1.8.0-openjdk.i686         1:1.8.0.151-1.b12.el7_4        C7.4.1708-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.151-1.b12.el7_4        C7.4.1708-updates
java-1.8.0-openjdk.i686         1:1.8.0.151-5.b12.el7_4        C7.4.1708-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.151-5.b12.el7_4        C7.4.1708-updates
java-1.8.0-openjdk.i686         1:1.8.0.161-0.b14.el7_4        C7.4.1708-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.161-0.b14.el7_4        C7.4.1708-updates
java-1.8.0-openjdk.i686         1:1.8.0.161-2.b14.el7          C7.5.1804-base
java-1.8.0-openjdk.x86_64       1:1.8.0.161-2.b14.el7          C7.5.1804-base
java-1.8.0-openjdk.i686         1:1.8.0.171-7.b10.el7          C7.5.1804-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.171-7.b10.el7          C7.5.1804-updates
java-1.8.0-openjdk.i686         1:1.8.0.171-8.b10.el7_5        C7.5.1804-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.171-8.b10.el7_5        C7.5.1804-updates
java-1.8.0-openjdk.i686         1:1.8.0.181-3.b13.el7_5        C7.5.1804-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.181-3.b13.el7_5        C7.5.1804-updates
java-1.8.0-openjdk.i686         1:1.8.0.181-7.b13.el7          C7.6.1810-base
java-1.8.0-openjdk.x86_64       1:1.8.0.181-7.b13.el7          C7.6.1810-base
java-1.8.0-openjdk.i686         1:1.8.0.191.b12-0.el7_5        C7.5.1804-updates
java-1.8.0-openjdk.i686         1:1.8.0.191.b12-0.el7_5        C7.6.1810-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.191.b12-0.el7_5        C7.5.1804-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.191.b12-0.el7_5        C7.6.1810-updates
java-1.8.0-openjdk.i686         1:1.8.0.191.b12-1.el7_6        C7.6.1810-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.191.b12-1.el7_6        C7.6.1810-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.201.b09-2.el7_6        C7.6.1810-updates
java-1.8.0-openjdk.i686         1:1.8.0.212.b04-0.el7_6        C7.6.1810-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.212.b04-0.el7_6        C7.6.1810-updates
java-1.8.0-openjdk.i686         1:1.8.0.222.b03-1.el7          C7.7.1908-base
java-1.8.0-openjdk.x86_64       1:1.8.0.222.b03-1.el7          C7.7.1908-base
java-1.8.0-openjdk.i686         1:1.8.0.222.b10-0.el7_6        C7.6.1810-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.222.b10-0.el7_6        C7.6.1810-updates
java-1.8.0-openjdk.i686         1:1.8.0.222.b10-1.el7_7        C7.7.1908-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.222.b10-1.el7_7        C7.7.1908-updates
java-1.8.0-openjdk.i686         1:1.8.0.232.b09-0.el7_7        C7.7.1908-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.232.b09-0.el7_7        C7.7.1908-updates
java-1.8.0-openjdk.i686         1:1.8.0.242.b08-0.el7_7        C7.7.1908-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.242.b08-0.el7_7        C7.7.1908-updates
java-1.8.0-openjdk.i686         1:1.8.0.242.b08-1.el7          C7.8.2003-base
java-1.8.0-openjdk.x86_64       1:1.8.0.242.b08-1.el7          C7.8.2003-base
java-1.8.0-openjdk.i686         1:1.8.0.252.b09-2.el7_8        C7.8.2003-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.252.b09-2.el7_8        C7.8.2003-updates
java-1.8.0-openjdk.i686         1:1.8.0.262.b10-0.el7_8        C7.8.2003-updates
java-1.8.0-openjdk.x86_64       1:1.8.0.262.b10-0.el7_8        C7.8.2003-updates
java-1.8.0-openjdk.i686         1:1.8.0.262.b10-1.el7          base
java-1.8.0-openjdk.x86_64       1:1.8.0.262.b10-1.el7          base
java-1.8.0-openjdk.i686         1:1.8.0.272.b10-1.el7_9        updates
java-1.8.0-openjdk.x86_64       1:1.8.0.272.b10-1.el7_9        updates
java-1.8.0-openjdk.i686         1:1.8.0.275.b01-0.el7_9        updates
java-1.8.0-openjdk.x86_64       1:1.8.0.275.b01-0.el7_9        updates
java-1.8.0-openjdk.i686         1:1.8.0.282.b08-1.el7_9        updates
java-1.8.0-openjdk.x86_64       1:1.8.0.282.b08-1.el7_9        updates
java-1.8.0-openjdk.i686         1:1.8.0.292.b10-1.el7_9        updates
java-1.8.0-openjdk.x86_64       1:1.8.0.292.b10-1.el7_9        updates
java-1.8.0-openjdk.i686         1:1.8.0.302.b08-0.el7_9        updates
java-1.8.0-openjdk.x86_64       1:1.8.0.302.b08-0.el7_9        updates
java-1.8.0-openjdk.i686         1:1.8.0.312.b07-1.el7_9        updates
java-1.8.0-openjdk.x86_64       1:1.8.0.312.b07-1.el7_9        updates
java-1.8.0-openjdk.i686         1:1.8.0.322.b06-1.el7_9        updates
java-1.8.0-openjdk.x86_64       1:1.8.0.322.b06-1.el7_9        updates
```