The origins of the Idle Scan

Salvatore Sanfilippo

Idle Scanの起源

原文は Salvatore Sanfilippo により に公開されました。 このブログを購読する

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、すなわち65535に達すると0に戻る)、その値がIDとしてパケットにセットされるのだった。このカウンタはすべての送信パケットで共通だった。まずはこれだけで、ネットワークにつながれたあらゆるコンピュータの送信トラフィック量を推定することができた。この情報漏洩は私には衝撃的で、看過できない異常に思えた。私はこの問題を指摘する投稿をBUGTRAQに書き込んだ。寄せられた返信の中には、TCP/IPプロトコルの中心的なRFCを起草したインターネット界の重鎮からのものもあった。いわく、ええ、承知している、よく知られた事実だ、と。要するに、この特性はトラフィック推定に使えるとはいえ、大半の人はリスクとは見なしていなかった。そして取るに足らないとされたこの問題を修正するには、OSの大幅な改修が必要になる。割に合わない、というわけだ。

だが私は眠れないほど気になっていた。私にとっては決して些細な問題ではなかったのだ。インクリメントされるIDフィールドがもたらす情報を、まだ完全には掴みきれていない他の要素と組み合わせれば、はるかに深刻な攻撃が可能になるはずだと確信していた。その話をLorenzo Cavallaroに持ちかけた。Lorenzoは数ヶ月前にrawソケットの技術を教えてくれた人物で、私はそれを使ってHpingを書いたのだった。彼はTCP/IPのことで考えを巡らすときの格好の相談相手であり、親友でもあった。この新しいアイデアを彼に話したとき、わざとではないのだが、まだ最終的な攻撃手法を組み立て切れていなかったため、どうしても曖昧な話し方になってしまった。それでも彼はそれなりに興味を示してくれたように見えた。

二、三日後、再び彼に話しかけた。今度はようやく、Idle scan(まだそう呼ばれてはいなかったが)の全体像をより詳しく説明することができた。実際に試す手段がなかったので、紙の上で考えを組み立てたのだ。記憶が正しければ、Hpingには必要な機能の一部がまだ欠けていた。もっとも、このあたりはあまり自信がない。もう25年も前のことだ。書きながら記憶が少しずつ鮮明になってくるのだが、たしか送信するTCPパケットのフラグを正確に指定できなかったのだと思う。いずれにせよ、記憶にある限りHpingの修正にはさほど時間はかからず、理論を実際に試すことができた。Idle scanは本当に機能した。現実の環境でそれを証明できたときは、ひどく興奮した。誰が言い出した比喩だったかは覚えていないが、要するに、目に見えない天体の動きを、観測しやすい別の天体に及ぼす重力的な影響だけから間接的に捉えるようなものだった。冥王星の発見のように。

あとはこの攻撃を公開するだけだった。困ったことに、英語で長文のメールを書くことを考えると気が重くなった。Idle scanは面白いアイデアだという自覚があったからこそ、拙い文章で発表を台無しにするのが怖かったのだ。なにしろこの攻撃は複雑で、下手な説明をすれば理解不能にすらなりかねなかった。結局、そのメールはLorenzoと二人で、夜遅く、私の部屋で、間違いなく酔っ払いながら書いた。一人で書くよりはましだった。Lorenzoの英語は、わずかとはいえ私よりは上手かったのだ。ちょうどその頃、Seclabの同僚――創設者の一人でもあり、私が情報セキュリティの真の天才だと考えている人物――が、エミリアでレストランを営む家系の出身で、ある晩、袋を提げて私の家にやって来た。袋の中には立派なカラスミが入っていた。見たことも、まして食べたこともない代物だった(後に私の大好物になるのだが)。その料理人ハッカーが皆のためにパスタを作り、我々は存分に食べ、飲んだ。夜も更けて皆が帰り――料理人ハッカー以外にもう一人いたのだが――Lorenzoだけが少し残った。

その晩、ほろ酔いのLorenzoと私は、無謀にも今こそIdle scanを告知するメールを書くべきだと思い立った(そのメールは今もBUGTRAQのアーカイブに残っており、今日読み返すとまったく支離滅裂に見える[1])。私たちはPCの前に座って作業を始めた。メールはこんな書き出しだった。I have uncovered a new tcp port scan method. Instead all others it allows you to scan using spoofed packets, so scanned hosts can't see your real address. 文法だけでなく、あの断定的な口調までもがひどく不適切だった。おまけに私たちはこの攻撃をdumb host scanと呼ぶことを提案したが、幸いすぐに誰かがより良い名前を考えてくれ、それが正式名称となった。Idle scanである。長話を短くすれば、出自には難があったにもかかわらず、Idle scanは古典的な攻撃となり、常套句どおり、後は歴史が物語るとおりだ。

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

この記事は「muse-spark-1.2-contributor」を使用して翻訳されました。

コメント