The origins of the Idle Scan

Salvatore Sanfilippo

Idle Scanの起源

Idle scanを思いついたのは1998年末のことで、メールの記録がそれを裏づけている。その数か月前にミラノへ移っていた。記憶が正しければ9月から այնտեղにいて、新しいアイデアにあふれていたが、その街での滞在が短いものになるとは知らなかった。夏はシチリアの海岸で過ごし、主にSeclabの仲間たち(ほとんどはDavid)に勧められた多くの本を読んでいた。ただし、そうした読書には触媒が必要だった。Idle scanは理論的な思索から生まれた攻撃だったが、その思考の流れの出発点はかなり実践的な事情にあった。私は少し前にHpingというツールを作っており、そのロゴにはNutellaのロゴを借用していた。当時の自分の取り組みを支配していた真剣さがどの程度のものだったかを強調したくて、この話をしている。なにしろ私はまだ21歳で、北イタリアにいて、フルタイムの仕事を背負っていたのだから、多少は大目に見てもらいたい。

HpingはTCP/IPプロトコルのためのスイスアーミーナイフだった。当初の用途は、主に研究目的の探索だった。Hpingを使えば、TCP、UDP、ICMPのパケットをありとあらゆる奇妙な形に組み立て、それらを同じく風変わりなIPパケットにカプセル化できた。断片化したり、フィールドに異常な値を設定したりもできる。そうしたパケットをあちこちに送って、異なるOSのネットワークスタックがどう応答するかを観察した。

Idle scanはここから生まれた。Hpingをほんの数分いじっただけで、よく知られてはいたものの、私にとっては驚きだった事実が明らかになった。応答パケットには、何らかの幅で連続的に増加するIDフィールドがあったのだ。当時は、私が後に公表することになる攻撃がまだ知られていなかったため、このIDフィールドの挙動は懸念されていなかった。OSがIPパケットを送出するたび、まずカウンタを増やし、そのカウンタが2の16乗マイナス1という最大値に達するとゼロへ戻る。そして、カウンタの値をIDに設定したパケットが送られる。このカウンタは、送信されるすべてのパケットに共通だった。つまり、手始めに、ネットワークにつながったどのコンピュータについても送信トラフィックを推定できた。この情報漏洩には衝撃を受けた。私はこれを懸念すべき異常だと見なした。そこでBUGTRAQに最初の投稿を書き、この問題を指摘した。寄せられた返信の一つは、TCP/IPプロトコルの中核となるRFCを起草した、インターネット界の著名人からのものだった。彼は、そう、それは認識している、よく知られた事実だと言った。要するに、この特性をトラフィック推定に使えることは認めつつも、大半の人はリスクを見ていなかった。そして、取るに足らないと見なされたこの問題を解決するには、OSを大幅に作り直さなければならない。割に合わない、ということだった。

しかし私はこのことが気になって眠れず、私にとっては到底、二次的な問題ではなかった。増加するIDフィールドがもたらす情報は、ほかの要素と組み合わせれば――その時点ではまだ完全にはつかめていなかったが――はるかに深刻な攻撃に利用できると確信していた。この件をLorenzo Cavallaroと話した。Lorenzoは数か月前、raw socketを扱う技法を私に教えてくれた人物で、私はそれを使ってHpingを書いた。TCP/IPに関することを考えるなら彼と話す、というほど、彼は私の相談相手になっていたし、親しい友人でもあった。この新しいアイデアを彼に話したとき、私は曖昧に語らざるをえなかった。そうしたかったわけではなく、最終的な攻撃をまだ組み立て切れていなかったからだ。それでも彼はかなり興味を示しているように見えた。

数日後、私はまた彼と話した。ついにIdle scan――まだそういう名前ではなかったが――を、より包括的に説明できるようになった。実地でテストする方法がなかったので、紙の上で考え抜いた。記憶が正しければ、Hpingには必要な機能の一部が欠けていた。ただし、この部分については断言できない。25年前のことだからだ。書いているうちに記憶がはっきりしてきた。送信するTCPパケットのフラグを正確に選べなかったのだと思う。いずれにせよ、記憶ではHpingの改修にはほとんど時間がかからず、理論を実際に試すこともできた。Idle scanは本当に動いた。そして現実の条件下でそれを証明できたことには、大いに興奮した。誰がこのたとえをしたのかは覚えていないが、本質的には、見えない天体の運動を、より観測しやすい別の天体に及ぼす重力効果だけを測って間接的に観察するようなものだった。冥王星の発見のように。

残るのは、この攻撃を公表することだけだった。だが、英語で長いメールを書くことを考えると、ひどく怖かった。Idle scanが面白いアイデアだという自覚はあったし、まさにそのために、下手な発表をして台無しにするのが怖かった。なにしろこの攻撃は込み入っていた。説明があまりに拙く、理解不能になってしまうことさえありえた。Lorenzoと私は、ある晩遅く、私の家で、間違いなく酔っ払った状態でそのメールを書いた。一人で書くよりはましだった。Lorenzoの英語は、わずかにではあっても私より上だった。Seclabの同僚の一人で、創設者の一人でもあり、私が情報セキュリティにおける真の天才だと考えている人物が、エミリアの飲食業一家の出身だった。ある晩、彼は袋を持って私の家にやって来た。袋の中には上等なボラのからすみが入っていた。私はそれまで見たことも、まして食べたこともなかったが、後に大好物の一つになる。料理人ハッカーである彼は、みんなのためにパスタを作った。私たちは十分に食べ、飲んだ。夜の終わりには、ほかの者たちは帰った。料理人ハッカーのほかにももう一人いたが、Lorenzoだけはもう少し残った。

その晩、かなり酔っていたLorenzoと私は、無謀にもIdle scanの告知メールを書く時が来たと思った。そのメールは今もBUGTRAQのアーカイブに残っており、今日読むと本当に支離滅裂に見える[1]。私たちは私のPCの前に座り、作業を始めた。メールはこう始まる。「私は新しいtcpポートスキャン方法を発見した。ほかのすべての代わりに、これはスプーフィングされたパケットを使ってスキャンすることを可能にする。だからスキャンされたホストはあなたの本当のアドレスを見ることができない。」文法だけでなく、メールの断定的な口調もまったく不適切だった。さらに悪いことに、私たちはこの攻撃をdumb host scanと呼ぼうと提案している。幸い、すぐに誰かがもっとよい名前を見つけ、それが正式名称になった。Idle scanである。要するに、欠点だらけの出自にもかかわらず、Idle scanは古典的な攻撃手法になった。そしてよくあることだが、あとは歴史になった、と言って差し支えない。

[1] https://seclists.org/bugtraq/1998/Dec/79

原文は Salvatore Sanfilippo により に公開されました。

この記事は「gpt-5.6-terra」を使用して翻訳されました。