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