セキュリティ・キャンプ2019で使用した、熊猫のテキストを公開しました。問題として1問だけ出題させていただきましたが、いや〜、ここまで酷評されるとは思っていませんでしたよ。(笑)出題したのは以下の問題です。表面的には、目的のページやパッチを如何に効率よく見つけられるかを競う出題なのですが、その裏には気づいて/考えてもらいたい話を含めていました。1問目は、2問目以降を解いていくためのヒントとなるページへの誘導です。ググれば一発でヒットするでしょう。2問目は、ファジングツールにとって悩みの種であった、カーネルメッセージを読みやすくする改善の話題です。見つけて、逃げるsyzbot、追うカーネル開発者たちをスルーしてしまったチームにとっては、目的のパッチを見つけるまでにちょっと回り道してもらうことになったのではないかと思います。不具合退治の舞台裏に興味を持ってもらいたくて、出題しました。参照いただければと思います。ユーザの権限が無くてもシステムをダウンさせてしまうことのある不具合を見つける場合があるということを知ってもらう問題です。ユーザの権限が無いと遭遇しないのですが、たまに一般ユーザの権限でも遭遇できてしまう不具合が発見されることがあります。そのため、「このシステムでは管理者権限を与えないから、ファジングテストで見つかった不具合を心配しないで大丈夫」と問題を甘く見ないことが求められます。投げて、非公開の議論を経て修正されました。4問目は、ファジングで使うテストケース作成の難しさについて知ってもらう問題です。ユーザの権限があれば不具合を攻撃しなくても合法的にシステムを停止させることができてしまうので、合法的にシステムを停止させてしまうような操作は、テストケースから除外するという対処をしています。この問題ではテストケースから除外しているつもりが除外できていなかったという話題を扱いましたが、実際にはテストケースから除外することは容易ではありません。ユーザの権限ではなく一般ユーザの権限で動作させるという方法も提案されていますが、多くの不具合を発見できなくなってしまいます。そのため、ファジングテストのためのカーネルでは、合法的にシステムを停止させてしまうような操作をカーネル側で拒否できるようにするという提案が現在進行中です。5問目は、ファジングの凄まじさを知ってもらう問題です。C言語で記述された再現プログラムを提示してくれるのですが、熊猫が問題を解析しようとして再現プログラムの「読める化(ローカル変数や構造体などを用いて書き直す)」作業をしたところ、構造体を用いると問題が再現しなくなるという不思議な現象に遭遇しました。使用している構造体の定義が間違っている(構造体を間違えた状態のままクラッシュさせることが可能なパラメータの組み合わせを見つけてしまった)という予想外の出来事がありました。構造体のメンバの役割を知らずとも動作できるということなんですね。(注:異なる不具合がこの事象として報告されているため、実際にはまだ終わっていません。)不具合を修正するパッチには、不具合を報告してくれた人へのクレジット(謝意)として、報告者の名前を含めることが期待されるのですが、パッチの作成者は、必ずしも報告者の名前を含めてくれるとは限りません。発見した不具合が修正済みなのかどうかを追跡することが難しいという問題があります。この不具合の場合、グーグルさんのボットが見つけた不具合なのに、何故かファーウェイさんのボットが見つけたことにされているパッチに対して「誰?」ってツッコミを入れました。こんなところにも、グーグル対ファーウェイの競争が現れているのでしょうか?(笑)さて、熊猫が扱っている領域って、CTFの攻防戦には不向きなんですよねぇ。いくつ発見できるか不明な未知の不具合を探したり、どれくらい修正が難しいか予想できない不具合を修正するパッチを書いたりしてもらうという出題にすると、誰も回答不能/出題者側も採点不能という状況に陥りかねません。可視化するためには機械的に採点が可能なフラグ文字列を使わざるを得ないのですが、扱う不具合の内容がプロセスの異常終了/ハングアップ/カーネルパニックなどである以上、フラグ文字列を表示させることや、現在誰が占有しているのかを判断することが非常に困難なのです。世界は、頭がパニックになりそうなくらいに、予想外の出来事の連続なのです。Linuxこの記事へのコメントコメントを書くお名前:メールアドレス:ホームページアドレス:コメント:※ブログオーナーが承認したコメントのみ表示されます。この記事へのトラックバックURLhttp://blog.sakura.ne.jp/tb/187000228※ブログオーナーが承認したトラックバックのみ表示されます。この記事へのトラックバック。