自宅サーバーにバルスしてみた!

# はじめに
自宅LANにあるサーバーにバルスしてみました。vulsの脆弱性スキャンの結果から優先的にアップデートが必要なパッケージを選んでみます

# Vulsとは
* [公式](https://vuls.io/ja/)
* システムのソフトウェア情報を収集しVulsが蓄積している脆弱性データベースの情報と関連付け、管理下のシステムに関係のある脆弱性情報のみを通知してくれる。検知だけでパッチ適用はしない(あえてしない)
* 対象はOSのパッケージ
* 脆弱性データベース
  - NVD
  - JVN
  - OVAL
  - 各ベンダ


# 実行環境
* vulsインストール
  - CentOS7

# インストール手順
* 公式を参照。今回CentOS7にインストール
* 今回の調査するホストもCentOSなのでインストールする過程でRedHatの脆弱性情報をインストールしました。これは調査するシステムによって変わります

# 早速、バルス！
vulsをインストールしたCentOS7のlocalhostに対して実施

```:cosole
$ vuls scan
```
結果は７４もの脆弱性を発見...！！


```:console
$ vuls report
.
.
Total: 74 (High:10 Medium:56 Low:8 ?:0), 0/74 Fixed, 731 installed, 123 updatable, 0 exploits, en: 0, ja: 0 alerts
.
.
```

TUI（Text User Interface）でみてみる

```:console
$ vuls tui
```
グラフィカル！
![スクリーンショット 2019-05-18 0.03.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273424/89512dfb-2dfe-e80d-8837-ea9d91181436.png)



## ここまで
vulsを利用することでアップデートがされていないパッケージを確認することができました。次にどのパッケージを優先的にアップデートするべきかを考えてみました

# vulsで分かる脆弱性の影響有無による対応方法の判断
## fixステータスのwill not fix 
* fixed
  - 修正パッチが提供済み
* will not fix
  - 影響が少ないので修正がないもの
* Not fixed yet
  - yetがついているので今後修正がでるもの？
  - Not fixed yetで緊急性が高いもの(攻撃条件の成立可否で緊急)なものは修正パッチがでるまでに別の対応をしなくてはいけないかも(ネットワークで防ぐなど)

tuiの右下を見るとwill not fixという記載があります。これは影響が低いと判断してパッケージの修正パッチ提供がありません。よってここがwill not fixの場合は対応が必要なしだと思います。

### CVSSの違い
ひとつの目安としてCVSSの値があると思います。tuiの画像をよく見るとわかりますがNVDとredhat_apiでCVSSの値が異なるものがありました。redhat_apiではredhat用にコンパイルなどカスタマイズしているようなのでredhat_apiとNVDでは異なるようです。たぶん今回はCentOS7なのでredhat_apiの方をみればよいのかなと思います。

will not fix以外のredhatでCVSSが高いものを対象とする


### 攻撃条件の成立可否

[ゼロから考える脆弱性対応](https://qiita.com/t_nakayama0714/items/16f987742e8e3ee48ffd)より
>最も分かりやすく、厄介なのが「 外部から攻撃可能 」というものです。
DNSやWebサーバなどの外部に公開せざるを得ないサーバについての脆弱性であれば、攻撃条件は容易に達成することができ、攻撃の危険性は非常に高いと考えられます。
一方で、一般に外部露出することのないDBサーバなどに関連する脆弱性ではそもそも攻撃の条件をクリアすることができなかったりします。
ただし、複数の脆弱性を用いてこれらの条件を突破するケースもあるため、安易に「条件をクリアできない」と決めつけてはいけないことも頭に入れておいてください。

攻撃条件の成立可否から考える対応

- 緊急対応
    * 例えば外部に公開しているサーバーがWebサーバの場合にWebサーバに`外部から攻撃可能(AttackVector:ネットワーク)`な脆弱性があり、さらに攻撃の条件成立が容易な場合は非常に危険！即アップデート必要。または修正パッチが提供されていない場合は仮想パッチなどの何らかの対策が必要かもしれない
- その他
    * 内部からや隣接(内部LAN？)から攻撃可能なものに関しては権限を取得する必要があったりしてそもそもの攻撃条件が達成するのが難しそう。緊急ではないと思われるしwill not fixが多いイメージ

### 補足:過去の緊急そうなCVE
[更新：bash の脆弱性対策について(CVE-2014-6271 等)](https://www.ipa.go.jp/security/ciadr/vul/20140926-bash.html)

* redhatクリティカル
  - https://access.redhat.com/security/cve/cve-2014-6271
* AttackVector:ネットワーク
* 条件:ウェブアプリケーションが CGI から OS のコマンドを実行している場合
* パッチが適用できない場合の対応
  - フィルタリング（WAF や iptables を用いるなど）
  - アクセス制限（ネットワーク機器を用いるなど）
  - 可能な場合、一時的な公開停止

ネットワークからの攻撃で条件もありえそう。パッチ適用できない場合はネットワークで防ぐ。



## 以上より優先的にアップデートが必要なパッケージの判断
* redhatでCVSSが高いものを対象とする(おのずとwill not fixは外れる)
  - AttackVector:ネットワークで攻撃条件が容易なものはスコアが高くなるはず
* 攻撃条件の成立可否から対応が必要なものを選ぶ(AttackVector:ネットワークは危険！)
* 攻撃条件の成立可否から緊急対応が必要なもので` Not fixed yet`な場合別途対応が必要になるかも(上記の補足)

ネットワークからの攻撃だとCVSSスコアも緊急性も高くなりそう。ネットワーク以外の攻撃だとそれほど緊急性は高くなりにくそう、ただし条件の容易さにより緊急性が高くなることもあるらしいので注意

# yum updateでパッケージ更新してみた
とりあえず今回は全てのパッケージを更新してみました

```:console

トランザクションの要約
===========================================================================================================================================
インストール    1 パッケージ
更新          125 パッケージ

総ダウンロード容量: 287 M
.
.
完了しました!
```

## 再度、バルス！！
バルス後、レポートを見る

```:console
$ vuls report 
.
.
[Reboot Required] localhost (centos7.6.1810)
============================================
Total: 58 (High:6 Medium:45 Low:7 ?:0), 0/58 Fixed, 731 installed, 0 updatable, 0 exploits, en: 0, ja: 0 alerts
```
totalの数が減っています。詳細を見ると`will not fix`と`Not fixed yet`だけになりました。[Reboot Required] なので再起動必要そうです。

```:console
$ vuls report -ignore-unfixed
.
.
[Reboot Required] localhost (centos7.6.1810)
============================================
Total: 0 (High:0 Medium:0 Low:0 ?:0), 0/0 Fixed, 731 installed, 0 updatable, 0 exploits, en: 0, ja: 0 alerts
```


# まとめ
* cvssのスコアが7くらいでもwill not fix は結構たくさんある。
* -ignore-unfixed
  - このオプションつけるとNot fixed yetが消えるのでNot fixed yetで緊急性が必要なものも消える。が、そういうものはネットがざわつくのでvulsの運用としては-ignore-unfixedつけて運用するのがよいかも
* tuiのcvssスコアにredhatが表示されないときがある、なぜ。linkはある
* ネットワークからの攻撃だと緊急性が高くなりそう。ローカルからの攻撃だとそれほど緊急性は高くなりにくそう、ただし条件の容易さにより緊急性が高くなることも。


# 参考
[脆弱性情報の見方と付き合い方](https://cross-black777.hatenablog.com/entry/2015/04/18/111210)
[Linuxのパッケージをアップデートしたあとrestartが必要なプロセスを見つける方法](https://qiita.com/usiusi360/items/7b47be9d0ab5b1acd608)
[ゼロから考える脆弱性対応](https://qiita.com/t_nakayama0714/items/16f987742e8e3ee48ffd)