Subscribe to receive notifications of new posts:

Page Shield 現在可以監視第三方 JavaScript 程式碼建立的惡意輸出連線

10/21/2022

7 min read
Page Shield can now watch for malicious outbound connections made by third-party JavaScript code

Page Shield 現在可以監視第三方 JavaScript 程式碼建立的惡意輸出連線

許多網站使用第三方 JavaScript 庫,透過使用預先建立的功能來縮短開發時間。常見範例包括結帳服務、分析工具或即時聊天整合。這些 JavaScript 庫中任何一個都可能將網站訪客的資料傳送到未知位置。

如果您管理一個網站,並且曾經想知道終端使用者資料可能去哪裡以及誰可以存取它,那麼從今天開始,您可以使用 Page Shield 的 Connection Monitor 找到答案。

Page Shield 是我們的用戶端安全性解決方案,旨在偵測直接影響瀏覽器環境的惡意行為和危害,例如利用第三方 JavaScript 庫中漏洞的行為和危害。

即日起提供的 Connection Monitor 是 Page Shield 的最新成員,讓您能夠查看由新增到您網站的第三方 JavaScript 發起的使用者瀏覽器建立的輸出連線。然後,您可以檢閱此資訊,以確保只有適當的第三方才能接收敏感資料。

我們的 Business 和 Enterprise 方案的客戶可以獲得由 Connection Monitor 提供的輸出連線可見性。如果您正在使用我們的 Page Shield 企業附加元件,則每當發現連接可能存在惡意時,您也會收到通知。

使用 Connection Monitor 涵蓋更多攻擊面

Connection Monitor 補充了 Script Monitor(Page Shield 之前的核心功能)提供的可見性,擴展了擷取使用者瀏覽器中可能發生之惡意行為的機會網。

Script Monitor 專注於分析 JavaScript 代碼以查找惡意訊號,而 Connection Monitor 則查看向其傳送資料的位置。這兩個功能完美地協同工作。

實際上,Web 應用程式環境中的用戶端入侵經常會導致資料外流。最知名的例子是 Magecart 式攻擊,惡意行為者會在不改變應用程式行為的情況下,嘗試直接從應用程式的結賬流程(通常在電子商務網站上)竊取信用卡資料。

這些攻擊通常很難偵測到,因為它們利用了您未直接控制的 JavaScript(如內嵌小工具),並且對使用者體驗沒有任何明顯影響。

Page Shield Connection Monitor

對內容安全性原則進行補充

Page Shield 使用內容安全性原則 (CSP) 從瀏覽器接收資料,但透過關注核心問題來對其進行補充:偵測惡意行為,以及 CSP 未現成提供的內容。

內容安全性原則被廣泛採用,讓網站管理員能夠告訴瀏覽器允許載入哪些內容以及從何處載入。這在原則上是有用的,但在實踐中,CSP 對於大型應用程式很難維護,而且通常會因為範圍太廣而導致無效。更重要的是,CSP 不提供內建機制來偵測惡意行為。這就是 Page Shield 能夠有所幫助的地方。

在今天之前,借助 Script Monitor,Page Shield 透過僅關注 JavaScript 文檔,透過在 JavaScript 程式碼上執行我們的分類器等方式來偵測惡意行為。從今天開始,借助 Connection Monitor,我們還針對連線 URL 端點執行威脅情報提要查找,使我們能夠快速發現潛在的可疑資料洩漏。

Connection Monitor:背後的原理

Connection Monitor 使用內容安全性原則 (CSP) 中的 connect-src 指令從瀏覽器接收有關輸出連線的資訊。

然後儲存此資訊以便於存取,並透過其他見解進行增強,包括連線狀態、連線頁面來源、網域資訊,以及您是否有權存取我們的企業附加元件、威脅源情報。

要使用 Connection Monitor,您需要透過 Cloudflare 代理應用程式。開啟後,它將僅在 HTML 頁面載入的抽樣百分比上插入以下 HTTP 回應標頭,該標頭實施用於接收資料的內容安全性原則:

content-security-policy-report-only: script-src 'none'; connect-src 'none'; report-uri <HOSTNAME>/cdn-cgi/script_monitor/report?<QUERY_STRING>

此 HTTP 回應標頭要求瀏覽器將有關指令碼 (script-src) 和連線 (connect-src) 的資訊傳送到給定端點。依預設,端點主機名稱為 csp-reporting.cloudflare.com,但如果您使用我們的企業附加元件,您可以將其變更為與您網站相同的主機名稱。

使用上述 CSP,瀏覽器將報告由以下各項發起的任何連線

  • <a> ping,
  • fetch(),
  • XMLHttpRequest,
  • WebSocket,
  • EventSource,以及
  • Navigator.sendBeacon()

連線報告範例如下所示:

"csp-report": {
    "document-uri": "https://cloudflare.com/",
    "referrer": "",
    "violated-directive": "connect-src",
    "effective-directive": "connect-src",
    "original-policy": "",
    "disposition": "report",
    "blocked-uri": "wss://example.com/",
    "line-number": 5,
    "column-number": 16,
    "source-file": "",
    "status-code": 200,
    "script-sample": ""
}

然後,使用如上所示的報告,我們可以建立輸出連線 URL 的清單,並記錄它們是由哪些頁面發起的。然後,使用儀表板提供這些資料,並透過以下方式增強:

  • 連線狀態:如果最近看到連線,則處於「作用中」狀態
  • 時間戳記:首次看到和最後一次看到
  • 中繼資料:WHOIS 資訊、SSL 憑證資訊(如果有)、網域註冊資訊
  • 惡意訊號:威脅源網域和 URL 查找*

* URL 源查找僅在儲存完整連線路徑時可用。

關於隱私的說明

Cloudflare 希望確保直接客戶和終端客戶的隱私。因此,預設情況下,Connection Monitor 將僅儲存和收集連線 URL 的配置和主機部分,例如,如果瀏覽器向其傳送資料的端點是:

https://connection.example.com/session/abc

Connection Monitor 將僅儲存 https://connection.example.com ,並刪除路徑 /session/abc。這樣可以盡可能減少儲存工作階段 ID 或可能在完整 URL 中找到的其他敏感資料的風險。

不儲存路徑確實意味著在某些特定情況下,我們無法從威脅情報中執行完整的 URL 源查找。因此,如果您知道您沒有在連線路徑中插入敏感資料,則可以從儀表板中輕鬆打開路徑儲存。網域查找將繼續按預期工作。將來還將新增對儲存查詢字串的支援。

走得更遠

我們將在 Page Shield 中支援 CSP 提供的 Script Monitor 和 Connection Monitor 這兩個指令,但我們的計劃遠不止於此。展望未來,我們已經在著手開發許多附加功能,包括直接從儀表板建議和實施正面和負面原則的能力。

我們很高興看到 Connection Monitor 提供了有關應用程式行為的更多可見性,並期待下一次進展。

We protect entire corporate networks, help customers build Internet-scale applications efficiently, accelerate any website or Internet application, ward off DDoS attacks, keep hackers at bay, and can help you on your journey to Zero Trust.

Visit 1.1.1.1 from any device to get started with our free app that makes your Internet faster and safer.

To learn more about our mission to help build a better Internet, start here. If you're looking for a new career direction, check out our open positions.
Page Shield (TW)Security (TW)繁體中文

Follow on X

Michael Tremante|@MichaelTremante
Cloudflare|@cloudflare

Related posts