BSD界隈四方山話

第5回脆弱性・不具合とシステムアップデート

脆弱性・不具合とシステムアップデート

FreeBSDプロジェクトは、システムに不具合が発見された場合やセキュリティ脆弱性が見つかった場合などに、次の2つの報告を行います。

  • セキュリティアドバイザリ(Security Advisory、SA)RSS
  • エラッタ報告(Errata Notice, EN)RSS

セキュリティ脆弱性が発見された場合にはセキュリティアドバイザリが、不具合が見つかった場合にはエラッタ報告が発表されます。発表と同時に修正パッチやアップデートバイナリの提供が開始されることがほとんどです。FreeBSDシステムの管理者はこの報告を受けたらシステムのアップデートの実施を検討します。

システムアップデートの作業はFreeBSD 10.0-RELEASE以降、とても簡単なものになりました。もう9以前に行っていたアップデート作業の手順を忘れてしまった方も少なくないでしょう。

増加傾向を見せるセキュリティアドバイザリ発行件数

システムを運用するうえでとても大切なセキュリティアドバイナリですけれども、その件数の推移を見てみましょう。2000年にピークを迎えてから2007年にかけて件数が減少。以降は小康状態が続いていましたが、2014年に大きく増加しました。

図1 年別セキュリティアドバイザリ発行件数
図1 年別セキュリティアドバイザリ発行件数

2014年はセキュリティ脆弱性の当たり年でした。OpenSSLのセキュリティ脆弱性Heartbleedは関係者の間で衝撃的なデビューを飾り、その後もOpenSSLには次々と脆弱性が発見されました。Heartbleedを超えるものは出ないだろうといった雰囲気の中、今度はbashのセキュリティ脆弱性Shellshockが登場。加えてセキュリティ脆弱性はさまざまなソフトウェアで毎日のように発見されては発表されていますし、サーバ管理者を憂鬱にするのに充分過ぎる年だったといえます。

2015年も新年から元気です。1月にLinuxで広く採用されているglibcのセキュリティ脆弱性GHOSTが登場。3月にはSSL/TLSのセキュリティ脆弱性FREAKが報告され、つい先日、最新版となるHTTPなどに存在するセキュリティ脆弱性「Logjam」が登場しました。

こうした世界的な動きとFreeBSDのベースシステムにマージされているサードパーティ製のソフトウェアの脆弱性に相関性があるかはわかりませんが、セキュリティ脆弱性を積極的に発見して修正するという動きのようなものが活発になっているのは雰囲気として感じるところがあります。

執筆現在、2015年の分として発表されたセキュリティアドバイザリの件数は9件です。同様のペースでセキュリティアドバイザリが発行された場合、2014年ほどではないにせよ2007年以降の水準でみるとかなり多い数のセキュリティアドバイザリが発行されることになりそうです。

セキュリティアドバイザリを読もう

セキュリティアドバイザリには次の情報がまとまっています。英語が苦手な場合には、少なくとも影響を受けるバージョン(Affects)と修正されたバージョン(Corrected)には目を通して、該当している場合にはアップデートを適用してください。

  • アナウンス日
  • 影響を受けるバージョン(影響を受けるバージョンでもサポートが終了したバージョンは表示されません)
  • 修正されたバージョン
  • 対象のソフトウェアやプロトコルの簡単な説明
  • 脆弱性の説明やその影響
  • 一時的に脆弱性を回避する方法
  • 脆弱性を修正する方法

バイナリアップデートシステムであるFreeBSD Updateが登場するまでは、ソースコードにパッチを適用してシステムやカーネルを再構築する必要がありました。このため、報告されたセキュリティ脆弱性が運用しているシステムに該当しているかどうか調べ、該当している場合にのみ対処するといったことを行っていたと思います。

しかしFreeBSD 10.0-RELEASE以降、FreeBSD Updateでセキュリティ脆弱性が修正されたバージョンへ簡単にアップデートできるので、基本的にセキュリティアドバイザリやエラッタ報告が発行されたらシステムをアップデートするものだと考えておけばよいでしょう。

システムアップデート

