返回所有文章
發佈於 · 作者 Renaud Deraison

惡意程式就架在 chatgpt.com 上,而這正是重點

一場新行動,租用了一個你早已信任的網域所擁有的信任。一則 Google 廣告把你送往一個真正的 chatgpt.com 分享連結,這個分享連結顯示一則假的服務中斷通知,而這則通知遞給你惡意程式。以下說明這份信任是怎麼被借走的——以及當這一切發生在一台用完即丟的 VM 裡時,這份借來的信任為什麼就不再要緊了。

網址列顯示的是 chatgpt.com。鎖頭圖示是綠色的。頁面是由 OpenAI 提供的。一個謹慎的人被教會要檢查的每一個訊號, 回報的都是乾淨——而這個頁面卻仍然試圖把惡意程式安裝到 電腦上。受信任的網域並不是一時的疏漏。它就是整個計畫。

你正在搜尋 ChatGPT。你把它打進 Google,就像每天好幾億人在做的那樣。第一筆結果是一則廣告。廣告上寫著 ChatGPT、連到 ChatGPT,把你帶到一個網址確確實實以 chatgpt.com 開頭的頁面。到目前為止沒有任何不對勁。沒有任何東西看起來不對勁,因為沒有任何東西明顯地真的不對勁:你就在 OpenAI 真正的網域上。

然後這個頁面告訴你網站當機了。「我們目前正遇到高流量,」它說。「由於使用者眾多,我們的網站暫時無法使用。」它建議你改為下載桌面版應用程式。那裡有一個按鈕。你人在 chatgpt.com 上,這個服務顯然正在鬧脾氣,而想要一個桌面版應用程式是再合理不過的事。你點了下去。

這就是整個把戲,而 Push Security 的資安研究員在五月底記錄了它,他們把這場行動稱為 LLMShare。值得仔細弄懂它,因為它是一種接下來會不斷出現的攻擊模式的乾淨範例:不去攻破一個受信任的服務,而是租用它的名譽

那個頁面真的就在 chatgpt.com 上。

ChatGPT,和大多數大型 AI 產品一樣,讓你分享一段對話。你點分享、拿到一個 chatgpt.com/s/ 底下的連結,任何拿到連結的人都會看到這段交流的渲染副本。有用、平常、到處都是。

陷阱在於「渲染」這個詞的意思。這些分享頁面可以包含模型的輸出,而那段輸出可以含有 HTML 和 CSS——也就是任何網頁所用的同一批材料。所以攻擊者分享的不是一段對話,而是一段「對話」,內容是手工打造的假東西:一則畫素級忠實的 OpenAI 服務中斷通知,連字體、那種藍、那種語氣都對。根據研究,破綻很細微——這個分享檢視畫面仍然帶著 ChatGPT 自己的「Show code」和「Remix」控制項,這就是「中斷頁面」其實只是某人撰寫的自訂標記語言的破綻。

這樣做的重點在於那個網址。這個惡意程式誘餌並不住在 chatgpt-downloads-official.biz 上。它住在 chatgpt.com 上,一個名譽無瑕、憑證有效、並且早已刻進每一位用過這個產品的人的肌肉記憶裡的網域。每一個靠著問「這是我們信任的網域嗎?」來運作的防禦,回答都是「是」,因為誠實的答案就是「是」。

1 · 廣告Google 廣告搜尋「ChatGPT」2 · 真實網域chatgpt.com/s/一段分享的「對話」3 · 假中斷「我們當機了」自訂 HTML/CSS4 · 重新導向openew[.]app對掃描器隱身5 · 下載macOS + Win惡意程式安裝器當掃描器來訪時……它看到的是一個無害的AR/VR 公司網站。每一跳的受信任程度,都高過它的危險程度
這條鏈在每一個環節都在借用信任。一則付費的 Google 廣告把正當性借給那次點擊;chatgpt.com 的分享連結把正當性借給那個頁面;而一個隱身式的重新導向,把一張乾淨的健康證明借給自動掃描器。只有最後那個執行檔是公然惡意的——而到那時,使用者已經被帶著走過了每一道關卡。

下載伺服器對掃描器說謊。

在那則假中斷頁面上點下下載按鈕,你就被送離 chatgpt.com,去到 openew[.]app,一個被打扮成 OpenAI 官方下載入口的網站。第二塊隱身術就住在這裡。

