一個被封掉的域名死掉了,三十個新域名活著:微軟改讀行為,不讀門牌
從微軟改用行為特徵追蹤 MacSync Stealer 的防禦轉向看起,觀察資安偵測如何從封鎖單一域名,被重新設計成一種讀行為的介面。
先從一個很小的技術細節看起:/tmp/sync* 這個路徑,以及一個叫 osalogging.zip 的壓縮檔。8 月 22 日 IT 之家報導,微軟 Defender Experts 團隊在本週二說明了他們追蹤 MacSync Stealer 的方法。這款針對 macOS 的資訊竊取惡意軟體,在把偷來的資料上傳之前,會先把檔案暫存在系統的 tmp 目錄裡,壓縮、切塊,然後用 curl 一段一段送出去。傳輸請求裡帶著 upload_id、chunk_index、total_chunks 這幾個參數。
這幾個參數之所以值得停下來看,是因為它們透露了一件事:連惡意軟體都需要設計自己的資料介面。上傳要分塊,分塊要有編號,編號要能對帳。這套結構和任何一個正經雲端儲存服務的上傳邏輯沒有本質差別。差別在於,它被用來搬走你的 Keychain 密碼、SSH 金鑰和加密貨幣錢包種子檔。
封域名是一種過時的介面
早期對付這類惡意軟體的做法很直觀:把它使用的域名封掉。這種防禦像是在門口貼一張黑名單,誰在名單上就不讓進。問題是域名這種東西,取得成本低,替換速度極快。舊的地址被封了,攻擊者幾小時內就能換一個新的,名單永遠追在後面跑。
微軟這次的轉向,本質上換了一套閱讀方式。他們不再讀門牌,改讀行為:惡意軟體不管換多少域名,它的執行流程是有慣性的。攻擊通常從一個互動式的 zsh 終端機會話開始,受害者在 ClickFix 騙局引導下,以為瀏覽器過舊或文件需要驗證,自己打開終端機貼上命令。curl 下載載荷,用 Base64 和 gunzip 解開,再透過 osascript 執行 AppleScript 包裹的 Shell 指令。全程呼叫的都是 macOS 原生工具:sh、cp、rm、mkdir、killall。
換句話說,這支惡意軟體幾乎不帶自己的傢夥,全是就地取材。這在資安術語裡叫 living off the land,但從設計的角度看,它是一套高度依賴環境預設值的腳本。而依賴預設值,就意味著行為模式固定。微軟抓住的正是這個:當 osascript 啟動 Shell 活動後,短時間內緊接著出現網路通訊、檔案暫存或清理動作,這個序列本身就是指紋。靠著比對進程關係、命令列模式、URI 路徑、HTTP 請求頭與上傳參數,他們一次關聯出三十多個域名。
這個數字本身微軟也說了,並非調查的核心發現。核心是方法換了。
騙局也是被設計過的
ClickFix 這個手法值得單獨看一層。它的介面設計其實相當講究:頁面偽裝成一個正當的系統提示,告訴你瀏覽器版本過舊,或某份受保護文件需要完成身分驗證,然後引導你複製一段命令,貼進終端機執行。
它的聰明之處在於把最危險的一步交給使用者自己完成。系統不會跳出任何需要管理員權限的確認框,因為根本不需要。使用者親手打開終端機、親手貼上、親手按下 Enter,作業系統看到的是一個合法的本機操作。這和那些偽造得再精美的釣魚頁面不同,釣魚頁面還要騙過瀏覽器的網址欄,ClickFix 直接繞過了所有瀏覽器層級的防線,把戰場搬到使用者自己的機器上。
這套騙局利用的介面慣性,和近年作業系統把「提示」設計得越來越醒目、越來越要求立即行動的趨勢,恰好互為表裡。使用者被訓練成看到提示就照做,而攻擊者只是替這個反射準備好了一條通往終端機的臺詞。
收集清單裡的優先順序
MacSync Stealer 竊取的內容清單,本身就說明了它的目標客羣。它會枚舉執行中的進程與系統資訊,然後找 Ledger、Trezor 等硬體錢包的相關資料,接著是 macOS Keychain、瀏覽器憑證、Cookie、登入資料庫、Safari 資料、Apple Notes、SSH 金鑰、AWS 憑證、Kubernetes 設定檔,以及 Downloads、Documents、Desktop 幾個常見目錄裡的敏感檔案。
被盯上的副檔名包括 PDF、DOCX、TXT、KEY、PEM、KDBX、OVPN、WALLET、SEED。這份清單的排列不是隨機的。WALLET 和 SEED 指向加密貨幣,KDBX 是 KeePass 密碼庫,OVPN 是 VPN 連線設定,KEY 和 PEM 是各種金鑰。它瞄準的是開發者、幣圈持有者、以及把整個數位生活放在 Mac 上的重度使用者。一支惡意軟體的目標設定,就寫在它收集什麼這件事上。
資料被收集後也不急著送走,而是先進入暫存階段,壓縮、切塊、分批外傳。這種從容,說明攻擊者假設自己有時間。暫存路徑固定、壓縮檔名固定、上傳參數固定,這些為了規模化而做出的工程選擇,最終都成了被辨識的錨點。
從封鎖名單到閱讀行為,是一種介面的成熟
把這件事放在更大的脈絡裡看,資安產品這幾年的演進方向其實很一致:從靜態的規則比對,走向對行為序列的理解。封域名、比對病毒碼,都是「名詞式」的防禦;看進程樹、看命令列、看網路請求的時序關係,是「動詞式」的防禦。前者維護的是一份清單,後者維護的是一套文法。
這個轉向和我們先前觀察過的幾個案例有相似的邏輯。沃爾瑪花了十年才讓自家讀卡機亮起非接觸式付款的波形,那是結帳介面對使用者習慣的遲來讓步;而微軟這次放棄域名黑名單、改用行為關聯,則是防禦介面對攻擊者習慣的主動適應。兩者都指向同一件事:一個介面能否持續有效,取決於它讀的是靜態標籤還是動態行為。可以參考我們先前寫過的沃爾瑪結帳終端的介面讓步。
另一個值得對照的是系統入口的顯與隱。微軟自己也曾把 OneDrive Photos 從開始選單裡收回去,重新設計它在系統中的可見度,那是從使用者端做減法;而這次對 MacSync 的追蹤則是從威脅端做加法,把散落在一個個域名底下的行為碎片,重新拼成一個可讀的整體。兩件事方向相反,思路相同:介面的價值在於讓原本看不見的關係變得可讀。這一點在OneDrive Photos 的顯隱設計裡已經看過一次。
回到開頭那個細節。chunk_index 和 total_chunks 這兩個參數,原本是攻擊者為了穩定外傳資料而設計的工程介面,最後卻成了防禦方判斷「正在發生實際竊取,而非單純 C2 心跳」的依據。惡意軟體為了規模化而標準化的每一步,都被反向利用成了偵測的錨點。
這大概是這整件事最諷刺也最值得記住的地方:在資安的世界裡,設計得越有效率,行為就越可預測;越可預測,就越容易被讀出來。微軟這次沒有贏在封鎖了幾個域名,而是贏在換了一種閱讀方式。域名會換,行為的文法不會。