CentOS Red Hatで放置すると危険なglibcのセキュリティ対応 CVE-2015-7547

centos-glibc-update-top

Linuxを利用している環境は多いと思います。クラウドやVPSなどでも手軽に利用できることから、以前より多くの環境に導入されています。そんなLinuxですが、今月に入り、大きなセキュリティホールが重要なライブラリであるglibcに見つかりました(CVE-2015-7547)。
対処レベルが「緊急」の為、早速、自社のサーバーに対して対応を行いました。まだ対応を行っていないサーバーも多いかと思いますので、glibcの脆弱性 CVE-2015-7547への具体的な対応方法を紹介していきます。

1. 脆弱性の内容

脆弱性の内容は詳細はJPCERTのCVE-2015-7547に関するページ

によると

glibc ライブラリにはバッファオーバーフローの脆弱性 (CVE-2015-7547) があります。本脆弱性を使用された場合、遠隔の第三者によって、任意のコードを実行されたり、サービス運用妨害 (DoS) 攻撃が行われたりするなどの可能性があります

とのこと。
遠隔の第三者によって、任意のコードが実行されるという内容から、かなり危険な脆弱性と分かります。
脆弱性の対象となるglibcのバージョンは、2.9 から 2.22 まで。脆弱性の詳細については、JVNのサイト

に詳しく記載されていますが、ここ最近のLinuxディストリビューション殆どが合致しています。
具体的には、以下のディストリビューションとバージョンが脆弱性をもつglibcを利用しており、脆弱性に合致するようです。

RedHat
- Red Hat Enterprise Linux Server EUS (v. 6.6)
- Red Hat Enterprise Linux Server AUS (v. 6.5)
- Red Hat Enterprise Linux Server AUS (v. 6.4)
- Red Hat Enterprise Linux Server AUS (v. 6.2)
- Red Hat Enterprise Linux Server EUS (v. 7.1)
- Red Hat Enterprise Linux version 6
- Red Hat Enterprise Linux version 7
CentOS
- CentOS version 6
- CentOS version 7
Debian
- squeeze
- wheezy
- jessie
Ubuntu
- Ubuntu 15.10
- Ubuntu 14.04 LTS
- Ubuntu 12.04 LTS

本記事では、CentOSのversion 6/7を利用している環境を前提として、手順を記載していきます。
Redhatでもほぼ、同様の手順で対応が可能ですので、参考にして頂ければ幸いです。

2. 対応したglibcのバージョン

CentOSのフォーラム

を見ると、CentOSで脆弱性 CVE-2015-7547へ対応するためには、glibc-2.12-1.166.el6_7.7.x86_64の適用が必要になるようです。(x84_64はOSが64bitの場合。)

3. glibcのバージョンアップ

ターゲットとなるバージョンが分かったところで、バージョンアップの具体的な手順について記載していきます。
CentOS、Redhatの場合、yumコマンドで実行します。yumコマンドでのアップデートはインターネットへ
接続している環境が前提となります。ここではyumコマンドが利用できる前提で進めていきます。
(Redhatは有償のディストリビューションのため、Redhat Networkの登録が行われていないと、yumコマンドが利用できません。
「redhat networkをRHN ClassicからRed Hat Subscription Managementへ変更する」
を参考に、redhat networkへ登録を行って下さい。)

3-1. 現バージョンの確認

まず、現状のglibcパッケージのバージョン確認を行います。パッケージのバージョン確認はyumコマンド、もしくはrpmコマンドにて行います。
rpmコマンドの場合

$ rpm -qa | grep glibc
glibc-2.12-1.166.el6_7.3.x86_64
glibc-headers-2.12-1.166.el6_7.3.x86_64
glibc-common-2.12-1.166.el6_7.3.x86_64
glibc-devel-2.12-1.166.el6_7.3.x86_64

yumコマンドの場合

$ yum list installed | grep glibc
glibc.x86_64 2.12-1.166.el6_7.3 @updates
glibc-common.x86_64 2.12-1.166.el6_7.3 @updates
glibc-devel.x86_64 2.12-1.166.el6_7.3 @updates
glibc-headers.x86_64 2.12-1.166.el6_7.3 @updates