隱身指的是對不同的訪客顯示不同的內容。攻擊者的伺服器會看是誰在發出請求。如果這個請求聞起來像一個自動化的資安掃描器——而網際網路安全有很大一部分,倚賴像 URLScan 這類服務去爬取網址、並在沙箱裡渲染它們——伺服器就提供無害的東西。在這個案例裡,根據研究,造訪該網址的掃描器看到的是一個無害的擴增實境/虛擬實境公司網站。乾淨。沒有什麼好標記的。如果這個請求反過來聞起來像一個跟著誘餌走過來的真人,伺服器就提供惡意程式。

於是針對 openew[.]app 的自動化裁決是「良性」,而人類的裁決——那個真正要緊的——卻永遠得不到第二意見。這個下載同時提供給 macOS 和 Windows,因為攻擊者不知道、也不在乎你用的是哪一種;他們兩邊的受眾都想要。(那個 Windows 樣本甚至會在繼續之前檢查自己是不是跑在一台虛擬機裡,這是用來閃避分析沙箱的常見手法——把這個念頭先放著。)

這一切都不奇特。它和我們先前寫過的惡意廣告與 SEO 投毒鏈,屬於同一類手藝。讓 LLMShare 值得寫成一篇文章的,是它所借用的信任的品質。同一群研究員說這個模式並非 ChatGPT 獨有:他們已經看到其他 AI 產品的分享/渲染功能——Claude 的 Artifacts、分享的 Grok 對話——被拿來幹同樣的勾當。任何一個讓陌生人在你品牌的網域底下發布渲染 HTML 的產品,都已經在無意間,成了任何想濫用那個品牌的人的代管供應商。

為什麼每一道關卡都揮手放行。

回頭走一遍這條鏈,注意一個謹慎使用者的每一種防禦直覺,都被設計成可以獲得滿足:

這是真正的網站嗎?

是。網址列讀作 chatgpt.com、憑證有效、頁面由 OpenAI 提供。「檢查網址」——我們都會給的那句建議——回報了一個 乾淨的答案,因為這個網址確實是乾淨的。

掃描器標記了那個下載主機嗎?

沒有。重新導向網域會隱身:它對資安爬蟲顯示一個良性的 AR/VR 網站,把惡意程式留給人類受害者。信譽資料來源和 「這個連結已檢查過」的徽章,都回報沒有任何不對勁。

這個頁面看起來像釣魚嗎?

沒有。它是被撰寫成忠實的 HTML/CSS,去模仿一則 OpenAI 的服務中斷通知。沒有笨拙的錯字、沒有走樣的標誌、沒有 生硬翻譯的破綻。它看起來就和它假扮的東西一模一樣。

下載一個桌面版應用程式很不尋常嗎?

不會。許多真正的服務都會推你去安裝一個原生應用程式, 而一個在高負載下苦撐的網站,是提供原生程式一個熟悉、 說得通的理由。這個故事是自洽的。

這就是令人不安的部分。標準建議——檢查網址、信任掃描過的連結、留意粗糙的釣魚、提防奇怪的網域——都是建議,而這場行動筆直地穿過了它們全部。當受信任網域的訊號本身就是攻擊時,這個訊號就不再幫得上忙。你沒辦法叫一個謹慎的人,去對一個通過了他所知道的每一項檢查的頁面,更加謹慎。

所以有趣的問題不是「使用者本來要怎樣才能看穿它」。對大多數使用者、在大多數日子裡,他們看不穿。有趣的問題是:在那個執行檔真正跑起來的那一刻,會發生什麼事?

這一切都發生在同一個分頁裡。

再看一次這條鏈,注意它住在哪裡。廣告在瀏覽器裡打開。chatgpt.com 頁面在瀏覽器裡渲染。假中斷通知是瀏覽器裡的一個網頁。重新導向發生在瀏覽器裡。下載是由瀏覽器發起的。唯一一個離開瀏覽器的步驟是最後一步——當下載下來的安裝器被執行、開始在電腦上、用著使用者的檔案與權限,去做它被打造來做的任何事。

那最後一跳就是整盤棋。它之前的一切都是布局。攻擊者在廣告預算、那個令人信服的頁面、那套隱身基礎設施上花了實打實的功夫——這一切都是為了讓一個執行檔在一台機器上跑起來。如果這個執行檔是在一個不含任何你的東西的地方執行,那麼攻擊者花掉這一切,只是去攻陷了一個空房間。

