「カーネルライブパッチ」の版間の差分

提供: セキュリティ
移動: 案内検索
(ページの作成:「カーネルライブパッチ (kernel live patch)とは、起動中のOSをリブートせずに、パッチをあてることです。Linuxでは、kpatch や k...」)
 
(相違点なし)

2015年4月29日 (水) 14:10時点における最新版

カーネルライブパッチ (kernel live patch)とは、起動中のOSをリブートせずに、パッチをあてることです。Linuxでは、kpatch や kGraft があります。

読み方

カーネルライブパッチ
かーねる らいぶ ぱっち

概要

カーネルライブパッチ

ライブパッチを実現するための課題

ライブパッチを実現するには、方法や一貫性の課題があります。

  • パッチの当て方
  • 一貫性

パッチの当て方

  • 命令ブロック単位で置換する
    • 命令数が変化することで、実装することが難しい
  • 関数単位で置換する
    • Linuxには、ftrace や kprobes などの置換方法がある

一貫性

  • パッチすべてが同時に適用されなければなりません
    • 古い関数がすべて同時に新しい関数に置き換えられる必要があります
  • すべてのスレッドで同時にパッチが適用されなければなりません
    • 古い関数と新しい関数は、同時に動作できません

Linuxカーネルのカーネルライブパッチのサポート

Linuxカーネル バージョン 4 からカーネルライブパッチをサポートしています。

Linuxのカネールライブパッチ

  • kpatch
  • kGraft

kpatchの動作

  • ftrace でパッチ対象の関数をフックし、新しい関数へ置き換えます
  • 古い関数と新しい関数を同時に動かしません。
    • stop_machine () によって並列実行しません
    • すべてのスレッドのバックトレースを利用し、対象の関数の利用状況を確認してから適用します

参考

ftrace

Linuxカーネルのftrace フレームワークは、トレース機能です。カーネル内の処理の流れを知ることができます。

現在利用可能なトレース機能を確認できます。

$ sudo cat /sys/kernel/debug/tracing/available_tracers
blk mmiotrace function_graph wakeup_rt wakeup function nop

kprobes

kprobesは、Linuxカーネルを再コンパイルなしで、動的な調査をするための機能です。

関連項目