2012年11月28日水曜日

Oracle Linux 第2回 ゼロ・ダウンタイム アップデート機能「Ksplice」

現在のシステム運用では Linux Kernel のアップデートが必要な場合にはマシンの再起動が必要となるため、適用を先送りにされるケースが多々あるかと思います。しかしながら、セキュリティホールを狙う攻撃は跡を絶たず、これまでも何件もの情報漏えい事故が発生し、社会問題になるケースも数多くあります。

セキュリティソフトで不要なポートを遮断し、ウィルスからサーバを守ることはできますが脆弱性を狙った攻撃に対しては、セキュリティソフトによる対策よりも、対象の脆弱性に対するアップデートパッチを適用することが重要となります。また、 kernel のアップデートパッチにはバグ修正も含まれており、システムをクラッシュさせてしまう問題の修正なども行われております。

クライアントの PC に対しては、常に最新のセキュリティパッチ適用を呼びかけている企業が多い中で、より重要なデータが格納されているサーバに対してはサービスを停止することが出来ないという理由から、最新のセキュリティパッチは当てられていないという現状には矛盾を感じないでしょうか。

ダウンタイムが発生するからアップデートを当てていないという理由でリスクをそのままにしてしまうのであれば、ダウンタイムが発生しない技術があればこの問題は解決できるのではないでしょうか。

Ksplice の概要

Ksplice は Oracle Linux の独自機能となり、 Ksplice を利用すればアップデートの間にシステムに影響を与えることはなく、アプリケーションを実行中にアップデートを行う事ができるため、サービスのダウンタイムを発生させることなくアップデートを行う事ができます。なお、 Ksplice を利用するには Oracle Linux の Premier Support が必要となりますが、システムを停止することができないようなシステムであれば、 24 時間サポートは必須ではないかと考えるので、この部分は大きな障害にはならないかと思います。

では、なぜ Ksplice はゼロ・ダウンタイム アップデートが可能なのか、 Ksplice の仕組みを紹介します。

通常、 kernel アップデートを行うとアップデートを行ったコードを反映させるためにシステムの再起動が必要となります。再起動しない限りはアドレス空間に保持されているコード領域のデータは変更されません。

いかにして、アドレス空間のコード領域をシステムが稼働したまま変更するかが課題となっておりましたが、 Ksplice では修正適用前のバイナリと修正適用後のバイナリを比較し、動作中のカーネルコード領域を直接修正します。

修正対象の関数が呼び出された場合は pre-post differencing 技術により、修正対象の関数実行時に代替関数へ jmp 命令を行います。イメージは以下の図をご参照ください。

Ksplice は以下のような構造体定義の変更を伴う修正にも対応します。

以上が、Ksplice の動作概要となります。ソースコードを Ksplice 形式に変換する必要がありますが、これまでの実績では 88% が無修正で Ksplice 形式に変換できており、残りの 12 % も、 Ksplice 用にソースコードを修正することで変換できています。 ソースコードの修正が必要な場合は Oracle 社が対応を行うため、エンタープライズクラスで使用するシステムにも安心して適用頂けます。

また、 Ksplice 形式のセキュリティパッチを適用するのに必要なシステム時間(カーネル時間)は 1 ミリ秒以下となるため、動作中のアプリケーション・ミドルウェアに影響を与えることはありません。

ここまでは、 Ksplice の動作概要についてご案内してきましたが、次回は実際に Oracle Linux 6.3 に対して Ksplice を導入するまでの手順と Ksplice の管理をご案内します。

* 出典:Oracle 社 : Oracle Linux Unbreakable Enterprise Kernel の特徴的な機能

0 件のコメント:

コメントを投稿