NTT DATA

DATA INSIGHT

NTTデータの「知見」と「先見」を社会へ届けるメディア

絞り込み検索
キーワードで探す
カテゴリで探す
サービスで探す
業種で探す
トピックで探す
キーワードで探す
カテゴリで探す
サービスで探す
業種で探す
トピックで探す
2019年4月15日技術ブログ

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

Linuxカーネルの品質向上を支えているsyzbotが、注目を集めてきている。その理由と、Linux 5.1で達成される小さな改善について紹介する。

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)を目指してみませんか?

※1ファジングテスト

普通の使い方では用いられないような「予想外の入力値」を与えることで、入力値の検査やエラーハンドリングなどが適切に行われているかどうかを確認するための試験です。適切に行われていなかった場合、プロセスがハングアップしたりクラッシュしたりするなどの形で不具合が表面化します。

※2OSカーネルの不具合をものすごい勢いで発見し続けて

syzbotが見つけたLinuxカーネルに対する不具合の内、未修正の不具合の一覧をhttps://syzkaller.appspot.com/upstreamから、修正済みの不具合の一覧をhttps://syzkaller.appspot.com/upstream/fixedから参照できます。
https://github.com/google/syzkaller/issues/491によると、およそ1回/秒のペースでクラッシュが発生するほどの規模(並列度)で稼働しているようです。

※3今年のエイプリルフールのネタ

不具合報告の嵐を終わらせるために、ファジングテストを行うプロセスがファイルをオープンすることを拒否するパッチhttps://lkml.kernel.org/r/20190401090113.22946-1-jthumshirn@suse.deが投稿されました。なお、エイプリルフールパッチなので、鵜呑みにしないようにご注意ください。

※4「コンテナ」による仮想化方式

注目を集める仮想化技術「コンテナ」、そのセキュリティ対策とは?
https://www.nttdata.com/jp/ja/data-insight/2019/0131/

※5処理しやすくするためのパッチ

printk: Add caller information to printk() output.
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=15ff2069cb7f967d

※6飛躍的に向上

pkg/report: support CONFIG_PRINTK_CALLER
https://github.com/google/syzkaller/commit/7da2392541a49c3f17b2e7d24e04b84d72b965fb

※7OSカーネルの不具合に追い回されることのない未来

syzbotの能力が向上することで、ますますOSカーネル開発者たちがsyzbotに追い回されるようになるという説も…?

お問い合わせ