上記の場合、glibcが名前に含まれるパッケージがシステムに4つインストールされており、全てのバージョンが 2.12-1.166.el6_7.3であることが分かります。対策済みのバージョンは glibc-2.12-1.166.el6_7.7 ですので、バージョンアップが必要なことが分かりました。

次に、yum check-updateコマンドで、glibcの2.12-1.166.el6_7.7がアップデート対象として表示されるかを確認します。

$ yum check-update | grep glibc
glibc.x86_64 2.12-1.166.el6_7.7 updates
glibc-common.x86_64 2.12-1.166.el6_7.7 updates
glibc-devel.x86_64 2.12-1.166.el6_7.7 updates
glibc-headers.x86_64 2.12-1.166.el6_7.7 updates

上記の結果から、2.12-1.166.el6_7.7がバージョンアップ後のバージョンであることが確認できました。

3-2. glibcのバージョンアップ

yumコマンドでパッケージのバージョンをアップデートするためには、システムの管理者 (root)へ移行する必要があります。suコマンドで、管理者へ移行します。

$ su -
Password: パスワードを入力

管理者へ移行するとプロンプトが$から#になります。
この状態で、yum updateコマンドを実行してglibcパッケージをアップデートします。
glibc以外のパッケージもアップデートしたい場合は yum updateだけ(パッケージ名の指定なし)を実行すると、全てのパッケージがアップデートされます。本記事ではglibcパッケージのみを対象としていますので、アップデートするパッケージとしてglibcを指定しています。

# yum update glibc
Loaded plugins: fastestmirror, security
Setting up Update Process
Determining fastest mirrors
epel/metalink | 5.1 kB 00:00
* base: ftp.iij.ad.jp
* epel: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
base | 3.7 kB 00:00
epel | 4.3 kB 00:00
epel/primary_db | 5.8 MB 00:00
extras | 3.4 kB 00:00
extras/primary_db | 34 kB 00:00
updates | 3.4 kB 00:00
updates/primary_db | 3.9 MB 00:00
Resolving Dependencies
--> Running transaction check
---> Package glibc-common.x86_64 0:2.12-1.166.el6_7.3 will be updated
---> Package glibc-common.x86_64 0:2.12-1.166.el6_7.7 will be an update
---> Package glibc-devel.x86_64 0:2.12-1.166.el6_7.3 will be updated
---> Package glibc-devel.x86_64 0:2.12-1.166.el6_7.7 will be an update
---> Package glibc-headers.x86_64 0:2.12-1.166.el6_7.3 will be updated
---> Package glibc-headers.x86_64 0:2.12-1.166.el6_7.7 will be an update
--> Finished Dependency Resolution

Upgrade 4 Package(s)

Total download size: 20 M
Is this ok [y/N]:y を入力

アップデートの情報が表示されます。内容を確認して問題が無ければ、yを入力してアップデートを実行します。

yを入力すると、パッケージのダウンロードとインストールが開始されます。

Downloading Packages:
(1/4): glibc-2.12-1.166.el6_7.7.x86_64.rpm | 3.8 MB 00:00
(2/4): glibc-common-2.12-1.166.el6_7.7.x86_64.rpm | 14 MB 00:01
(3/4): glibc-devel-2.12-1.166.el6_7.7.x86_64.rpm | 986 kB 00:00
(4/4): glibc-headers-2.12-1.166.el6_7.7.x86_64.rpm | 615 kB 00:00
-----------------------------------------------------------------------
Total 8.9 MB/s | 20 MB 00:02
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Updating : glibc-common-2.12-1.166.el6_7.7.x86_64 1/8
Updating : glibc-2.12-1.166.el6_7.7.x86_64 2/8
Updating : glibc-headers-2.12-1.166.el6_7.7.x86_64 3/8
Updating : glibc-devel-2.12-1.166.el6_7.7.x86_64 4/8
Cleanup : glibc-devel-2.12-1.166.el6_7.3.x86_64 5/8
Cleanup : glibc-headers-2.12-1.166.el6_7.3.x86_64 6/8
Cleanup : glibc-common-2.12-1.166.el6_7.3.x86_64 7/8
Cleanup : glibc-2.12-1.166.el6_7.3.x86_64 8/8
Verifying : glibc-headers-2.12-1.166.el6_7.7.x86_64 1/8
Verifying : glibc-2.12-1.166.el6_7.7.x86_64 2/8
Verifying : glibc-common-2.12-1.166.el6_7.7.x86_64 3/8
Verifying : glibc-devel-2.12-1.166.el6_7.7.x86_64 4/8
Verifying : glibc-devel-2.12-1.166.el6_7.3.x86_64 5/8
Verifying : glibc-headers-2.12-1.166.el6_7.3.x86_64 6/8
Verifying : glibc-2.12-1.166.el6_7.3.x86_64 7/8
Verifying : glibc-common-2.12-1.166.el6_7.3.x86_64 8/8

