Linuxシステム管理者がかかえる脆弱性対策の課題
2014年になってからOpenSSL、Struts、Internet Explorerなどで脆弱性が多く発見され、Linuxも日々脆弱性が発見されています。早急に脆弱性対策を実施しなければ、脆弱性を利用した攻撃にシステムが晒されることになり、情報流出やシステムダウンといった大きな影響が出る可能性が非常に高くなります。脆弱性対策はパッチを適用する事が最も有効ですが、パッチを適用するにはOSの再起動が伴います。稼働中のシステムに対してパッチを適用する場合は、メンテナンスを行う時間を設けた上で、具体的には図1に示す手順に従ってパッチを適用します。
こうした手順を踏む必要があるため、実態として脆弱性を発見してからパッチの適用までに時間がかかり、メンテナンス作業に多くのコストがかかるという課題があります。またIPAの調査参考1では、外部公開をしているサーバーの7.4%がセキュリティパッチの適用を行っておらず、その理由の一つは「パッチの評価や適用に莫大なコストがかかる」となっています。
Linuxのセキュリティパッチを再起動無しで適用
パッチの適用にかかるコストを減らす技術として、Red Hat社がOSS(GPLv2)で開発をしているkpatch参考2という技術が注目されています。これは、動的にカーネルにパッチを当てるための技術(Dynamic Kernel Patching)です。まだ開発段階ですが、パッチ適用時に再起動を行う必要が無くなるため、前述した課題の解決が期待されています。
図1:パッチ適用までの手順(再起動有無で比較)
また、kpatchと同様の機能を持つKsplice参考3やkGraft参考4も登場しており、カーネルへの動的なパッチ適用に向けた技術の注目度の高さが伺えます。本稿ではkpatchの仕組みについて簡単に説明します。
kpatchの仕組み
kpatchは、図2のようにカーネルが提供するモジュール(関数)が呼び出された際、ftraceを使ってセキュリティパッチ適用後のモジュール(関数)を呼び出すという仕組みです。具体的には以下の手順で処理が行われます。
- 1.kpatch-buildというユーティリティを使い、セキュリティ対策済みのソースコードからパッチモジュールを作成する。パッチモジュールには置き換え前の関数のメタデータと新しい関数が含まれる。
- 2.コアモジュールがftraceを使い、置き換え前の関数が呼び出された際にセキュリティ対策済みの関数が実行されるように処理を行う。
図2:kpatchの動作イメージ
kpatchのメリットは大きいですが、以下のようなデメリットもあります。
- 現在のkpatchでは今までのパッケージ管理ツール(RHELの場合yum)を使った管理ができないため、別途管理方法を考える必要がある。
- パッチモジュールを作成する際にソースコードとソースコードの差分ファイル(diff patch)が必要。
- 複数のコマンドを実行する必要がある。
- 注従来の方法ではパッケージ管理ツールを使ってコマンド一つでパッチを当てて再起動をするという簡易な手順だった。
まとめ
動的にカーネルにパッチを適用する技術により、メンテナンス準備に要していた時間・作業を削減する事ができるようになります。ただし、この技術はまだ発展段階であるため、最新動向を注視しながらシステムに適用していく事が求められます。NTTデータでは、動的パッチ技術を用いたメンテナンスコストの削減について、実利用に向けた技術検証を行っています。