Apacheの脆弱性対応をしたら、Apacheのサービスが停止した（httpd2.4.25→httpd2.4.27）

#はじめに
あるWebシステムで使用していたApacheのバージョンで脆弱性が発見されました。
脆弱性対応をしたところ、Apacheが起動しないという事象に陥ってしまった時の話をします。

脆弱性に関する情報は下記を参考に。（英語です）
[Apache2.2系](https://httpd.apache.org/security/vulnerabilities_22.html#2.2.33-dev)
[Apache2.4系](https://httpd.apache.org/security/vulnerabilities_24.html#2.4.26)


#前提
- OS：　CentOS7
- あげる前のバージョン：　httpd2.4.25
- 使用リポジトリ：　iusリポジトリ


#アップデート手順
1.まずは現状のバージョン確認。

```
# httpd -v
Server version: Apache/2.4.25 (CentOS)
```
>ふむ。2.4.25なので、脆弱性対応しないといけないですね。。。


2.iusリポジトリに、脆弱性対応後のバージョンを確認します。
>ここで、アップデート後に脆弱性対象外のバージョンになっていることを確認します。

```
# yum check-update --enablerepo=ius | grep httpd
httpd24u.x86_64                        2.4.27-1.ius.centos7              ius    
httpd24u-devel.x86_64                  2.4.27-1.ius.centos7              ius    
httpd24u-filesystem.noarch             2.4.27-1.ius.centos7              ius    
httpd24u-mod_ssl.x86_64                1:2.4.27-1.ius.centos7            ius    
httpd24u-tools.x86_64                  2.4.27-1.ius.centos7              ius
```
>最新バージョン2.4.27が出ましたね。。。
>2.4.26からわずか３週間でまた新しいのが出たようです。

3.念のため、設定ファイルのバックアップを取得します。

```
# cp -rp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.backup_yyyymmdd
```

4.アップデート！

```
# yum update --enablerepo=ius httpd


〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
更新:
  httpd24u.x86_64 0:2.4.27-1.ius.centos7                                                                                                     

依存性を更新しました:
  httpd24u-devel.x86_64 0:2.4.27-1.ius.centos7                        httpd24u-filesystem.noarch 0:2.4.27-1.ius.centos7                     
  httpd24u-mod_ssl.x86_64 1:2.4.27-1.ius.centos7                      httpd24u-tools.x86_64 0:2.4.27-1.ius.centos7                          

完了しました!
```

5.バージョン確認！

```
# httpd -v
Server version: Apache/2.4.27 (CentOS)
```
>やった！バージョン上がってる！

6.あとは動作確認だけ！

```
# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since 水 2017-07-19 22:48:57 JST; 8s ago
     Docs: man:httpd.service(8)
  Process: 22788 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
 Main PID: 22788 (code=exited, status=1/FAILURE)
```
ん？？？？？？
起動していないやん！
ブラウザで確認するも、アクセス不可能。そりゃそうだが。。。。
こりゃやばい。。。。。。


#エラー調査！！！！
###まずはsyslog確認！

```
# journalctl -xe
7月 19 23:10:34 ip-172-31-14-36.ap-northeast-1.compute.internal httpd[23278]: httpd: Syntax error on line 56 of /etc/httpd/conf/httpd.conf: 
 7月 19 23:10:34 ip-172-31-14-36.ap-northeast-1.compute.internal systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILUR
 7月 19 23:10:34 ip-172-31-14-36.ap-northeast-1.compute.internal systemd[1]: Failed to start The Apache HTTP Server.
-- Subject: Unit httpd.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
```
ん？？？
「httpd: Syntax error on line 56 of /etc/httpd/conf/httpd.conf」を発見！
設定ファイルの文法ミス？？？


###とりあえず56行目を確認！！

```
# vi /etc/httpd/conf/httpd.conf

Include conf.modules.d/*.conf

```
ふむふむ、文法的には合っているはず！（ここはそもそもいじっていない！）
てことは、モジュールを読み込んでエラーが出ているのか！！
何かアップデートで仕様が変わったのか？？？（推測）


###どのモジュールが悪さをしているのか調査
とりあえず、「syntax error」出ているので、Apache設定ファイルの文法チェックしてみます！

```
# apachectl configtest
httpd: Syntax error on line 56 of /etc/httpd/conf/httpd.conf: Syntax error on line 40 of /etc/httpd/conf.modules.d/00-base.conf: Cannot load modules/mod_http2.so into server: /etc/httpd/modules/mod_http2.so: undefined symbol: nghttp2_session_get_stream_local_window_size
```

###原因のモジュール発見！！(mod_http2)
こいつが悪さをしている！！
なんかよくわからないが、読み込めていない！！

```
Syntax error on line 40 of /etc/httpd/conf.modules.d/00-base.conf: Cannot load modules/mod_http2.so into server
```


#対応策！！！（mod_http2.soをコメントアウト）
###とりあえず、悪さをしているモジュールを読み込まないようにします。
コメントアウトするだけですね。

```
# vi /etc/httpd/conf.modules.d/00-base.conf
40行目をコメントアウトする！
●変更前
LoadModule http2_module modules/mod_http2.so

●変更後
#LoadModule http2_module modules/mod_http2.so
```

###設定反映！と動作確認

```
# systemctl restart httpd

# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since 水 2017-07-19 23:25:56 JST; 19s ago
     Docs: man:httpd.service(8)
 Main PID: 23666 (httpd)
   Status: "Total requests: 0; Idle/Busy workers 100/0;Requests/sec: 0; Bytes served/sec:   0 B/sec"
   CGroup: /system.slice/httpd.service
           ├─23666 /usr/sbin/httpd -DFOREGROUND
           ├─23667 /usr/sbin/httpd -DFOREGROUND
           ├─23668 /usr/sbin/httpd -DFOREGROUND
           ├─23669 /usr/sbin/httpd -DFOREGROUND
           ├─23670 /usr/sbin/httpd -DFOREGROUND
           └─23671 /usr/sbin/httpd -DFOREGROUND
```
よっしゃ！起動した！
一応ブラウザでも確認してください！
**ログイン機能等があれば、併せて確認しましょう。**


#原因調査
一体何が起きたのか。。。。
設定ファイルを変えていないのに、「Syntax error」が出たのは何故。。。。

色々調査したところ原因は、
**Apache2.4.27から、mod_http2.soが使えなくなったようです。。。
つまり、HTTP/2.0での通信ができなくなったみたいです。
HTTP/2.0だと、ダイジェスト認証での情報流出や、DOS攻撃される可能性がある、とのことです。**

参考URL
https://blog.apar.jp/linux/7873/
https://oss.sios.com/security/apache-security-vulnerabiltiy-20170714
http://httpd.apache.org/security/vulnerabilities_24.html


#終わりに
今回の事象は、想定外でした。
というのも、Apache2.4.27に上がるとは思っておりませんでした。
上記手順で行った、アップデート後のバージョン確認をしっかりと行いましょう。
脆弱性対応をする前に検証環境で実施した際（Apache2.4.27が出る1日前くらい）に、Apache2.4.26に問題なく上がることは確認ができていました。

脆弱性の対応をする前に、一度公式ホームページ等で最新バージョンを確認しておくことが必要ですね。
「まさか新バージョンが出ているとは、、、知りませんでした。」なんて言えないですからね。。。。。

それにしても、HTTP/2.0はずっと使えないのでしょうか。。。
この辺は詳しくないので、影響がないのか調査する必要がありそうです。。。。。