The origins of the Idle Scan

Salvatore Sanfilippo

Idle Scan 的起源

Idle scan(閒置掃描)構想於 1998 年底,有電子郵件為證。我在幾個月前才搬到米蘭,如果沒記錯,從九月起就待在那裡,滿懷新點子,卻沒意識到在那座城市的停留將會很短暫。我在西西里的海灘度過了夏天,主要忙著閱讀 Seclab 夥伴們推薦的許多書籍(大多是 David(大衛)推薦的)。然而,那些閱讀需要一個催化劑:Idle scan 是一種源於理論思辨而生的攻擊手法,但這一連串思緒的起點卻是相當務實的情境。我最近才打造了 Hping,這個工具的標誌是從 Nutella 的標誌借用而來的。我提到這點,是為了強調當時主導我努力的那份「嚴謹」——畢竟,我當時才二十一歲,卻已在北義大利肩負著一份全職工作;這點還請多多包涵。

Hping 是針對 TCP/IP 協定的瑞士刀。其最初的用途大多是探索性的,為了研究。透過 Hping,你可以用最光怪陸離的方式組裝 TCP、UDP 與 ICMP 封包,並將它們封裝在同樣古怪的 IP 封包中,加以分片,並將欄位設為異常數值。這些封包被四處發送,以觀察不同作業系統的網路堆疊回應。

Idle scan 正是源於此:僅僅玩了幾分鐘 Hping,就揭示了一個眾所皆知、卻(對我而言)令人驚訝的事實。回應封包中有一個 ID 欄位會持續以某種幅度遞增。在當時,鑑於我日後才會揭露的那些攻擊尚不為人知,這種 ID 欄位的行為並未引起任何擔憂。每當作業系統發出一個 IP 封包時,它會先將一個計數器加一(該計數器在達到二的十六次方減一的最大值後會歸零),然後再將封包以該計數器的數值作為 ID 發送出去。這個計數器對所有外發封包都是共用的。這使得人們首先就能估算任何連網電腦的外發流量。這種資訊洩漏讓我印象深刻;我將其視為一個令人憂心的異常。我在 BUGTRAQ 上發表了一篇初步貼文,點出這個問題。在回覆中,有一則來自一位網際網路權威人士,他曾起草 TCP/IP 協定的核心 RFC。他說,是的,他們知道;這是眾所皆知的事實。簡言之:儘管這項特性可用於流量估算,多數人認為並無風險。而要解決這個被視為微不足道的問題,將需要對作業系統進行大幅度的改造。不值得。

但這件事讓我輾轉難眠,對我而言絕非次要問題。我深信,遞增的 ID 欄位所提供的資訊,可以與其他要素(當時我尚未完全掌握)結合,從而發動更為嚴重的攻擊。我與 Lorenzo Cavallaro(洛倫佐·卡瓦拉羅)討論了這件事。洛倫佐在幾個月前曾向我介紹 raw socket(原始套接字)技術,我正是利用該技術寫出了 Hping。他已成為我商討問題的首選對象,也是一位摯友;每當我需要思考與 TCP/IP 相關的事物時,就會與他討論。當我告訴他這些新想法時,我不得不說得含糊其辭,並非出於本意,而是因為我尚未拼湊出最終的攻擊手法。儘管我語焉不詳,他似乎頗感興趣。

幾天後,我又與他談了一次。最後,我總算得以向他更完整地描述 Idle scan(當時尚未如此命名)。我已在紙上推演過,因為當時沒有辦法實際測試。如果我沒記錯,Hping 還缺少一些必要的功能,雖然這部分我不敢打包票:畢竟已經過了二十五年。我一邊寫,記憶一邊變得清晰。我記得當時還無法精確選擇外發 TCP 封包的旗標。無論如何,據我所記,對 Hping 的修改花不了多少時間,因此我們也得以在實務上驗證我的理論。Idle scan 真的可行,而在真實環境中證明這點令人非常興奮。我不記得是誰做了這個比喻,但基本上,這就像間接觀測一顆看不見的天體運動,僅透過測量它對另一顆更容易觀測的天體所產生的重力效應,猶如冥王星的發現一般。

接下來只剩下將這個攻擊手法公諸於世。不幸的是,一想到要用英文寫一封長長的電子郵件,就讓我感到害怕。我深知 Idle scan 是個有趣的點子,正因如此,我害怕因為拙劣的呈現而搞砸了它的發布。畢竟,這個攻擊手法相當繁複;甚至可能因為描述得太差而讓人無法理解。我和洛倫佐在深夜、於我家寫下了那封電子郵件,當時肯定是喝醉了。總比獨自撰寫要好;洛倫佐的英文即使只好一點,也比我好。恰好 Seclab 的一位同事(也是創辦人之一),我認為他是資訊安全領域真正的天才,來自艾米利亞一個經營餐館的家庭。某個晚上他帶著一個袋子出現在我家。袋子裡是一塊精緻的烏魚子,我從未見過,更別說嚐過(它後來成了我最喜愛的食物之一)。這位廚師駭客為我們大家煮了義大利麵,我們一起盡情吃喝。夜晚結束時,其他人都離開了(除了這位廚師駭客之外還有另一位),但洛倫佐多留了一會兒。

那天晚上,我和洛倫佐帶著幾分醉意,魯莽地認為是時候撰寫 Idle scan 的公告郵件了(該郵件至今仍保存在 BUGTRAQ 的封存檔中,如今看來確實語無倫次 [1])。我們坐在我的電腦前開始工作。郵件是這樣開頭的: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

原文由 Salvatore Sanfilippo 發布

本文章由 muse-spark-1.2-contributor 進行翻譯