システムのアップデートはfreebsd-update(8)コマンドで行います。次のようにfreebsd-update(8)コマンドを実行すると、アップデートの必要があること、アップデートによってどのファイルが更新されるのかが表示されます。

図2 freebsd-update(8)でアップデートする内容をチェック
# freebsd-update fetch
Looking up update.FreeBSD.org mirrors... none found.
Fetching metadata signature for 10.1-RELEASE from update.FreeBSD.org... done.
Fetching metadata index... done.
Inspecting system... done.
Preparing to download files... done.

The following files will be updated as part of updating to 10.1-RELEASE-p10:
/bin/freebsd-version
/boot/kernel/kernel
/boot/kernel/kernel.symbols
/boot/kernel/ufs.ko
/boot/kernel/ufs.ko.symbols
/usr/include/ufs/ffs/softdep.h
/usr/sbin/freebsd-update
/usr/share/man/man8/freebsd-update.8.gz
/usr/src/sys/conf/newvers.sh
/usr/src/sys/ufs/ffs/ffs_softdep.c
/usr/src/sys/ufs/ffs/ffs_vfsops.c
/usr/src/sys/ufs/ffs/softdep.h
/usr/src/usr.sbin/freebsd-update/freebsd-update.8
/usr/src/usr.sbin/freebsd-update/freebsd-update.sh
#

アップデートの必要があることがわかったら、次のようにfreebsd-update(8)コマンドを実行してアップデートを実施します。

図3 freebsd-update(8)でアップデートを実施
# freebsd-update install
Installing updates... done.
#

カーネル関係のファイルが更新された場合には次のようにシステムを再起動します。

図4 カーネル関連が更新された場合にはシステムを再起動
# shutdown -r now

アップデートされたかどうかはfreebsd-version(1)コマンドで確認できます。セキュリティアドバイザリやエラッタ報告でアップデートが実施された場合、最後のパッチ番号がインクリメントされますので、これが確認します。

図5 freebsd-version(1)でカーネルとユーザランドのバージョンを表示
% freebsd-version -uk
10.1-RELEASE-p10
10.1-RELEASE-p10
% 

freebsd-version(1)は-kでカーネルのバージョンを、-uでユーザランドのバージョンを表示させることができます。

このようにFreeBSD 10.0-RELEASE以降はシステムアップデートがとても簡単に実施できるので、従来のように内容を吟味して適用するというよりも、リリースされたらなるべく短期間の間にアップデートを実施できるようにする、というのが、一つの運用方法になると思います。

cron(8)でアップデートの必要性をチェックして自動報告

次の設定を/etc/crontabに追加しておくと、毎日アップデートをチェックして、アップデートの必要がある場合にはその旨がroot宛てにメールで送信されるようになります。もちろん、root宛てのメールがちゃんとユーザに届くように/etc/aliasesファイルに受信するメールアドレスの設定追加と、データベースを更新するためのnewaliases(1)コマンドの実行も忘れないようにしましょう。

リスト1 毎日アップデートをチェック /etc/crontab に設定を追加
@daily  root    freebsd-update cron

/etc/crontabを編集したあとは次のようにcron(8)デーモンを再起動しておきます。

図6 設定を反映させるためにcron(8)デーモンを再起動
# service cron restart
Stopping cron.
Waiting for PIDS: 801.
Starting cron.
#

コラム

これは今後の開発次第なのですが、もしかするとfreebsd-update(8)とpkg(8)は最終的に統合へ向かう可能性があります。現在はベースシステムのアップデートはfreebsd-update(8)を使っていますが、pkg(8)でこの機能を代替する可能性もあります。PC-BSDがそうした仕組みを検討しており、FreeBSDプロジェクト側も将来的には検討する可能性があります。


告知 FreeBSD勉強会

  • 第39回 FreeBSD勉強会
    • 2015年6月19日(金)19:00~21:00
    • The Design and Implementation of the FreeBSD Operating System (2nd Edition) 読書会 48ページ Filestores~
  • 第40回 FreeBSD勉強会
    • 2015年7月9日(木)19:00~21:30
    • The Design and Implementation of the FreeBSD Operating System (2nd Edition) 読書会

おすすめ記事

記事・ニュース一覧