逃げるsyzbot、追うカーネル開発者たち

OSカーネルの品質を向上することが急務

Google社が開発したファジングテスト(※1)用システムであるsyzbotが、LinuxなどのOSカーネルの不具合をものすごい勢いで発見し続けて(※2)います。(図1)あまりにも次から次へと不具合を発見してしまうことから、Linuxカーネル開発者コミュニティでは、今年のエイプリルフールのネタ(※3)にされてしまったほどです。

図1:syzbotの動作イメージ

図1:syzbotの動作イメージ

「コンテナ」による仮想化方式(※4)では、「仮想マシン」による仮想化方式とは異なり、ゲストを動かすためのOSカーネルを使用しません。これは、アプリやミドルウェアの脆弱性により攻撃者に乗っ取られてしまった場合に、ホストを動かすためのOSカーネルに対して攻撃者がダイレクトに攻撃できてしまうことを意味しています。仮想マシンという隔壁が存在しない分、他のコンテナへの影響伝搬を防ぐために、ホストを動かすためのOSカーネルの品質を向上させることが求められます。 そのため、syzbotなどによるファジングテストを通じて不具合を発見するための努力と、発見された不具合を修正していくための努力が続けられています。

問題が発生したことを捕捉するための小さな一歩

ファジングテストでは、普段行われないような動作を繰り返したり、普段指定しないような値を意図的に指定したりするので、大量のカーネルメッセージが出力されます。(図2)問題が発生したかどうかを判定するためには、問題に関連したメッセージを確実に抽出できることが重要になりますが、大量のカーネルメッセージの海に埋もれてしまい、うまく抽出できませんでした。(図3)

図2:複数のスレッドが同時にカーネルメッセージを出力してしまうことがある。

図2:複数のスレッドが同時にカーネルメッセージを出力してしまうことがある。

図3:Linux 5.0までは、スレッド毎に分離できなかったため、解析に失敗することが多かった。

図3:Linux 5.0までは、スレッド毎に分離できなかったため、解析に失敗することが多かった。

2019年5月にリリースされるであろうLinux 5.1カーネルには、カーネルが出力するメッセージを機械的に処理しやすくするためのパッチ(※5)が採用され、問題に関連したメッセージを抽出する能力が飛躍的に向上(※6)します。(図4)
syzbotが「問題が起きたようだけど何が起きたのかを理解できなかった」と報告していた状況が改善され、新しい不具合を発見し、原因となったパッチを特定する上で活躍することが期待されています。

図4:Linux 5.1からは、スレッド毎に分離できるようになるため、解析の成功率が向上する。

図4:Linux 5.1からは、スレッド毎に分離できるようになるため、解析の成功率が向上する。

syzbotをどんどん活用して、不具合の改善につなげ、OSカーネルの不具合に追い回されることのない未来(※7)を目指してみませんか?

(半田 哲夫)



逃げるsyzbot、追うカーネル開発者たち