Idle Scan 的起源
原文由 Salvatore Sanfilippo 于 發布,訂閱此部落格
Idle scan 誕生於 1998 年底,有電子郵件為證。如果沒記錯的話,幾個月前我剛搬到米蘭,從九月起就住在那裡,滿腦子都是新點子,卻沒料到在那座城市的停留竟會如此短暫。那年夏天我在西西里的海灘上度過,大部分時間都在讀 Seclab 夥伴們(主要是 David)推薦的許多書。不過,那些閱讀還需要一個觸發點:Idle scan 是一個源於理論思考而誕生的攻擊手法,但這一連串思緒的起點,卻是一個相當務實的契機。不久前我剛打造出 Hping,一個連標誌都是從 Nutella 借來的工具。我提到這點,是想強調當時主導我那些嘗試的「嚴肅」程度——畢竟,我當時才二十一歲,就已經在北義大利扛著一份全職工作,總該多點體諒吧。
Hping 是針對 TCP/IP 協定的瑞士刀。它最初的用途大多是探索性的、為了研究。透過 Hping,你可以用最稀奇古怪的方式組合出 TCP、UDP 和 ICMP 封包,再把它們封裝進同樣古怪的 IP 封包裡——經過分段、欄位設成異常的數值。把這些封包發出去,就能觀察不同作業系統網路堆疊的回應。
Idle scan 就是從這裡開始的:只用 Hping 玩個幾分鐘,就發現了一個眾所皆知、但(對我而言)令人意外的事實。回應封包裡有個 ID 欄位,會持續以某種幅度遞增。在當時,考量到我後來才會公開的那些攻擊手法還沒人知道,這個 ID 欄位的行為並沒有引起任何擔憂。作業系統每發出一個 IP 封包,就會先將一個計數器加一(當計數到最大值 2 的 16 次方減 1 時就會歸零),然後把封包的 ID 設為該計數器的數值再發送。這個計數器是所有對外封包共用的。光是這一點,就能用來估算任何連網電腦的對外流量。這種資訊外洩讓我很在意;我覺得這是個令人不安的異常。我在 BUGTRAQ 上發了一篇初步的貼文,點出這個問題。回覆之中,有一位網路界的大人物——曾起草 TCP/IP 協定核心 RFC 的人——說,是的,他們早就知道,這是眾所皆知的事。總之:雖然這個特性可以用來估算流量,但多數人認為沒有風險。而要解決這個被視為微不足道的問題,卻需要對作業系統進行大幅度的修改。不值得。
但這件事讓我輾轉難眠,對我來說絕不是什麼次要問題。我深信,那個遞增的 ID 欄位所提供的資訊,可以和其他要素(當時我還沒完全弄清楚是什麼)結合起來,發動更嚴重的攻擊。我和 Lorenzo Cavallaro 討論了這件事。幾個月前,正是 Lorenzo 向我介紹了 raw socket 技術,而我就是用它寫出了 Hping。他成了我固定的討論對象,也是摯友;只要需要思考 TCP/IP 相關的問題,我就會找他聊。當我告訴他這些新想法時,我只能含糊帶過,不是故意要故弄玄虛,而是因為我還沒拼湊出完整的攻擊手法。儘管我說得含糊,他似乎還是頗感興趣。
過了幾天,我又找他聊。這一次,我終於能對 Idle scan(當時還沒這樣命名)給出更完整的描述。我是在紙上推演出來的,因為當時沒有辦法實際測試。如果沒記錯的話,Hping 還缺少一些必要的功能,不過這部分我不敢打包票:畢竟已經過了二十五年。邊寫,記憶倒是慢慢清晰起來。我記得當時好像還無法精確指定發出的 TCP 封包的旗標。無論如何,據我所記,對 Hping 的修改沒花多少時間,所以我們很快也能在實務上驗證我的理論。Idle scan 真的奏效了,能在真實環境中證明這一點,讓人非常興奮。我不記得是誰做了這個比喻,但基本上,就像是間接觀測一顆看不見的天體,只透過它對另一顆更容易觀測的天體所產生的重力效應來推斷其運動,有點像冥王星的發現過程。
接下來就只剩下公開這個攻擊手法了。可惜,一想到要用英文寫一封長長的郵件,就讓我感到害怕。我知道 Idle scan 是個有趣的點子,也正因如此,我才更怕因為表達不好而搞砸了發布。畢竟,這個攻擊手法本身就很繁瑣;要是寫得太差,甚至可能讓人完全看不懂。那封郵件是我和 Lorenzo 深夜在我家寫的,肯定是喝醉的狀態下寫的。總比我一個人寫好;Lorenzo 的英文就算只好一點,也比我強。剛好有位來自 Seclab 的同事(也是創辦人之一),我認為他是資訊安全領域真正的天才,出身於艾米利亞(Emilia)的餐飲世家。有一天晚上,他提著一個袋子出現在我家。袋子裡是一塊上好的烏魚子,我以前從沒見過,更別說吃過了(後來它成了我最愛的食物之一)。這位廚師駭客為我們大家煮了義大利麵,我們一起吃飽喝足。到了晚間尾聲,其他人都離開了(除了這位廚師駭客,還有另外一個人),但 Lorenzo 多留了一會兒。
那天晚上,我和 Lorenzo 在微醺的狀態下,冒冒失失地覺得是時候來寫那封 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 終究成了一種經典的攻擊手法,可以說,如同往常一樣,剩下的就是歷史了。
隨機一篇部落格
留言
登入後參與討論