Oracle Autonomous Linuxをハックする Part 2

# 前回の続き

前回から続いた内容なので、連続した段落番号をつけている。

* [Oracle Autonomous Linuxをハックする Part1](https://qiita.com/yamada-hakase/items/3b29b49703d2c807349b)

# 4. Kspliceの設定を調べる

KspliceとはOracle Linuxで利用できるライブ・パッチング・システムだ。詳しくは以下のエントリーを読んでもらうとして、簡単に説明する。

* [OCIでKspliceを使う Part1](https://qiita.com/yamada-hakase/items/81b3331e79d59b947509)
* [OCIでKspliceを使う Part2](https://qiita.com/yamada-hakase/items/b00a2495a03b539407aa)

通常アップデートしたLinuxカーネルを有効にするには、OSを再起動する必要がある。しかしKspliceを使用すると、再起動しなくてもアップデートを有効化できる。

Kspliceのおもなメリットは以下のとおり。またglibcとopensslを対象にした、ユーザー空間対応Kspliceモジュールもある。

* ダウンタイム無しのパッチ適用／ロールバック
* 迅速なセキュリティ脆弱性への対応

### 4-1. インストールされているKspliceモジュール

インストールされているKspliceモジュールを確認する。拡張クライアント（ksplice）とUptrackクライアント（uptrack）の両方がインストールされている。さらに`glibc-2.17-292.0.1.ksplice1`や`openssl-1.0.2k-19.0.1.ksplice1`などのユーザー空間用パッケージもインストールされている。

```shell-session
# rpm -qa | grep -e ksplice -e uptrack | sort
glibc-2.17-292.0.1.ksplice1.el7.x86_64
glibc-common-2.17-292.0.1.ksplice1.el7.x86_64
ksplice-1.0.42-1.el7.x86_64
ksplice-core0-1.0.42-1.el7.x86_64
ksplice-helper-1.0.42-1.el7.x86_64
ksplice-known-exploit-detection-1.0.42-1.el7.x86_64
ksplice-release-el7-1.0-5.el7.x86_64
ksplice-tools-1.0.42-1.el7.x86_64
openssl-1.0.2k-19.0.1.ksplice1.el7.x86_64
openssl-libs-1.0.2k-19.0.1.ksplice1.el7.x86_64
uptrack-1.2.58-0.el7.noarch
```

### 4-2. Kspliceの設定ファイル

Kspliceの設定ファイルを確認する。`autoinstall = no`なので、自動適用しない設定になっている。

```shell-session
# grep -v -e '^\s*#' -e '^\s*$' /etc/uptrack/uptrack.conf
[Auth]
accesskey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx（意図的に伏せ字）
[Network]
https_proxy =
gconf_proxy_lookup = no
update_repo_url=https://oraclecloud-updates-ksplice.oracle.com/update-repository
user_update_repo_url=https://oraclecloud-updates-ksplice.oracle.com/ksplice/request
[Settings]
install_on_reboot = yes
autoinstall = no　★この部分
[Known-Exploit-Detection]
enabled = yes
```

### 4-3. Kspliceの動作状況 

Kspliceの動作状況を確認する。unameとuptrack-unameの結果が異なるので、Kspliceパッチが適用されている。

* uname: 動作しているベースカーネルのバージョン
* uptrack-uname: Kspliceパッチを提供した実効カーネルバージョン

```shell-session
# uname -r
4.14.35-1902.4.8.el7uek.x86_64
# uptrack-uname -r
4.14.35-1902.5.2.2.el7uek.x86_64
```

以下のコマンドを実行すると、適用済みパッチのリストが表示される。

```shell-session
# ksplice all show
100% |########################################################################|
Ksplice user-space updates:
No Ksplice user-space updates installed

Ksplice kernel updates:
Installed updates:
[lubjelbn] Known exploit detection.
[7zk0g4lf] Known exploit detection for CVE-2017-7308.
[zfuwlaff] Known exploit detection for CVE-2018-14634.
[pqqx26q0] Known exploit detection for CVE-2018-18445.
[28h7tx53] Kernel IO hang during directory entry cache shrinking.
[s3la2wa9] Use-after-free in Xen network backend receive path.
[r0cv90yp] SUNRPC failure during NFS secure unmounting.
[awwtw5mv] Memory leak when freeing NVMe subsystem.
[htah118n] NULL pointer dereference when using NVMe multipath with ANA deactivated.
[d8w38jxd] Multiple use-after-free in NVMe subsystem.
[oxqquizz] Improved fix for Spectre v1: Bounds check bypass in Vhost ioctl.
[6dd5x4cg] CVE-2019-14835: Privilege escalation during live migration of guest.
[plcrrmwl] KPTI enablement for Ksplice.
[j5cc6s5g] CVE-2019-14821: Denial-of-service in KVM MMIO coalesced writes.

Effective kernel version is 4.14.35-1902.5.2.2.el7uek
```

`autoinstall = no`で自動適用しない設定になっていることと一致しないが、この謎解きは今後の課題にする。

# 5. Oracle Autonomous Linuxとは何か？

ここまでの調査で大まかなことは分かった。**「Oracle Autonomous Linux固有」**と思われる機能は以下のとおり。Kspliceとyum-cronは通常のOracle Linuxでも利用できるが、デフォルトでは有効化されていない。

1. Kspliceパッチが自動適用される
1. RPMパッケージが自動アップデートされる（yum-cron）
1. Oracle Autonomous Linux固有のサービスal-config.serviceが起動している


とはいえ、

**<font color="blue">Oracle Autonomous Linuxって、Kspliceやyum-cronがデフォルトで有効化されるだけ？</font>**

**<font color="blue">新機能として発表しても、実際には既存の手堅いテクノロジーを利用していることが多いOracle。それでもコンサバすぎるのでは？</font>**

**<font color="blue">stressやfioで負荷を掛けても反応無し。いったいNotificationsを設定した意味は？</font>**

などと考えつつ、インスタンスを起動したまま放置。

**<font color="red">すると翌日Notifications経由でメールが送られてきた来た！　イエーイ！</font>**

※2019/9/24以降のバージョン（al-config-1.0-1.0.29.el7）では、Notificationsをセットアップするとメールが送信される。

これがメールの文面。

```shell
+------------------------------------------------------------------------+
| Summary (Tue Oct 1 HH:MM:DD JST 2019)
| 
+------------------------------------------------------------------------+
Yum updates installed: no
Ksplice updates installed: no
Uptime: 15:46:07 up 20:42, 1 user,
load average: 0.00, 0.00, 0.00 
+------------------------------------------------------------------------+
| Ksplice upgrade report
| 
+------------------------------------------------------------------------+
Running 'ksplice -y all upgrade'. 
Updating on-disk packages for new processes 
Loaded plugins: langpacks, ulninfo 
No packages marked for update 
Nothing to do. 
Nothing to be done. 
Your kernel is fully up to date. 
Effective kernel version is 4.14.35-1902.5.2.2.el7uek 
+------------------------------------------------------------------------+
| Yum upgrade report 
|
+------------------------------------------------------------------------+
Running 'yum-cron' with update cmd: default. 
+------------------------------------------------------------------------+
| Ksplice updates status 
| 
+------------------------------------------------------------------------+
Running 'ksplice all show'. 
Ksplice user-space updates: 
No Ksplice user-space updates installed 

Ksplice kernel updates: 
Installed updates: 
[1rw4f14x] Known exploit detection. 
[eexuzyat] Known exploit detection for CVE-2017-7308. 
[bum1jlug] Known exploit detection for CVE-2018-14634. 
[p31wiydb] KPTI enablement for Ksplice. 
[oql5q0mj] Known exploit detection for CVE-2018-18445. 

Effective kernel version is 4.14.35-1902.5.2.2.el7uek 
+------------------------------------------------------------------------+
| Needs-restarting status 
|
+------------------------------------------------------------------------+
Running 'needs-restarting'. 
-------------------------------------------------------------------------- 
Running 'needs-restarting --services'. 
-------------------------------------------------------------------------- 
Running 'needs-restarting --reboothint'. No core libraries or services have been updated.
Reboot is probably not necessary.
```

書かれている内容は以下のとおり。来ないよりはいいが、正直物足りないような。まあAutonomous Databaseも徐々に進歩だからねぇ。

* Kspliceによるアップデート情報
* yum-cronによるアップデート情報
* OS再起動の必要性の有無。needs-restartingは、インストールしたRPMパッケージから再起動の必要性を表示するツール


# おわりに

次回は実際にスクリプトを調査して、より深い解析を試みる。

* [Oracle Autonomous Linuxをハックする Part 3](https://qiita.com/yamada-hakase/items/f613ef367bd5ddfee987)