Scribble at 2024-04-19 17:24:38 Last modified: 2024-04-19 23:36:32

添付画像

Why CVE-2022-3602 was not detected by fuzz testing

本日は出社していて、Hacker News で "Why CVE-2022-3602 was not detected by fuzz testing" という2年前のブログ記事が紹介されていたのをきっかけに、fuzzing test について、あらためて調べていた。

恥ずべきことだが、ウェブ制作の業界では、スタンダードなテスト工程そのものからして、殆ど普及していないし、それどころかウェブ・アプリケーションの開発工程に「テスト工程」があるということ自体が無視されたり軽視されているわけで、この実情は20年前から全く改善されていない。よって、ウェブ制作会社のプログラマと、オープン系の開発会社や IT ベンチャーのプログラマとでは、たとえば SWEBOK を基準にした開発工程の理解において相当な断絶があると思う(というか、それ以前にウェブ制作会社のプログラマなんて 99% は基本情報処理技術者レベルの知識すら無いと思う)。いわゆるホーム・ページ屋さんのプログラマが IT ベンチャーに転職などできないのは、こういうことも一つの理由だ(あと、致命的なのは、離散数学の知識が殆どないことだろう)。

もちろんプライベートな興味から、あるいは仕事としても厳格な目標を自分で設定することで、ソフトウェア開発なり関連知識を個人として習得している感心な人材も稀にいるとは思うが、正直なところ WordPress を使って月額数百円のレンタルサーバにサイトを公開するといった、いまでは数万円すら取れるかどうかわからないようなカス案件で、やれテスト工程だ、fuzzing だなどと言ってもオーバー・スペックだし、どれほどエンジニアとしての矜持があろうと、そんなことに手間などかけてはいられないし、制作会社の部長として言っても、いちおうポジション・トークとして非機能要件はもちろん、機能要件についても必要最低限の工数で済ませるべきだとしか言いようがない。

要は、僕らウェブ制作会社のエンジニアの矜持だって、なんだかんだ言っても金次第なのだ。それこそ無責任に「お客様のため」だのなんのと、気軽に他人の責任感を期待するようなことを口にするマネージャや経営者の方が、クライアントよりも人でなしというものであろう。本来なら、クズみたいな予算の案件で社員が疲弊しないように守るのがマネージャであり経営者だ。クライアントと一緒になって、ものづくり精神だ、矜持だ、プロフェッショナルの流儀だ、「死ぬまでコーディングしていたい」なんて書いてる都内のブロガーを見習えだと、道義的なロジックだけで社員を追い込むようなことを平気で言えるのは、はっきり言えばそいつらが(自覚があろうとなかろうと)サイコパスだからなのだ。ともかく、自社のコーポレート・サイトの制作に、どれほど小規模の企業であろうと、企画書を作って銀行から金を借りてまで予算を確保する気がない連中など、真面目に相手にする必要はない。

とはいえ、テスト工程がウェブ制作業界に普及しない原因は、テスト工程そのものにもあると思う。僕がテスト用のコードなどを書いていて強く感じるのは、わざわざテスト用のコードを書かなくてはいけないという工数そのものが無駄に思えるということだ。テストが無駄でないということは分かっているが、たとえば簡単なメソッド一つを単体テストするためのコードですら、酷く面倒なコーディングを要求されたりする。したがって、単体テストのコードそのものが適切であるかどうか確証がもてないこともあるのだ。

そして第二に、これは多くのプログラマが勘違いしていることでもあるが、テスト・コードを書かなくても例外処理を入れたらいいじゃんと考えてしまう人が意外に多いということも、かなり昔だが HAL のインターンの学生が書くコードなどを見ていて気付いたことがある。あるいは、PHP では変数名やビルトイン関数名の先頭に @ を付けるとエラー・メッセージを回避できるという、非常に筋の悪い制御演算子があるため、これをやたらと使ってテストを省こうとする人もいる。しかし、これらが馬鹿げた対応であることは明白だろう。なぜなら、例外処理は自分で事前にキャッチしようとする例外にしか対応しないし、エラー制御演算子を使おうとエラーのもとになる間違った処理や入力が改められるわけではないからだ。寧ろ、そのような仕組みを入れてしまうことによって、間違いが隠蔽されてしまう。

それはそうと、Wikipedia もウィキペディアも、Fuzzing の記事って Sutton, Greene, and Amini (2007) の要約みたいな内容だな。それに、やはりリソースが貧弱で、実地としても理論としても取り組む人が少ないらしい。

  1. もっと新しいノート <<
  2. >> もっと古いノート

冒頭に戻る


※ 以下の SNS 共有ボタンは JavaScript を使っておらず、ボタンを押すまでは SNS サイトと全く通信しません。

Twitter Facebook