這就是 Bromure 所改變的幾何結構。在 Bromure 裡,瀏覽器並不是以一般意義跑在你的電腦上。每一個分頁都跑在一台用完即丟的 Linux 虛擬機裡——一個密封的客體,有自己的檔案系統,從一個乾淨的映像啟動,看不到你的檔案、你的鑰匙圈、你的其他分頁、或你的區域網路。網頁、渲染器、JavaScript、下載,以及下載下來的程式的第一次執行,全都發生在那個客體裡面。當你關掉視窗,那個客體連同裡面的一切都被銷毀。

傳統瀏覽器你的電腦chatgpt.com 分享頁面「下載桌面版應用程式」安裝器以你的身分執行檔案可讀取鑰匙圈可觸及瀏覽器Cookie常駐登入項目網路可觸及一個執行檔,全面觸及。Bromure你的電腦用完即丟的 VMchatgpt.com 分享頁面「下載桌面版應用程式」安裝器在客體裡執行只看得到空空的客體被封閉你的檔案 + 鑰匙圈未被觸碰關掉視窗VM 被抹除
同一場行動、同一個令人信服的頁面、同一個下載下來的安裝器。左邊是傳統瀏覽器:執行這個安裝器,意味著在你的機器上、針對你的檔案去執行它。右邊是 Bromure:安裝器跑在一台用完即丟、不含任何你的東西的 VM 裡,而這台 VM——連同安裝器——在你關掉視窗時被抹除。

注意受信任網域的訊號在這裡替攻擊者買到了什麼:什麼都沒有。整場行動都是為了打敗「我信任這個頁面嗎」這個問題而精心設計的。Bromure 不問這個問題。它不需要知道 chatgpt.com 是否值得信任,因為它一開始就不讓任何頁面的內容——無論受不受信任——伸過客體 VM 那道界線。這個頁面可以是網際網路上最正當的頁面,而封閉效果會是一模一樣的。信任根本不是這個架構所承受的那份重量。

對掃描器隱身的把戲也是同樣的道理。攻擊者下了苦功,要讓 openew[.]app 在自動化分析眼中看起來良性。Bromure 不倚賴那份分析是對的。即使這個下載主機被評為完美乾淨、檔案被揮手放行,這個檔案抵達的地方也是一個用完即丟的客體。而且回想一下那個會在解包前檢查自己是不是跑在虛擬機裡的 Windows 樣本:那個反分析的本能反應,現在反過來對攻擊者不利、而不是對他們有利了——那個拒絕在 VM 裡跑的惡意程式,拒絕在它好不容易落腳的唯一一個地方跑起來。

這解決不了什麼。

隔離封閉的是執行。它不會編輯現實。有兩個誠實的缺口值得點名。

第一,Bromure 不會阻止你被說服。如果這個頁面說服你把你真正的 OpenAI 密碼打進一個真正的登入表單裡、或說服你親手把一個檔案帶出客體、帶上你的 Mac、在那裡自己執行它,那麼這層隔離就被你自己的雙手繞過去了。這層保護是:布局、以及惡意程式的第一次執行被封閉住了——而不是社交工程變得不可能。一個這麼擅長冒充的頁面,仍然是一個值得起疑的頁面;這個架構降低了被騙的代價,它並不會提高你看穿騙子的機率。

第二,這從根本上是一場由瀏覽器投遞的攻擊,而這正是封閉之所以具決定性的原因。整條鏈——廣告、頁面、重新導向、下載、第一次執行——都住在分頁裡。沒有另外一個原生應用程式可供攻陷、沒有電子郵件用戶端、沒有使用者信任的第二支程式。在那個執行檔跑起來的那一點上斬掉這條鏈,下游就什麼都不剩了。當攻擊在瀏覽器裡開始、也在瀏覽器裡結束時,一個吸收這記打擊的瀏覽器,就是該站的位置。

下一個也會在一個你同樣信任的網域上。

LLMShare 其實不是一個關於 ChatGPT 的故事。它是一個關於某種技術的故事:拿一個人們信任的服務,找出它讓陌生人能以它的名義發布渲染 HTML 的那個角落,再用那個角落去架設誘餌。今天是 ChatGPT;研究員們已經看到 Claude 和 Grok 被以同樣的方式利用;明天它會是任何一個既受歡迎、又慷慨地願意替你渲染東西的產品。

你沒辦法靠著變得更會看穿壞網域來打贏這一仗,因為整個招數就是去用好網域。你打贏它的方法,是讓網址列與你的安全無關——是把事情安排成:一個頁面所能做的最壞的事,不論上面印著誰的標誌,就是去填滿一個你關掉視窗就清空的用完即丟房間。

這就是 Bromure 的用途。安裝它、把它設成你的預設,讓那份借來的信任替攻擊者什麼都買不到。