LoginSignup
28
16

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-07-19

はじめに

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

脆弱性に関する情報は下記を参考に。(英語です)
Apache2.2系
Apache2.4系

前提

  • 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週間でまた新しいのが出たようです。

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はずっと使えないのでしょうか。。。
この辺は詳しくないので、影響がないのか調査する必要がありそうです。。。。。

28
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
16