Updated:
glibc.x86_64 0:2.12-1.166.el6_7.7

Dependency Updated:
glibc-common.x86_64 0:2.12-1.166.el6_7.7
glibc-devel.x86_64 0:2.12-1.166.el6_7.7
glibc-headers.x86_64 0:2.12-1.166.el6_7.7

Complete!

アップデートが完了すると、Complete!が表示されます。

3-3. アップデートの確認

glibcのアップデート後のバージョンを確認します。出力結果として、glibcパッケージ4つのバージョンが 2.12-1.166.el6_7.7になっていれば、完了です。

rpmコマンドでのバージョン確認

# rpm -qa | grep glibc
glibc-common-2.12-1.166.el6_7.7.x86_64
glibc-2.12-1.166.el6_7.7.x86_64
glibc-devel-2.12-1.166.el6_7.7.x86_64
glibc-headers-2.12-1.166.el6_7.7.x86_64

yumコマンドでのバージョン確認

# yum list installed | grep glibc
glibc.x86_64 2.12-1.166.el6_7.7 @updates
glibc-common.x86_64 2.12-1.166.el6_7.7 @updates
glibc-devel.x86_64 2.12-1.166.el6_7.7 @updates
glibc-headers.x86_64 2.12-1.166.el6_7.7 @updates

4. サーバーの再起動

glibcについてはアップデートを行った後に、サーバーの再起動が必要になります。
タイミングをみて、rebootコマンドでサーバーを再起動します。syncコマンドはメモリ内にあるデータをHDDやストレージなどに同期するコマンドです。データベースなどメモリに大量のデータを保存するような環境では実行しておくことをお薦めします。

# sync
# sync
# sync
# reboot

Broadcast message from
(/dev/pts/0) at 10:31 ...

The system is going down for reboot NOW!

再起動後にログイン出来るようになったら、サービスを動作確認を行います。
以下のコマンドはオープンしているtcpポートをプロセス名で表示させます。

# netstat -plant
Active Internet connections (servers and established)
tcp 0 0 :::80 :::* LISTEN 1398/httpd
tcp 0 0 ::1:53 :::* LISTEN 1032/named
tcp 0 0 :::22 :::* LISTEN 1072/sshd
tcp 0 0 ::1:953 :::* LISTEN 1032/named
tcp 0 0 :::443 :::* LISTEN 1398/httpd

コマンドを実行し、サービスを行っているポートが全てオープンしていることが確認出来れば、アップデートは完了です。

5. まとめ

glibcについては、OSのシステムに関連する部分で、あまり更新を行っていない環境だと、かなりの数の依存関係アップデートでアップデート作業に時間がかかると思われます。
そのようなパッチを適用していない環境や、むやみにサーバーの停止ができない環境の場合は、バックアップを取得した上で、停止時間を調整(余裕をもって)の上、アップデートを実行することをお薦めします。OSレイヤーでの緊急レベル、セキュリティホールは数が少ないこともあり、見逃しがちですが、このような大きなものには是非、対処を行いたいですね。

  • この記事を書いた人
rem-profile-photo

レムシステム

レムシステムはPC・サーバー・ネットワークでの業務効率化を主な業務としている会社です。全国に対応しています。

-CentOS