<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Risk on Tarragon</title><link>https://tarrragon.github.io/blog/tags/risk/</link><description>Recent content in Risk on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Fri, 19 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/risk/index.xml" rel="self" type="application/rss+xml"/><item><title>監控資料洩漏的 Threat Model</title><link>https://tarrragon.github.io/blog/monitoring/07-security-privacy/monitoring-data-threat-model/</link><pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/monitoring/07-security-privacy/monitoring-data-threat-model/</guid><description>&lt;p>監控系統收集的資料本身就是有價值的攻擊目標。Error 訊息包含 stack trace 和系統架構資訊，event 資料包含使用者行為模式，lifecycle 資料包含部署時程和系統狀態。攻擊者取得這些資料後可以用於進一步的攻擊 — stack trace 揭露程式碼結構，部署資訊揭露更新節奏，行為資料揭露高價值使用者。&lt;/p>
&lt;h2 id="威脅場景一傳輸竊聽">威脅場景一：傳輸竊聽&lt;/h2>
&lt;h3 id="攻擊方式">攻擊方式&lt;/h3>
&lt;p>攻擊者在 SDK 和 collector 之間的網路路徑上攔截未加密的 HTTP 流量。同網段的 ARP spoofing、WiFi sniffing、或中間人（MITM）proxy。&lt;/p>
&lt;h3 id="暴露的資料">暴露的資料&lt;/h3>
&lt;p>事件的完整 JSON payload — 包括 redaction 後殘留的資訊（使用者行為、系統狀態、error message）。API key 或 basic auth credential 如果在 HTTP header 中明文傳送，也會被攔截。&lt;/p>
&lt;h3 id="防護">防護&lt;/h3>
&lt;p>使用 HTTPS 加密傳輸（&lt;a href="https://tarrragon.github.io/blog/monitoring/07-security-privacy/transport-security/" data-link-title="Transport 安全" data-link-desc="HTTPS / basic auth / 同區網也要加密的理由 — 監控資料在傳輸途中的保護機制">Transport 安全&lt;/a>）。所有 SDK 到 collector 的通訊走 TLS — 自簽憑證在自用場景足夠，公開部署用 Let&amp;rsquo;s Encrypt。&lt;/p>
&lt;h2 id="威脅場景二儲存入侵">威脅場景二：儲存入侵&lt;/h2>
&lt;h3 id="攻擊方式-1">攻擊方式&lt;/h3>
&lt;p>攻擊者取得 collector server 的存取權限（SSH 入侵、容器逃逸、雲端 IAM 權限提升），直接讀取儲存的事件檔案。&lt;/p>
&lt;h3 id="暴露的資料-1">暴露的資料&lt;/h3>
&lt;p>所有歷史事件 — 包含 redaction 處理後的事件。如果 redaction 不完整（遺漏了某些敏感欄位），歷史事件中可能包含 secret。&lt;/p>
&lt;h3 id="防護-1">防護&lt;/h3>
&lt;p>&lt;strong>最小化儲存&lt;/strong>：只保留必要期限的資料，過期自動刪除（&lt;a href="https://tarrragon.github.io/blog/monitoring/07-security-privacy/gdpr-minimization/" data-link-title="GDPR 最小化原則的工程落地" data-link-desc="資料最小化、目的限制、儲存限制 — GDPR 三個核心原則在監控系統的工程實作方式">GDPR 最小化原則&lt;/a>）。攻擊者能取得的資料量與保留期間成正比。&lt;/p>
&lt;p>&lt;strong>檔案系統加密&lt;/strong>：LUKS（Linux）或 FileVault（macOS）對整個磁碟加密。Server 關機後磁碟資料無法被讀取。&lt;/p>
&lt;p>&lt;strong>access log 監控&lt;/strong>：記錄所有對事件儲存的存取操作（&lt;a href="https://tarrragon.github.io/blog/monitoring/07-security-privacy/collector-access-control/" data-link-title="Collector Access Control 實作" data-link-desc="認證（誰在送資料）/ 授權（允許送什麼）/ access log（誰在什麼時候送了什麼）— collector 端的三層存取控制">Collector Access Control&lt;/a>）。異常存取（非工作時間、非預期的 IP）觸發告警。&lt;/p>
&lt;h2 id="威脅場景三endpoint-濫用">威脅場景三：Endpoint 濫用&lt;/h2>
&lt;h3 id="攻擊方式-2">攻擊方式&lt;/h3>
&lt;p>攻擊者取得 SDK 的 API key（從 client 端的程式碼或設定檔中提取），大量寫入垃圾事件或惡意 payload。&lt;/p>
&lt;h3 id="影響">影響&lt;/h3>
&lt;p>&lt;strong>資料汙染&lt;/strong>：合法事件和垃圾事件混在一起，分析結果不可靠。&lt;/p>
&lt;p>&lt;strong>資源耗盡&lt;/strong>：大量寫入消耗 collector 的儲存和處理能力。&lt;/p>
&lt;p>&lt;strong>注入攻擊&lt;/strong>：如果 collector 的查詢介面沒有做好輸入驗證，惡意 payload 中的特殊字元可能觸發 injection。&lt;/p>
&lt;h3 id="防護-2">防護&lt;/h3>
&lt;p>&lt;strong>Rate limit&lt;/strong>：每個 API key 的寫入速率限制。正常的 SDK 行為有可預測的寫入頻率（每分鐘 N 個事件），超出正常範圍的寫入被拒絕。&lt;/p>
&lt;p>&lt;strong>Schema validation&lt;/strong>：collector 只接受符合定義 schema 的事件。格式異常的 payload 在寫入前被丟棄。&lt;/p>
&lt;p>&lt;strong>API key 輪替&lt;/strong>：如果 API key 被洩漏，輪替 key 讓舊 key 失效。SDK 端更新新 key 後恢復正常。&lt;/p>
&lt;h2 id="威脅場景四內部越權存取">威脅場景四：內部越權存取&lt;/h2>
&lt;h3 id="攻擊方式-3">攻擊方式&lt;/h3>
&lt;p>有 collector 讀取權限的人（開發者、維運人員）存取超出自己職責範圍的事件資料。例如開發者查看行為分析資料（只應該看 debug 資料），或前端開發者查看 server-side 的 error 事件。&lt;/p>
&lt;h3 id="防護-3">防護&lt;/h3>
&lt;p>&lt;strong>角色分離&lt;/strong>：不同用途的資料用不同的存取權限（&lt;a href="https://tarrragon.github.io/blog/monitoring/07-security-privacy/collector-access-control/" data-link-title="Collector Access Control 實作" data-link-desc="認證（誰在送資料）/ 授權（允許送什麼）/ access log（誰在什麼時候送了什麼）— collector 端的三層存取控制">Collector Access Control&lt;/a>）。Debug 資料和行為分析資料分開授權。&lt;/p>
&lt;p>&lt;strong>去識別化&lt;/strong>：即使有存取權限，看到的也是去識別化後的資料（&lt;a href="https://tarrragon.github.io/blog/monitoring/07-security-privacy/anonymization-strategy/" data-link-title="去識別化策略" data-link-desc="IP 截斷 / user agent 簡化 / stack trace 路徑清理 / session UUID — 四種去識別化技術的適用場景和實作方式">去識別化策略&lt;/a>）。IP 截斷、user agent 簡化、stack trace 路徑清理 — 降低資料的個人可識別性。&lt;/p></description><content:encoded><![CDATA[<p>監控系統收集的資料本身就是有價值的攻擊目標。Error 訊息包含 stack trace 和系統架構資訊，event 資料包含使用者行為模式，lifecycle 資料包含部署時程和系統狀態。攻擊者取得這些資料後可以用於進一步的攻擊 — stack trace 揭露程式碼結構，部署資訊揭露更新節奏，行為資料揭露高價值使用者。</p>
<h2 id="威脅場景一傳輸竊聽">威脅場景一：傳輸竊聽</h2>
<h3 id="攻擊方式">攻擊方式</h3>
<p>攻擊者在 SDK 和 collector 之間的網路路徑上攔截未加密的 HTTP 流量。同網段的 ARP spoofing、WiFi sniffing、或中間人（MITM）proxy。</p>
<h3 id="暴露的資料">暴露的資料</h3>
<p>事件的完整 JSON payload — 包括 redaction 後殘留的資訊（使用者行為、系統狀態、error message）。API key 或 basic auth credential 如果在 HTTP header 中明文傳送，也會被攔截。</p>
<h3 id="防護">防護</h3>
<p>使用 HTTPS 加密傳輸（<a href="/blog/monitoring/07-security-privacy/transport-security/" data-link-title="Transport 安全" data-link-desc="HTTPS / basic auth / 同區網也要加密的理由 — 監控資料在傳輸途中的保護機制">Transport 安全</a>）。所有 SDK 到 collector 的通訊走 TLS — 自簽憑證在自用場景足夠，公開部署用 Let&rsquo;s Encrypt。</p>
<h2 id="威脅場景二儲存入侵">威脅場景二：儲存入侵</h2>
<h3 id="攻擊方式-1">攻擊方式</h3>
<p>攻擊者取得 collector server 的存取權限（SSH 入侵、容器逃逸、雲端 IAM 權限提升），直接讀取儲存的事件檔案。</p>
<h3 id="暴露的資料-1">暴露的資料</h3>
<p>所有歷史事件 — 包含 redaction 處理後的事件。如果 redaction 不完整（遺漏了某些敏感欄位），歷史事件中可能包含 secret。</p>
<h3 id="防護-1">防護</h3>
<p><strong>最小化儲存</strong>：只保留必要期限的資料，過期自動刪除（<a href="/blog/monitoring/07-security-privacy/gdpr-minimization/" data-link-title="GDPR 最小化原則的工程落地" data-link-desc="資料最小化、目的限制、儲存限制 — GDPR 三個核心原則在監控系統的工程實作方式">GDPR 最小化原則</a>）。攻擊者能取得的資料量與保留期間成正比。</p>
<p><strong>檔案系統加密</strong>：LUKS（Linux）或 FileVault（macOS）對整個磁碟加密。Server 關機後磁碟資料無法被讀取。</p>
<p><strong>access log 監控</strong>：記錄所有對事件儲存的存取操作（<a href="/blog/monitoring/07-security-privacy/collector-access-control/" data-link-title="Collector Access Control 實作" data-link-desc="認證（誰在送資料）/ 授權（允許送什麼）/ access log（誰在什麼時候送了什麼）— collector 端的三層存取控制">Collector Access Control</a>）。異常存取（非工作時間、非預期的 IP）觸發告警。</p>
<h2 id="威脅場景三endpoint-濫用">威脅場景三：Endpoint 濫用</h2>
<h3 id="攻擊方式-2">攻擊方式</h3>
<p>攻擊者取得 SDK 的 API key（從 client 端的程式碼或設定檔中提取），大量寫入垃圾事件或惡意 payload。</p>
<h3 id="影響">影響</h3>
<p><strong>資料汙染</strong>：合法事件和垃圾事件混在一起，分析結果不可靠。</p>
<p><strong>資源耗盡</strong>：大量寫入消耗 collector 的儲存和處理能力。</p>
<p><strong>注入攻擊</strong>：如果 collector 的查詢介面沒有做好輸入驗證，惡意 payload 中的特殊字元可能觸發 injection。</p>
<h3 id="防護-2">防護</h3>
<p><strong>Rate limit</strong>：每個 API key 的寫入速率限制。正常的 SDK 行為有可預測的寫入頻率（每分鐘 N 個事件），超出正常範圍的寫入被拒絕。</p>
<p><strong>Schema validation</strong>：collector 只接受符合定義 schema 的事件。格式異常的 payload 在寫入前被丟棄。</p>
<p><strong>API key 輪替</strong>：如果 API key 被洩漏，輪替 key 讓舊 key 失效。SDK 端更新新 key 後恢復正常。</p>
<h2 id="威脅場景四內部越權存取">威脅場景四：內部越權存取</h2>
<h3 id="攻擊方式-3">攻擊方式</h3>
<p>有 collector 讀取權限的人（開發者、維運人員）存取超出自己職責範圍的事件資料。例如開發者查看行為分析資料（只應該看 debug 資料），或前端開發者查看 server-side 的 error 事件。</p>
<h3 id="防護-3">防護</h3>
<p><strong>角色分離</strong>：不同用途的資料用不同的存取權限（<a href="/blog/monitoring/07-security-privacy/collector-access-control/" data-link-title="Collector Access Control 實作" data-link-desc="認證（誰在送資料）/ 授權（允許送什麼）/ access log（誰在什麼時候送了什麼）— collector 端的三層存取控制">Collector Access Control</a>）。Debug 資料和行為分析資料分開授權。</p>
<p><strong>去識別化</strong>：即使有存取權限，看到的也是去識別化後的資料（<a href="/blog/monitoring/07-security-privacy/anonymization-strategy/" data-link-title="去識別化策略" data-link-desc="IP 截斷 / user agent 簡化 / stack trace 路徑清理 / session UUID — 四種去識別化技術的適用場景和實作方式">去識別化策略</a>）。IP 截斷、user agent 簡化、stack trace 路徑清理 — 降低資料的個人可識別性。</p>
<p><strong>access log 審計</strong>：所有讀取操作記錄在 access log 中，定期 review。</p>
<h2 id="下一步路由">下一步路由</h2>
<ul>
<li>SDK 端的 redaction → <a href="/blog/monitoring/07-security-privacy/sdk-redaction-api/" data-link-title="SDK Redaction API 設計" data-link-desc="預設 redaction rule 過濾已知敏感欄位、自訂 pattern 擴展應用特有的 secret 格式 — redaction 在 SDK 端執行，敏感資料不離開 client">SDK Redaction API 設計</a></li>
<li>Transport 層保護 → <a href="/blog/monitoring/07-security-privacy/transport-security/" data-link-title="Transport 安全" data-link-desc="HTTPS / basic auth / 同區網也要加密的理由 — 監控資料在傳輸途中的保護機制">Transport 安全</a></li>
<li>Collector 端保護 → <a href="/blog/monitoring/07-security-privacy/collector-access-control/" data-link-title="Collector Access Control 實作" data-link-desc="認證（誰在送資料）/ 授權（允許送什麼）/ access log（誰在什麼時候送了什麼）— collector 端的三層存取控制">Collector Access Control 實作</a></li>
<li>去識別化技術 → <a href="/blog/monitoring/07-security-privacy/anonymization-strategy/" data-link-title="去識別化策略" data-link-desc="IP 截斷 / user agent 簡化 / stack trace 路徑清理 / session UUID — 四種去識別化技術的適用場景和實作方式">去識別化策略</a></li>
<li>Client-side SDK 認證的多層緩解策略 → <a href="/blog/monitoring/07-security-privacy/client-sdk-authentication/" data-link-title="Client-side SDK 認證的根本限制" data-link-desc="嵌在 client 端的 credential 必然可被提取 — 認清 architecture 天花板後的多層緩解策略，從 origin 驗證到 device attestation">Client-side SDK 認證</a></li>
</ul>
]]></content:encoded></item></channel></rss>