為什麼零時差攻擊(zero-day)這麼可怕?為什麼要常常更新軟體?

Huli
Nov 23, 2021

--

Photo by KeepCoding on Unsplash

你有被釣魚信件騙過嗎?許多人有。

舉一個例子好了,假設我知道你有在用 Facebook,於是我就寄了一封內容長得跟 Facebook 超級像的信件給你,信中寫說你的帳號已被盜用,要趕快點進連結修改密碼,這時候有些人就會真的點進去,輸入自己的舊密碼以及新密碼,而這些密碼就發送到了攻擊者的伺服器去。

如此一來,攻擊者僅僅靠著一封郵件,就拿到了受害者的密碼。許多釣魚信件都是大規模發送的,像是臉書上的台大交流社團,每隔一陣子就會有人 po 學校信箱收到釣魚信件的截圖。

而許多公司內部也會做釣魚信的演練,由內部或是外部的資安團隊寄送釣魚信件給公司同仁,看看他們會不會點開信中的連結,或甚至是點進連結以後進行操作,例如說重設密碼之類的。

我們公司也做過,雖然我知道那是釣魚信件,但抱持著好奇的心態外加自身對於攻擊的了解,我開著無痕視窗點進去了,因為我覺得這樣不會有事。

為什麼不會有事?因為第一我沒有輸入任何資訊,第二我開著無痕視窗,所以就算這是真的攻擊,我不處於任何登入狀態,什麼 XSS 或是 CSRF 都對我沒用,都拿不到我的個人資訊。

既然拿不到我的資訊,那我不就是安全的嗎?當時身為一個寫網頁的工程師,我覺得這樣十分合理。

但後來我才知道,我是錯的,而理由跟我在《服務對外但需要登入,能有什麼風險嗎?》寫的類似:

萬一有問題的是瀏覽器本身呢?

假設瀏覽器有個漏洞,可以透過特定的 JavaScript 程式碼就讀取到電腦裡的檔案,而這個釣魚信件連到的網頁實作了這個攻擊方式,那我點進去以後就中招了。

只是點個連結而已,電腦就被入侵了,所以連結真的不要亂點。

你可能會想說:「拜託,Chrome 背後是 Google 這麼大間的公司,應該不會有什麼漏洞吧?他們不是很多厲害的工程師嗎?」

事實上,不管公司多大,工程師多厲害,依舊還是有許多的漏洞一再被發現,我們舉最近的 2021/11/15 的這篇 Chrome 官方部落格發佈的版本更新文章:Stable Channel Update for Desktop 為例,就提到這次的版本修復了 25 個漏洞:

截圖自上面提到的部落格文章

你可能會想說:「那我每次都以最快的速度更新到最新版,不就沒問題了嗎?」,不,這樣其實還是有個顯而易見的問題。

上面列的那些漏洞,是 Chrome 最新版才修復的對吧?那修復需要時間對吧?所以從漏洞被發現一直到被修復,中間一定經過了一些時間,換句話說,有段時間就會處於「有漏洞,但沒有被修復」的狀態。

像是這種還沒被修復或甚至是還沒被其他人發現的漏洞,就叫做 zero-day 漏洞(零時差漏洞),你想擋都擋不住,因為你根本不知道它的存在。而拿這個 zero-day 去攻擊就叫做零時差攻擊,簡單來說就是用一個還沒被修復的漏洞來攻擊,所以你防不住。

這就是為什麼 zero day 這麼可怕,因為你無法直接去防禦它(大概只能透過一些機制去偵測入侵後的行為,或者是架個防火牆擋掉一些看起來惡意的流量,但依然沒辦法做到完全的防禦)。

而你用這個關鍵字去搜尋,也可以找到一堆新聞,例如說:

  1. Apple Rushes Out Emergency Update to Stop ‘No Click’ Spyware
  2. 國家級黑客攻擊香港兩網站 曾用 Mac、iPhone 瀏覽者電腦手機資料恐被盜
  3. 微軟稱中國駭客「零時差攻擊」侵電郵 籲用戶防備

仔細想想會發現 zero day 真的可怕,例如說今年 4 月 GitLab 有一個超危險的漏洞 CVE-2021–22205,基本上只要能連到你的 GitLab,不需要登入就能夠在那台 server 上執行任意指令。

這個漏洞在 4/7 被回報,4/14 修復,如果今天知道這個漏洞的人沒有回報的話,那他可以打下所有開放在外網的 GitLab!既然能打下這個儲存程式碼的服務,那就可以看到所有專案的程式碼,繼續找出更多漏洞,或甚至是偷偷竄改程式,植入一些惡意程式碼等等,可以延伸出更多的攻擊。

因此像這樣的 zero day 除了透過正當管道回報以外,有些黑帽駭客也會拿去黑市販賣,或也有像 Zerodium 這樣的公司,以高價收購漏洞之後再轉手把情資販賣給客戶。

zerodium 官網上列的針對各種知名服務的 zero day 收購價錢

不過先不論 zero day 這種還沒修補的漏洞,就算是在新版已經補起來的漏洞,依然會有許多人因為沒有升級到新版而被打下來。

舉我剛剛說的 4 月份的那個 GitLab 漏洞為例,在 11 月的時候整個網路上還有至少三萬台的伺服器沒有修補這個漏洞。這就是為什麼應該時常更新一些服務,或至少有安全性漏洞產生的時候,一定要盡快修補。

如果服務有對外開放的話那就更危險了,因為有像是 Shodan 這種的搜尋引擎,可以很方便地搜尋想要的東西,例如說下圖就是搜尋在台灣的 GitLab 伺服器的結果:

總共 145 臺

接著我只要把這個清單下載下來,然後準備好攻擊的腳本,寫一個小程式針對這些伺服器去做攻擊,很快就可以知道哪些伺服器用的是有漏洞的版本,靠著半年前就已經修好的漏洞,就可以入侵這些不知道是誰家的機器。

回到剛開頭的釣魚信小故事,原先我以為只是點個連結而已,不會有什麼事,但其實儘管只是點了連結,就能讓攻擊者有機會發動攻擊。儘管發動攻擊需要滿足一些前提(要能利用瀏覽器的漏洞),但依舊是有可能發生的。

所以連結不要亂點,真的好奇想點的話可以準備一個更安全的環境,軟體或是有對外的服務也要記得時常更新,尤其是安全性相關的漏洞要盡快更新,避免哪天輕易就被打下來。

--

--

Huli

重度拖延症患者,興趣是光想不做,有很多想做的事,卻幾乎都沒有執行。相信分享與交流可以讓世界更美好。想持續關注可以追蹤這個粉專:https://www.facebook.com/huli.blog ,Medium 文章列表請參考:https://aszx87410.github.io/blog/medium