<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fh="http://purl.org/syndication/history/1.0"><channel><title>ExpTech | Blog</title><description>ExpTech Studio 探索科技</description><link>https://exptech.dev/</link><language>en</language><fh:complete/><atom:link rel="self" href="https://exptech.dev/en/blog/rss.xml"/><item><title>09/18 事件之後的資安強化</title><link>https://exptech.dev/en/blog/sharing-2026-11-15/</link><guid isPermaLink="true">https://exptech.dev/en/blog/sharing-2026-11-15/</guid><description>09/18 的入侵事件之後，我們花了兩個月重新盤點四台路由器的對外入口、收緊來源限制與防火牆、讓路由器自動更新，也做了一套自動判讀主機日誌的資安報告。這篇用實測數字說明做了什麼、成果如何。</description><pubDate>Sun, 15 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;2026/09/18，我們發現承載 DPIP 服務的四台路由器遭到入侵。事件經過、影響與處置寫在&lt;a href=&quot;https://exptech.dev/blog/rca-2026-09-18_1/&quot;&gt;事件完整說明&lt;/a&gt;，當天的服務公告在&lt;a href=&quot;https://exptech.dev/announcement/?id=50&quot;&gt;這裡&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;那篇講的是「發生了什麼」。這篇接著講之後兩個月（09/18 到 11/15）我們在防護上做了哪些事，以及實測的結果。到 11/15 為止的複查都沒有再入侵的跡象，見事件說明的&lt;a href=&quot;https://exptech.dev/blog/rca-2026-09-18_1/#%E5%BE%8C%E7%BA%8C%E8%BF%BD%E8%B9%A4&quot;&gt;後續追蹤&lt;/a&gt;。&lt;/p&gt;

&lt;aside aria-label=&quot;這篇不寫的東西&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;這篇不寫的東西&lt;/p&gt;&lt;div&gt;&lt;p&gt;這是公開文章。數字只寫四台合計的總量；IP 位址、具體埠號、白名單的內容、更新與偵測的排程和門檻，以及還在處理中的項目都不寫。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h2 id=&quot;先講結果&quot;&gt;先講結果&lt;/h2&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;09/18&lt;/th&gt;
&lt;th&gt;之後&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;路由器 SSH 的外部登入失敗（四台合計）&lt;/td&gt;
&lt;td&gt;2,118 次&lt;/td&gt;
&lt;td&gt;09/19 降到 170 次，&lt;strong&gt;09/20 起 0 次&lt;/strong&gt;（至 11/15）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;白名單外連得上的對外入口（四台合計）&lt;/td&gt;
&lt;td&gt;26 個&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;11 個&lt;/strong&gt;，包含網站、VPN 這類本來就要公開的服務&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;需要限制來源的入口中，已限制的比例&lt;/td&gt;
&lt;td&gt;約 47%（22／47）&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;約 88%&lt;/strong&gt;（44／50）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SSH 管理入口有來源白名單的數量&lt;/td&gt;
&lt;td&gt;1／13&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;15／15&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;路由器自動更新&lt;/td&gt;
&lt;td&gt;沒有&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;12 次&lt;/strong&gt;（3 個版本 × 4 台），沒有一次同時中斷&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;前兩項是實測，比例是依盤點表逐項推算，自動更新是設備上的安裝紀錄。下面依序說明。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;一盤點每一個對外入口&quot;&gt;一、盤點每一個對外入口&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;這次被入侵，問題不在於沒有防火牆，而在於&lt;strong&gt;有些被放行的入口沒有限制來源&lt;/strong&gt;。所以第一件事，是把每一個對外入口逐一列出來，問同一個問題：這個入口，有沒有必要讓全世界都連得到？&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;盤了三次加一次複查&quot;&gt;盤了三次，加一次複查&lt;/h3&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;日期&lt;/th&gt;
&lt;th&gt;範圍&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;09/19&lt;/td&gt;
&lt;td&gt;四台路由器所有可能的攻擊路徑，加上雲端主機之間的服務互連，共列出 19 項&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10/18&lt;/td&gt;
&lt;td&gt;白名單複查（唯讀）：四台所有「允許來源」的設定與轉發規則&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10/29&lt;/td&gt;
&lt;td&gt;四台路由器的對外入口，加上經兩台雲端主機轉進來的路徑。這次最完整，有從外部實測，下面的數字都來自這次&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11/05&lt;/td&gt;
&lt;td&gt;IPv6：四台路由器、底下的區網與兩台雲端主機。路由器底下的設備沒有 IPv6 對外路徑，白名單不會被 IPv6 繞過&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;h3 id=&quot;1029-怎麼盤&quot;&gt;10/29 怎麼盤&lt;/h3&gt;&lt;/div&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;唯讀查詢四台的設定&lt;/strong&gt;：防火牆、目的地轉址、路由器本身開著的服務、IPv6、UPnP。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;從白名單外實際連連看&lt;/strong&gt;：從一台不在白名單內的主機，連四台的對外位址。TCP 測約 75 個常見埠，加上設定裡出現過的埠；UDP 與 ICMP 另外測。結果分三種：連得上、逾時（封包被丟掉）、被拒絕（路徑是通的，但後面沒有服務）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;追經雲端主機轉進來的路徑&lt;/strong&gt;：唯讀查詢兩台雲端主機的轉址與隧道設定。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;動手前先看誰在用&lt;/strong&gt;：要收窄其中一條轉發之前，先抓了 12 秒的封包標頭（只看來源，不看內容），發現有 7 個外部客戶端正在使用 DPIP 的一個資料埠，所以這個埠保留。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;我們刻意&lt;strong&gt;不做全埠掃描&lt;/strong&gt;：後端是正式服務，掃得太兇可能觸發自動封鎖，連帶影響使用者。所以實測範圍是約 75 個常見埠，加上設定中出現過的埠。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;結果&quot;&gt;結果&lt;/h3&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;白名單外連得上的入口，四台合計從 &lt;strong&gt;26 個降到 11 個&lt;/strong&gt;。少掉的 15 個沒有刪除任何轉發規則，而是加上來源白名單，或把轉發範圍縮小；從白名單內照常可以使用。&lt;/li&gt;
&lt;li&gt;經兩台雲端主機轉進來的路徑，原本是&lt;strong&gt;所有埠、所有協定&lt;/strong&gt;都轉進內網，改成只放網站與 DPIP 資料需要的幾個 TCP 埠。改完從外部實測，其他埠都連不到，DPIP 既有的長連線也沒有中斷。&lt;/li&gt;
&lt;li&gt;路由器上停用了 &lt;strong&gt;6 個服務&lt;/strong&gt;：這次攻擊用到的頻寬測試服務（4 台）、攻擊者自己開啟的 SOCKS 代理（2 台，連同攻擊者建立的代理帳號）。另外停用一組設備已離線的校時轉送規則。&lt;/li&gt;
&lt;li&gt;Winbox、API、Telnet、FTP 這類管理服務&lt;strong&gt;在事件前就已停用&lt;/strong&gt;，不是這次才關的。事件當時真正對全世界開放的管理入口是 SSH，09/19 起只接受白名單來源。&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;二來源白名單&quot;&gt;二、來源白名單&lt;/h2&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;日期&lt;/th&gt;
&lt;th&gt;加上來源限制的入口&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;09/19&lt;/td&gt;
&lt;td&gt;四台路由器的 SSH 管理介面&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10/29&lt;/td&gt;
&lt;td&gt;12 條轉發規則：轉到內網主機的 SSH 10 條、內部服務 2 條&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10/29&lt;/td&gt;
&lt;td&gt;經雲端主機的 2 條全埠轉發，改成只放需要的埠&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10/30&lt;/td&gt;
&lt;td&gt;3 條原本對全網開放的監控指標轉發，限制為單一監控主機；另新增 2 條同樣限制&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;白名單的範圍刻意保持最小：不同用途的入口用不同的清單，例如監控用的清單只有實際抓指標的那一台主機，不沿用管理用的清單。&lt;/p&gt;
&lt;p&gt;套用時，我們也切掉了白名單外的既有連線，四台合計 &lt;strong&gt;112 條&lt;/strong&gt;。這些連線的來源都是雲端主機與海外的網路業者，判斷是暴力破解。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;效果&quot;&gt;效果&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;路由器 SSH 的外部登入失敗，09/18 四台合計 &lt;strong&gt;2,118 次&lt;/strong&gt;，09/19 降到 &lt;strong&gt;170 次&lt;/strong&gt;，09/20 起是 &lt;strong&gt;0&lt;/strong&gt;，到 11/15 都沒有再出現。這段期間所有的登入失敗都來自我們自己的站台。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;覆蓋率怎麼算&quot;&gt;覆蓋率怎麼算&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;約 47% → 約 88% 是我們依盤點表逐項算出來的，不是工具量出來的：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每個埠／協定算 1 個入口，經雲端主機的每條轉發路徑也算 1 個，停用的規則不算。&lt;/li&gt;
&lt;li&gt;分母只算&lt;strong&gt;需要限制來源的入口&lt;/strong&gt;，不算網站、VPN 這類本來就要公開的入口，也不算後面沒有服務在聽的規則。&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;09/18&lt;/th&gt;
&lt;th&gt;10/30 之後&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;需要限制來源的入口&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;已限制（來源白名單＋只放需要的埠）&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;44&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;比例&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;約 47%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;約 88%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;09/18 那一欄是從現況倒推的，當時沒有做同樣的外部實測。其餘是評估後保留的入口。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;三收緊防火牆&quot;&gt;三、收緊防火牆&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;路由器「沒有明確放行就拒絕」的基本架構，事件前就有，事後沒有重寫。這次補的是&lt;strong&gt;放行規則本身&lt;/strong&gt;：替原本不限來源的規則加上來源與範圍的限制。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;四台合計&lt;/th&gt;
&lt;th&gt;09/18&lt;/th&gt;
&lt;th&gt;11/15&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;過濾規則（filter）&lt;/td&gt;
&lt;td&gt;104&lt;/td&gt;
&lt;td&gt;107&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;轉址規則（NAT）&lt;/td&gt;
&lt;td&gt;59&lt;/td&gt;
&lt;td&gt;73&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;規則數量變化不大。轉址規則多出的 14 條，主要是 VPN 使用者的 DNS 強制導向（10/11，每台 2 條）、隧道的截止規則與監控轉發。真正的變化是 &lt;strong&gt;17 條轉址規則加上了來源或埠的限制&lt;/strong&gt;（12＋2＋3），以及四台 SSH 管理介面的來源限制。&lt;/p&gt;
&lt;p&gt;改規則的原則：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;變更前後都匯出完整設定逐行比對，確認除了要改的地方之外沒有其他差異。&lt;/li&gt;
&lt;li&gt;每次變更前先準備好回復的方式。&lt;/li&gt;
&lt;li&gt;先看連線與封包，確認誰在使用，再決定怎麼收窄。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;另外，四台的管理密碼、VPN 使用者密碼、SSH 主機金鑰與 VPN 憑證機構都各自獨立。單一台被攻破，不會連帶拿到其他三台的憑證。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;四自動更新&quot;&gt;四、自動更新&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;這次被利用的漏洞，原廠的修補比攻擊者植入惡意程式早了 &lt;strong&gt;12 天&lt;/strong&gt;釋出。只要有任何形式的自動更新，就能擋下這次攻擊。&lt;/p&gt;
&lt;p&gt;所以 09/19 起，四台路由器改成定期自動檢查並安裝原廠 stable 通道的更新：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;不限制只裝同一系列的小版本&lt;/strong&gt;：入侵時有一台還在 7.22.1，而修補不在 7.22 系列裡；如果只裝 7.22.x，根本拿不到修補。&lt;/li&gt;
&lt;li&gt;四台&lt;strong&gt;錯開&lt;/strong&gt;進行，不會同時中斷。&lt;/li&gt;
&lt;li&gt;安裝前自動備份，有問題可以回復；取不到版本資訊就跳過，不會誤裝。&lt;/li&gt;
&lt;li&gt;排程的名稱與註解寫明是事件應變部署。這次的攻擊者就是用排程做持久化，避免日後稽核時被誤認成攻擊者留下的。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;實際的結果：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;版本&lt;/th&gt;
&lt;th&gt;四台完成&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;7.24.5&lt;/td&gt;
&lt;td&gt;10 月上旬&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7.25&lt;/td&gt;
&lt;td&gt;10 月下旬&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7.25.1&lt;/td&gt;
&lt;td&gt;11 月上旬&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;三個版本 × 四台，共 &lt;strong&gt;12 次&lt;/strong&gt;自動升級，每次都有安裝紀錄，沒有一次造成四台同時中斷。11/15 時四台都是最新的 stable 版本。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;五資安速報資安詳細資安日報&quot;&gt;五、資安速報、資安詳細、資安日報&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;這段期間，我們也做了一套自動判讀主機日誌的工具，在 &lt;strong&gt;10/29&lt;/strong&gt; 上線，涵蓋 &lt;strong&gt;7 台&lt;/strong&gt; Linux 主機，分成三種報告：&lt;/p&gt;
&lt;div data-astro-cid-7qmvx3iy=&quot;&quot;&gt;&lt;article data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;p data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;svg data-astro-cid-oag6qnet=&quot;true&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M12 11a1 1 0 0 0-1 1v4a1 1 0 0 0 2 0v-4a1 1 0 0 0-1-1Zm.38-3.92a1 1 0 0 0-.76 0 1 1 0 0 0-.33.21 1.15 1.15 0 0 0-.21.33 1 1 0 0 0 .21 1.09c.097.088.209.16.33.21A1 1 0 0 0 13 8a1.05 1.05 0 0 0-.29-.71 1 1 0 0 0-.33-.21ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span data-astro-cid-oag6qnet=&quot;&quot;&gt;資安速報&lt;/span&gt;&lt;/p&gt;&lt;div data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;p&gt;定時執行。程式規則加上 AI 先做初步判讀，正常時只發一行「一切正常」，有問題才通知。&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;article data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;p data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;svg data-astro-cid-oag6qnet=&quot;true&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M21.71 20.29 18 16.61A9 9 0 1 0 16.61 18l3.68 3.68a.999.999 0 0 0 1.42 0 1 1 0 0 0 0-1.39ZM11 18a7 7 0 1 1 0-14 7 7 0 0 1 0 14Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span data-astro-cid-oag6qnet=&quot;&quot;&gt;資安詳細&lt;/span&gt;&lt;/p&gt;&lt;div data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;p&gt;遇到新的危險項目，或負責人要求細查時，再做深入分析，產出一份報告。&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;article data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;p data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;svg data-astro-cid-oag6qnet=&quot;true&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M9 10h1a1 1 0 1 0 0-2H9a1 1 0 0 0 0 2Zm0 2a1 1 0 0 0 0 2h6a1 1 0 0 0 0-2H9Zm11-3.06a1.3 1.3 0 0 0-.06-.27v-.09c-.05-.1-.11-.2-.19-.28l-6-6a1.07 1.07 0 0 0-.28-.19h-.09a.88.88 0 0 0-.33-.11H7a3 3 0 0 0-3 3v14a3 3 0 0 0 3 3h10a3 3 0 0 0 3-3V8.94Zm-6-3.53L16.59 8H15a1 1 0 0 1-1-1V5.41ZM18 19a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h5v3a3 3 0 0 0 3 3h3v9Zm-3-3H9a1 1 0 0 0 0 2h6a1 1 0 0 0 0-2Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span data-astro-cid-oag6qnet=&quot;&quot;&gt;資安日報&lt;/span&gt;&lt;/p&gt;&lt;div data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;p&gt;每天一份，整理前一天的狀況，加上相依套件的弱點、容器映像的掃描結果，以及新列入 CISA KEV（已知遭利用的弱點清單）的 CVE。&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;這套工具本身不能變成新的弱點&quot;&gt;這套工具本身不能變成新的弱點&lt;/h3&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;資料只能單向送出。&lt;/strong&gt; 各主機用各自專屬的金鑰，把摘要送到收件端。每把金鑰都綁死一個指令，只能上傳這一台自己的資料，開不了 shell，也冒充不了其他主機。收件端會檢查格式、大小與檔名，每台每天也有總量上限。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;送出前先遮掉機密。&lt;/strong&gt; 網址裡看起來像憑證的參數一律換成遮罩。完整的原始日誌留在各主機上，送出去的只有統計與挑過的片段。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI 只能唯讀。&lt;/strong&gt; 日誌是外面的人寫的，網址、標頭裡都可能是攻擊者刻意埋進去的文字。所以讀日誌的 AI 只能讀監控資料，沒有 shell，也讀不到任何機密。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;程式規則優先。&lt;/strong&gt; 程式規則判定有問題的，就算 AI 判讀失敗也照樣通知。AI 不能直接修改判斷規則，只能提議，由程式驗證後才生效；所有排除最長 &lt;strong&gt;24 小時&lt;/strong&gt;，入侵類的警示永遠不能排除，被負責人撤銷的規則 &lt;strong&gt;30 天&lt;/strong&gt;內不會再學回來。&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;保存&quot;&gt;保存&lt;/h3&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;資料&lt;/th&gt;
&lt;th&gt;保存&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;各主機送出的分類資料&lt;/td&gt;
&lt;td&gt;30 天，總量上限 1 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;原始的上傳檔&lt;/td&gt;
&lt;td&gt;3 天&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;主機的數字指標（CPU、網路流量等）&lt;/td&gt;
&lt;td&gt;由另一套指標系統保存 365 天&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;資料壓縮後只剩原本的約 &lt;strong&gt;1/37&lt;/strong&gt;，所以 30 天的資料也用不到 1 GB。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;實際抓到的&quot;&gt;實際抓到的&lt;/h3&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;機密檔掃描&lt;/strong&gt;：有人掃 &lt;code dir=&quot;auto&quot;&gt;.env&lt;/code&gt; 這類設定檔，全部回 404，沒有打進去。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;資料庫叢集自動主從切換（11/12）&lt;/strong&gt;：協調服務之間連線逾時，主節點自動切換，10 分鐘後原本的主節點接回成備援。新規則上線當天就抓到。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;不熟悉來源的登入（11/11）&lt;/strong&gt;：日報標出一筆從不熟悉來源的金鑰登入，請負責人確認，結果是本人，之後加進已知來源。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上線初期誤報偏多：11/12 回頭看 36 小時，約發了 110 則通知，大部分是誤報或重複。當天修掉 5 類誤報之後，同樣的時間估計會降到二十幾則。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;結語&quot;&gt;結語&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;這兩個月做的事，大部分不是新技術。來源限制的機制原本就在設備上，只是沒有用在該用的地方；自動更新是事件說明裡提到的「最便宜的防線」。&lt;/p&gt;
&lt;p&gt;這些工作還在持續進行，我們會繼續檢查與調整。&lt;/p&gt;</content:encoded><category>Sharing</category><category>Security</category></item><item><title>09/18 基礎設施遭入侵事件完整說明</title><link>https://exptech.dev/en/blog/rca-2026-09-18_1/</link><guid isPermaLink="true">https://exptech.dev/en/blog/rca-2026-09-18_1/</guid><description>2026/09/18，我們發現承載 DPIP 服務的四台網路設備遭到入侵，最早的入侵痕跡可回溯至 09/02。這篇說明發生了什麼、對你有什麼影響、我們哪裡做錯了，以及我們改了什麼。本文含完整取證證據、兩次被修補擋下的再入侵嘗試，以及到 11/15 為止的後續追蹤。</description><pubDate>Fri, 18 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;section data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;span data-severity=&quot;critical&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect data-on=&quot;&quot; x=&quot;1.5&quot; y=&quot;9.5&quot; width=&quot;2.25&quot; height=&quot;4.5&quot; rx=&quot;0.75&quot;&gt;&lt;/rect&gt;&lt;rect data-on=&quot;&quot; x=&quot;5.25&quot; y=&quot;7&quot; width=&quot;2.25&quot; height=&quot;7&quot; rx=&quot;0.75&quot;&gt;&lt;/rect&gt;&lt;rect data-on=&quot;&quot; x=&quot;9&quot; y=&quot;4.5&quot; width=&quot;2.25&quot; height=&quot;9.5&quot; rx=&quot;0.75&quot;&gt;&lt;/rect&gt;&lt;rect data-on=&quot;&quot; x=&quot;12.75&quot; y=&quot;2&quot; width=&quot;2.25&quot; height=&quot;12&quot; rx=&quot;0.75&quot;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;span&gt;嚴重程度&lt;/span&gt;&lt;span&gt;：&lt;/span&gt;&lt;span&gt;嚴重&lt;/span&gt;&lt;/span&gt;&lt;span data-status=&quot;investigating&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 16 16&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.6&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;circle cx=&quot;7&quot; cy=&quot;7&quot; r=&quot;4.5&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;m10.4 10.4 3.6 3.6&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span&gt;狀態&lt;/span&gt;&lt;span&gt;：&lt;/span&gt;&lt;span&gt;修補完成，11/15 複查無再入侵&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;dl data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;dt data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;13&quot; height=&quot;13&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;path d=&quot;M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 2v5a1 1 0 0 0 1 1h5&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M10 9H8&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M16 13H8&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M16 17H8&quot;&gt;&lt;/path&gt;&lt;/svg&gt;問題描述&lt;/dt&gt;&lt;dd data-astro-cid-g5zafgs6=&quot;&quot;&gt;承載服務的四台網路設備遭到入侵，攻擊者取得了完整管理權限&lt;/dd&gt;&lt;/div&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;dt data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;13&quot; height=&quot;13&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;path d=&quot;m21 21-4.34-4.34&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;11&quot; cy=&quot;11&quot; r=&quot;8&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;根本原因&lt;/dt&gt;&lt;dd data-astro-cid-g5zafgs6=&quot;&quot;&gt;設備的系統版本落後於已公開的安全性修補，而且管理介面直接暴露在網際網路上。&lt;/dd&gt;&lt;/div&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;dt data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;13&quot; height=&quot;13&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;path d=&quot;M4 16v-2.38C4 11.5 2.97 10.5 3 8c.03-2.72 1.49-6 4.5-6C9.37 2 10 3.8 10 5.5c0 3.11-2 5.66-2 8.68V16a2 2 0 1 1-4 0Z&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M20 20v-2.38c0-2.12 1.03-3.12 1-5.62-.03-2.72-1.49-6-4.5-6C14.63 6 14 7.8 14 9.5c0 3.11 2 5.66 2 8.68V20a2 2 0 1 0 4 0Z&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M16 17h4&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M4 13h4&quot;&gt;&lt;/path&gt;&lt;/svg&gt;最早入侵痕跡&lt;/dt&gt;&lt;dd data-astro-cid-g5zafgs6=&quot;&quot;&gt;2026/09/02&lt;/dd&gt;&lt;/div&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;dt data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;13&quot; height=&quot;13&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;path d=&quot;M8 2v4&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M16 2v4&quot;&gt;&lt;/path&gt;&lt;rect width=&quot;18&quot; height=&quot;18&quot; x=&quot;3&quot; y=&quot;4&quot; rx=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M3 10h18&quot;&gt;&lt;/path&gt;&lt;/svg&gt;發現日&lt;/dt&gt;&lt;dd data-astro-cid-g5zafgs6=&quot;&quot;&gt;2026/09/18&lt;/dd&gt;&lt;/div&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;dt data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;13&quot; height=&quot;13&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;rect width=&quot;20&quot; height=&quot;8&quot; x=&quot;2&quot; y=&quot;2&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;rect width=&quot;20&quot; height=&quot;8&quot; x=&quot;2&quot; y=&quot;14&quot; rx=&quot;2&quot; ry=&quot;2&quot;&gt;&lt;/rect&gt;&lt;line x1=&quot;6&quot; x2=&quot;6.01&quot; y1=&quot;6&quot; y2=&quot;6&quot;&gt;&lt;/line&gt;&lt;line x1=&quot;6&quot; x2=&quot;6.01&quot; y1=&quot;18&quot; y2=&quot;18&quot;&gt;&lt;/line&gt;&lt;/svg&gt;影響範圍&lt;/dt&gt;&lt;dd data-astro-cid-g5zafgs6=&quot;&quot;&gt;承載 DPIP 服務的四台網路設備&lt;/dd&gt;&lt;/div&gt;&lt;/dl&gt;&lt;/section&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;先講結論&quot;&gt;先講結論&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;2026/09/18 上午，DPIP 服務出現異常。排查後我們發現，&lt;strong&gt;承載服務的四台網路設備遭到入侵，攻擊者取得了完整管理權限&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;進一步取證後確認，最早的入侵痕跡可以回溯到 &lt;strong&gt;2026/09/02&lt;/strong&gt; —— 也就是說，&lt;strong&gt;攻擊者在我們的設備上待了約 16 天，我們才發現&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;這是我們的疏失。設備的系統版本落後於已公開的安全性修補，而且管理介面直接暴露在網際網路上。這兩件事都是我們自己該做而沒做好的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;截至 2026/09/20，四台設備的修補與清除已全部完成並經實測驗證。&lt;/strong&gt; 期間我們還捕捉到&lt;strong&gt;兩次攻擊者嘗試重新利用同一漏洞、被新版本擋下的紀錄&lt;/strong&gt; —— 這是修補確實有效的直接證據。&lt;/p&gt;
&lt;p&gt;之後到 2026/11/15 為止的複查都沒有再入侵跡象，見&lt;a href=&quot;#%E5%BE%8C%E7%BA%8C%E8%BF%BD%E8%B9%A4&quot;&gt;後續追蹤&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;這篇文章把我們查到的東西完整寫出來，包含&lt;strong&gt;每一項結論是怎麼驗證的&lt;/strong&gt;，以及還沒查完的部分。&lt;/p&gt;

&lt;aside aria-label=&quot;本文的資訊層級&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;本文的資訊層級&lt;/p&gt;&lt;div&gt;&lt;p&gt;這是一份&lt;strong&gt;完整技術版&lt;/strong&gt;事故報告。我們刻意寫得很長，因為我們認為出事之後把話講清楚，比講得漂亮重要。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;只想知道「對我有什麼影響」→ 讀&lt;a href=&quot;#%E5%B0%8D%E4%BD%A0%E7%9A%84%E5%BD%B1%E9%9F%BF&quot;&gt;對你的影響&lt;/a&gt;一節即可&lt;/li&gt;
&lt;li&gt;想知道攻擊怎麼發生的 → &lt;a href=&quot;#%E7%82%BA%E4%BB%80%E9%BA%BC%E6%9C%83%E8%A2%AB%E6%89%93%E9%80%B2%E4%BE%86&quot;&gt;為什麼會被打進來&lt;/a&gt;、&lt;a href=&quot;#%E6%8A%80%E8%A1%93%E7%B4%B0%E7%AF%80%E6%94%BB%E6%93%8A%E8%80%85%E5%81%9A%E4%BA%86%E4%BB%80%E9%BA%BC&quot;&gt;攻擊者做了什麼&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;想知道我們怎麼查、怎麼確認結論 → &lt;a href=&quot;#%E6%88%91%E5%80%91%E6%80%8E%E9%BA%BC%E9%A9%97%E8%AD%89%E9%80%99%E4%BA%9B%E7%B5%90%E8%AB%96&quot;&gt;我們怎麼驗證這些結論&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;同業／其他 MikroTik 使用者 → &lt;a href=&quot;#%E7%B5%A6%E5%85%B6%E4%BB%96%E7%B6%AD%E9%81%8B%E8%80%85%E7%9A%84-10-%E6%A2%9D%E5%85%B7%E9%AB%94%E5%BB%BA%E8%AD%B0&quot;&gt;給其他維運者的 10 條具體建議&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;對你的影響&quot;&gt;對你的影響&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;這是你最需要知道的部分，所以放在最前面。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;你的資料&quot;&gt;你的資料&lt;/h3&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;狀態&lt;/th&gt;
&lt;th&gt;依據&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DPIP 蒐集的使用者相關資料&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt; &lt;strong&gt;本即為去識別化資料，經確認未受影響&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;——&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;經過這些設備的網路流量&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt; &lt;strong&gt;被側錄的可能性已基本排除&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;見下方「關於流量是否被側錄」&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;設備上的憑證、VPN 金鑰、私鑰&lt;/td&gt;
&lt;td&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M12 7a1 1 0 0 0-1 1v4a1 1 0 0 0 2 0V8a1 1 0 0 0-1-1Zm0 8a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm9.71-7.44-5.27-5.27a1.05 1.05 0 0 0-.71-.29H8.27a1.05 1.05 0 0 0-.71.29L2.29 7.56a1.05 1.05 0 0 0-.29.71v7.46c.004.265.107.518.29.71l5.27 5.27c.192.183.445.286.71.29h7.46a1.05 1.05 0 0 0 .71-.29l5.27-5.27a1.05 1.05 0 0 0 .29-.71V8.27a1.05 1.05 0 0 0-.29-.71ZM20 15.31 15.31 20H8.69L4 15.31V8.69L8.69 4h6.62L20 8.69v6.62Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt; &lt;strong&gt;一律視為已洩漏 → 已全部輪換完成&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;9 把 WireGuard 私鑰、4 組 CA、5 個 &lt;code dir=&quot;auto&quot;&gt;.ovpn&lt;/code&gt;、4 把 SSH host key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;內網服務的認證資訊&lt;/td&gt;
&lt;td&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M12 16a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm10.67 1.47-8.05-14a3 3 0 0 0-5.24 0l-8 14A3 3 0 0 0 3.94 22h16.12a3 3 0 0 0 2.61-4.53Zm-1.73 2a1 1 0 0 1-.88.51H3.94a1 1 0 0 1-.88-.51 1 1 0 0 1 0-1l8-14a1 1 0 0 1 1.78 0l8.05 14a1 1 0 0 1 .05 1.02v-.02ZM12 8a1 1 0 0 0-1 1v4a1 1 0 0 0 2 0V9a1 1 0 0 0-1-1Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt; &lt;strong&gt;無法排除曾被讀取 → 已輪換或加上認證&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;見&lt;a href=&quot;#%E9%82%84%E6%B2%92%E6%9F%A5%E5%AE%8C%E7%9A%84%E9%83%A8%E5%88%86&quot;&gt;還沒查完的部分&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;被入侵的四台是&lt;strong&gt;網路層設備&lt;/strong&gt;（路由器 / 負載平衡），它們負責把封包送到正確的地方，&lt;strong&gt;本身不存放應用程式資料&lt;/strong&gt;。攻擊者拿到的是「網路設備的管理權」，不是「使用者資料庫」。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;關於流量是否被側錄&quot;&gt;關於流量是否被側錄&lt;/h3&gt;&lt;/div&gt;
&lt;aside aria-label=&quot;我們怎麼確認的&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;我們怎麼確認的&lt;/p&gt;&lt;div&gt;&lt;p&gt;攻擊者處在流量的路徑上，所以我們沒有直接假設「沒事」，而是逐項查證：列出 RouterOS 上所有能側錄流量的手法，檢查每一種在取證當下的實際狀態；再確認「修改設定一定會留下紀錄」，而且這些紀錄沒有被新資料擠掉。&lt;/p&gt;&lt;p&gt;結論是&lt;strong&gt;被側錄的可能性已基本排除&lt;/strong&gt;。我們把驗證過程完整列在下面，讓你自己判斷這個結論可不可信。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;攻擊者確實具備側錄能力（植入的排程帶有 &lt;code dir=&quot;auto&quot;&gt;sniff&lt;/code&gt; 權限，且他們處在所有流量的路徑上）。但 &lt;strong&gt;RouterOS 上所有「實際有效」的側錄手法都必須修改設定&lt;/strong&gt;，而設定變更會留下紀錄。&lt;/p&gt;
&lt;p&gt;我們逐一檢查了全部 9 種手法在取證當下的實際狀態：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;側錄手法&lt;/th&gt;
&lt;th&gt;需改設定&lt;/th&gt;
&lt;th&gt;取證時的實際狀態&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;/tool sniffer&lt;/code&gt; 設過濾器後啟動&lt;/td&gt;
&lt;td&gt;需要&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;22 個過濾欄位全部為空&lt;/strong&gt;（出廠預設）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;/tool sniffer&lt;/code&gt; 串流外送至遠端&lt;/td&gt;
&lt;td&gt;需要&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;streaming-enabled=no&lt;/code&gt;、目標為預設值&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;/tool sniffer&lt;/code&gt; 存檔&lt;/td&gt;
&lt;td&gt;需要&lt;/td&gt;
&lt;td&gt;檔名欄位&lt;strong&gt;空白&lt;/strong&gt;；設備上&lt;strong&gt;無任何 &lt;code dir=&quot;auto&quot;&gt;.pcap&lt;/code&gt; / &lt;code dir=&quot;auto&quot;&gt;.cap&lt;/code&gt; 檔&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;/tool sniffer&lt;/code&gt; 放大緩衝區&lt;/td&gt;
&lt;td&gt;需要&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;100KiB&lt;/code&gt;（出廠預設，未動）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;防火牆 &lt;code dir=&quot;auto&quot;&gt;action=sniff-tzsp&lt;/code&gt; 鏡像至遠端收集器&lt;/td&gt;
&lt;td&gt;需要&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0 條規則&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;交換晶片埠鏡像&lt;/td&gt;
&lt;td&gt;需要&lt;/td&gt;
&lt;td&gt;來源 / 目標皆為 &lt;code dir=&quot;auto&quot;&gt;none&lt;/code&gt;（預設）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NetFlow 外送&lt;/td&gt;
&lt;td&gt;需要&lt;/td&gt;
&lt;td&gt;四台皆 &lt;code dir=&quot;auto&quot;&gt;enabled=no&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;容器內跑 tcpdump&lt;/td&gt;
&lt;td&gt;需要&lt;/td&gt;
&lt;td&gt;container 套件&lt;strong&gt;四台皆未安裝&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;/tool sniffer quick&lt;/code&gt;（純執行期）&lt;/td&gt;
&lt;td&gt;不需要&lt;/td&gt;
&lt;td&gt;無法從設定排除 —— 見下方&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;決定性的一點是：我們能證明「修改設定一定會留紀錄」。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;攻擊者自己留下了 &lt;strong&gt;32 筆 &lt;code dir=&quot;auto&quot;&gt;log action changed&lt;/code&gt;&lt;/strong&gt; 紀錄 —— 那正是他們破壞日誌所用的 &lt;code dir=&quot;auto&quot;&gt;/system logging action set&lt;/code&gt; 操作。這證明了 &lt;code dir=&quot;auto&quot;&gt;/system X set&lt;/code&gt; 這類操作&lt;strong&gt;確實會被記錄&lt;/strong&gt;。既然如此，&lt;code dir=&quot;auto&quot;&gt;/tool sniffer set …&lt;/code&gt; 也會被記錄。&lt;/p&gt;
&lt;p&gt;而入侵期間（09/15 起）四台合計 &lt;strong&gt;47 筆&lt;/strong&gt;此類操作紀錄，分類如下：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;操作&lt;/th&gt;
&lt;th&gt;筆數&lt;/th&gt;
&lt;th&gt;性質&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;修改日誌輸出設定&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;反取證&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;修改日誌規則&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;反取證&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;新增使用者&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;建立後門帳號&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;從排程移除腳本&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;惡意程式的重複投放設計&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;與側錄相關&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;——&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;紀錄緩衝區的覆蓋範圍也經過確認&lt;/strong&gt;（最舊紀錄早於入侵日，因此沒有被捲掉）：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;節點&lt;/th&gt;
&lt;th&gt;紀錄筆數&lt;/th&gt;
&lt;th&gt;最舊紀錄日期&lt;/th&gt;
&lt;th&gt;早於入侵日 09/15？&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;core-tnn1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;td&gt;2026-06-30&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;node-tnn1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td&gt;2026-07-02&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;node-tnn2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;2026-09-03&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;lb-khh1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;2026-09-02&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;唯一無法從設定排除的是 &lt;code dir=&quot;auto&quot;&gt;/tool sniffer quick&lt;/code&gt;（純執行期操作，不留設定紀錄）。但在未經修改的預設設定下，它的緩衝上限是 &lt;code dir=&quot;auto&quot;&gt;100KiB&lt;/code&gt;、單封包上限 2048 bytes，&lt;strong&gt;大約只能保存 50 到 100 個封包&lt;/strong&gt;，而且沒有過濾器 —— 抓到的是隨機流量，不是針對特定服務的憑證。要有效擷取憑證就必須設過濾器或放大緩衝，那就回到「必須改設定」，而那些紀錄是 0 筆。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;結論：流量側錄基本排除。&lt;/strong&gt; 這不是「我們覺得應該沒事」，是逐項查證後的結果。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;我們仍然無法排除的部分&quot;&gt;我們仍然無法排除的部分&lt;/h3&gt;&lt;/div&gt;
&lt;aside aria-label=&quot;警告&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;警告&lt;/p&gt;&lt;div&gt;&lt;p&gt;誠實起見，有一件事我們&lt;strong&gt;無法&lt;/strong&gt;排除：攻擊者在握有路由器權限的那三天，&lt;strong&gt;可以主動連線到內網服務去讀取資料&lt;/strong&gt;。這不需要修改任何設定，因此不會留下痕跡。&lt;/p&gt;&lt;p&gt;我們在調查這一點時，發現了一個比原本問題更嚴重的東西 —— 見&lt;a href=&quot;#%E6%84%8F%E5%A4%96%E7%99%BC%E7%8F%BE%E8%B3%87%E6%96%99%E5%B9%B3%E5%8F%B0%E7%9A%84%E8%AA%8D%E8%AD%89%E7%BC%BA%E5%8F%A3&quot;&gt;意外發現：資料平台的認證缺口&lt;/a&gt;。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h3 id=&quot;服務可用性&quot;&gt;服務可用性&lt;/h3&gt;&lt;/div&gt;
&lt;section aria-label=&quot;時間軸&quot; data-astro-cid-z7ssoihh=&quot;&quot;&gt;&lt;ol role=&quot;list&quot; data-astro-cid-z7ssoihh=&quot;&quot;&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;warning&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 1.15 15.05 14.7H0.95Z&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;警告 &lt;/span&gt;&lt;time datetime=&quot;2026-09-18T11:45&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;2026/09/18 11:45&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;服務出現異常&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;info&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;circle cx=&quot;8&quot; cy=&quot;8&quot; r=&quot;5&quot; fill=&quot;currentColor&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;資訊 &lt;/span&gt;&lt;time datetime=&quot;2026-09-18T15:20&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;2026/09/18 15:20&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;取證完成&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;info&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;circle cx=&quot;8&quot; cy=&quot;8&quot; r=&quot;5&quot; fill=&quot;currentColor&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;資訊 &lt;/span&gt;&lt;time datetime=&quot;2026-09-18T15:25&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;2026/09/18 15:25&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;開始清理，服務陸續恢復&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/section&gt;
&lt;div&gt;&lt;h3 id=&quot;你需要做什麼&quot;&gt;你需要做什麼&lt;/h3&gt;&lt;/div&gt;
&lt;aside aria-label=&quot;提示&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;提示&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;strong&gt;目前不需要採取任何動作。&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;發生了什麼事&quot;&gt;發生了什麼事&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;一句話版本&quot;&gt;一句話版本&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;MikroTik 這家廠商的路由器作業系統在 2026 年 9 月被公開了一組安全漏洞，攻擊者可以&lt;strong&gt;不需要密碼就取得路由器的最高管理權限&lt;/strong&gt;。我們的四台設備版本太舊、沒有修補，而且管理介面對全世界開放，所以被打進來了。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;稍微詳細一點&quot;&gt;稍微詳細一點&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;2026/09/02，資安社群開始觀測到有人在網路上大規模掃描並攻擊 MikroTik 路由器（這波攻擊被稱為 &lt;strong&gt;MikroTrick&lt;/strong&gt;）。
2026/09/03，MikroTik 釋出修補版本。
2026/09/05，波蘭國家電腦緊急應變小組（CERT Polska）正式公告，當時全球有 &lt;strong&gt;122,500 台&lt;/strong&gt; MikroTik 設備的管理介面暴露在公網上。
2026/09/14，統計顯示全球約 &lt;strong&gt;260 萬台&lt;/strong&gt; MikroTik 設備處於曝險狀態。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;我們的四台設備，系統版本的發布日期全部早於 09/03 的修補釋出日。&lt;/strong&gt; 從攻擊活動開始的那天起，這四台就一直是可以被攻破的狀態，而我們完全不知道。&lt;/p&gt;
&lt;p&gt;攻擊者在 09/02 就進來了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;修補在攻擊者部署主要惡意程式的 12 天前就已經可以取得。&lt;/strong&gt; 這一點我們必須講清楚 —— 這不是零時差攻擊，是我們沒有及時更新。&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;為什麼會被打進來&quot;&gt;為什麼會被打進來&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;漏洞本身&quot;&gt;漏洞本身&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;這次公開的其實是&lt;strong&gt;六個&lt;/strong&gt; CVE，不是新聞上常提到的那兩個：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CVE&lt;/th&gt;
&lt;th&gt;攻擊面&lt;/th&gt;
&lt;th&gt;修補版本&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CVE-2026-67276&lt;/td&gt;
&lt;td&gt;SSH 認證（RSA exponent 未驗證）&lt;/td&gt;
&lt;td&gt;7.23.4 / 7.24.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CVE-2026-67277&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;btest / bandwidth-test&lt;/td&gt;
&lt;td&gt;6.49.21 / 7.23.4 / 7.24.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CVE-2026-67278&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;TLS + SSH host-key&lt;/td&gt;
&lt;td&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M12 16a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm10.67 1.47-8.05-14a3 3 0 0 0-5.24 0l-8 14A3 3 0 0 0 3.94 22h16.12a3 3 0 0 0 2.61-4.53Zm-1.73 2a1 1 0 0 1-.88.51H3.94a1 1 0 0 1-.88-.51 1 1 0 0 1 0-1l8-14a1 1 0 0 1 1.78 0l8.05 14a1 1 0 0 1 .05 1.02v-.02ZM12 8a1 1 0 0 0-1 1v4a1 1 0 0 0 2 0V9a1 1 0 0 0-1-1Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt; &lt;strong&gt;7.23.6 / 7.24.3&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CVE-2026-67279&lt;/td&gt;
&lt;td&gt;SSH rekey&lt;/td&gt;
&lt;td&gt;6.49.21 / 7.23.4 / 7.24.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CVE-2026-67281&lt;/td&gt;
&lt;td&gt;WebFig &lt;code dir=&quot;auto&quot;&gt;/jsproxy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;7.23.4 / 7.24.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CVE-2026-86060&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SSH 登入提權&lt;/td&gt;
&lt;td&gt;6.49.21 / 7.23.4 / 7.24.2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;其中 &lt;code dir=&quot;auto&quot;&gt;CVE-2026-67277&lt;/code&gt; 與 &lt;code dir=&quot;auto&quot;&gt;CVE-2026-86060&lt;/code&gt; 已於 2026/09/10 被美國 CISA 列入 &lt;strong&gt;KEV（已知遭利用漏洞清單）&lt;/strong&gt; —— 代表這不是理論風險，是確定有人在用它攻擊。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;攻擊者怎麼進來的&quot;&gt;攻擊者怎麼進來的&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;真正的接管鏈是兩個漏洞串起來的，&lt;strong&gt;全程走 SSH，不需要任何帳號密碼&lt;/strong&gt;：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[1] CVE-2026-67276&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;RouterOS 在比對 SSH 公鑰時，只比對 key type 與 modulus，「不比對 exponent」。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;攻擊者送出一把 exponent = 1 的公鑰，就能在沒有私鑰的情況下偽造出有效簽章&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;→ 認證通過。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[2] CVE-2026-86060&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;用一個「開頭是禁用字元」的使用者名稱（例如 -2）登入，&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;RouterOS 的登入處理程式沒有正確處理參數分隔符，&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;導致這個連線可以改寫自己的權限設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;→ 提權成功。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[3] 未認證的攻擊者取得完整 administrator 權限&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;aside aria-label=&quot;我們實際觀測到了這個攻擊特徵&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;我們實際觀測到了這個攻擊特徵&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;CVE-2026-86060&lt;/code&gt; 的特徵是&lt;strong&gt;使用者名稱以 &lt;code dir=&quot;auto&quot;&gt;-&lt;/code&gt; 開頭&lt;/strong&gt;。這不只是理論 ——
我們在升級完成後的設備日誌上，&lt;strong&gt;實際捕捉到兩次以 &lt;code dir=&quot;auto&quot;&gt;-2&lt;/code&gt; 為使用者名稱的 SSH 登入嘗試&lt;/strong&gt;：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;time=2026-09-18 20:20:44 topics=system,error,critical&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;message=&quot;login failure for user -2 from 46.101.236.154 via ssh&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;extra-info=&quot;app=ssh duser=-2 outcome=failure src=46.101.236.154&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;time=2026-09-18 20:55:16 topics=system,error,critical&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;message=&quot;login failure for user -2 from 159.89.228.250 via ssh&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;extra-info=&quot;app=ssh duser=-2 outcome=failure src=159.89.228.250&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;兩次都是 &lt;code dir=&quot;auto&quot;&gt;outcome=failure&lt;/code&gt;。詳見&lt;a href=&quot;#%E4%BF%AE%E8%A3%9C%E6%9C%89%E6%95%88%E7%9A%84%E7%9B%B4%E6%8E%A5%E8%AD%89%E6%93%9A&quot;&gt;修補有效的直接證據&lt;/a&gt;。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;aside aria-label=&quot;有一個陷阱，我們差點踩進去&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;有一個陷阱，我們差點踩進去&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;CVE-2026-67278&lt;/code&gt; 的修補版本寫的是 7.23.4 / 7.24.2，&lt;strong&gt;但那個修補是不完整的&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;CERT Polska 的原文明確寫著：&lt;em&gt;“Releases 7.23.4 and 7.24.2 included an incomplete fix.”&lt;/em&gt; 實際需要 &lt;strong&gt;7.23.6 或 7.24.3&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;問題是 —— 我們查了四個來源：&lt;/p&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;來源&lt;/th&gt;
&lt;th&gt;標示的修補版本&lt;/th&gt;
&lt;th&gt;有提到修補不完全嗎&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CERT Polska（原始通報者）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;7.23.6 / 7.24.3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt; &lt;strong&gt;有&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenCVE&lt;/td&gt;
&lt;td&gt;7.23.4 / 7.24.2 / 6.49.21&lt;/td&gt;
&lt;td&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M12 7a1 1 0 0 0-1 1v4a1 1 0 0 0 2 0V8a1 1 0 0 0-1-1Zm0 8a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm9.71-7.44-5.27-5.27a1.05 1.05 0 0 0-.71-.29H8.27a1.05 1.05 0 0 0-.71.29L2.29 7.56a1.05 1.05 0 0 0-.29.71v7.46c.004.265.107.518.29.71l5.27 5.27c.192.183.445.286.71.29h7.46a1.05 1.05 0 0 0 .71-.29l5.27-5.27a1.05 1.05 0 0 0 .29-.71V8.27a1.05 1.05 0 0 0-.29-.71ZM20 15.31 15.31 20H8.69L4 15.31V8.69L8.69 4h6.62L20 8.69v6.62Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt; 沒有&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rapid7&lt;/td&gt;
&lt;td&gt;7.23.4 / 7.24.2&lt;/td&gt;
&lt;td&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M12 7a1 1 0 0 0-1 1v4a1 1 0 0 0 2 0V8a1 1 0 0 0-1-1Zm0 8a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm9.71-7.44-5.27-5.27a1.05 1.05 0 0 0-.71-.29H8.27a1.05 1.05 0 0 0-.71.29L2.29 7.56a1.05 1.05 0 0 0-.29.71v7.46c.004.265.107.518.29.71l5.27 5.27c.192.183.445.286.71.29h7.46a1.05 1.05 0 0 0 .71-.29l5.27-5.27a1.05 1.05 0 0 0 .29-.71V8.27a1.05 1.05 0 0 0-.29-.71ZM20 15.31 15.31 20H8.69L4 15.31V8.69L8.69 4h6.62L20 8.69v6.62Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt; 沒有&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MikroTik 官方 supportsec 頁&lt;/td&gt;
&lt;td&gt;只列 7.25beta3 / 7.24.2 / 7.23.4 / 6.49.21&lt;/td&gt;
&lt;td&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M12 7a1 1 0 0 0-1 1v4a1 1 0 0 0 2 0V8a1 1 0 0 0-1-1Zm0 8a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm9.71-7.44-5.27-5.27a1.05 1.05 0 0 0-.71-.29H8.27a1.05 1.05 0 0 0-.71.29L2.29 7.56a1.05 1.05 0 0 0-.29.71v7.46c.004.265.107.518.29.71l5.27 5.27c.192.183.445.286.71.29h7.46a1.05 1.05 0 0 0 .71-.29l5.27-5.27a1.05 1.05 0 0 0 .29-.71V8.27a1.05 1.05 0 0 0-.29-.71ZM20 15.31 15.31 20H8.69L4 15.31V8.69L8.69 4h6.62L20 8.69v6.62Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt; 沒有&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;p&gt;&lt;strong&gt;連 MikroTik 自己的公告頁都沒寫。&lt;/strong&gt; 如果我們只看漏洞資料庫或原廠公告就升級到 7.23.4，會以為已經修好了，但實際上還有一個洞開著。&lt;/p&gt;&lt;p&gt;我們最後把判定線訂在 &lt;strong&gt;7.23.6 以上&lt;/strong&gt;，實際升級到當時的最新穩定版 &lt;strong&gt;7.24.4&lt;/strong&gt;。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h3 id=&quot;我們自己的問題&quot;&gt;我們自己的問題&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;漏洞是廠商的，但&lt;strong&gt;設備沒更新、管理介面對外開放，是我們的責任&lt;/strong&gt;。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;節點&lt;/th&gt;
&lt;th&gt;事發版本&lt;/th&gt;
&lt;th&gt;版本發布日&lt;/th&gt;
&lt;th&gt;落後&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;core-tnn1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;7.23.1&lt;/td&gt;
&lt;td&gt;2026-06-02&lt;/td&gt;
&lt;td&gt;約 3 個月&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;node-tnn2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;7.22.2&lt;/td&gt;
&lt;td&gt;2026-04-22&lt;/td&gt;
&lt;td&gt;約 5 個月&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;node-tnn1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;7.22.1&lt;/td&gt;
&lt;td&gt;2026-03-23&lt;/td&gt;
&lt;td&gt;約 6 個月&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;lb-khh1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;7.22.1&lt;/td&gt;
&lt;td&gt;2026-03-23&lt;/td&gt;
&lt;td&gt;約 6 個月&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;而且四台的 SSH 管理介面都設定成&lt;strong&gt;允許任何來源 IP 連入&lt;/strong&gt;。&lt;/p&gt;
&lt;aside aria-label=&quot;另外值得一提&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;另外值得一提&lt;/p&gt;&lt;div&gt;&lt;p&gt;RouterOS 有一個內建的「入侵旗標」機制（&lt;code dir=&quot;auto&quot;&gt;device-mode flagged&lt;/code&gt;）。
&lt;strong&gt;我們四台全部顯示 &lt;code dir=&quot;auto&quot;&gt;no&lt;/code&gt;（正常），但四台全部確認遭入侵。&lt;/strong&gt;
原廠對這個機制的警語是「只比對已文件化的指標」。它讓人安心，但它不可靠。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;時間軸&quot;&gt;時間軸&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;所有時間為台灣時間（UTC+8）。&lt;code dir=&quot;auto&quot;&gt;node-tnn1&lt;/code&gt; 的系統時鐘當時慢了 6 小時 45 分（NTP 未同步、期間未重開機，偏差固定），該台的時間都已換算成實際的台灣時間。&lt;/p&gt;
&lt;section aria-labelledby=&quot;tl-nzpk7v&quot; data-astro-cid-z7ssoihh=&quot;&quot;&gt;&lt;header data-astro-cid-z7ssoihh=&quot;&quot;&gt;&lt;h3 id=&quot;tl-nzpk7v&quot; data-astro-cid-z7ssoihh=&quot;&quot;&gt;外部事件&lt;/h3&gt;&lt;/header&gt;&lt;ol role=&quot;list&quot; data-astro-cid-z7ssoihh=&quot;&quot;&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;warning&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 1.15 15.05 14.7H0.95Z&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;警告 &lt;/span&gt;&lt;time datetime=&quot;2026-09-02&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;2026-09-02&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;CERT Polska 觀測到針對 RouterOS 的攻擊開始&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;info&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;circle cx=&quot;8&quot; cy=&quot;8&quot; r=&quot;5&quot; fill=&quot;currentColor&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;資訊 &lt;/span&gt;&lt;time datetime=&quot;2026-09-03&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;2026-09-03&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;MikroTik 釋出修補版本 7.24.2 / 7.23.4&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;warning&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 1.15 15.05 14.7H0.95Z&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;警告 &lt;/span&gt;&lt;time datetime=&quot;2026-09-05&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;2026-09-05&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;CERT Polska 正式公告，全球 122,500 台設備曝險&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;warning&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 1.15 15.05 14.7H0.95Z&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;警告 &lt;/span&gt;&lt;time datetime=&quot;2026-09-10&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;2026-09-10&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;CISA 將兩個 CVE 列入 KEV&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;info&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;circle cx=&quot;8&quot; cy=&quot;8&quot; r=&quot;5&quot; fill=&quot;currentColor&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;資訊 &lt;/span&gt;&lt;time datetime=&quot;2026-09-14&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;2026-09-14&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;全球曝險設備統計約 260 萬台&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/section&gt;
&lt;section aria-labelledby=&quot;tl-xewdoz&quot; data-astro-cid-z7ssoihh=&quot;&quot;&gt;&lt;header data-astro-cid-z7ssoihh=&quot;&quot;&gt;&lt;h3 id=&quot;tl-xewdoz&quot; data-astro-cid-z7ssoihh=&quot;&quot;&gt;我們的設備上發生的事&lt;/h3&gt;&lt;/header&gt;&lt;ol role=&quot;list&quot; data-astro-cid-z7ssoihh=&quot;&quot;&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;critical&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 1.25 14.75 8 8 14.75 1.25 8Z&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;嚴重 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-02 14:39&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;後門帳號 ops 登入 —— 最早的入侵痕跡&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;core-tnn1&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;critical&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 1.25 14.75 8 8 14.75 1.25 8Z&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;嚴重 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-02 15:45&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;後門帳號 ops 登入&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;node-tnn1&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;critical&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 1.25 14.75 8 8 14.75 1.25 8Z&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;嚴重 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-10 16:27 / 16:43&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;兩台各殘存的唯一一筆日誌：possible SYN flooding on tcp port 22（相距 16 分鐘，同一波 SSH 攻擊）&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;lb-khh1 / core-tnn1&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;critical&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 1.25 14.75 8 8 14.75 1.25 8Z&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;嚴重 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-10 22:53&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;後門帳號 routeradmini 登入，11 秒後開始修改日誌設定&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;lb-khh1&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;critical&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 1.25 14.75 8 8 14.75 1.25 8Z&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;嚴重 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-11 05:44&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;同一個後門帳號做同樣的事&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;core-tnn1&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;critical&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 1.25 14.75 8 8 14.75 1.25 8Z&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;嚴重 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-11&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;植入「每日自動重建後門帳號」的排程&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;lb-khh1&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;critical&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 1.25 14.75 8 8 14.75 1.25 8Z&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;嚴重 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-12 22:25:11 / 22:25:49&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;後門帳號 system 登入兩台，相隔 38 秒 → 自動化橫向移動&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;core-tnn1 / node-tnn2&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;critical&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 1.25 14.75 8 8 14.75 1.25 8Z&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;嚴重 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-15 08:05&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;植入 C2 遠端控制程式，每 3 分鐘對外回連&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;node-tnn1&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;critical&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 1.25 14.75 8 8 14.75 1.25 8Z&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;嚴重 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-15 17:48 → 21:34&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;四台在 4 小時內被依序套用相同的日誌破壞設定&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;四台&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;critical&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 1.25 14.75 8 8 14.75 1.25 8Z&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;嚴重 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-15 → 09-18&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;日誌壓制動作被反覆執行 20 次以上&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;四台&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;critical&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 1.25 14.75 8 8 14.75 1.25 8Z&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;嚴重 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-17 05:19&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;新增後門帳號 gabor76&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;core-tnn1&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;critical&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 1.25 14.75 8 8 14.75 1.25 8Z&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;嚴重 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-18 05:06&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;新增後門帳號 mark65&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;node-tnn1&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;critical&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 1.25 14.75 8 8 14.75 1.25 8Z&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;嚴重 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-18 10:41&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;攻擊者建立兩條管理員權限的 SSH 連線&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;core-tnn1&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;critical&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 1.25 14.75 8 8 14.75 1.25 8Z&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;嚴重 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-18 10:44&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;新增後門帳號 martin1&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;node-tnn1&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/section&gt;
&lt;section aria-labelledby=&quot;tl-khfba7&quot; data-astro-cid-z7ssoihh=&quot;&quot;&gt;&lt;header data-astro-cid-z7ssoihh=&quot;&quot;&gt;&lt;h3 id=&quot;tl-khfba7&quot; data-astro-cid-z7ssoihh=&quot;&quot;&gt;我們的應變&lt;/h3&gt;&lt;/header&gt;&lt;ol role=&quot;list&quot; data-astro-cid-z7ssoihh=&quot;&quot;&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;warning&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 1.15 15.05 14.7H0.95Z&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;警告 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-18 11:45&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;服務異常，開始排查&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;warning&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 1.15 15.05 14.7H0.95Z&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;警告 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-18 12:50&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;確認遭植入惡意腳本&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;info&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;circle cx=&quot;8&quot; cy=&quot;8&quot; r=&quot;5&quot; fill=&quot;currentColor&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;資訊 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-18 12:53&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;開始完整取證（四台，全程唯讀）&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;info&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;circle cx=&quot;8&quot; cy=&quot;8&quot; r=&quot;5&quot; fill=&quot;currentColor&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;資訊 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-18 15:20&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;取證完畢，SHA256 與保管鏈建立&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;info&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;circle cx=&quot;8&quot; cy=&quot;8&quot; r=&quot;5&quot; fill=&quot;currentColor&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;資訊 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-18 15:25&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;開始清理，服務陸續恢復&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;resolved&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.8&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; d=&quot;M3.7 8.25 6.55 11.15 12.35 4.9&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;已恢復 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-18 15:56 → 16:10&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;四台逐台升級至 7.24.4（16:00–16:06），各台升級後立即輪換管理密碼&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;info&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;circle cx=&quot;8&quot; cy=&quot;8&quot; r=&quot;5&quot; fill=&quot;currentColor&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;資訊 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-18 16:21&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;四台建立磁碟日誌規則&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;info&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;circle cx=&quot;8&quot; cy=&quot;8&quot; r=&quot;5&quot; fill=&quot;currentColor&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;資訊 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-18 16:40 → 16:50&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;RouterBOOT 韌體升級的重開機&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;resolved&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.8&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; d=&quot;M3.7 8.25 6.55 11.15 12.35 4.9&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;已恢復 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-18 20:20 / 20:55&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;修補約 4 小時後，兩次 -2 再入侵嘗試被新版本擋下（見下節）&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;info&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;circle cx=&quot;8&quot; cy=&quot;8&quot; r=&quot;5&quot; fill=&quot;currentColor&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;資訊 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-18 → 09-19&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;VPN PKI 重建（09-18）、9 把 WireGuard 私鑰輪換（站對站 09-18、roadwarrior 09-19）&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;info&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;circle cx=&quot;8&quot; cy=&quot;8&quot; r=&quot;5&quot; fill=&quot;currentColor&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;資訊 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-19 00:35 → 00:45&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;四台 SSH 管理介面設來源白名單&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;info&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;circle cx=&quot;8&quot; cy=&quot;8&quot; r=&quot;5&quot; fill=&quot;currentColor&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;資訊 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-19 01:43 → 01:49&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;記憶體日誌上限拉到 65535、每週自動更新排程上線&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;warning&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 1.15 15.05 14.7H0.95Z&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;警告 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-19 02:00 → 12:00&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;擴大範圍稽核 → 發現資料平台的認證缺口並修補（見下節）&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;info&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;circle cx=&quot;8&quot; cy=&quot;8&quot; r=&quot;5&quot; fill=&quot;currentColor&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;資訊 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-19 12:00 → 18:00&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;移除 46 個受污染／調查產物檔案，建立乾淨基準備份&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;resolved&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.8&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; d=&quot;M3.7 8.25 6.55 11.15 12.35 4.9&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;已恢復 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-20 11:44&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;重新入侵比對：四台皆無新入侵跡象&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;resolved&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.8&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; d=&quot;M3.7 8.25 6.55 11.15 12.35 4.9&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;已恢復 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;09-21&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;第二次健康檢查：四台無再入侵跡象&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;resolved&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.8&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; d=&quot;M3.7 8.25 6.55 11.15 12.35 4.9&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;已恢復 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;11-15&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;第三次健康檢查：四台無再入侵跡象&lt;/p&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;p&gt;（見&lt;a href=&quot;#%E5%BE%8C%E7%BA%8C%E8%BF%BD%E8%B9%A4&quot;&gt;後續追蹤&lt;/a&gt;）&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/section&gt;
&lt;aside aria-label=&quot;兩件必須指出來的事&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;兩件必須指出來的事&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;strong&gt;① 入侵到最後一刻都還在擴大。&lt;/strong&gt;
後門帳號 &lt;code dir=&quot;auto&quot;&gt;martin1&lt;/code&gt; 是在我們開始取證前&lt;strong&gt;約 2 小時&lt;/strong&gt;才被建立的。這不是「打完就走」的入侵，是持續 16 天、到我們動手那一刻都還在進行的長期駐留。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;② 我們取證的時候，攻擊者正在線上。&lt;/strong&gt;
那兩條 09-18 10:41 建立的管理員連線，在我們登入設備時&lt;strong&gt;仍然是活躍狀態，已經持續 2 小時 12 分&lt;/strong&gt;。我們的連線和攻擊者的連線並排出現在同一張清單上。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;修補有效的直接證據&quot;&gt;修補有效的直接證據&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;這是我們認為最值得分享的一段。&lt;/p&gt;
&lt;p&gt;升級完成約 4 小時後，&lt;strong&gt;攻擊者回來了兩次&lt;/strong&gt;，而設備日誌把過程完整記下來了：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;時間&lt;/th&gt;
&lt;th&gt;節點&lt;/th&gt;
&lt;th&gt;來源 IP&lt;/th&gt;
&lt;th&gt;來源歸屬&lt;/th&gt;
&lt;th&gt;使用者名稱&lt;/th&gt;
&lt;th&gt;結果&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2026-09-18 20:20:44&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;node-tnn2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;46.101.236.154&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DigitalOcean&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;-2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M12 7a1 1 0 0 0-1 1v4a1 1 0 0 0 2 0V8a1 1 0 0 0-1-1Zm0 8a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm9.71-7.44-5.27-5.27a1.05 1.05 0 0 0-.71-.29H8.27a1.05 1.05 0 0 0-.71.29L2.29 7.56a1.05 1.05 0 0 0-.29.71v7.46c.004.265.107.518.29.71l5.27 5.27c.192.183.445.286.71.29h7.46a1.05 1.05 0 0 0 .71-.29l5.27-5.27a1.05 1.05 0 0 0 .29-.71V8.27a1.05 1.05 0 0 0-.29-.71ZM20 15.31 15.31 20H8.69L4 15.31V8.69L8.69 4h6.62L20 8.69v6.62Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;strong&gt;失敗&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026-09-18 20:55:16&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;lb-khh1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;159.89.228.250&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DigitalOcean&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;-2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M12 7a1 1 0 0 0-1 1v4a1 1 0 0 0 2 0V8a1 1 0 0 0-1-1Zm0 8a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm9.71-7.44-5.27-5.27a1.05 1.05 0 0 0-.71-.29H8.27a1.05 1.05 0 0 0-.71.29L2.29 7.56a1.05 1.05 0 0 0-.29.71v7.46c.004.265.107.518.29.71l5.27 5.27c.192.183.445.286.71.29h7.46a1.05 1.05 0 0 0 .71-.29l5.27-5.27a1.05 1.05 0 0 0 .29-.71V8.27a1.05 1.05 0 0 0-.29-.71ZM20 15.31 15.31 20H8.69L4 15.31V8.69L8.69 4h6.62L20 8.69v6.62Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;strong&gt;失敗&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;使用者名稱 &lt;code dir=&quot;auto&quot;&gt;-2&lt;/code&gt; 正是 &lt;code dir=&quot;auto&quot;&gt;CVE-2026-86060&lt;/code&gt; 的引數注入特徵。&lt;strong&gt;同一個攻擊手法，在修補後的版本上失敗了。&lt;/strong&gt;&lt;/p&gt;
&lt;aside aria-label=&quot;這兩筆紀錄差一點就看不到&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;這兩筆紀錄差一點就看不到&lt;/p&gt;&lt;div&gt;&lt;p&gt;當時記憶體日誌的上限還是 10000 筆，
&lt;strong&gt;這兩筆紀錄在 15 分鐘內就被新的日誌擠出記憶體緩衝區了&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;我們之所以還能拿到它們，是因為升級後約 20 分鐘（16:21）就建立了&lt;strong&gt;磁碟日誌&lt;/strong&gt;規則 ——
紀錄同時寫到設備的儲存空間，不會因為緩衝區滿了就消失。&lt;/p&gt;&lt;p&gt;隔天我們把記憶體上限拉到 RouterOS 的最大值 65535 筆，同樣的紀錄在記憶體中可以保留 13 小時以上。&lt;/p&gt;&lt;p&gt;如果沒有做這件事，我們永遠不會知道攻擊者回來過。&lt;strong&gt;這是「日誌必須落地」最直接的實證。&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h3 id=&quot;攻擊者被完全擋在門外的驗證&quot;&gt;攻擊者被完全擋在門外的驗證&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;09/19 凌晨我們把四台的 SSH 管理介面限制為來源白名單。效果可以直接量化 ——
以下是外部來源的 SSH 登入失敗次數逐日統計：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;節點&lt;/th&gt;
&lt;th&gt;09-18&lt;/th&gt;
&lt;th&gt;09-19&lt;/th&gt;
&lt;th&gt;09-20&lt;/th&gt;
&lt;th&gt;最後一次外部嘗試&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;core-tnn1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;140&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2026-09-19 00:30:06&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;node-tnn1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1667&lt;/td&gt;
&lt;td&gt;120&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2026-09-19 01:01:34&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;node-tnn2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;145&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2026-09-19 01:41:57&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;lb-khh1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;166&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2026-09-19 00:37:28&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;白名單的套用時間是 &lt;strong&gt;09-19 00:35 到 00:45&lt;/strong&gt;。外部嘗試在那之後隨即歸零。&lt;strong&gt;截至 11/15，近兩個月一次都沒有&lt;/strong&gt; —— 期間所有登入失敗紀錄的來源，都是我們自己的站台。&lt;/p&gt;
&lt;p&gt;這不是「我們相信設定生效了」，是&lt;strong&gt;從外部實測的結果&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;技術細節攻擊者做了什麼&quot;&gt;技術細節：攻擊者做了什麼&lt;/h2&gt;&lt;/div&gt;
&lt;aside aria-label=&quot;這一段偏技術&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;這一段偏技術&lt;/p&gt;&lt;div&gt;&lt;p&gt;如果你只關心「對我有什麼影響」，看到這裡就夠了，可以直接跳到&lt;a href=&quot;#%E8%99%95%E7%BD%AE&quot;&gt;處置&lt;/a&gt;。&lt;/p&gt;&lt;p&gt;以下是完整的技術記錄，寫出來是因為我們認為出事之後把話講清楚，比講得漂亮重要。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;攻擊者不是只留一條後路，而是在不同設備上用了&lt;strong&gt;四種完全不同的手法&lt;/strong&gt;。這也是為什麼「升級 + 改密碼」完全不夠。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;1-後門帳號四台都有&quot;&gt;1. 後門帳號（四台都有）&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;四台合計 &lt;strong&gt;25 個帳號條目、12 個不重複的帳號名稱&lt;/strong&gt;，全部是最高權限、全部不限制來源 IP。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;帳號&lt;/th&gt;
&lt;th&gt;&lt;code dir=&quot;auto&quot;&gt;core-tnn1&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code dir=&quot;auto&quot;&gt;node-tnn2&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code dir=&quot;auto&quot;&gt;node-tnn1&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code dir=&quot;auto&quot;&gt;lb-khh1&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;備註&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;ops&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-label=&quot;有&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M18.71 7.21a1 1 0 0 0-1.42 0l-7.45 7.46-3.13-3.14A1.02 1.02 0 1 0 5.29 13l3.84 3.84a1.001 1.001 0 0 0 1.42 0l8.16-8.16a1 1 0 0 0 0-1.47Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-label=&quot;有&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M18.71 7.21a1 1 0 0 0-1.42 0l-7.45 7.46-3.13-3.14A1.02 1.02 0 1 0 5.29 13l3.84 3.84a1.001 1.001 0 0 0 1.42 0l8.16-8.16a1 1 0 0 0 0-1.47Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;CERT Polska 公告的 MikroTrick 特徵帳號&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;saryn&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-label=&quot;有&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M18.71 7.21a1 1 0 0 0-1.42 0l-7.45 7.46-3.13-3.14A1.02 1.02 0 1 0 5.29 13l3.84 3.84a1.001 1.001 0 0 0 1.42 0l8.16-8.16a1 1 0 0 0 0-1.47Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-label=&quot;有&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M18.71 7.21a1 1 0 0 0-1.42 0l-7.45 7.46-3.13-3.14A1.02 1.02 0 1 0 5.29 13l3.84 3.84a1.001 1.001 0 0 0 1.42 0l8.16-8.16a1 1 0 0 0 0-1.47Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-label=&quot;有&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M18.71 7.21a1 1 0 0 0-1.42 0l-7.45 7.46-3.13-3.14A1.02 1.02 0 1 0 5.29 13l3.84 3.84a1.001 1.001 0 0 0 1.42 0l8.16-8.16a1 1 0 0 0 0-1.47Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-label=&quot;有&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M18.71 7.21a1 1 0 0 0-1.42 0l-7.45 7.46-3.13-3.14A1.02 1.02 0 1 0 5.29 13l3.84 3.84a1.001 1.001 0 0 0 1.42 0l8.16-8.16a1 1 0 0 0 0-1.47Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M12 7a1 1 0 0 0-1 1v4a1 1 0 0 0 2 0V8a1 1 0 0 0-1-1Zm0 8a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm9.71-7.44-5.27-5.27a1.05 1.05 0 0 0-.71-.29H8.27a1.05 1.05 0 0 0-.71.29L2.29 7.56a1.05 1.05 0 0 0-.29.71v7.46c.004.265.107.518.29.71l5.27 5.27c.192.183.445.286.71.29h7.46a1.05 1.05 0 0 0 .71-.29l5.27-5.27a1.05 1.05 0 0 0 .29-.71V8.27a1.05 1.05 0 0 0-.29-.71ZM20 15.31 15.31 20H8.69L4 15.31V8.69L8.69 4h6.62L20 8.69v6.62Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt; 攻擊者取證當下使用中&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;SystemMikrotik&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-label=&quot;有&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M18.71 7.21a1 1 0 0 0-1.42 0l-7.45 7.46-3.13-3.14A1.02 1.02 0 1 0 5.29 13l3.84 3.84a1.001 1.001 0 0 0 1.42 0l8.16-8.16a1 1 0 0 0 0-1.47Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-label=&quot;有&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M18.71 7.21a1 1 0 0 0-1.42 0l-7.45 7.46-3.13-3.14A1.02 1.02 0 1 0 5.29 13l3.84 3.84a1.001 1.001 0 0 0 1.42 0l8.16-8.16a1 1 0 0 0 0-1.47Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-label=&quot;有&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M18.71 7.21a1 1 0 0 0-1.42 0l-7.45 7.46-3.13-3.14A1.02 1.02 0 1 0 5.29 13l3.84 3.84a1.001 1.001 0 0 0 1.42 0l8.16-8.16a1 1 0 0 0 0-1.47Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-label=&quot;有&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M18.71 7.21a1 1 0 0 0-1.42 0l-7.45 7.46-3.13-3.14A1.02 1.02 0 1 0 5.29 13l3.84 3.84a1.001 1.001 0 0 0 1.42 0l8.16-8.16a1 1 0 0 0 0-1.47Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/td&gt;
&lt;td&gt;偽裝成系統帳號&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;routeradmin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-label=&quot;有&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M18.71 7.21a1 1 0 0 0-1.42 0l-7.45 7.46-3.13-3.14A1.02 1.02 0 1 0 5.29 13l3.84 3.84a1.001 1.001 0 0 0 1.42 0l8.16-8.16a1 1 0 0 0 0-1.47Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-label=&quot;有&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M18.71 7.21a1 1 0 0 0-1.42 0l-7.45 7.46-3.13-3.14A1.02 1.02 0 1 0 5.29 13l3.84 3.84a1.001 1.001 0 0 0 1.42 0l8.16-8.16a1 1 0 0 0 0-1.47Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-label=&quot;有&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M18.71 7.21a1 1 0 0 0-1.42 0l-7.45 7.46-3.13-3.14A1.02 1.02 0 1 0 5.29 13l3.84 3.84a1.001 1.001 0 0 0 1.42 0l8.16-8.16a1 1 0 0 0 0-1.47Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-label=&quot;有&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M18.71 7.21a1 1 0 0 0-1.42 0l-7.45 7.46-3.13-3.14A1.02 1.02 0 1 0 5.29 13l3.84 3.84a1.001 1.001 0 0 0 1.42 0l8.16-8.16a1 1 0 0 0 0-1.47Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/td&gt;
&lt;td&gt;偽裝成管理帳號&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;routeradmini&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-label=&quot;有&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M18.71 7.21a1 1 0 0 0-1.42 0l-7.45 7.46-3.13-3.14A1.02 1.02 0 1 0 5.29 13l3.84 3.84a1.001 1.001 0 0 0 1.42 0l8.16-8.16a1 1 0 0 0 0-1.47Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-label=&quot;有&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M18.71 7.21a1 1 0 0 0-1.42 0l-7.45 7.46-3.13-3.14A1.02 1.02 0 1 0 5.29 13l3.84 3.84a1.001 1.001 0 0 0 1.42 0l8.16-8.16a1 1 0 0 0 0-1.47Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/td&gt;
&lt;td&gt;上一個的 typo 變體&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;system&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-label=&quot;有&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M18.71 7.21a1 1 0 0 0-1.42 0l-7.45 7.46-3.13-3.14A1.02 1.02 0 1 0 5.29 13l3.84 3.84a1.001 1.001 0 0 0 1.42 0l8.16-8.16a1 1 0 0 0 0-1.47Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-label=&quot;有&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M18.71 7.21a1 1 0 0 0-1.42 0l-7.45 7.46-3.13-3.14A1.02 1.02 0 1 0 5.29 13l3.84 3.84a1.001 1.001 0 0 0 1.42 0l8.16-8.16a1 1 0 0 0 0-1.47Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;偽裝成系統帳號&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;operator&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-label=&quot;有&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M18.71 7.21a1 1 0 0 0-1.42 0l-7.45 7.46-3.13-3.14A1.02 1.02 0 1 0 5.29 13l3.84 3.84a1.001 1.001 0 0 0 1.42 0l8.16-8.16a1 1 0 0 0 0-1.47Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;test&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-label=&quot;有&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M18.71 7.21a1 1 0 0 0-1.42 0l-7.45 7.46-3.13-3.14A1.02 1.02 0 1 0 5.29 13l3.84 3.84a1.001 1.001 0 0 0 1.42 0l8.16-8.16a1 1 0 0 0 0-1.47Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-label=&quot;有&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M18.71 7.21a1 1 0 0 0-1.42 0l-7.45 7.46-3.13-3.14A1.02 1.02 0 1 0 5.29 13l3.84 3.84a1.001 1.001 0 0 0 1.42 0l8.16-8.16a1 1 0 0 0 0-1.47Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;gabor76&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-label=&quot;有&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M18.71 7.21a1 1 0 0 0-1.42 0l-7.45 7.46-3.13-3.14A1.02 1.02 0 1 0 5.29 13l3.84 3.84a1.001 1.001 0 0 0 1.42 0l8.16-8.16a1 1 0 0 0 0-1.47Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;人名型&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;mark65&lt;/code&gt; / &lt;code dir=&quot;auto&quot;&gt;martin1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-label=&quot;有&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M18.71 7.21a1 1 0 0 0-1.42 0l-7.45 7.46-3.13-3.14A1.02 1.02 0 1 0 5.29 13l3.84 3.84a1.001 1.001 0 0 0 1.42 0l8.16-8.16a1 1 0 0 0 0-1.47Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;人名型&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;zkadmin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-label=&quot;有&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M18.71 7.21a1 1 0 0 0-1.42 0l-7.45 7.46-3.13-3.14A1.02 1.02 0 1 0 5.29 13l3.84 3.84a1.001 1.001 0 0 0 1.42 0l8.16-8.16a1 1 0 0 0 0-1.47Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M12 7a1 1 0 0 0-1 1v4a1 1 0 0 0 2 0V8a1 1 0 0 0-1-1Zm0 8a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm9.71-7.44-5.27-5.27a1.05 1.05 0 0 0-.71-.29H8.27a1.05 1.05 0 0 0-.71.29L2.29 7.56a1.05 1.05 0 0 0-.29.71v7.46c.004.265.107.518.29.71l5.27 5.27c.192.183.445.286.71.29h7.46a1.05 1.05 0 0 0 .71-.29l5.27-5.27a1.05 1.05 0 0 0 .29-.71V8.27a1.05 1.05 0 0 0-.29-.71ZM20 15.31 15.31 20H8.69L4 15.31V8.69L8.69 4h6.62L20 8.69v6.62Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt; 刪掉會自己長回來&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;ops&lt;/code&gt; 這個帳號是本案最強的關聯證據。&lt;/strong&gt; 它是 CERT Polska 公告中點名的 MikroTrick 特徵帳號，而它在我們兩台設備上的最後登入時間是 &lt;strong&gt;2026-09-02&lt;/strong&gt; —— 正好就是全球攻擊活動開始的那一天。&lt;/p&gt;
&lt;p&gt;攻擊者的互動來源 IP 是 &lt;code dir=&quot;auto&quot;&gt;203.74.122.229&lt;/code&gt;（取證當下 &lt;code dir=&quot;auto&quot;&gt;saryn&lt;/code&gt; 的兩條活躍連線來源）。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;2-c2-遠端控制程式node-tnn1&quot;&gt;2. C2 遠端控制程式（node-tnn1）&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;這是最嚴重的一項。攻擊者在其中一台植入了一支會&lt;strong&gt;主動對外回連、接收遠端指令&lt;/strong&gt;的程式。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;連線目標：&lt;/strong&gt; &lt;code dir=&quot;auto&quot;&gt;http://85.137.54.178:8080&lt;/code&gt;（荷蘭，VSYS-AMS-COLO）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;頻率：&lt;/strong&gt; 每 3 分鐘一次&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;植入時間：&lt;/strong&gt; 2026-09-15 08:04:59（設備時鐘顯示 01:19:52，該台時鐘慢 6 小時 45 分）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;截至取證的執行次數：&lt;/strong&gt; &lt;strong&gt;1536 次&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它做兩件事：&lt;/p&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;把設備資訊（架構、系統版本、硬體型號、設備名稱）回報給對方&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;去對方的伺服器抓一個指令檔回來執行，&lt;strong&gt;執行完立刻把檔案刪掉&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;也就是說，&lt;strong&gt;攻擊者可以隨時在這台設備上執行任何指令，而且不留痕跡&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;這支程式的原始碼第一行是它自己寫的註解：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# RouterOS foothold — beacon CNC every 3 minutes WITH identity&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Installed via /import after /tool fetch&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;「foothold（立足點）」、「beacon CNC（向指揮控制伺服器回連）」—— 它自己說明了自己是什麼，我們不需要任何外部情報就能判定它是惡意程式。&lt;/p&gt;
&lt;p&gt;三個設計細節值得說明：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;start-time=startup&lt;/code&gt;&lt;/strong&gt; —— 重開機會自動復活。所以「重開機就好了」是錯的。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安裝程式具幂等性&lt;/strong&gt; —— 它執行時會先刪掉舊的再裝一次，代表它被設計成&lt;strong&gt;可以重複投放&lt;/strong&gt;。只要對方還連得到設備，刪掉它沒有意義。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;靜默失敗&lt;/strong&gt; —— 整段程式碼包在錯誤忽略的區塊裡，出錯不會留下任何記錄。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我們&lt;strong&gt;刻意沒有去連線或掃描那個 C2 伺服器&lt;/strong&gt;。觸碰攻擊者的基礎設施可能驚動對方、讓他清除痕跡或加速破壞，這部分交由司法機關與 CERT 處理。&lt;/p&gt;
&lt;aside aria-label=&quot;我們找到的是一個全新的 C2&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;我們找到的是一個全新的 C2&lt;/p&gt;&lt;div&gt;&lt;p&gt;已公開的 MikroTrick C2 清單上有兩個 IP（&lt;code dir=&quot;auto&quot;&gt;82.192.72.4&lt;/code&gt;、&lt;code dir=&quot;auto&quot;&gt;103.102.31.18&lt;/code&gt;），
&lt;strong&gt;在我們的案例中完全沒有出現&lt;/strong&gt;。我們找到的 &lt;code dir=&quot;auto&quot;&gt;85.137.54.178&lt;/code&gt; 是一個沒有被公開過的 C2。&lt;/p&gt;&lt;p&gt;這印證了 CERT Polska 的警語 —— &lt;strong&gt;公開的指標清單是歷史紀錄，不是完整封鎖清單&lt;/strong&gt;。
如果只靠比對公開 IoC 清單，我們會判定自己沒事。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;&lt;strong&gt;完整 IoC 清單（供其他防守方比對）：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# C2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;85.137.54.178:8080          # 本案實際觀測（荷蘭 VSYS-AMS-COLO），未見於公開清單&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;82.192.72.4                 # 公開 IoC，本案未出現&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;103.102.31.18               # 公開 IoC，本案未出現&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# 攻擊者互動來源&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;203.74.122.229              # 取證當下的活躍管理連線&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# 再入侵嘗試來源（修補後，皆失敗）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;46.101.236.154              # DigitalOcean&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;159.89.228.250              # DigitalOcean&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# 後門帳號名稱&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;ops saryn SystemMikrotik routeradmin routeradmini&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;system operator test gabor76 mark65 martin1 zkadmin&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# 持久化的檔案／排程／腳本名稱&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;boat_ros                    # C2 排程與腳本（node-tnn1）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;daily-maint                 # 帳號復活排程（lb-khh1）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;logrotate                   # 帳號復活腳本（lb-khh1）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;ros-task.rsc                # C2 下載的指令檔（執行後即刪）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# SSH 登入特徵&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;使用者名稱以 &quot;-&quot; 開頭（例如 -2）   # CVE-2026-86060 引數注入&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;3-會自己長回來的後門帳號lb-khh1&quot;&gt;3. 會自己長回來的後門帳號（lb-khh1）&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;另一台設備上沒有 C2，但有一套更陰險的東西：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;排程「daily-maint」（每日維護）  每天 03:00 執行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;腳本「logrotate」（日誌輪替）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;如果後門帳號 zkadmin 不存在 → 用固定密碼重新建立為最高權限&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;你刪掉那個帳號，隔天凌晨三點它就回來了。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;最值得警惕的是偽裝手法：&lt;code dir=&quot;auto&quot;&gt;daily-maint&lt;/code&gt;（每日維護）和 &lt;code dir=&quot;auto&quot;&gt;logrotate&lt;/code&gt;（日誌輪替）這兩個名字，&lt;strong&gt;看起來比我們自己寫的排程還像正常維運工作&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;唯一能區分的是建立者欄位 —— 同一台設備上所有合法的排程（NTP 校時、MAC 重置、DDNS 更新、韌體升級、WAN 備援檢查）&lt;strong&gt;全部標示為 &lt;code dir=&quot;auto&quot;&gt;admin&lt;/code&gt;&lt;/strong&gt;，只有這兩個標示為 &lt;code dir=&quot;auto&quot;&gt;0&lt;/code&gt;（代表非由使用者互動建立）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;看建立者，不要看名字。&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;4-注入的-ssh-金鑰lb-khh1&quot;&gt;4. 注入的 SSH 金鑰（lb-khh1）&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;這是四種手法裡最隱蔽的一種：攻擊者在合法的 &lt;code dir=&quot;auto&quot;&gt;admin&lt;/code&gt; 帳號上，&lt;strong&gt;掛了一把自己的 SSH 金鑰&lt;/strong&gt;（RSA 3072，指紋 &lt;code dir=&quot;auto&quot;&gt;SHA256:zJ8ypOH1lW4DtgPrO+V1qmZUJprP8WzxlJGFYIFWZt8=&lt;/code&gt;）。&lt;/p&gt;
&lt;p&gt;為什麼難發現：&lt;/p&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;它不是一個新帳號 —— 稽核帳號清單看不到&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;它不是一個新排程或腳本 —— 稽核持久化機制看不到&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;它掛在&lt;strong&gt;合法帳號&lt;/strong&gt;上&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;金鑰登入&lt;strong&gt;不受暴力破解防護限制&lt;/strong&gt;（金鑰認證不計失敗次數）&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;它還有一個副作用，而這個副作用其實就是我們最初遇到的怪事 —— &lt;strong&gt;正確的管理密碼在這台設備上突然失效了&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;原因是 RouterOS 的一項設定語義：「&lt;strong&gt;這個使用者如果已經註冊了金鑰，就拒絕密碼登入&lt;/strong&gt;」。攻擊者掛上金鑰之後，我們自己的密碼就被擋在門外了。&lt;/p&gt;
&lt;p&gt;我們一開始以為是憑證記錯了。&lt;strong&gt;「管理密碼突然失效」本身就是一個入侵指標&lt;/strong&gt;，這是我們學到的一課。&lt;/p&gt;
&lt;p&gt;這台最後是改用 RouterOS 的 REST API 完成取證的，取得 119/121 個端點、238 個證據檔。&lt;/p&gt;
&lt;aside aria-label=&quot;一個諷刺的發現&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;一個諷刺的發現&lt;/p&gt;&lt;div&gt;&lt;p&gt;RouterOS 的命令列匯出會&lt;strong&gt;隱藏&lt;/strong&gt;密碼與私鑰，REST API &lt;strong&gt;不會&lt;/strong&gt;。
被迫改用 REST 的那一台，在機密欄位上的取證反而比其他三台完整。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;此外這台的 SOCKS 代理伺服器也被開啟且&lt;strong&gt;沒有任何來源限制&lt;/strong&gt;，並建立了一個代理帳號（&lt;code dir=&quot;auto&quot;&gt;r7n2k&lt;/code&gt;）—— 這是把設備變成攻擊他人的中繼站的典型手法。同一個帳號也出現在 &lt;code dir=&quot;auto&quot;&gt;core-tnn1&lt;/code&gt;，而另外兩台的 SOCKS 帳號清單是空的，&lt;strong&gt;這個差異本身就證明它是攻擊者留下的&lt;/strong&gt;。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;5-反取證日誌被系統性破壞四台一致&quot;&gt;5. 反取證：日誌被系統性破壞（四台一致）&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;這是讓我們最難查的一件事。&lt;/p&gt;
&lt;p&gt;四台設備的日誌設定都被改成了&lt;strong&gt;無法保留任何紀錄&lt;/strong&gt;的狀態：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;記憶體日誌上限從原廠預設的 &lt;strong&gt;1000 筆改成 1 筆&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;涵蓋「登入事件、帳號建立、設定變更」的日誌類別&lt;strong&gt;全部停用&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;沒有設定外部 syslog 伺服器 → &lt;strong&gt;設備之外沒有任何副本&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;結果是四台各只剩下 1 筆日誌。&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;節點&lt;/th&gt;
&lt;th&gt;殘存的唯一一筆&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;lb-khh1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;09-10 16:27:07&lt;/code&gt; SSH 埠遭大量連線攻擊&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;core-tnn1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;09-10 16:43:18&lt;/code&gt; SSH 埠遭大量連線攻擊&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;node-tnn2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;09-14 13:35:56&lt;/code&gt; DHCP 警告&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;node-tnn1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;09-09 17:34:34&lt;/code&gt; 排程移除紀錄（設備時鐘；實際為 09-10 00:19）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;前兩筆很有意思 —— &lt;strong&gt;兩台在 16 分鐘內都記錄到對 SSH 埠的大量連線攻擊&lt;/strong&gt;。而 SSH 正是這次漏洞的攻擊面，2026-09-10 也正是 CISA 把這些漏洞列入 KEV 的同一天。&lt;/p&gt;
&lt;p&gt;這是唯一殘存、時間點與攻擊活動吻合的日誌。其餘全部被抹掉了。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;6-但有一樣東西活下來了&quot;&gt;6. 但有一樣東西活下來了&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;RouterOS 有一份「設定變更歷史」，記錄誰在什麼時候改了什麼。它&lt;strong&gt;只存在記憶體裡，重開機就永久消失&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;攻擊者沒有動它（也動不了）。而它清楚地畫出了入侵分界線：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;合法的維運變更全部標示 &lt;code dir=&quot;auto&quot;&gt;admin&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;惡意變更全部標示 &lt;code dir=&quot;auto&quot;&gt;0&lt;/code&gt; 或後門帳號名稱&lt;/li&gt;
&lt;li&gt;它直接記錄了 &lt;code dir=&quot;auto&quot;&gt;user gabor76 added&lt;/code&gt;、&lt;code dir=&quot;auto&quot;&gt;user mark65 added&lt;/code&gt;、&lt;code dir=&quot;auto&quot;&gt;user martin1 added&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;它顯示日誌壓制被反覆執行 20 次以上，橫跨 9 天&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;如果我們當初「先重開機再說」，這份東西會永久消失，而且無法補救。&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;7-第二條獨立的證據鏈&quot;&gt;7. 第二條獨立的證據鏈&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;設備上的每日自動備份&lt;strong&gt;沒有加密&lt;/strong&gt;，可以直接解析出每個時間點的帳號清單。這構成一條&lt;strong&gt;不依賴記憶體紀錄&lt;/strong&gt;的獨立證據鏈。&lt;/p&gt;
&lt;p&gt;最重要的發現是&lt;strong&gt;找到了入侵前的乾淨基準線&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;節點&lt;/th&gt;
&lt;th&gt;基準線備份時間&lt;/th&gt;
&lt;th&gt;當時的帳號&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;core-tnn1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2026-06-13&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;只有 &lt;code dir=&quot;auto&quot;&gt;admin&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;node-tnn1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2026-04-05&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;只有 &lt;code dir=&quot;auto&quot;&gt;admin&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;這是「那些後門帳號全部不是我們自己建的」的客觀證據&lt;/strong&gt;，不需要依賴任何人的記憶：這兩台上出現的 11 種後門帳號名稱，在基準線中都不存在；第 12 種 &lt;code dir=&quot;auto&quot;&gt;zkadmin&lt;/code&gt; 只出現在 &lt;code dir=&quot;auto&quot;&gt;lb-khh1&lt;/code&gt;，由攻擊者植入的排程自動建立。&lt;/p&gt;
&lt;p&gt;兩條證據鏈交叉比對，&lt;strong&gt;完全沒有矛盾&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;我們怎麼驗證這些結論&quot;&gt;我們怎麼驗證這些結論&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;處置一旦執行，記憶體裡的證據和設備上的檔案就永久消失，沒有第二次機會。所以在動手之前，我們做了一輪&lt;strong&gt;對抗式驗證&lt;/strong&gt; —— 主動嘗試推翻自己已經寫下的結論，只留下經得起檢驗的部分。&lt;/p&gt;
&lt;p&gt;我們用的標準是：&lt;strong&gt;這份取證要能直接交給執法單位。&lt;/strong&gt; 每一項結論都要有獨立的依據，每一份證物都要能和設備上的原始資料逐位元對上。&lt;/p&gt;
&lt;p&gt;這件事不是只做一次。修補與驗證期間，以及之後兩個月的複查，我們都用同樣的方式回頭核對結論與原始紀錄。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;經覆核後確認成立的結論&quot;&gt;經覆核後確認成立的結論&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;下列結論在對抗式驗證後&lt;strong&gt;確認成立&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;「7.23.4 / 7.24.2 修補不完全」成立&lt;/li&gt;
&lt;li&gt;攻擊者身分與來源成立（使用的是不存在於乾淨基準線中的後門帳號，時間與我方動作完全不重疊）&lt;/li&gt;
&lt;li&gt;C2 程式的惡意性成立（&lt;strong&gt;程式碼自證&lt;/strong&gt;，不依賴任何外部情報）&lt;/li&gt;
&lt;li&gt;反取證的責任歸屬&lt;strong&gt;反而被強化&lt;/strong&gt;（有一個具名的後門帳號直接修改了日誌規則）&lt;/li&gt;
&lt;li&gt;流量側錄基本排除（見&lt;a href=&quot;#%E9%97%9C%E6%96%BC%E6%B5%81%E9%87%8F%E6%98%AF%E5%90%A6%E8%A2%AB%E5%81%B4%E9%8C%84&quot;&gt;關於流量是否被側錄&lt;/a&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;意外發現資料平台的認證缺口&quot;&gt;意外發現：資料平台的認證缺口&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;這一段嚴格來說&lt;strong&gt;不屬於這次入侵造成的損害&lt;/strong&gt;，但它是這次事件調查的直接產物，而且&lt;strong&gt;風險比入侵本身更立即&lt;/strong&gt;。我們認為必須一併公開。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;怎麼發現的&quot;&gt;怎麼發現的&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;在追查「攻擊者有沒有可能從路由器讀取內網服務資料」時，我們&lt;strong&gt;從網際網路直接對各服務埠實測&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;結果發現的東西跟路由器無關 —— &lt;strong&gt;有兩台資料平台主機把叢集協調服務直接開放在網際網路上，而且完全沒有認證。&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;發現的內容&quot;&gt;發現的內容&lt;/h3&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;狀態（09/19 發現當時）&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;etcd（叢集協調服務）&lt;code dir=&quot;auto&quot;&gt;2379&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;兩台主機對全網開放，&lt;code dir=&quot;auto&quot;&gt;GET /v2/keys/&lt;/code&gt; 直接回 200&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;etcd 寫入&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;未認證即可 &lt;code dir=&quot;auto&quot;&gt;PUT&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patroni（資料庫高可用管理）REST &lt;code dir=&quot;auto&quot;&gt;8008&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;未認證，&lt;code dir=&quot;auto&quot;&gt;POST /config&lt;/code&gt;、&lt;code dir=&quot;auto&quot;&gt;/switchover&lt;/code&gt;、&lt;code dir=&quot;auto&quot;&gt;/restart&lt;/code&gt; 全部開放&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;etcd 版本&lt;/td&gt;
&lt;td&gt;3.5.17 —— &lt;strong&gt;含已知的認證繞過 CVE&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;aside aria-label=&quot;危險&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;危險&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;strong&gt;任何人、從網際網路上任何位置、不需要任何憑證，一個 HTTP 請求就能讀寫叢集協調資料，或觸發資料庫主從切換造成服務中斷。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;這比入侵本身更直接 —— 入侵至少需要先利用一個漏洞。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;aside aria-label=&quot;這條路不能免密碼進入資料庫&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;這條路不能免密碼進入資料庫&lt;/p&gt;&lt;div&gt;&lt;p&gt;Patroni 會從 etcd 讀取設定，但它的&lt;strong&gt;本機設定檔優先於分散式設定儲存&lt;/strong&gt;，所以從 etcd 注入的 &lt;code dir=&quot;auto&quot;&gt;pg_hba&lt;/code&gt; 不會生效。即使 etcd 可以被未認證改寫，也&lt;strong&gt;無法&lt;/strong&gt;藉此把 PostgreSQL 改成免密碼登入。&lt;/p&gt;&lt;p&gt;實際的最大影響是：&lt;strong&gt;可讀取叢集協調資料、可觸發服務中斷&lt;/strong&gt;。仍然嚴重，但不是「直接拿到資料庫」。我們不想把風險說得比實際更大。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h3 id=&quot;處置與驗證&quot;&gt;處置與驗證&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;09/19 當天完成修補。以下是修補後&lt;strong&gt;從外部實測&lt;/strong&gt;的結果：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;測試&lt;/th&gt;
&lt;th&gt;修補前&lt;/th&gt;
&lt;th&gt;修補後&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;etcd v2 &lt;code dir=&quot;auto&quot;&gt;GET /v2/keys/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;200&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;401&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;etcd v2 &lt;code dir=&quot;auto&quot;&gt;PUT /v2/keys/…&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;200&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;401&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;etcd v3 &lt;code dir=&quot;auto&quot;&gt;POST /v3/kv/range&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;正常回應&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;etcdserver: user name is empty&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patroni &lt;code dir=&quot;auto&quot;&gt;DELETE /switchover&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;200&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;401&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patroni &lt;code dir=&quot;auto&quot;&gt;GET /health&lt;/code&gt;（健康探測）&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;200&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;200&lt;/code&gt;（&lt;strong&gt;刻意保留&lt;/strong&gt;）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;etcd 版本&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;3.5.17&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;3.5.32&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;aside aria-label=&quot;修補過程中踩到的四個坑&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;修補過程中踩到的四個坑&lt;/p&gt;&lt;div&gt;&lt;p&gt;這一段寫給有相同架構的同業：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;etcd 的 v2 與 v3 認證是完全獨立的兩套。&lt;/strong&gt; 把 v2 鎖好之後，v3 仍然完全開放。必須分別啟用。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;guest&lt;/code&gt; 角色只在執行 &lt;code dir=&quot;auto&quot;&gt;auth enable&lt;/code&gt; 時才被建立。&lt;/strong&gt; 我們一開始先撤銷 &lt;code dir=&quot;auto&quot;&gt;guest&lt;/code&gt; 再啟用認證 → 得到「角色不存在」的錯誤，認證雖然啟用了，但&lt;strong&gt;未認證的讀取仍然回 200&lt;/strong&gt;。正確順序是&lt;strong&gt;先啟用認證，再撤銷 &lt;code dir=&quot;auto&quot;&gt;guest&lt;/code&gt;&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;docker compose up -d&lt;/code&gt; 不會因為掛載檔案的內容改變而重建容器。&lt;/strong&gt; 我們改了設定檔、跑了 &lt;code dir=&quot;auto&quot;&gt;up -d&lt;/code&gt;，它只印「Running」而不是「Recreated」，設定完全沒生效。必須用 &lt;code dir=&quot;auto&quot;&gt;restart&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patroni 的 &lt;code dir=&quot;auto&quot;&gt;patronictl reload&lt;/code&gt; 不足以套用 REST 認證設定&lt;/strong&gt;，必須重啟行程。&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h3 id=&quot;為什麼會這樣&quot;&gt;為什麼會這樣&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;跟路由器那件事是&lt;strong&gt;同一個根因的不同表現&lt;/strong&gt;：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;路由器：管理介面對全世界開放，因為「它一直好好的」&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;資料平台：叢集協調服務對全世界開放，因為「它在內網」&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;→ 兩者都沒有人真的從外部驗證過「它到底有沒有對外」&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;aside aria-label=&quot;警告&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;警告&lt;/p&gt;&lt;div&gt;&lt;p&gt;我們原本以為這些服務在內網。&lt;strong&gt;實際上 Docker 發佈的通訊埠會繞過 &lt;code dir=&quot;auto&quot;&gt;INPUT&lt;/code&gt; 鏈&lt;/strong&gt;（它們走 &lt;code dir=&quot;auto&quot;&gt;FORWARD&lt;/code&gt;），所以即使主機防火牆有規則，published port 依然對外可達。這是一個非常容易誤判的細節。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;處置&quot;&gt;處置&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;為什麼升級--改密碼完全不夠&quot;&gt;為什麼「升級 + 改密碼」完全不夠&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;這是最常見的誤解，也是我們必須說清楚的一點：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;後門所在&lt;/th&gt;
&lt;th&gt;升級能清除？&lt;/th&gt;
&lt;th&gt;改密碼能清除？&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;25 個最高權限後門帳號（12 種名稱）&lt;/td&gt;
&lt;td&gt;不能&lt;/td&gt;
&lt;td&gt;不能，帳號還在，只是密碼被改&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C2 程式（腳本 + 排程）&lt;/td&gt;
&lt;td&gt;不能&lt;/td&gt;
&lt;td&gt;不能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;每日自動重建的後門帳號&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;不能&lt;/td&gt;
&lt;td&gt;不能，&lt;strong&gt;改密碼也會被腳本覆寫&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;注入的 SSH 金鑰&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;不能&lt;/td&gt;
&lt;td&gt;不能，&lt;strong&gt;金鑰登入完全繞過密碼&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SOCKS 代理&lt;/td&gt;
&lt;td&gt;不能&lt;/td&gt;
&lt;td&gt;不能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;被破壞的日誌設定&lt;/td&gt;
&lt;td&gt;不能&lt;/td&gt;
&lt;td&gt;不能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;已洩漏的憑證與私鑰&lt;/td&gt;
&lt;td&gt;不能&lt;/td&gt;
&lt;td&gt;不能，必須輪換&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;C2 可重新投放&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;不能，只要連得到就能重裝&lt;/td&gt;
&lt;td&gt;不能&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;aside aria-label=&quot;警告&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;警告&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;strong&gt;必須走「保全證據 → 隔離 → 清除 → 輪換全部憑證」，而不是原地修補。&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h3 id=&quot;清理順序有硬性約束&quot;&gt;清理順序有硬性約束&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;這不是可以隨便排的：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;錯誤的順序&lt;/th&gt;
&lt;th&gt;正確的順序&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;先刪後門帳號 → 隔天凌晨 03:00 自動重建，白做&lt;/td&gt;
&lt;td&gt;先移除排程 → 再移除腳本 → 然後才刪帳號&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;先重開機 → C2 程式自動復活，記憶體證據全毀&lt;/td&gt;
&lt;td&gt;先移除 C2 的腳本與排程 → 才能重開機&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;先換密碼再升級 → 漏洞還在，改了也能再被繞過&lt;/td&gt;
&lt;td&gt;先升級切斷漏洞 → 再輪換憑證&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;aside aria-label=&quot;警告&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;警告&lt;/p&gt;&lt;div&gt;&lt;p&gt;另外，四台切斷攻擊者存取的動作要盡量同時進行，避免攻擊者從還沒處理的設備跳回來。而&lt;strong&gt;作為對外閘道的那一台必須放到最後&lt;/strong&gt; —— 它掛掉會同時失去對外連線和通往其他設備的路徑。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h3 id=&quot;完成進度&quot;&gt;完成進度&lt;/h3&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;狀態&lt;/th&gt;
&lt;th&gt;驗證方式&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;全程唯讀取證，未重開機、未清理&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;完成&lt;/td&gt;
&lt;td&gt;記憶體證據完整保全&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;全部證物 SHA256 ＋ 證據保管鏈&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;完成&lt;/td&gt;
&lt;td&gt;1000 份以上證據檔&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;四台升級至 &lt;strong&gt;7.24.4&lt;/strong&gt; ＋ RouterBOOT 韌體&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;完成&lt;/td&gt;
&lt;td&gt;版本與韌體皆實測確認；之後由自動更新升到 7.24.5、7.25、7.25.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;移除全部後門帳號與持久化機制&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;完成&lt;/td&gt;
&lt;td&gt;四台帳號各剩 1 個（僅 &lt;code dir=&quot;auto&quot;&gt;admin&lt;/code&gt;）；排程／腳本建立者全為 &lt;code dir=&quot;auto&quot;&gt;admin&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;移除注入的 SSH 公鑰&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;完成&lt;/td&gt;
&lt;td&gt;四台 SSH 公鑰數皆為 0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;關閉 SOCKS、bandwidth-server&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;完成&lt;/td&gt;
&lt;td&gt;四台皆 &lt;code dir=&quot;auto&quot;&gt;enabled=no&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;輪換四台管理密碼&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;完成&lt;/td&gt;
&lt;td&gt;舊密碼實測已失效&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;重建 VPN PKI（4 組新 CA ＋ 伺服器憑證）&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;完成&lt;/td&gt;
&lt;td&gt;舊 CA 簽發的憑證全部失效&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;輪換 &lt;strong&gt;9 把&lt;/strong&gt; WireGuard 私鑰&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;完成&lt;/td&gt;
&lt;td&gt;雙端同步，隧道握手正常&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;重新產生四台 SSH 主機金鑰&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;完成&lt;/td&gt;
&lt;td&gt;升級後重新產生，舊主機金鑰作廢&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SSH 管理介面限制來源白名單&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;完成&lt;/td&gt;
&lt;td&gt;外部暴力破解量歸零（見&lt;a href=&quot;#%E6%94%BB%E6%93%8A%E8%80%85%E8%A2%AB%E5%AE%8C%E5%85%A8%E6%93%8B%E5%9C%A8%E9%96%80%E5%A4%96%E7%9A%84%E9%A9%97%E8%AD%89&quot;&gt;前面&lt;/a&gt;）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;日誌強化（磁碟落地 ＋ 65535 筆）&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;完成&lt;/td&gt;
&lt;td&gt;磁碟日誌實際捕捉到再入侵嘗試&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;每週自動更新排程&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;完成&lt;/td&gt;
&lt;td&gt;四台錯開時段；10–11 月已自動完成 3 次升級&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;移除受污染的備份與調查產物&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;完成&lt;/td&gt;
&lt;td&gt;46 個檔案，並建立乾淨基準備份&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料平台認證缺口修補&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;完成&lt;/td&gt;
&lt;td&gt;外部實測 401（見&lt;a href=&quot;#%E8%99%95%E7%BD%AE%E8%88%87%E9%A9%97%E8%AD%89&quot;&gt;上一節&lt;/a&gt;）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;重新入侵比對&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;完成&lt;/td&gt;
&lt;td&gt;09/20、09/21、11/15 三次，四台皆無新跡象&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;剩餘節點檢查&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M12 16a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm10.67 1.47-8.05-14a3 3 0 0 0-5.24 0l-8 14A3 3 0 0 0 3.94 22h16.12a3 3 0 0 0 2.61-4.53Zm-1.73 2a1 1 0 0 1-.88.51H3.94a1 1 0 0 1-.88-.51 1 1 0 0 1 0-1l8-14a1 1 0 0 1 1.78 0l8.05 14a1 1 0 0 1 .05 1.02v-.02ZM12 8a1 1 0 0 0-1 1v4a1 1 0 0 0 2 0V9a1 1 0 0 0-1-1Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;strong&gt;未完成&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5 台中已檢查 2 台，見&lt;a href=&quot;#%E9%82%84%E6%B2%92%E6%9F%A5%E5%AE%8C%E7%9A%84%E9%83%A8%E5%88%86&quot;&gt;還沒查完的部分&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;h3 id=&quot;必須輪換的清單&quot;&gt;必須輪換的清單&lt;/h3&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;狀態&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;全部 VPN 帳號密碼（&lt;strong&gt;其中確認有一組帳號在兩台設備間重用了完全相同的密碼&lt;/strong&gt;）&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;完成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;全部 9 把 WireGuard 私鑰&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;完成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;VPN CA 與客戶端憑證（重簽並撤銷舊的）&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;完成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;四台全部管理帳號密碼&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;完成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;四台全部 SSH 主機金鑰&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;完成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;內網主機的服務認證資訊&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M12 16a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm10.67 1.47-8.05-14a3 3 0 0 0-5.24 0l-8 14A3 3 0 0 0 3.94 22h16.12a3 3 0 0 0 2.61-4.53Zm-1.73 2a1 1 0 0 1-.88.51H3.94a1 1 0 0 1-.88-.51 1 1 0 0 1 0-1l8-14a1 1 0 0 1 1.78 0l8.05 14a1 1 0 0 1 .05 1.02v-.02ZM12 8a1 1 0 0 0-1 1v4a1 1 0 0 0 2 0V9a1 1 0 0 0-1-1Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;部分完成&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;根本原因我們哪裡做錯了&quot;&gt;根本原因：我們哪裡做錯了&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;漏洞是廠商的，但&lt;strong&gt;被打進來 16 天沒發現，是我們的問題&lt;/strong&gt;。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;直接原因&quot;&gt;直接原因&lt;/h3&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;四台設備版本落後於安全性修補（3 到 6 個月）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SSH 管理介面對公網開放，且不限制來源 IP&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;攻擊者不需要密碼就取得完整管理權限&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;aside aria-label=&quot;警告&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;警告&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;strong&gt;修補在攻擊者部署主要惡意程式的 12 天前就已經釋出。&lt;/strong&gt; 這是整件事最關鍵的一句話。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h3 id=&quot;為什麼會拖-16-天&quot;&gt;為什麼會拖 16 天&lt;/h3&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;問題&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;沒有集中式日誌&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;日誌只存在設備本機，攻擊者一改設定證據就歸零。&lt;strong&gt;本案 80% 的證據缺口來自這一項&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;沒有設定變更告警&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;新增 25 個（12 種名稱）最高權限帳號、植入腳本與排程、修改日誌設定 —— &lt;strong&gt;沒有任何一項觸發通知&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;沒有出向流量監控&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;一台設備每 3 分鐘對荷蘭的 IP 發 HTTP 請求，&lt;strong&gt;連續 3 天、1536 次&lt;/strong&gt;，沒被發現&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;管理介面直接暴露於公網&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;設備上明明就有來源白名單機制，只是沒用在管理介面上&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;版本落後 3 到 6 個月&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;漏洞公告後 15 天仍未升級&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;沒有定期稽核&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;帳號清單、腳本、排程從來沒有定期比對過&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;過度信任內建偵測&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;「入侵旗標顯示正常」讓人安心，但它只比對已知指標&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;從未從外部驗證過暴露面&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;我們以為在內網的服務，實際上對全世界開放（見&lt;a href=&quot;#%E6%84%8F%E5%A4%96%E7%99%BC%E7%8F%BE%E8%B3%87%E6%96%99%E5%B9%B3%E5%8F%B0%E7%9A%84%E8%AA%8D%E8%AD%89%E7%BC%BA%E5%8F%A3&quot;&gt;資料平台那一節&lt;/a&gt;）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;h3 id=&quot;五個為什麼&quot;&gt;五個為什麼&lt;/h3&gt;&lt;/div&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;為什麼設備被完整接管？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;因為六個 CVE 全部未修補，而 SSH 對公網無限制開放。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;為什麼 CVE 未修補？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;因為沒有版本追蹤機制 —— 沒有人知道「我們的設備落後幾版」。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;為什麼沒有版本追蹤機制？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;因為網路設備被當成「裝好就不用管」的基礎設施，不像應用服務有 CI/CD 與相依套件掃描在盯。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;為什麼入侵持續 16 天沒被發現？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;因為日誌只存在設備本機，且沒有任何設定變更或出向流量的告警。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;為什麼沒有集中式日誌？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;因為過去從沒發生過事故，沒有動機去建。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;aside aria-label=&quot;警告&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;警告&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;strong&gt;最後一個答案，是這次事件真正的根本原因。&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;我們已經改的事&quot;&gt;我們已經改的事&lt;/h2&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;為什麼&lt;/th&gt;
&lt;th&gt;狀態&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;管理介面全面下架&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;只允許白名單與 VPN 來源。路由器本身於 09/19 完成；&lt;strong&gt;轉發到內網主機的 SSH 等服務則到 10/29 才補上白名單&lt;/strong&gt;（見&lt;a href=&quot;#%E5%BE%8C%E7%BA%8C%E8%BF%BD%E8%B9%A4&quot;&gt;後續追蹤&lt;/a&gt;）&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;完成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;啟用自動更新&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;本案的修補在攻擊前 12 天就存在 —— 自動更新原本就能擋下&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;完成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;關閉不必要的服務&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;包含這次的攻擊面之一 bandwidth-server&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;完成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;每台設備獨立的金鑰&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;不再用還原備份的方式複製設備設定&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;完成&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;aside aria-label=&quot;關於自動更新：它原本就能擋下這次攻擊&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;關於自動更新：它原本就能擋下這次攻擊&lt;/p&gt;&lt;div&gt;&lt;p&gt;我們特別檢查了這一點，因為它是最便宜的防線：&lt;/p&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;事件&lt;/th&gt;
&lt;th&gt;日期&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MikroTik 釋出修補&lt;/td&gt;
&lt;td&gt;2026-09-03&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;攻擊者部署 C2&lt;/td&gt;
&lt;td&gt;2026-09-15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;修補可取得的時間差&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;12 天&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;p&gt;只要有任何形式的自動更新（即使是每週一次），這次攻擊在 C2 植入前就會被擋下。&lt;/p&gt;&lt;p&gt;四台現已設定&lt;strong&gt;每週自動檢查並安裝更新&lt;/strong&gt;，且時段錯開，避免同時重開機造成服務全斷。10 月到 11 月間已實際自動完成三次升級（7.24.5、7.25、7.25.1）。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;還沒查完的部分&quot;&gt;還沒查完的部分&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;誠實列出來，因為這些會影響結論的完整性。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;與路由器相連的主機&quot;&gt;與路由器相連的主機&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;透過隧道與四台路由器相連的 2 台 Linux 主機都已檢查，結果乾淨。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;主機&lt;/th&gt;
&lt;th&gt;狀態&lt;/th&gt;
&lt;th&gt;結果&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;郵件 / WireGuard 對端主機（加拿大）&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;已檢查&lt;/td&gt;
&lt;td&gt;帳號、&lt;code dir=&quot;auto&quot;&gt;sudoers&lt;/code&gt;、&lt;code dir=&quot;auto&quot;&gt;sshd_config&lt;/code&gt;、cron 皆未變動；&lt;code dir=&quot;auto&quot;&gt;authorized_keys&lt;/code&gt; 乾淨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WireGuard 對端主機（新加坡）&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;已檢查&lt;/td&gt;
&lt;td&gt;同上&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;東京、大阪、台北三台是 VPS，沒有 RouterOS，不受這次的漏洞影響。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;技術上無法補救的限制&quot;&gt;技術上無法補救的限制&lt;/h3&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;限制&lt;/th&gt;
&lt;th&gt;影響&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;L-01&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;日誌已被破壞&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無法取得攻擊過程本身的證據。&lt;strong&gt;初始入侵途徑是研判，不是確證&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L-02&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;檔案系統層的植入無法檢查&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;這類植入無法透過一般指令觀察，需要離線磁碟鑑識&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L-03&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;韌體層無法驗證&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;若植入在韌體層，設備自己的所有輸出都不可信&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L-04&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;C2 是否曾成功下發指令無從查證&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;程式執行後立刻刪檔，沒有殘留&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;重刷（netinstall）方面：RouterOS 7.24beta1 起可以由另一台 RouterOS 遠端重刷，但兩台必須在同一個二層網段；我們四台實測不共用任何二層網段，所以重刷只能到場進行。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;我們無法排除的一件事&quot;&gt;我們無法排除的一件事&lt;/h3&gt;&lt;/div&gt;
&lt;aside aria-label=&quot;警告&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;警告&lt;/p&gt;&lt;div&gt;&lt;p&gt;攻擊者在握有路由器權限的那三天，&lt;strong&gt;可以主動連線到內網服務去讀取資料&lt;/strong&gt;。這不需要修改任何設定，因此不會留下痕跡。&lt;/p&gt;&lt;p&gt;我們的處理方式是：&lt;strong&gt;假設它發生過&lt;/strong&gt;，因此把路由器上存放的所有憑證與金鑰全部輪換，並對資料平台補上認證。但我們無法證明它沒有發生。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;給其他維運者的-10-條具體建議&quot;&gt;給其他維運者的 10 條具體建議&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;如果你也在跑 MikroTik，或更廣義地說，在跑任何「裝好就不太管」的網路設備，以下是我們用這次事件換來的東西。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;如果你懷疑自己也被打了先跑這幾項&quot;&gt;如果你懷疑自己也被打了，先跑這幾項&lt;/h3&gt;&lt;/div&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;列出帳號清單&lt;/strong&gt; —— 有沒有你不認識的名字？&lt;/p&gt;
&lt;p&gt;特別注意：&lt;code dir=&quot;auto&quot;&gt;ops&lt;/code&gt; / &lt;code dir=&quot;auto&quot;&gt;saryn&lt;/code&gt; / &lt;code dir=&quot;auto&quot;&gt;SystemMikrotik&lt;/code&gt; / &lt;code dir=&quot;auto&quot;&gt;routeradmin&lt;/code&gt; / &lt;code dir=&quot;auto&quot;&gt;system&lt;/code&gt; / &lt;code dir=&quot;auto&quot;&gt;operator&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;列出排程與腳本&lt;/strong&gt; —— 看「建立者」欄位，不要看名字&lt;/p&gt;
&lt;p&gt;建立者是 &lt;code dir=&quot;auto&quot;&gt;0&lt;/code&gt;（而非 &lt;code dir=&quot;auto&quot;&gt;admin&lt;/code&gt;）＋ 名字很像維運工作 = 高度可疑&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;列出使用者的 SSH 公鑰&lt;/strong&gt; —— 合法帳號上有沒有你沒掛過的金鑰？&lt;/p&gt;
&lt;p&gt;這是最隱蔽的一種後門，稽核帳號清單看不到&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;檢查日誌設定&lt;/strong&gt; —— 記憶體上限是不是被改小了？日誌規則是不是被停用？&lt;/p&gt;
&lt;p&gt;如果只剩 1 筆日誌，那本身就是入侵指標&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;檢查 SOCKS 代理是否被開啟&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;讀「設定變更歷史」&lt;/strong&gt; —— 它在記憶體裡，重開機就沒了，所以先讀它&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;h3 id=&quot;十條建議&quot;&gt;十條建議&lt;/h3&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;建議&lt;/th&gt;
&lt;th&gt;我們為什麼這樣說&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;不要先重開機&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;設定變更歷史只在記憶體。我們的整條時間軸都靠它。而且 C2 設定了開機自動啟動，重開機只會讓它復活&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;修補版本以原始通報者為準，不要相信漏洞資料庫&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;四個來源中只有 CERT Polska 寫出「7.23.4 修補不完全」。連原廠公告頁都沒寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;看建立者，不要看名字&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;daily-maint&lt;/code&gt;、&lt;code dir=&quot;auto&quot;&gt;logrotate&lt;/code&gt; 比我們自己寫的排程還像正常維運工作&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;「管理密碼突然失效」是入侵指標&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;掛上 SSH 金鑰會讓密碼登入被拒。我們一開始以為是自己記錯憑證&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;不要信任設備的內建入侵旗標&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;我們四台全部顯示正常，四台全部確認被入侵&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;不要只比對公開 IoC 清單&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;我們找到的 C2 不在任何公開清單上；公開清單上的兩個 IP 我們完全沒遇到&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;日誌必須離開設備&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;這是最高價值的一項。本案 80% 的證據缺口來自這一點&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;記憶體日誌不夠，要有磁碟日誌&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;我們捕捉到的兩次再入侵嘗試，&lt;strong&gt;在 15 分鐘內就被擠出記憶體緩衝區&lt;/strong&gt;。靠磁碟日誌才留下來&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;升級先於改密碼&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;漏洞還在的話，改密碼也能被繞過&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;清理順序：排程 → 腳本 → 帳號&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;反過來做，帳號隔天就會被腳本重建&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;h3 id=&quot;兩個容易誤判的技術細節&quot;&gt;兩個容易誤判的技術細節&lt;/h3&gt;&lt;/div&gt;
&lt;aside aria-label=&quot;① Docker 發佈的通訊埠會繞過 INPUT 鏈&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;① Docker 發佈的通訊埠會繞過 INPUT 鏈&lt;/p&gt;&lt;div&gt;&lt;p&gt;它們走的是 &lt;code dir=&quot;auto&quot;&gt;FORWARD&lt;/code&gt;。所以你在主機防火牆的 &lt;code dir=&quot;auto&quot;&gt;INPUT&lt;/code&gt; 寫再多規則，published port 依然對外可達。要嘛改 &lt;code dir=&quot;auto&quot;&gt;ports:&lt;/code&gt; 綁 &lt;code dir=&quot;auto&quot;&gt;127.0.0.1&lt;/code&gt;，要嘛用 &lt;code dir=&quot;auto&quot;&gt;DOCKER-USER&lt;/code&gt; 鏈（它在 Docker 自己的規則之前被評估，而且不會被 Docker 清空）。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;aside aria-label=&quot;② WireGuard 的 allowed-address 只過濾「來源」&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;② WireGuard 的 allowed-address 只過濾「來源」&lt;/p&gt;&lt;div&gt;&lt;p&gt;它不限制對端能連到哪裡。「對端只能用這幾個 IP」不等於「對端只能到這幾個地方」—— 能到哪裡是防火牆決定的。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;後續追蹤&quot;&gt;後續追蹤&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;事件處置完成之後，我們持續檢查並收緊防護。以下是到 2026/11/15 為止的進展。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;沒有再入侵&quot;&gt;沒有再入侵&lt;/h3&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;日期&lt;/th&gt;
&lt;th&gt;檢查&lt;/th&gt;
&lt;th&gt;結果&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;09/20、09/21&lt;/td&gt;
&lt;td&gt;完整健康檢查，並與乾淨基準比對&lt;/td&gt;
&lt;td&gt;四台皆無新跡象&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11/15&lt;/td&gt;
&lt;td&gt;同上，並把四台設定與最後一次授權變更後的快照&lt;strong&gt;逐行比對&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0 處差異&lt;/strong&gt;；已知的 9 項入侵特徵與漏洞利用嘗試皆為 0；日誌中每一筆設定變更與登入，都能對應到我們自己的操作或自動排程&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;aside aria-label=&quot;提示&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;提示&lt;/p&gt;&lt;div&gt;&lt;p&gt;路由器 SSH 的來源白名單從 09/19 生效至今，&lt;strong&gt;所有登入失敗紀錄的來源都是我們自己的站台&lt;/strong&gt;。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h3 id=&quot;自動更新確實在運作&quot;&gt;自動更新確實在運作&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;本文提到的每週自動更新，在 10 月到 11 月間已自動完成三次升級。四台錯開時段，沒有同時中斷。&lt;/p&gt;
&lt;section aria-label=&quot;時間軸&quot; data-astro-cid-z7ssoihh=&quot;&quot;&gt;&lt;ol role=&quot;list&quot; data-astro-cid-z7ssoihh=&quot;&quot;&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;resolved&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.8&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; d=&quot;M3.7 8.25 6.55 11.15 12.35 4.9&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;已恢復 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;10/05–10/08&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;自動升級至 7.24.5&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;resolved&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.8&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; d=&quot;M3.7 8.25 6.55 11.15 12.35 4.9&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;已恢復 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;10/26–10/29&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;自動升級至 7.25&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;resolved&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.8&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; d=&quot;M3.7 8.25 6.55 11.15 12.35 4.9&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;已恢復 &lt;/span&gt;&lt;time data-astro-cid-kroj6hsp=&quot;&quot;&gt;11/04–11/10&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;自動升級至 7.25.1&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/section&gt;
&lt;div&gt;&lt;h3 id=&quot;之後補上的防護&quot;&gt;之後補上的防護&lt;/h3&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;日期&lt;/th&gt;
&lt;th&gt;內容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;10/09&lt;/td&gt;
&lt;td&gt;統一四台的 DNS 與校時：區網裝置的 DNS 查詢一律導向路由器，由路由器經加密 DNS（DoH）向上游查詢；校時統一由路由器提供。過程中發現其中一台的 DNS 攔截被另一條路由設定打壞而失效，已修正&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10/11&lt;/td&gt;
&lt;td&gt;VPN 使用者的 DNS 也強制導向路由器；清除四台上未使用的撥號與 VPN 範本設定（其中包含指向第三方 DNS 的設定）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10/29&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;從網際網路實際掃描四台的對外埠&lt;/strong&gt;：轉發到內網主機的 10 個 SSH 埠與一個內部 AI 服務沒有來源限制，當日補上白名單並從白名單內外各驗證一次；經雲端主機轉入的流量也改為只放行服務需要的埠&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10/31&lt;/td&gt;
&lt;td&gt;修正 VPN 用戶端設定 &lt;code dir=&quot;auto&quot;&gt;auth-nocache&lt;/code&gt; 造成的每小時斷線：RouterOS 每小時重新協商金鑰時要再送一次帳密，而這個選項讓用戶端登入後就丟掉密碼。已從用戶端設定檔移除&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11/05&lt;/td&gt;
&lt;td&gt;盤點 IPv6：路由器底下的設備&lt;strong&gt;沒有任何 IPv6 對外路徑&lt;/strong&gt;，白名單不會被 IPv6 繞過&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;為什麼有些細節沒寫出來&quot;&gt;為什麼有些細節沒寫出來&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;這篇是公開版本。內部的完整取證報告含有明文密碼、私鑰、設備序號與內網拓樸，&lt;strong&gt;不會公開&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;本文的處理原則：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;類別&lt;/th&gt;
&lt;th&gt;處理&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;我方設備的公網 IP、序號、金鑰指紋、內網位址與拓樸&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;移除&lt;/strong&gt;，改以節點代號與地區表示&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VPN 帳密、私鑰、憑證內容&lt;/td&gt;
&lt;td&gt;只描述數量與型別，不列值&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;資料平台的主機位址、資料庫帳號密碼&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;移除&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;攻擊者的 C2 位址、來源 IP、後門帳號名稱、惡意程式檔名、持久化手法、注入金鑰指紋&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;完整揭露&lt;/strong&gt; —— 這些對其他防守方有價值&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;完整取證資料（1000 份以上的證據檔、全案 SHA256 清單、證據保管鏈、驗證紀錄）保存於 private 證據庫。&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;結語&quot;&gt;結語&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;首先向所有受影響的使用者致歉。&lt;/strong&gt; DPIP 是一個防災服務，服務的穩定與可信度直接關係到它存在的意義。這次事件是我們在基礎設施維運上的疏失，沒有推託的餘地。&lt;/p&gt;
&lt;p&gt;三件我們認為必須講出來的事：&lt;/p&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;修補在攻擊者植入 C2 的 12 天前就已經釋出。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;這不是零時差攻擊。任何形式的自動更新 —— 即使是每週跑一次 —— 都能擋下這次攻擊。我們沒有做，因為網路設備被當成「裝好就不用管」的東西。這是最便宜的防線，而我們沒有架。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;我們差一點就毀掉自己的證據。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;「先重開機再說」是最自然的反應。如果當初那樣做，唯一能證明「誰在何時建立了哪個後門帳號」的紀錄會永久消失，而且 C2 程式會因為開機自動啟動的設定而復活。取證優先於復原，這個判斷事後證明是對的。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;那個叫 &lt;code dir=&quot;auto&quot;&gt;ops&lt;/code&gt; 的後門帳號在設備上躺了 16 天。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;它是官方公告直接點名的入侵指標，只要跑一個指令列出帳號清單就看得到。我們沒有跑，因為沒有人覺得需要去看一台「一直好好的」路由器。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;發布紀錄&quot;&gt;發布紀錄&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;本文於 2026/11/15 發布。事件當天（09/18）我們先以&lt;a href=&quot;https://exptech.dev/announcement/?id=50&quot;&gt;公告&lt;/a&gt;發布摘要。&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;參考資料&quot;&gt;參考資料&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://cert.pl/en/posts/2026/09/mikrotik-routeros-cve/&quot;&gt;CERT Polska — Vulnerabilities in MikroTik RouterOS software&lt;/a&gt;（原始通報者，&lt;strong&gt;修補版本以此為準&lt;/strong&gt;）&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.bleepingcomputer.com/news/security/hackers-exploit-new-mikrotik-routeros-flaws-to-hijack-routers/&quot;&gt;BleepingComputer — Hackers exploit new MikroTik RouterOS flaws to hijack routers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.triskelelabs.com/resources/critical-mikrotik-routeros-vulnerabilities-under-active-exploitation-mikrotrick&quot;&gt;Triskele Labs — Critical MikroTik RouterOS Vulnerabilities under Active Exploitation (MikroTrick)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mikrotik.com/supportsec&quot;&gt;MikroTik Security Advisories&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cisa.gov/known-exploited-vulnerabilities-catalog&quot;&gt;CISA Known Exploited Vulnerabilities Catalog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>RCA</category><category>CVE</category></item><item><title>同一場地震，為什麼會算出兩個不同的震度？</title><link>https://exptech.dev/en/blog/sharing-2026-07-29/</link><guid isPermaLink="true">https://exptech.dev/en/blog/sharing-2026-07-29/</guid><description>熊本 M7.1，同一台地震儀的同一筆紀錄，換一種處理方式，算出來的最大地動速度差了三成。這篇用 16 張圖解釋差異從哪來、哪一個才對，以及為什麼這件事的答案不在法規裡。</description><pubDate>Wed, 29 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;2026 年 7 月 28 日，日本熊本縣熊本地方發生規模 7.1 的地震，日本氣象廳命名為「令和 8 年熊本地震」。震源在&lt;strong&gt;內陸&lt;/strong&gt;、深度約 16 公里，研判為日奈久斷層帶錯動，最大震度 7（宇城市、氷川町）。日本的強震觀測網記錄下 125 個測站的完整波形，資料完全公開。&lt;/p&gt;
&lt;p&gt;我拿其中一站的紀錄，用兩種常見的處理方式各算了一次&lt;strong&gt;最大地動速度&lt;/strong&gt;——這是決定震度的關鍵數字。結果是：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;98.92 和 130.83。差了三成。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;同一筆資料、同一個公式、同一台電腦。差別只在中間有一個步驟，做法不同。&lt;/p&gt;

&lt;p&gt;哪一個才對？我原本以為查一下規定就有答案。結果發現，&lt;strong&gt;規定寫到頻率範圍就停了&lt;/strong&gt;，剩下的得自己往別處找線索。&lt;/p&gt;
&lt;p&gt;這篇記錄整個查證過程。沒有程式碼，但有 16 張圖。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;先講結論&quot;&gt;先講結論&lt;/h2&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;問題&lt;/th&gt;
&lt;th&gt;答案&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;為什麼會差三成？&lt;/td&gt;
&lt;td&gt;中間那個步驟會把不同頻率的波&lt;strong&gt;錯開不同的時間&lt;/strong&gt;，而「最大值」對這件事極度敏感&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;哪一個比較接近真實地動？&lt;/td&gt;
&lt;td&gt;差三成的那個（130.83）比較忠實，但它的波形裡有&lt;strong&gt;物理上不可能發生&lt;/strong&gt;的東西&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;那台灣的震度該用哪個？&lt;/td&gt;
&lt;td&gt;用 98.92 那個。理由不是「它比較準」，而是&lt;strong&gt;台灣的震度公式當初就是這樣校準的&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;法規怎麼規定？&lt;/td&gt;
&lt;td&gt;規定了「濾掉哪個頻率範圍」，&lt;strong&gt;濾波方式則屬於實作層面&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;h2 id=&quot;一地震儀錄到的東西不能直接拿來用&quot;&gt;一、地震儀錄到的東西，不能直接拿來用&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;地震儀記錄的是&lt;strong&gt;加速度&lt;/strong&gt;——地面每一瞬間被搖動的劇烈程度。以這場地震離震央最近的測站之一為例：&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2026-07-29/fig16-waveform.webp&quot; alt=&quot;地震儀記錄的三分量加速度波形&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1400&quot; height=&quot;745&quot;&gt;&lt;figcaption&gt;圖 16　一個測站錄到的三個方向加速度，每秒 100 個取樣點、共 300 秒&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;地震儀有三個方向：南北、東西、上下。每秒取樣 100 次，這段紀錄有 300 秒、三萬個點。&lt;/p&gt;
&lt;p&gt;但這串數字不能直接用，有兩個原因：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;裡面有雜訊。&lt;/strong&gt; 車輛、風、儀器本身的電子雜訊，都混在裡面。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;要算「速度」得先積分，而積分會失控。&lt;/strong&gt; 加速度累加成速度時，只要原始資料有一點點微小的偏差，累加幾萬次之後就會漂移到天上去。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;所以要&lt;strong&gt;濾波&lt;/strong&gt;——把不需要的頻率成分濾掉。可以想成一個篩子：太高頻的（雜訊）篩掉，太低頻的（漂移）也篩掉，留下地震真正的能量。&lt;/p&gt;
&lt;p&gt;聽起來很單純。問題出在&lt;strong&gt;篩子有兩種做法&lt;/strong&gt;。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;二兩種濾波現場直播-vs-錄影後製&quot;&gt;二、兩種濾波：現場直播 vs 錄影後製&lt;/h2&gt;&lt;/div&gt;
&lt;div data-astro-cid-7qmvx3iy=&quot;&quot;&gt;&lt;article data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;p data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;span data-astro-cid-oag6qnet=&quot;&quot;&gt;做法 A：只能看過去（因果）&lt;/span&gt;&lt;/p&gt;&lt;div data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;span data-astro-cid-f4zorn72=&quot;&quot;&gt;直播式&lt;/span&gt;&lt;p&gt;處理到第 100 個資料點時，只准使用第 1 到第 100 點。&lt;strong&gt;不准偷看後面。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;這就像&lt;strong&gt;現場直播&lt;/strong&gt;——主播只能根據已經發生的事情反應，不可能知道三秒後會發生什麼。&lt;/p&gt;&lt;p&gt;地震預警系統只能這樣做。地震還在發生，未來的資料根本還不存在。&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;article data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;p data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;span data-astro-cid-oag6qnet=&quot;&quot;&gt;做法 B：可以看未來（零相位）&lt;/span&gt;&lt;/p&gt;&lt;div data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;span data-astro-cid-f4zorn72=&quot;&quot;&gt;後製式&lt;/span&gt;&lt;p&gt;先把整段錄完，再從頭到尾濾一次、然後&lt;strong&gt;反過來從尾到頭再濾一次&lt;/strong&gt;。第二次等於用到了「未來」的資料。&lt;/p&gt;&lt;p&gt;這就像&lt;strong&gt;錄影後製&lt;/strong&gt;——整集拍完了，剪接師可以先看完再回頭調整任何一格。&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/div&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2026-07-29/fig01-impulse-response.webp&quot; alt=&quot;因果與零相位濾波器對單一脈衝的反應&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1192&quot; height=&quot;738&quot;&gt;&lt;figcaption&gt;圖 1　同一個脈衝，兩種濾波的反應完全不同&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;圖 1 是把一個「瞬間敲擊」丟進兩種濾波器看反應。上圖（直播式）敲下去之後才有反應，很合理。下圖（後製式）&lt;strong&gt;敲擊還沒發生，就已經有反應了&lt;/strong&gt;——因為它用到了未來的資料。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;為什麼不能兩全其美&quot;&gt;為什麼不能兩全其美？&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;有人會問：那能不能做一個「只看過去、又完全不扭曲」的濾波器？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;對這裡用的這一類濾波器來說，不行。&lt;/strong&gt;&lt;/p&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;規格用的是遞迴式濾波器&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;台灣和日本的規格用的都是&lt;strong&gt;遞迴式&lt;/strong&gt;濾波器：少數幾個係數反覆套用、計算極省，適合即時。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;只能看過去，就受一條硬性限制&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;只要一個遞迴式濾波器是「只能看過去」的，它的&lt;strong&gt;扭曲程度就被它的篩選效果決定了&lt;/strong&gt;，沒得選。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;完全不扭曲，就等於什麼都不做&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;唯一完全不扭曲的「只看過去」遞迴濾波器，是「什麼都不做」。只要你真的想篩掉什麼，就一定會產生扭曲。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;aside aria-label=&quot;一個例外&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;一個例外&lt;/p&gt;&lt;div&gt;&lt;p&gt;嚴格說，「只看過去」和「不扭曲」並非絕對互斥：&lt;strong&gt;對稱型 FIR 濾波器&lt;/strong&gt;也是因果的，而且把所有頻率延後&lt;strong&gt;同樣&lt;/strong&gt;的時間，不會造成本文要講的錯位。代價是它需要很多係數，而且整段訊號會被延後一段固定時間——即時系統付的就是這個延遲，零延遲仍然做不到。本文比較的兩種做法都是遞迴式，所以底下的推論不受影響。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2026-07-29/fig02-magnitude-phase.webp&quot; alt=&quot;振幅響應與相位響應的對比&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1452&quot; height=&quot;587&quot;&gt;&lt;figcaption&gt;圖 2　兩種做法篩掉的東西差不多（左），但扭曲程度天差地別（右）&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;圖 2 左邊是「篩掉了多少」——兩種做法差不多。右邊是「扭曲了多少」——直播式（藍線）扭曲很大，後製式（橘線）是一條零。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;這就是全部的差別。&lt;/strong&gt; 篩選效果一樣，扭曲不一樣。&lt;/p&gt;
&lt;aside aria-label=&quot;一個容易搞混的地方&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;一個容易搞混的地方&lt;/p&gt;&lt;div&gt;&lt;p&gt;「來回濾兩次」不只是把扭曲消掉，它同時也&lt;strong&gt;濾得更用力了&lt;/strong&gt;（等於濾了兩遍）。所以兩種做法的差異裡，其實混了「扭曲」和「篩得多寡」兩件事。後面的實驗會把這兩者分開。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h2 id=&quot;三扭曲一下最大值為什麼會差三成&quot;&gt;三、扭曲一下，最大值為什麼會差三成？&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;關鍵不同頻率被延後不同的時間&quot;&gt;關鍵：不同頻率被延後不同的時間&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;「扭曲」具體是什麼意思？我實際量了一下：拿標準的正弦波餵進濾波器，看它出來時被移動了多少時間。&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2026-07-29/fig03-group-delay.webp&quot; alt=&quot;不同頻率被延後不同時間&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1270&quot; height=&quot;646&quot;&gt;&lt;figcaption&gt;圖 3　直播式濾波把不同頻率的波移動了不同的時間&lt;/figcaption&gt;&lt;/figure&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;波的頻率&lt;/th&gt;
&lt;th&gt;被移動&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;每 10 秒振動一次&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;−3.43 秒&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;每 5 秒振動一次&lt;/td&gt;
&lt;td&gt;−0.75 秒&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;每 2 秒振動一次&lt;/td&gt;
&lt;td&gt;−0.09 秒&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;每秒振動 1 次&lt;/td&gt;
&lt;td&gt;幾乎不動&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;每秒振動 2 次&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+0.03 秒&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;地震波的能量主要就落在這個範圍。&lt;strong&gt;同一段波形裡，慢的成分和快的成分被錯開了 3.5 秒。&lt;/strong&gt;&lt;/p&gt;
&lt;aside aria-label=&quot;表裡的負號不是偷看未來&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;表裡的負號不是偷看未來&lt;/p&gt;&lt;div&gt;&lt;p&gt;這裡量的是穩定正弦波的&lt;strong&gt;相位延遲&lt;/strong&gt;，而一段從頭振到尾的正弦波沒有「起點」，談不上因果問題。真正決定能量何時抵達的是&lt;strong&gt;群延遲&lt;/strong&gt;，這個濾波器在上述每個頻率的群延遲都是正的，也就是一律延後。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h3 id=&quot;最大值是大家同時用力的結果&quot;&gt;最大值是「大家同時用力」的結果&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;這才是重點。地動的最大值不是某一個頻率造成的，而是&lt;strong&gt;很多不同頻率的波，剛好在某一瞬間同時到達波峰、疊加起來&lt;/strong&gt;的結果。&lt;/p&gt;
&lt;p&gt;像一群人推車：大家同時用力，車就衝出去；錯開幾秒各推各的，車就只是晃兩下。&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2026-07-29/fig04-peak-misalignment.webp&quot; alt=&quot;峰值是相位對齊的產物&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1270&quot; height=&quot;793&quot;&gt;&lt;figcaption&gt;圖 4　成分完全沒變，只是錯開時間，最大值就掉了三成&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;圖 4 上半是四個頻率的波同時到達波峰，疊出 3.20 的高峰。下半是同樣那四個波，只是照圖 3 的量錯開時間——最大值掉到 2.18。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;這裡我只是把四個波在時間上平移，沒有削掉任何成分&lt;/strong&gt;——所以能量一點都沒少，純粹是不同步造成的。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;決定性的實驗&quot;&gt;決定性的實驗&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;上面是示意圖。要證明差異&lt;strong&gt;純粹&lt;/strong&gt;來自「錯開時間」而不是「篩掉了東西」，得做一個更乾淨的實驗。&lt;/p&gt;
&lt;p&gt;我用&lt;strong&gt;完全相同的濾波器&lt;/strong&gt;跑了兩次，唯一的差別是第二次把「扭曲」那部分拿掉——篩掉的東西一模一樣，只有時間對齊不同。&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2026-07-29/fig05-energy-vs-peak.webp&quot; alt=&quot;能量一模一樣，最大值差三成&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1300&quot; height=&quot;836&quot;&gt;&lt;figcaption&gt;圖 5　決定性實驗：總能量完全相同，最大值差 33%&lt;/figcaption&gt;&lt;/figure&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;同一段速度波形&lt;/th&gt;
&lt;th&gt;有扭曲（直播式）&lt;/th&gt;
&lt;th&gt;無扭曲（後製式）&lt;/th&gt;
&lt;th&gt;比值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;總能量&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;7.7444&lt;/td&gt;
&lt;td&gt;7.7443&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1.0000&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;最大值&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;98.919&lt;/td&gt;
&lt;td&gt;131.923&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1.3336&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;總能量到小數第三位完全相同（7.744），最大值差 33%。&lt;/strong&gt;&lt;/p&gt;
&lt;aside aria-label=&quot;這不代表濾波不會改變能量&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;這不代表濾波不會改變能量&lt;/p&gt;&lt;div&gt;&lt;p&gt;上面的結果不代表「濾波不會改變能量」。濾波當然會改變能量——高通、低通、帶通只要把某個頻段削掉，總能量、平均振動強度、最大值、積分結果全都會跟著變。&lt;strong&gt;那本來就是濾波的目的。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;這個實驗成立的前提是：&lt;strong&gt;兩次處理篩掉的東西完全一樣&lt;/strong&gt;，只有時間對齊不同。在這個前提下，總能量不變是有數學保證的——因為總能量只取決於「每個頻率剩下多少振幅」，跟「這些成分在時間上怎麼排列」無關。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;在篩選效果相同的兩種濾波之間比較時&lt;/strong&gt;，時間錯位會大幅改變瞬時的最大值，但不會改變各頻率的能量分布。而震度量的，就是「最集中的那一瞬間」。&lt;/p&gt;&lt;p&gt;所以這個實驗證明的是：直播式與後製式在最大值上的落差，&lt;strong&gt;主要來自時間錯位&lt;/strong&gt;，而不是因為其中一方多濾掉了什麼。它並沒有、也不能證明「濾波不影響能量」。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h2 id=&quot;四那後製版比較準嗎&quot;&gt;四、那後製版比較準嗎？&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;先講它的副作用，這個副作用很嚴重。&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2026-07-29/fig06-acausal-precursor.webp&quot; alt=&quot;零相位濾波產生的前振鈴&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1504&quot; height=&quot;613&quot;&gt;&lt;figcaption&gt;圖 6　後製版的代價：地震波還沒到，地面就先動了&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;右圖放大了 P 波（地震最先到達的波）抵達之前的那幾秒。藍線（直播式）貼著零——地震還沒到，地面本來就不該動。&lt;strong&gt;橘線（後製式）卻已經開始晃了。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;這個現象叫&lt;strong&gt;前振鈴&lt;/strong&gt;。原因就是「用到未來資料」：處理第 100 個點的時候偷看了第 150 點，於是後面的地震波「洩漏」到了前面。&lt;/p&gt;
&lt;p&gt;從「這段波形有可能真的發生嗎」來看，&lt;strong&gt;後製版產生了物理上不可能的東西&lt;/strong&gt;——因還沒發生，果就先出現了。&lt;/p&gt;
&lt;p&gt;那後製版有什麼好？&lt;strong&gt;它沒有把不同頻率的成分錯開。&lt;/strong&gt; 所以論「最大值有沒有被打散」，後製版比較忠實——最大值留在原本該有的時間點與大小。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;兩邊各有代價&quot;&gt;兩邊各有代價&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;所以這件事沒有單一的正確答案。關鍵是&lt;strong&gt;兩種做法各自破壞了不同的東西&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;你在意的事&lt;/th&gt;
&lt;th&gt;該用&lt;/th&gt;
&lt;th&gt;但要付的代價&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;地面真正晃了多大（最大值不被打散）&lt;/td&gt;
&lt;td&gt;後製式（零相位）&lt;/td&gt;
&lt;td&gt;波形出現物理上不可能的前振鈴&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;波形不要出現「因還沒到、果就先到」&lt;/td&gt;
&lt;td&gt;直播式（因果）&lt;/td&gt;
&lt;td&gt;各頻率成分之間的相對時間被錯開&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;即時預警（未來的資料根本還不存在）&lt;/td&gt;
&lt;td&gt;只能用直播式&lt;/td&gt;
&lt;td&gt;同上&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;講白一點：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;後製式&lt;/strong&gt;保住了「各成分的時間關係」，犧牲了「因果順序」。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;直播式&lt;/strong&gt;保住了「因果順序」，犧牲了「各成分的時間關係」。&lt;/li&gt;
&lt;/ul&gt;
&lt;aside aria-label=&quot;直播式不代表時間比較準&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;直播式不代表時間比較準&lt;/p&gt;&lt;div&gt;&lt;p&gt;前面圖 3 已經看到，直播式把慢的成分和快的成分錯開了 3.5 秒。它守住的是「不會無中生有」，不是「時間精確」。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h2 id=&quot;五125-個測站告訴我們什麼&quot;&gt;五、125 個測站告訴我們什麼&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;一個測站看不出全貌。我把這場地震全部 125 個測站都算了兩遍。&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2026-07-29/fig07-125-scatter.webp&quot; alt=&quot;125 個測站的比值分布&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1348&quot; height=&quot;646&quot;&gt;&lt;figcaption&gt;圖 7　125 個測站：直播式造成的是亂跳，不是固定偏低&lt;/figcaption&gt;&lt;/figure&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2026-07-29/fig08-125-hist.webp&quot; alt=&quot;比值的直方圖&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1452&quot; height=&quot;579&quot;&gt;&lt;figcaption&gt;圖 8　最大速度的離散程度約 ±11%，最大加速度相對集中&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;如果直播式濾波「總是低估」，那所有的點應該落在同一側。&lt;strong&gt;實際上是 73 站偏低、52 站偏高，幾乎對半。&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;統計（後製 ÷ 直播）&lt;/th&gt;
&lt;th&gt;中位數&lt;/th&gt;
&lt;th&gt;範圍&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;最大速度&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1.020&lt;/td&gt;
&lt;td&gt;0.75 ~ 1.41&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;最大加速度&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.992&lt;/td&gt;
&lt;td&gt;0.82 ~ 1.05&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;再做一次控制實驗，把「篩得多寡」的因素也扣掉，只留純粹的時間錯位效應——中位數 1.010、68 站偏低、57 站偏高。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;結論：直播式濾波造成的不是系統性低估，而是站站不同、無法預測的亂跳。&lt;/strong&gt;&lt;/p&gt;
&lt;aside aria-label=&quot;速度差三成，震度大約差 0.26&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;速度差三成，震度大約差 0.26&lt;/p&gt;&lt;div&gt;&lt;p&gt;震度的換算用的是對數（震度 = 2.14 × log₁₀ PGV + 1.89），所以速度差三成只換算成大約 0.26 個震度單位。這場地震 125 站裡，換一種算法會跳一級的只有 4 站，而且全部卡在級距的邊界上。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h2 id=&quot;六那規定是怎麼寫的&quot;&gt;六、那規定是怎麼寫的？&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;我原本以為這題早就有標準答案，翻一下文件就好。&lt;/p&gt;
&lt;p&gt;台灣震度的法定依據是《交通部中央氣象署有感地震報告發布作業要點》的附表〈地震震度分級表〉註2。它把震度的計算寫成九個步驟，其中跟濾波有關的是這兩句：&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;
&lt;p&gt;資料進行 &lt;strong&gt;10Hz 低通濾波&lt;/strong&gt;處理，適度過濾瞬間振動的高頻訊號。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;將 3 向量原始加速度資料積分至速度，同時進行 &lt;strong&gt;0.075Hz 低切濾波&lt;/strong&gt;移除因積分動作所引進的低頻訊號。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;aside aria-label=&quot;第 6 步的「原始」加速度不是第 2 步的結果&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;第 6 步的「原始」加速度不是第 2 步的結果&lt;/p&gt;&lt;div&gt;&lt;p&gt;順帶一提第 6 步的「原始加速度資料」：算最大速度走的是另一條路，直接從未經 10Hz 低通的原始波形積分，不是拿第 2 步的結果再用一次。這點很容易做錯。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;&lt;strong&gt;規定寫到「濾掉哪個頻率範圍」為止。&lt;/strong&gt; 至於用哪一種濾波方式，就落在實作層面了。&lt;/p&gt;
&lt;p&gt;這在技術規範裡其實很常見——法規通常界定「要達到什麼結果」，不會把每個實作細節都寫死。留白的部分，就交給慣例和專業判斷。&lt;/p&gt;
&lt;p&gt;所以「該用直播式還是後製式」這一題，得往別的地方找線索。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;線索在當初訂出震度公式的論文裡&quot;&gt;線索在當初訂出震度公式的論文裡&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;台灣震度公式的兩個係數出自吳逸民教授團隊。翻他們的系列論文：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;論文&lt;/th&gt;
&lt;th&gt;寫了什麼&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Wu &amp;#x26; Kanamori (2005)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;對台灣的強震記錄用的是「&lt;strong&gt;遞迴式&lt;/strong&gt;」濾波器——遞迴就是只看過去的意思——而且同一篇論文裡就引用了台灣的震度公式。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Wu 等人 (2007)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;更直接寫出「&lt;strong&gt;單向&lt;/strong&gt;（one-way）」濾波器。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Wu、蕭乃祺與鄧大量 (2004)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;這篇是氣象署官方引用的公式出處。寫著氣象局用的是「&lt;strong&gt;時域遞迴濾波器&lt;/strong&gt;，基本上是&lt;strong&gt;即時&lt;/strong&gt;運作的」。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;最後這點是關鍵：&lt;strong&gt;氣象署要在地震發生後幾十秒內發布各縣市震度，強震即時警報更是以秒計。即時系統不可能取用未來的資料。&lt;/strong&gt;&lt;/p&gt;
&lt;aside aria-label=&quot;係數怎麼來的，論文沒寫&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;係數怎麼來的，論文沒寫&lt;/p&gt;&lt;div&gt;&lt;p&gt;當初訂出那兩個係數的論文，並沒有交代他們怎麼處理資料。所以「因果的慣例被寫進了係數裡」是個合理的推論，而不是白紙黑字。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h3 id=&quot;國際上的做法不太一樣&quot;&gt;國際上的做法不太一樣&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;換到國際強震資料的處理慣例，答案反而是相反的：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;來源&lt;/th&gt;
&lt;th&gt;立場&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;國際強震資料處理準則&lt;/strong&gt;（COSMOS, 2004）&lt;/td&gt;
&lt;td&gt;「&lt;strong&gt;一般情況下應使用非因果（後製式）濾波器&lt;/strong&gt;……若使用因果濾波器（&lt;strong&gt;例如即時應用&lt;/strong&gt;），務必明確載明。」&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Boore &amp;#x26; Akkar (2003)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;也推薦後製式。理由是「直播式的結果對參數選擇太敏感」，&lt;strong&gt;不是&lt;/strong&gt;「最大值比較準」。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;反方向的研究&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;有學者發現，條件相同時，兩種做法算出來的地震工程用參數「&lt;strong&gt;在統計上無法區分&lt;/strong&gt;」。需要精確時間關係的應用（例如定位震央），&lt;strong&gt;直播式反而是首選&lt;/strong&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;會有這種分歧，是因為&lt;strong&gt;兩邊要的東西不一樣&lt;/strong&gt;：國際強震資料庫的用途是給工程師做結構分析，追求波形忠實；而震度是要即時發布的公共資訊，追求的是能不能算得出來、以及跟過去的紀錄可不可比。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;那到底該用哪個&quot;&gt;那到底該用哪個？&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;回到最實際的問題：如果你要算的是&lt;strong&gt;能跟氣象署發布值對照的震度&lt;/strong&gt;，那就用直播式。&lt;/p&gt;
&lt;aside aria-label=&quot;用直播式，是為了跟氣象署同一套做法&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;用直播式，是為了跟氣象署同一套做法&lt;/p&gt;&lt;div&gt;&lt;p&gt;理由不是「它比較準」，而是氣象署的作業環境是即時的（物理上不可能用到未來資料），而震度公式的係數也是在那個環境下校準出來的。&lt;strong&gt;要讓數字可比，就得用同一套做法。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;濾掉的頻率範圍依照法規；至於用哪一種濾波，屬於實作選擇——這裡選直播式，是為了與氣象署的作業慣例一致。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h2 id=&quot;七三種算法並列&quot;&gt;七、三種算法並列&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;查清楚之後，我讓計算同時輸出三組數字，方便交叉比對。&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2026-07-29/fig09-pipelines.webp&quot; alt=&quot;三條處理流程並列&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1522&quot; height=&quot;750&quot;&gt;&lt;figcaption&gt;圖 9　三條處理流程：差別只在中間兩格，前後步驟完全相同&lt;/figcaption&gt;&lt;/figure&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2026-07-29/fig10-three-way.webp&quot; alt=&quot;125 站三種算法的比值&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1478&quot; height=&quot;653&quot;&gt;&lt;figcaption&gt;圖 10　最大加速度差在「篩掉多少高頻」，最大速度差在「有沒有扭曲」&lt;/figcaption&gt;&lt;/figure&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;三種比較&lt;/th&gt;
&lt;th&gt;最大加速度中位&lt;/th&gt;
&lt;th&gt;最大速度中位&lt;/th&gt;
&lt;th&gt;最大速度離散程度&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;後製 ÷ 直播&lt;/td&gt;
&lt;td&gt;0.992&lt;/td&gt;
&lt;td&gt;1.020&lt;/td&gt;
&lt;td&gt;0.111&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;日本規格 ÷ 直播&lt;/td&gt;
&lt;td&gt;1.022&lt;/td&gt;
&lt;td&gt;1.030&lt;/td&gt;
&lt;td&gt;0.113&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;日本規格 ÷ 後製&lt;/td&gt;
&lt;td&gt;1.032&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1.008&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.047&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;最後一列是重點：&lt;strong&gt;日本規格和後製式的最大速度只差 0.8%&lt;/strong&gt;，是三組比較裡最接近的——因為&lt;strong&gt;兩者都是後製式&lt;/strong&gt;，只差在篩掉的頻率範圍略有不同。而任一者跟直播式比，離散程度都在 ±11% 上下（個別測站最多可差到 −25% ~ +41%）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;差異主要來自「有沒有扭曲」，不是來自「篩掉多少」。&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;八順便解開日本沒公開的一個謎&quot;&gt;八、順便解開日本沒公開的一個謎&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;日本防災科學技術研究所（NIED）公布了他們計算最大速度用的濾波器參數，但&lt;strong&gt;沒說是直播式還是後製式&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;那就用數字反推。他們公布的其中一個測站，官方最大速度是 &lt;strong&gt;131.2&lt;/strong&gt;。我照他們的規格算兩次：&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2026-07-29/fig11-nied-validation.webp&quot; alt=&quot;反推 NIED 的濾波方式&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1504&quot; height=&quot;635&quot;&gt;&lt;figcaption&gt;圖 11　官方沒說，但數字只容許一個答案&lt;/figcaption&gt;&lt;/figure&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;做法&lt;/th&gt;
&lt;th&gt;算出來&lt;/th&gt;
&lt;th&gt;與官方差距&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;後製式&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;131.71&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+0.39%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;直播式&lt;/td&gt;
&lt;td&gt;93.43&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;−28.8%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;日本用的是後製式。&lt;/strong&gt; 這跟他們引用的那篇 1978 年濾波器設計論文在日本實務上的慣用方式也吻合。&lt;/p&gt;
&lt;p&gt;那剩下的 0.39% 呢？我掃了一輪參數：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;掃的參數&lt;/th&gt;
&lt;th&gt;對結果的影響&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;濾波器的「強度」&lt;/td&gt;
&lt;td&gt;0.35%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;「切在哪個頻率」&lt;/td&gt;
&lt;td&gt;3.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;強度幾乎不影響結果，切點影響很大。所以那 0.39% 來自我推算的切點跟他們實際用的差了一點點，不是理解錯誤。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;完整對照官方公布值&quot;&gt;完整對照官方公布值&lt;/h3&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;NIED 官方公布&lt;/th&gt;
&lt;th&gt;本文算出&lt;/th&gt;
&lt;th&gt;差異&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;資料起點時刻&lt;/td&gt;
&lt;td&gt;2026/07/28 &lt;strong&gt;16:27:04&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;16:27:04&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt; 一致&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;測站經緯度&lt;/td&gt;
&lt;td&gt;32.5099 / 130.5908&lt;/td&gt;
&lt;td&gt;32.5099 / 130.5908&lt;/td&gt;
&lt;td&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt; 一致&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;最大加速度&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;482.7&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;482.70&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;−0.00%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;最大速度&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;131.2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;131.71&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;+0.39%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;日本計測震度&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;5.7&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;5.7&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt; 一致&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;除了那 0.39%，其他全部對上。&lt;/p&gt;
&lt;aside aria-label=&quot;這組時刻怎麼對上&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;這組時刻怎麼對上&lt;/p&gt;&lt;div&gt;&lt;p&gt;資料起點時刻是檔頭記錄時刻減去 15 秒，見第十一節。反推可以再驗一次：本站震源距約 22 公里，以 5.24 km/s 的 P 波速度需要 4.3 秒，推得發震時刻落在 16:27:15 前後，與日本氣象廳公布的 16 時 27 分相符。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h2 id=&quot;九日本的算法濾波器更多震度卻更高&quot;&gt;九、日本的算法濾波器更多，震度卻更高？&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;順帶破解一個直覺誤區。&lt;/p&gt;
&lt;p&gt;日本氣象廳算震度用了&lt;strong&gt;三個&lt;/strong&gt;濾波器，台灣只用兩個。直覺上「濾得越多、剩下越少、震度應該越低」——但實際上同一場地震，日本算出來的震度常常比台灣高。&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2026-07-29/fig13-jma-filters.webp&quot; alt=&quot;日本氣象廳的三個濾波器&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1348&quot; height=&quot;651&quot;&gt;&lt;figcaption&gt;圖 13　日本的第三個濾波器其實是放大器&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;原因在圖 13 的粉紅線：日本的第三個濾波器&lt;strong&gt;不是拿來篩東西的，是拿來放大長週期成分的&lt;/strong&gt;。三個相乘之後，在「每 1 ~ 2.5 秒振動一次」這個頻帶，&lt;strong&gt;總增益大於 1&lt;/strong&gt;——也就是放大，尖峰落在每 1.6 秒振動一次，增益約 1.17 倍。&lt;/p&gt;
&lt;p&gt;而大地震的能量正好集中在長週期帶。所以「濾波器比較多」反而讓震度變高。&lt;/p&gt;
&lt;aside aria-label=&quot;日本的算法天生是後製式&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;日本的算法天生是後製式&lt;/p&gt;&lt;div&gt;&lt;p&gt;日本的震度算法是在頻率域做的，這種做法&lt;strong&gt;天生就是後製式&lt;/strong&gt;——這不是實作選擇，是法規定義的必然結果。日本氣象廳自己也承認這個方法沒辦法即時，需要即時的時候他們改用另一個近似的量。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h2 id=&quot;十台灣震度的定義其實是一張表不是公式&quot;&gt;十、台灣震度的定義，其實是一張表不是公式&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;這是查證過程中另一個意外。&lt;/p&gt;
&lt;p&gt;大家常看到的台灣震度公式，其實&lt;strong&gt;不是法定定義&lt;/strong&gt;。法定文件裡只有一張&lt;strong&gt;對照表&lt;/strong&gt;——官方說明白，那張表是把公式算出來的數字「四捨五入並&lt;strong&gt;稍做微調&lt;/strong&gt;方便記憶」之後劃定的。&lt;/p&gt;
&lt;p&gt;問題是「稍做微調」在某些地方微調得不少：&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2026-07-29/fig12-table-vs-formula.webp&quot; alt=&quot;官方對照表與公式的偏差&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1470&quot; height=&quot;653&quot;&gt;&lt;figcaption&gt;圖 12　加速度那張表兩者等價，速度那張表不是&lt;/figcaption&gt;&lt;/figure&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;對照表&lt;/th&gt;
&lt;th&gt;和公式差多少&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;加速度&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;所有界線吻合到 ±0.013 個震度單位，可以當成等價&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;速度&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;最大偏差 0.106，是加速度表的八倍&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;aside aria-label=&quot;4 級和 5 弱的界線對不上&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;4 級和 5 弱的界線對不上&lt;/p&gt;&lt;div&gt;&lt;p&gt;官方表寫的是：最大速度 &lt;strong&gt;15&lt;/strong&gt;（單位 cm/s）以上算 5 弱。公式算出來要 &lt;strong&gt;16.58&lt;/strong&gt; 才到 5 弱。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;所以最大速度落在 15 到 16.58 之間時，套公式會算成 4 級，查官方表卻是 5 弱。&lt;/strong&gt; 這個區間寬約 10%，而且橫跨在「要不要啟動應變」的門檻上。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;要跟法定分級表一致，&lt;strong&gt;就得查表，不能直接套公式&lt;/strong&gt;。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;十一資料裡藏的時間陷阱&quot;&gt;十一、資料裡藏的時間陷阱&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;最後一個，是關於資料本身的。&lt;/p&gt;
&lt;p&gt;日本強震網的公開檔案裡有個時間欄位。直覺上會以為那是「這筆資料從幾點幾分幾秒開始」，但其實它是&lt;strong&gt;儀器被觸發的時刻&lt;/strong&gt;，而檔案裡的資料是從&lt;strong&gt;觸發前 15 秒&lt;/strong&gt;開始的。&lt;/p&gt;
&lt;p&gt;直接拿那個時間當起點，所有時間戳記會晚 15 秒。&lt;/p&gt;
&lt;p&gt;我沒有直接相信文件，用地震波的走時做了驗證：&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2026-07-29/fig15-timing.webp&quot; alt=&quot;用走時驗證資料起點&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1504&quot; height=&quot;646&quot;&gt;&lt;figcaption&gt;圖 15　兩張圖合起來只有一種解釋&lt;/figcaption&gt;&lt;/figure&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;左圖：初動出現在檔案的第幾秒&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;地震初動出現在每個檔案的第幾秒？中位數 14.39 秒，而且&lt;strong&gt;跟測站遠近完全無關&lt;/strong&gt;。這是一段固定長度的「事前緩衝」。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;右圖：時間欄位減去發震時刻&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;差值隨著測站距離&lt;strong&gt;線性增加&lt;/strong&gt;，換算出來的速度是每秒 5.24 公里——正好是 P 波在地殼裡的速度。這個欄位跟著地震波跑，是&lt;strong&gt;觸發時刻&lt;/strong&gt;，不是資料起點。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;兩張圖合起來，只有一種解釋&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;後來在 NIED 的〈K-NET ASCII 格式說明〉找到白紙黑字：「この時刻はトリガー収録を開始した時刻を表しており、公開データはトリガーの 15 秒前からのデータを含んでいます」「データ先頭の時刻はこの時刻から 15 秒を引いてください」。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;aside aria-label=&quot;問答裡的另一個 15 秒是另一回事&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;問答裡的另一個 15 秒是另一回事&lt;/p&gt;&lt;div&gt;&lt;p&gt;官方問答裡另有一條也提到 15 秒，講的卻是&lt;strong&gt;最終校正時刻&lt;/strong&gt;，而且結論相反：「記録開始時刻の 15 秒前となるとは限りません」。兩個欄位不能混為一談。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;aside aria-label=&quot;附帶發現：發震時刻只精確到「分」&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;附帶發現：發震時刻只精確到「分」&lt;/p&gt;&lt;div&gt;&lt;p&gt;走時驗證還留下一個十幾秒的殘差查不出原因。後來在官方問答找到答案：&lt;strong&gt;檔案裡的「發震時刻」只精確到「分」&lt;/strong&gt;，秒的位置是補 0 上去的。&lt;/p&gt;&lt;p&gt;官方原文寫得很清楚：這些震源資訊的發震時刻只有分的精度，所以秒「補助性地記為 00」。有些資料秒數寫 30，那是為了區分同一分鐘內的兩個地震，&lt;strong&gt;不代表有 30 秒的精度&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;拿它來算走時，當然對不起來。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h2 id=&quot;十二這場地震的結果&quot;&gt;十二、這場地震的結果&lt;/h2&gt;&lt;/div&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2026-07-29/fig14-station-map.webp&quot; alt=&quot;125 個測站的震度分布&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;751&quot; height=&quot;984&quot;&gt;&lt;figcaption&gt;圖 14　125 個測站換算成台灣震度標準的分布&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;把 125 個測站的紀錄全部換算成台灣的震度標準，分布如上。震央附近的熊本測站群最高達 6 強，隨距離往外遞減到 3 級、2 級。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;給讀者的重點&quot;&gt;給讀者的重點&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;如果你只想記三件事：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;「最大值」比你想的脆弱。&lt;/strong&gt; 同一筆資料、在篩掉的東西完全相同的前提下，只要把不同頻率的波錯開幾秒，最大值就可以差三成。所以看到不同單位公布的地震參數對不起來，未必有誰算錯，可能只是處理方式不同。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;震度是一套「約定」，不只是一個物理量。&lt;/strong&gt; 台灣的震度公式是用特定的處理方式校準出來的。換一種處理方式，數字也許更接近真實地動，但反而&lt;strong&gt;偏離了震度的定義&lt;/strong&gt;。所以「哪個比較準」跟「哪個該用」是兩個不同的問題。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;規範不會寫到每個細節。&lt;/strong&gt; 台灣的法規寫到頻率範圍為止，濾波方式屬於實作層面；日本則沒有公開濾波的相位特性。這很正常——但也意味著想算得跟官方一致，只能把一手文件從頭讀過，必要時用數字反推。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;h2 id=&quot;參考資料&quot;&gt;參考資料&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;官方文件&quot;&gt;官方文件&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;台灣&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;交通部中央氣象署，《&lt;a href=&quot;https://scweb.cwa.gov.tw/Uploads/Topic/%E4%BA%A4%E9%80%9A%E9%83%A8%E4%B8%AD%E5%A4%AE%E6%B0%A3%E8%B1%A1%E7%BD%B2%E6%9C%89%E6%84%9F%E5%9C%B0%E9%9C%87%E5%A0%B1%E5%91%8A%E7%99%BC%E5%B8%83%E4%BD%9C%E6%A5%AD%E8%A6%81%E9%BB%9E.pdf&quot;&gt;有感地震報告發布作業要點&lt;/a&gt;》附表〈地震震度分級表〉註2/註3/註4。最新修正：中華民國112年10月16日中象地字第1120051308號函；震度分級表自 109/1/1 施行。&lt;/li&gt;
&lt;li&gt;交通部中央氣象局，《&lt;a href=&quot;https://www.cwa.gov.tw/Data/service/Newsbb/CH/1081218earthquakepress.pdf&quot;&gt;震度新分級 應變更實用&lt;/a&gt;》新聞稿，2019-12-18。&lt;/li&gt;
&lt;li&gt;蕭乃祺，《&lt;a href=&quot;https://www.ncdr.nat.gov.tw/CEOCworkshop/cwb_2.pdf&quot;&gt;我國新地震震度分級制度&lt;/a&gt;》，中央氣象局地震測報中心。&lt;/li&gt;
&lt;li&gt;中央氣象署，《&lt;a href=&quot;https://opendata.cwa.gov.tw/opendatadoc/Earthquake/E-A0016-001.pdf&quot;&gt;小區域有感地震報告資料說明 E-A0016-001&lt;/a&gt;》。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;日本&lt;/strong&gt;&lt;/p&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;平成八年二月十五日 気象庁告示第四号（計測震度的法定定義）。全文引用於：気象庁，《&lt;a href=&quot;https://www.data.jma.go.jp/svd/eqev/data/study-panel/shindo-kentokai/kentokai-houkoku/report.pdf&quot;&gt;「震度に関する検討会」報告書&lt;/a&gt;》参考5。&lt;/li&gt;
&lt;li&gt;気象庁，&lt;a href=&quot;https://www.jma.go.jp/jma/kishou/know/jishin/kyoshin/kaisetsu/calc_sindo.html&quot;&gt;計測震度の算出方法&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;気象庁地震火山部，《&lt;a href=&quot;https://www.jma.go.jp/jma/kishou/know/jishin/eew/katsuyou/reference.pdf&quot;&gt;緊急地震速報の概要や処理手法に関する技術的参考資料&lt;/a&gt;》令和6年4月11日。&lt;/li&gt;
&lt;li&gt;気象庁，&lt;a href=&quot;https://www.jma.go.jp/jma/kishou/shingikai/jishin/tyoshuki_joho_kentokai/kentokai4/sanko3.pdf&quot;&gt;長周期地震動の絶対速度応答最大値の計算方法&lt;/a&gt;（長周期地震動に関する情報検討会 第4回 別添資料3）。&lt;/li&gt;
&lt;li&gt;気象庁，&lt;a href=&quot;https://www.jma.go.jp/jma/kishou/know/jishin/ltpgm_explain/about_level.html&quot;&gt;長周期地震動階級について&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;気象庁，&lt;a href=&quot;https://www.jma.go.jp/jma/kishou/know/jishin/kyoshin/kaisetsu/calc_wave.html&quot;&gt;速度波形・変位波形の求め方&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;防災科学技術研究所，&lt;a href=&quot;https://www.kyoshin.bosai.go.jp/ja/faq/&quot;&gt;K-NET・KiK-net 質問集&lt;/a&gt;（最大加速度與最大速度的計算方法、記錄開始時刻、發震時刻的精度）。&lt;/li&gt;
&lt;li&gt;防災科学技術研究所，&lt;a href=&quot;https://www.kyoshin.bosai.go.jp/ja/knetascii/&quot;&gt;K-NET ASCII フォーマットについて&lt;/a&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;國際&lt;/strong&gt;&lt;/p&gt;
&lt;ol start=&quot;13&quot;&gt;
&lt;li&gt;Shakal, A., Boore, D. M., Chiou, B., Iwan, W. D., O’Connell, D. R. H., &amp;#x26; Stepp, J. C. (2004). &lt;em&gt;COSMOS Summary Guidelines and Recommendations for Strong-Motion Records Processing&lt;/em&gt;. COSMOS Newsletter 11: 3–5.&lt;/li&gt;
&lt;li&gt;USGS National Strong-Motion Project — &lt;a href=&quot;https://escweb.wr.usgs.gov/nsmp-data/processing.html&quot;&gt;Data Processing&lt;/a&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;h3 id=&quot;學術論文&quot;&gt;學術論文&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;台灣震度公式的來源&lt;/strong&gt;&lt;/p&gt;
&lt;ol start=&quot;15&quot;&gt;
&lt;li&gt;Wu, Y.-M., Teng, T.-L., Shin, T.-C., &amp;#x26; Hsiao, N.-C. (2003). Relationship between Peak Ground Acceleration, Peak Ground Velocity, and Intensity in Taiwan. &lt;em&gt;Bulletin of the Seismological Society of America&lt;/em&gt;, 93(1), 386–396. &lt;a href=&quot;https://doi.org/10.1785/0120020097&quot;&gt;doi:10.1785/0120020097&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Wu, Y.-M., Hsiao, N.-C., &amp;#x26; Teng, T.-L. (2004). Relationships between Strong Ground Motion Peak Values and Seismic Loss during the 1999 Chi-Chi, Taiwan Earthquake. &lt;em&gt;Natural Hazards&lt;/em&gt;, 32, 357–373.&lt;/li&gt;
&lt;li&gt;Wu, Y.-M., &amp;#x26; Kanamori, H. (2005). Rapid Assessment of Damage Potential of Earthquakes in Taiwan from the Beginning of P Waves. &lt;em&gt;BSSA&lt;/em&gt;, 95(3), 1181–1185.&lt;/li&gt;
&lt;li&gt;Wu, Y.-M., Kanamori, H., Allen, R. M., &amp;#x26; Hauksson, E. (2007). Determination of earthquake early warning parameters, τc and Pd, for southern California. &lt;em&gt;Geophysical Journal International&lt;/em&gt;, 170(2), 711–717.&lt;/li&gt;
&lt;li&gt;Yang, B. M., Mittal, H., &amp;#x26; Wu, Y.-M. (2021). Real-Time Production of PGA, PGV, Intensity, and Sa Shakemaps Using Dense MEMS-Based Sensors in Taiwan. &lt;em&gt;Sensors&lt;/em&gt;, 21(3), 943.&lt;/li&gt;
&lt;li&gt;徐明同（1979）。《地震學》。黎明文化，pp. 16–26。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;兩種濾波方式的比較&lt;/strong&gt;&lt;/p&gt;
&lt;ol start=&quot;21&quot;&gt;
&lt;li&gt;Boore, D. M., &amp;#x26; Akkar, S. (2003). Effect of causal and acausal filters on elastic and inelastic response spectra. &lt;em&gt;Earthquake Engineering &amp;#x26; Structural Dynamics&lt;/em&gt;, 32(11), 1729–1748. &lt;a href=&quot;https://doi.org/10.1002/eqe.299&quot;&gt;doi:10.1002/eqe.299&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Boore, D. M., &amp;#x26; Bommer, J. J. (2005). Processing of strong-motion accelerograms: needs, options and consequences. &lt;em&gt;Soil Dynamics and Earthquake Engineering&lt;/em&gt;, 25, 93–115.&lt;/li&gt;
&lt;li&gt;Ancheta, T. D., et al. (2014). NGA-West2 Database. &lt;em&gt;Earthquake Spectra&lt;/em&gt;, 30(3), 989–1005.&lt;/li&gt;
&lt;li&gt;Chiou, B., Darragh, R., Gregor, N., &amp;#x26; Silva, W. NGA Project Strong-Motion Database. &lt;em&gt;Earthquake Spectra&lt;/em&gt;.（引述 Bazzurro et al., 2004 的結論）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;其他&lt;/strong&gt;&lt;/p&gt;
&lt;ol start=&quot;25&quot;&gt;
&lt;li&gt;Nigam, N. C., &amp;#x26; Jennings, P. C. (1969). Calculation of response spectra from strong-motion earthquake records. &lt;em&gt;BSSA&lt;/em&gt;, 59(2), 909–922.&lt;/li&gt;
&lt;li&gt;Kunugi, T., Aoi, S., Nakamura, H., Fujiwara, H., &amp;#x26; Morikawa, N. (2008). A Real-Time Processing of Seismic Intensity. &lt;em&gt;地震&lt;/em&gt; 2輯, 60(4), 243–252. &lt;a href=&quot;https://doi.org/10.4294/zisin.60.243&quot;&gt;doi:10.4294/zisin.60.243&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;功刀卓ほか（2013）。震度のリアルタイム演算に用いられる近似フィルタの改良。&lt;em&gt;地震&lt;/em&gt; 2輯, 65, 223–230。&lt;/li&gt;
&lt;li&gt;斎藤正徳（1978）。漸化式デジタル・フィルターの自動設計。&lt;em&gt;物理探鉱&lt;/em&gt;, 31(4), 240–263。&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;h3 id=&quot;沒能查到的部分&quot;&gt;沒能查到的部分&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;誠實說明幾個查不到的環節：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Kanamori、Maechling 與 Hauksson (1999)&lt;/strong&gt;，&lt;em&gt;BSSA&lt;/em&gt; 89, 311–316——這篇是氣象局速度計算的原始出處，很可能才是釘死當年做法的關鍵，但取不到全文。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;徐明同（1979）《地震學》&lt;/strong&gt;——加速度關係式的源頭，是中文教科書、沒有線上版本。整套台灣震度分級等於錨定在一份查不到的 1979 年迴歸上。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;斎藤正徳（1978）原文&lt;/strong&gt;——紙本日文期刊。若能取得，應該可以完全消掉第八節那 0.39% 的殘差。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;大樣本的兩種濾波比較統計&lt;/strong&gt;——目前找得到的公開比較只有 4 筆紀錄。本文的 125 站統計可能是手上最大的樣本。&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;資料來源&quot;&gt;資料來源&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;本文使用的地震紀錄全部來自日本防災科學技術研究所（NIED）的 K-NET 強震觀測網，公開資料。2026 年 7 月 28 日熊本 M7.1，125 個測站、每站三分量、每秒 100 個取樣點。&lt;/p&gt;
&lt;p&gt;所有數字都可以從公開資料重現。文中引用的法規原文，是把 PDF 的文字全部抽出來逐字比對的結果，不是依賴搜尋摘要。&lt;/p&gt;</content:encoded><category>Sharing</category><category>Analysis</category><category>Seismology</category><category>Signal Processing</category></item><item><title>07/18 誤發緊急地震速報的原因分析</title><link>https://exptech.dev/en/blog/rca-2026-07-18_1/</link><guid isPermaLink="true">https://exptech.dev/en/blog/rca-2026-07-18_1/</guid><description>2026/07/18 08:29 UTC+8 進行 cwa-xml-go 與 cwa-eew-go 服務合併的重構測試時，測試電文透過 NATS Supercluster 被廣播至生產環境，導致誤發緊急地震速報。</description><pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h2 id=&quot;事件概述&quot;&gt;事件概述&lt;/h2&gt;&lt;/div&gt;
&lt;section data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;span data-severity=&quot;critical&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect data-on=&quot;&quot; x=&quot;1.5&quot; y=&quot;9.5&quot; width=&quot;2.25&quot; height=&quot;4.5&quot; rx=&quot;0.75&quot;&gt;&lt;/rect&gt;&lt;rect data-on=&quot;&quot; x=&quot;5.25&quot; y=&quot;7&quot; width=&quot;2.25&quot; height=&quot;7&quot; rx=&quot;0.75&quot;&gt;&lt;/rect&gt;&lt;rect data-on=&quot;&quot; x=&quot;9&quot; y=&quot;4.5&quot; width=&quot;2.25&quot; height=&quot;9.5&quot; rx=&quot;0.75&quot;&gt;&lt;/rect&gt;&lt;rect data-on=&quot;&quot; x=&quot;12.75&quot; y=&quot;2&quot; width=&quot;2.25&quot; height=&quot;12&quot; rx=&quot;0.75&quot;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;span&gt;嚴重程度&lt;/span&gt;&lt;span&gt;：&lt;/span&gt;&lt;span&gt;嚴重&lt;/span&gt;&lt;/span&gt;&lt;span data-status=&quot;resolved&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 16 16&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.6&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;circle cx=&quot;8&quot; cy=&quot;8&quot; r=&quot;6.25&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;m5.4 8.2 1.8 1.8 3.5-3.6&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span&gt;狀態&lt;/span&gt;&lt;span&gt;：&lt;/span&gt;&lt;span&gt;已結案&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;dl data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;dt data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;13&quot; height=&quot;13&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;path d=&quot;M8 2v4&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M16 2v4&quot;&gt;&lt;/path&gt;&lt;rect width=&quot;18&quot; height=&quot;18&quot; x=&quot;3&quot; y=&quot;4&quot; rx=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M3 10h18&quot;&gt;&lt;/path&gt;&lt;/svg&gt;發生時間&lt;/dt&gt;&lt;dd data-astro-cid-g5zafgs6=&quot;&quot;&gt;2026/07/18 08:29 (UTC+8) 左右&lt;/dd&gt;&lt;/div&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;dt data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;13&quot; height=&quot;13&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;path d=&quot;M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;觸發條件&lt;/dt&gt;&lt;dd data-astro-cid-g5zafgs6=&quot;&quot;&gt;服務重構測試過程中&lt;/dd&gt;&lt;/div&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;dt data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;13&quot; height=&quot;13&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;path d=&quot;M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 2v5a1 1 0 0 0 1 1h5&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M10 9H8&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M16 13H8&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M16 17H8&quot;&gt;&lt;/path&gt;&lt;/svg&gt;問題描述&lt;/dt&gt;&lt;dd data-astro-cid-g5zafgs6=&quot;&quot;&gt;誤發緊急地震速報&lt;/dd&gt;&lt;/div&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;dt data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;13&quot; height=&quot;13&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;path d=&quot;m21 21-4.34-4.34&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;11&quot; cy=&quot;11&quot; r=&quot;8&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;根本原因&lt;/dt&gt;&lt;dd data-astro-cid-g5zafgs6=&quot;&quot;&gt;NATS 權限管理不當，測試電文被廣播至生產環境&lt;/dd&gt;&lt;/div&gt;&lt;/dl&gt;&lt;/section&gt;

&lt;div&gt;&lt;h2 id=&quot;時間軸&quot;&gt;時間軸&lt;/h2&gt;&lt;/div&gt;
&lt;section aria-label=&quot;時間軸&quot; data-astro-cid-z7ssoihh=&quot;&quot;&gt;&lt;header data-astro-cid-z7ssoihh=&quot;&quot;&gt;&lt;p data-astro-cid-z7ssoihh=&quot;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;12&quot; height=&quot;12&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; data-astro-cid-z7ssoihh=&quot;&quot;&gt;&lt;path d=&quot;M12 6v6l4 2&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;10&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;時間 (UTC+8)&lt;/p&gt;&lt;/header&gt;&lt;ol role=&quot;list&quot; data-astro-cid-z7ssoihh=&quot;&quot;&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;critical&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 1.25 14.75 8 8 14.75 1.25 8Z&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;嚴重 &lt;/span&gt;&lt;time datetime=&quot;2026-07-18T08:29&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;2026/07/18 08:29&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;問題發生：誤發緊急地震速報&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;info&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;circle cx=&quot;8&quot; cy=&quot;8&quot; r=&quot;5&quot; fill=&quot;currentColor&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;資訊 &lt;/span&gt;&lt;time datetime=&quot;2026-07-18T08:30&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;2026/07/18 08:30&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;確認問題並開始進行修復&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;warning&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 1.15 15.05 14.7H0.95Z&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;警告 &lt;/span&gt;&lt;time datetime=&quot;2026-07-18T08:31&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;2026/07/18 08:31&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;執行緊急處理，阻斷問題電文&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/section&gt;
&lt;div&gt;&lt;h2 id=&quot;事件經過&quot;&gt;事件經過&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;07/18 早上進行 &lt;code dir=&quot;auto&quot;&gt;cwa-xml-go&lt;/code&gt; 的重構，目的是將 &lt;code dir=&quot;auto&quot;&gt;cwa-xml-go&lt;/code&gt; 與 &lt;code dir=&quot;auto&quot;&gt;cwa-eew-go&lt;/code&gt; 兩個服務合併（見下圖），以降低系統複雜度並減少處理延遲。&lt;/p&gt;
&lt;p&gt;重構完成、進入測試時，測試用的電文意外洩漏至生產環境，最終誤發緊急地震速報。&lt;/p&gt;
&lt;p&gt;其中 &lt;code dir=&quot;auto&quot;&gt;cwa-eew-go&lt;/code&gt; 負責轉發中央氣象署的強震即時警報。這次誤發的是 ExpTech 轉發流程送出的測試電文，不是中央氣象署發布的警報，也不是 ExpTech 自行發布的地震警報。&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2026-07-18/old.webp&quot; alt=&quot;cwa-xml-go 與 cwa-eew-go 合併前後架構示意圖&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1504&quot; height=&quot;2016&quot;&gt;&lt;figcaption&gt;cwa-xml-go 與 cwa-eew-go 合併前後架構示意圖&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;根本原因分析&quot;&gt;根本原因分析&lt;/h2&gt;&lt;/div&gt;
&lt;aside aria-label=&quot;問題根源&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;問題根源&lt;/p&gt;&lt;div&gt;&lt;p&gt;系統用 NATS 傳遞訊息，並透過 NATS Supercluster 在不同機房之間同步電文，以做到異地雙活備援。&lt;/p&gt;&lt;p&gt;NATS 權限管理設定不當，測試機產生的測試電文經由 NATS Supercluster 被廣播至生產環境，下游服務把它當成正式電文處理，因而觸發緊急地震速報。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h3 id=&quot;問題說明&quot;&gt;問題說明&lt;/h3&gt;&lt;/div&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;共用同一組 NATS Supercluster：&lt;/strong&gt; 測試機與生產環境共用同一組 NATS Supercluster&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;發布權限未受限制：&lt;/strong&gt; 測試機可將電文推送至生產環境所訂閱的 subject&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;無法區分電文來源：&lt;/strong&gt; 下游服務把測試電文視為正式電文處理&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;誤發緊急地震速報：&lt;/strong&gt; 最終導致誤發緊急地震速報&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;h2 id=&quot;解決方案&quot;&gt;解決方案&lt;/h2&gt;&lt;/div&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;加強 NATS 權限管理：&lt;/strong&gt; 限制測試機的發布權限，避免測試電文流入生產環境所訂閱的 subject&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;隔離測試與生產環境：&lt;/strong&gt; 明確劃分測試與生產環境的訊息通道，防止跨環境的電文污染&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;全面盤點：&lt;/strong&gt; 檢視其餘服務是否存在相同的權限風險，並一併修正&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;h2 id=&quot;心得&quot;&gt;心得&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;這是一個相當低級的疏失。雖然此次事件間接驗證了異地雙活備援機制的可靠性，但也直接導致了誤發緊急地震速報。對於造成大家的不便，我們深感抱歉，並將以此為戒，加強環境隔離與權限控管。&lt;/p&gt;</content:encoded><category>RCA</category></item><item><title>不能忽略的 CVE-2025-66478 滿級漏洞 :(</title><link>https://exptech.dev/en/blog/sharing-2025-12-17/</link><guid isPermaLink="true">https://exptech.dev/en/blog/sharing-2025-12-17/</guid><description>CVE-2025-66478 是一個影響 Next.js 的嚴重安全漏洞，源自 React Server Components (RSC) 協議中的缺陷，可能導致伺服器被遠端執行腳本或指令。還好平常有使用 Docker 部署，大幅降低了損害。</description><pubDate>Wed, 17 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h2 id=&quot;事件概述&quot;&gt;事件概述&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;CVE-2025-66478 是影響 Next.js 的嚴重安全漏洞，來自 React Server Components (RSC) 協議的缺陷，可能導致伺服器被遠端執行腳本或指令。還好平常有使用 Docker 部署，大幅降低了損害。&lt;/p&gt;
&lt;section data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;span data-severity=&quot;high&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect data-on=&quot;&quot; x=&quot;1.5&quot; y=&quot;9.5&quot; width=&quot;2.25&quot; height=&quot;4.5&quot; rx=&quot;0.75&quot;&gt;&lt;/rect&gt;&lt;rect data-on=&quot;&quot; x=&quot;5.25&quot; y=&quot;7&quot; width=&quot;2.25&quot; height=&quot;7&quot; rx=&quot;0.75&quot;&gt;&lt;/rect&gt;&lt;rect data-on=&quot;&quot; x=&quot;9&quot; y=&quot;4.5&quot; width=&quot;2.25&quot; height=&quot;9.5&quot; rx=&quot;0.75&quot;&gt;&lt;/rect&gt;&lt;rect x=&quot;12.75&quot; y=&quot;2&quot; width=&quot;2.25&quot; height=&quot;12&quot; rx=&quot;0.75&quot;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;span&gt;嚴重程度&lt;/span&gt;&lt;span&gt;：&lt;/span&gt;&lt;span&gt;高&lt;/span&gt;&lt;/span&gt;&lt;span data-status=&quot;resolved&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 16 16&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.6&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;circle cx=&quot;8&quot; cy=&quot;8&quot; r=&quot;6.25&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;m5.4 8.2 1.8 1.8 3.5-3.6&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span&gt;狀態&lt;/span&gt;&lt;span&gt;：&lt;/span&gt;&lt;span&gt;已結案&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;dl data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;dt data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;13&quot; height=&quot;13&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;path d=&quot;M8 2v4&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M16 2v4&quot;&gt;&lt;/path&gt;&lt;rect width=&quot;18&quot; height=&quot;18&quot; x=&quot;3&quot; y=&quot;4&quot; rx=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M3 10h18&quot;&gt;&lt;/path&gt;&lt;/svg&gt;發現時間&lt;/dt&gt;&lt;dd data-astro-cid-g5zafgs6=&quot;&quot;&gt;2025/12/8&lt;/dd&gt;&lt;/div&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;dt data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;13&quot; height=&quot;13&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;path d=&quot;m12 14 4-4&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M3.34 19a10 10 0 1 1 17.32 0&quot;&gt;&lt;/path&gt;&lt;/svg&gt;CVSS 評分&lt;/dt&gt;&lt;dd data-astro-cid-g5zafgs6=&quot;&quot;&gt;10.0（Critical）&lt;/dd&gt;&lt;/div&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;dt data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;13&quot; height=&quot;13&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;path d=&quot;M12 20v-9&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14.12 3.88 16 2&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M21 21a4 4 0 0 0-3.81-4&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M21 5a4 4 0 0 1-3.55 3.97&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M22 13h-4&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M3 21a4 4 0 0 1 3.81-4&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M3 5a4 4 0 0 0 3.55 3.97&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M6 13H2&quot;&gt;&lt;/path&gt;&lt;path d=&quot;m8 2 1.88 1.88&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M9 7.13V6a3 3 0 1 1 6 0v1.13&quot;&gt;&lt;/path&gt;&lt;/svg&gt;漏洞類型&lt;/dt&gt;&lt;dd data-astro-cid-g5zafgs6=&quot;&quot;&gt;遠端程式碼執行（Remote Code Execution）&lt;/dd&gt;&lt;/div&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;dt data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;13&quot; height=&quot;13&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;10&quot;&gt;&lt;/circle&gt;&lt;line x1=&quot;22&quot; x2=&quot;18&quot; y1=&quot;12&quot; y2=&quot;12&quot;&gt;&lt;/line&gt;&lt;line x1=&quot;6&quot; x2=&quot;2&quot; y1=&quot;12&quot; y2=&quot;12&quot;&gt;&lt;/line&gt;&lt;line x1=&quot;12&quot; x2=&quot;12&quot; y1=&quot;6&quot; y2=&quot;2&quot;&gt;&lt;/line&gt;&lt;line x1=&quot;12&quot; x2=&quot;12&quot; y1=&quot;22&quot; y2=&quot;18&quot;&gt;&lt;/line&gt;&lt;/svg&gt;攻擊向量&lt;/dt&gt;&lt;dd data-astro-cid-g5zafgs6=&quot;&quot;&gt;網路攻擊，無需身分驗證&lt;/dd&gt;&lt;/div&gt;&lt;/dl&gt;&lt;/section&gt;

&lt;div&gt;&lt;h2 id=&quot;心得與過程&quot;&gt;心得與過程&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;一開始看到這個漏洞公告，還以為只是「又一個框架安全更新」，沒有特別在意。直到自己的 IP 被 Cloudflare 列入黑名單，才真正意識到事情不單純，背後很可能已經有人在主動嘗試攻擊。&lt;/p&gt;
&lt;aside aria-label=&quot;實際影響相對有限&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;實際影響相對有限&lt;/p&gt;&lt;div&gt;&lt;p&gt;平常習慣使用 Docker 部署，再加上前後端分離設計，這次事件的實際影響相對有限：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;攻擊者無法直接讀取後端服務的敏感資料&lt;/li&gt;
&lt;li&gt;沒有將實體檔案系統掛載進容器，入侵到宿主機的風險相對較低&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;最後只需要重新建置映像並重新部署，同時更新 Next.js 版本，就能把環境還原成乾淨狀態，算是有驚無險的一次經驗。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;漏洞詳情&quot;&gt;漏洞詳情&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;CVE-2025-66478 源於 React 的上游實作（CVE-2025-55182）。在特定條件下，攻擊者可以透過精心構造的請求，觸發伺服器端未預期的執行路徑，進而在伺服器上遠端執行腳本或指令。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;漏洞成因&quot;&gt;漏洞成因&lt;/h3&gt;&lt;/div&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;React Server Components (RSC) 協議缺陷&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RSC 協議在處理特定型態的請求時存在安全漏洞&lt;/li&gt;
&lt;li&gt;攻擊者可以透過惡意請求繞過部分安全檢查&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;執行路徑控制&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;漏洞允許攻擊者影響伺服器端的程式碼執行流程&lt;/li&gt;
&lt;li&gt;在某些情況下，可能繞過原本預期的安全防護機制&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;h3 id=&quot;攻擊方式&quot;&gt;攻擊方式&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;實際觀察到的攻擊行為大致如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;連線進來後，先偵測伺服器上已安裝的套件與環境&lt;/li&gt;
&lt;li&gt;接著嘗試從遠端下載惡意腳本，並在伺服器上執行&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;目前實際遇到的腳本類型：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;偽裝成 Nginx 的程式或服務&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;挖礦腳本&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;後門腳本&lt;/strong&gt;（包含開機自動執行的腳本，持久性很強）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;架設 VPN / Proxy 的腳本&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M0.090 22.968L0.090 17.023L9.438 11.980L0.131 6.322L0.131 0.336L15.875 10.504L15.875 13.948L0.090 22.968ZM23.910 20.262L23.910 23.665L10.258 23.665L10.258 20.262L23.910 20.262Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;strong&gt;PowerShell 腳本&lt;/strong&gt;（針對 Windows 環境）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下方是其中一個惡意腳本的內容截圖（已對部分資訊進行遮蔽處理）：&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2025-12-17/image.webp&quot; alt=&quot;惡意腳本截圖&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1784&quot; height=&quot;1328&quot;&gt;&lt;figcaption&gt;惡意腳本截圖&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;參考資源&quot;&gt;參考資源&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://nextjs.org/blog/CVE-2025-66478&quot;&gt;Next.js 官方安全公告&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M18.955 15.993L18.993 15.993Q18.993 16.107 18.993 16.297L18.993 16.297Q19.221 18.615 19.221 19.774Q19.221 20.933 18.651 21.693Q18.081 22.453 17.207 22.529L17.207 22.529Q16.333 22.719 15.307 22.301L15.307 22.301Q14.547 21.921 13.179 21.009L13.179 21.009Q12.305 20.439 11.849 20.173L11.849 20.173Q10.671 21.123 9.949 21.579L9.949 21.579Q9.341 21.997 8.771 22.187L8.771 22.187Q7.707 22.643 6.795 22.472Q5.883 22.301 5.332 21.579Q4.781 20.857 4.762 19.679Q4.743 18.501 4.971 15.879L4.971 15.879Q3.527 15.423 2.805 14.929L2.805 14.929Q1.855 14.473 0.905 13.523L0.905 13.523Q0.145 12.725 0.183 11.794Q0.221 10.863 1.057 10.065L1.057 10.065Q1.665 9.343 2.691 8.849L2.691 8.849Q3.299 8.507 4.591 8.051L4.591 8.051Q4.667 8.051 4.838 7.994Q5.009 7.937 5.085 7.937L5.085 7.937L4.743 5.315Q4.705 4.479 4.971 3.073L4.971 3.073Q5.237 2.085 6.054 1.667Q6.871 1.249 7.935 1.515L7.935 1.515Q8.885 1.743 9.835 2.351L9.835 2.351Q10.519 2.769 11.393 3.529L11.393 3.529Q11.545 3.605 11.735 3.871L11.735 3.871L11.849 4.023Q13.749 2.579 14.813 1.971L14.813 1.971Q16.029 1.173 17.207 1.515L17.207 1.515Q18.081 1.705 18.594 2.446Q19.107 3.187 19.221 4.365L19.221 4.365L19.221 6.265Q19.221 6.645 19.031 7.405L19.031 7.405Q18.917 7.899 18.841 8.165L18.841 8.165Q19.905 8.507 20.874 8.982Q21.843 9.457 22.261 9.761L22.261 9.761Q22.983 10.255 23.401 10.882Q23.819 11.509 23.819 12.193Q23.819 12.877 23.401 13.504Q22.983 14.131 22.261 14.625L22.261 14.625Q21.805 14.929 20.855 15.423L20.855 15.423Q20.171 15.537 18.955 15.993L18.955 15.993ZM10.861 15.841L12.077 15.879Q12.267 15.879 12.685 15.841L12.685 15.841Q13.255 15.765 13.521 15.765L13.521 15.765Q14.015 15.765 14.357 15.271L14.357 15.271Q15.535 13.371 15.991 12.307L15.991 12.307Q16.105 12.155 16.105 11.927Q16.105 11.699 15.991 11.623L15.991 11.623Q15.421 10.521 14.205 8.659L14.205 8.659Q14.053 8.279 13.635 8.279L13.635 8.279Q11.621 8.279 10.557 8.165L10.557 8.165Q9.607 8.165 9.113 9.001L9.113 9.001Q8.657 9.723 8.391 10.179L8.391 10.179L7.859 11.167Q7.517 11.661 7.460 11.870Q7.403 12.079 7.460 12.288Q7.517 12.497 7.859 13.029L7.859 13.029L8.391 13.979L8.847 14.739Q9.227 15.347 9.379 15.499L9.379 15.499Q9.607 15.765 9.911 15.803L9.911 15.803Q10.139 15.841 10.861 15.841L10.861 15.841ZM5.199 14.929L5.199 14.929Q5.921 13.029 6.263 12.193L6.263 12.193L6.263 11.737L5.199 9.001Q3.071 9.647 1.893 10.521L1.893 10.521Q1.057 11.167 1.057 11.908Q1.057 12.649 1.893 13.257L1.893 13.257Q2.501 13.903 3.451 14.321L3.451 14.321Q4.021 14.587 5.199 14.929ZM18.613 8.887L18.613 8.887Q18.157 9.951 17.435 11.851L17.435 11.851L17.397 11.965Q17.359 12.079 17.435 12.079L17.435 12.079Q18.157 13.979 18.613 15.157L18.613 15.157Q19.069 14.929 20.019 14.435L20.019 14.435Q21.273 13.865 21.805 13.523L21.805 13.523Q22.793 12.877 22.793 12.079Q22.793 11.281 21.843 10.673L21.843 10.673Q21.197 10.103 19.753 9.419L19.753 9.419Q18.955 9.077 18.613 8.887ZM5.883 7.481L5.921 7.671Q7.821 7.481 8.885 7.215L8.885 7.215Q8.961 7.215 9.037 7.139L9.037 7.139L9.113 7.101Q9.797 6.151 11.013 4.707L11.013 4.707Q10.063 3.909 9.569 3.529L9.569 3.529Q8.733 2.883 7.935 2.579L7.935 2.579Q6.947 2.237 6.339 2.598Q5.731 2.959 5.541 4.023L5.541 4.023Q5.465 4.745 5.579 5.695L5.579 5.695Q5.655 6.265 5.883 7.481L5.883 7.481ZM17.777 7.709L17.777 7.671Q17.777 7.633 17.834 7.462Q17.891 7.291 17.891 7.215L17.891 7.215Q18.157 6.037 18.157 5.391L18.157 5.391Q18.233 4.327 17.891 3.529L17.891 3.529Q17.739 2.921 17.321 2.655Q16.903 2.389 16.371 2.465L16.371 2.465Q15.421 2.617 14.509 3.225L14.509 3.225Q13.939 3.567 12.951 4.479L12.951 4.479L12.685 4.707Q13.293 5.543 14.471 6.987L14.471 6.987L14.813 7.329L17.777 7.709ZM5.921 16.221L5.921 16.221Q5.883 16.449 5.807 16.867L5.807 16.867Q5.579 17.931 5.541 18.425L5.541 18.425Q5.465 19.299 5.693 20.059L5.693 20.059Q5.845 20.933 6.434 21.275Q7.023 21.617 7.935 21.351L7.935 21.351Q8.695 21.123 9.493 20.591L9.493 20.591Q9.949 20.249 10.823 19.489L10.823 19.489L11.127 19.223Q10.443 18.273 9.227 16.829L9.227 16.829Q8.999 16.601 8.885 16.601L8.885 16.601Q7.517 16.601 5.921 16.221ZM12.571 19.223L12.571 19.223Q13.065 19.869 14.015 20.553L14.015 20.553Q14.889 21.199 15.649 21.465L15.649 21.465Q17.549 22.035 17.891 20.173L17.891 20.173Q18.043 19.337 17.967 18.349L17.967 18.349Q17.929 17.741 17.701 16.525L17.701 16.525L17.663 16.373L16.903 16.449Q15.307 16.563 14.585 16.829L14.585 16.829Q14.243 17.019 13.939 17.361L13.939 17.361Q13.749 17.589 13.445 18.045L13.445 18.045Q13.179 18.425 13.046 18.634Q12.913 18.843 12.571 19.223ZM10.443 7.101L13.293 7.101Q13.027 6.797 12.552 6.265Q12.077 5.733 11.849 5.429L11.849 5.429L11.659 5.695Q10.937 6.607 10.443 7.101L10.443 7.101ZM12.837 17.361L13.293 16.829L10.557 16.829Q10.785 17.133 11.260 17.665Q11.735 18.197 11.963 18.501L11.963 18.501Q12.229 18.083 12.837 17.361L12.837 17.361ZM8.391 15.651L8.391 15.651Q8.239 15.385 7.935 14.853L7.935 14.853Q7.289 13.789 6.985 13.143L6.985 13.143L6.263 15.157Q6.909 15.423 8.391 15.651ZM16.713 13.143L16.713 13.143L15.307 15.651L17.435 15.271Q17.283 14.511 16.713 13.143ZM6.985 10.787L6.985 10.787L8.391 8.279L6.263 8.621L6.415 9.115Q6.681 10.217 6.985 10.787ZM15.307 8.279L15.307 8.279Q15.535 8.773 16.010 9.476Q16.485 10.179 16.713 10.673L16.713 10.673Q17.207 9.229 17.435 8.659L17.435 8.659Q16.523 8.621 15.307 8.279Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/facebook/react/security/advisories&quot;&gt;React CVE-2025-55182&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;相關日誌記錄&quot;&gt;相關日誌記錄&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://github.com/ExpTechTW/CVE-2025-66478&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;span&gt;&lt;svg width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 16 16&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0016 8c0-4.42-3.58-8-8-8z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span&gt;&lt;span&gt;CVE-2025-66478&lt;/span&gt;&lt;span&gt;github.com/ExpTechTW/CVE-2025-66478&lt;/span&gt;&lt;/span&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 16 16&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5.5 10.5 10.5 5.5M6 5.5h4.5V10&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;Next.js 的 CVE-2025-66478 漏洞詳情&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;h2 id=&quot;總結&quot;&gt;總結&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;CVE-2025-66478 是極為嚴重的安全漏洞（CVSS 10.0）。最壞的情況，甚至可能讓伺服器完全落入攻擊者手中。&lt;/p&gt;
&lt;p&gt;這次之後，我會更重視伺服器的安全：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;優先更新與安全性相關的套件與框架版本&lt;/li&gt;
&lt;li&gt;持續關注 CVE 與官方安全公告&lt;/li&gt;
&lt;li&gt;部署時盡量使用容器化與最小權限原則，降低實際損害範圍&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;也算是被這次事件好好上了一課：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;安全性更新不是「之後再說」的選項，而是需要排進日常維護流程裡的必修課。&lt;/strong&gt;&lt;/p&gt;</content:encoded><category>Sharing</category><category>CVE</category><category>Next.js</category><category>Docker</category></item><item><title>ExpTech NTP Server</title><link>https://exptech.dev/en/blog/sharing-2025-12-16/</link><guid isPermaLink="true">https://exptech.dev/en/blog/sharing-2025-12-16/</guid><description>越來越多 ExpTech 相關產品及服務需要時間同步服務，在 ttyAMA0 的幫助下，架設了 ExpTech NTP Server，同時整理了舊的時間同步機制。</description><pubDate>Tue, 16 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;越來越多 ExpTech 相關產品及服務需要時間同步。在 &lt;span&gt;&lt;a href=&quot;https://github.com/bclswl0827&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img src=&quot;https://github.com/bclswl0827.png?size=40&quot; alt=&quot;&quot; width=&quot;20&quot; height=&quot;20&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;span&gt;ttyAMA0&lt;/span&gt;&lt;svg width=&quot;14&quot; height=&quot;14&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 .3a12 12 0 0 0-3.8 23.38c.6.12.83-.26.83-.57L9 21.07c-3.34.72-4.04-1.61-4.04-1.61-.55-1.39-1.34-1.76-1.34-1.76-1.08-.74.09-.73.09-.73 1.2.09 1.83 1.24 1.83 1.24 1.08 1.83 2.81 1.3 3.5 1 .1-.78.42-1.31.76-1.61-2.67-.3-5.47-1.33-5.47-5.93 0-1.31.47-2.38 1.24-3.22-.14-.3-.54-1.52.1-3.18 0 0 1-.32 3.3 1.23a11.5 11.5 0 0 1 6 0c2.28-1.55 3.29-1.23 3.29-1.23.64 1.66.24 2.88.12 3.18a4.65 4.65 0 0 1 1.23 3.22c0 4.61-2.8 5.63-5.48 5.92.42.36.81 1.1.81 2.22l-.01 3.29c0 .31.2.69.82.57A12 12 0 0 0 12 .3Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;14&quot; height=&quot;14&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M7 7h10v10&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M7 17 17 7&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;span&gt;&lt;a href=&quot;https://github.com/bclswl0827&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; tabindex=&quot;-1&quot; aria-hidden=&quot;true&quot;&gt;&lt;img src=&quot;https://github.com/bclswl0827.png?size=128&quot; alt=&quot;&quot; width=&quot;52&quot; height=&quot;52&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;ttyAMA0&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;14&quot; height=&quot;14&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M7 7h10v10&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M7 17 17 7&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;&lt;svg width=&quot;14&quot; height=&quot;14&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 .3a12 12 0 0 0-3.8 23.38c.6.12.83-.26.83-.57L9 21.07c-3.34.72-4.04-1.61-4.04-1.61-.55-1.39-1.34-1.76-1.34-1.76-1.08-.74.09-.73.09-.73 1.2.09 1.83 1.24 1.83 1.24 1.08 1.83 2.81 1.3 3.5 1 .1-.78.42-1.31.76-1.61-2.67-.3-5.47-1.33-5.47-5.93 0-1.31.47-2.38 1.24-3.22-.14-.3-.54-1.52.1-3.18 0 0 1-.32 3.3 1.23a11.5 11.5 0 0 1 6 0c2.28-1.55 3.29-1.23 3.29-1.23.64 1.66.24 2.88.12 3.18a4.65 4.65 0 0 1 1.23 3.22c0 4.61-2.8 5.63-5.48 5.92.42.36.81 1.1.81 2.22l-.01 3.29c0 .31.2.69.82.57A12 12 0 0 0 12 .3Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;@bclswl0827&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt; 的幫助下，剛好有這個機會，我自己又加了一點料，就有了 ExpTech NTP Server，也把舊的時間同步機制一起整理過。&lt;/p&gt;

&lt;div&gt;&lt;h2 id=&quot;舊架構&quot;&gt;舊架構&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;早期是一個很簡單的 HTTP 服務，Body 回傳 Unix Timestamp（&lt;code dir=&quot;auto&quot;&gt;text/plain&lt;/code&gt;）。當時對時間精度沒有特別要求，這個陽春版撐了很久。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;新架構&quot;&gt;新架構&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;現在改在 &lt;code dir=&quot;auto&quot;&gt;time.exptech.com.tw:123&lt;/code&gt; 提供 &lt;strong&gt;SNTP（UDP）&lt;/strong&gt;，同時保留 &lt;strong&gt;HTTP&lt;/strong&gt;，給不能用 UDP 的環境（例如網頁）對時。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;sntp&quot;&gt;SNTP&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;先拿幾個常見的公共 NTP Server 對照：&lt;/p&gt;
&lt;div&gt;&lt;h4 id=&quot;各家-ntp-server-對照&quot;&gt;各家 NTP Server 對照&lt;/h4&gt;&lt;/div&gt;
&lt;div data-astro-cid-kew6xv4d=&quot;&quot;&gt;&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2025-12-16/google.webp&quot; alt=&quot;Google NTP Server&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1044&quot; height=&quot;490&quot;&gt;&lt;figcaption&gt;Google NTP Server&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2025-12-16/cloudflare.webp&quot; alt=&quot;Cloudflare NTP Server&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1048&quot; height=&quot;490&quot;&gt;&lt;figcaption&gt;Cloudflare NTP Server&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2025-12-16/apple.webp&quot; alt=&quot;Apple NTP Server&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1046&quot; height=&quot;490&quot;&gt;&lt;figcaption&gt;Apple NTP Server&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2025-12-16/tw.webp&quot; alt=&quot;TW NTP Server&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1046&quot; height=&quot;490&quot;&gt;&lt;figcaption&gt;TW NTP Server&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h4 id=&quot;exptech-ntp-server&quot;&gt;ExpTech NTP Server&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;最後是主角，ExpTech 自家的 NTP Server：&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2025-12-16/exptech.webp&quot; alt=&quot;ExpTech NTP Server&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1044&quot; height=&quot;490&quot;&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h3 id=&quot;http-gettextplain&quot;&gt;HTTP GET（text/plain）&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;SNTP 之外，也可以用 HTTP 拿時間：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Header 會回傳 &lt;code dir=&quot;auto&quot;&gt;X-NTP-T2&lt;/code&gt;、&lt;code dir=&quot;auto&quot;&gt;X-NTP-T3&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Body 仍回傳 Unix Timestamp（&lt;code dir=&quot;auto&quot;&gt;text/plain&lt;/code&gt;），向下相容舊架構&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2025-12-16/http.webp&quot; alt=&quot;ExpTech NTP (HTTP) Server&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;965&quot; height=&quot;470&quot;&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;總結&quot;&gt;總結&lt;/h2&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;協定&lt;/th&gt;
&lt;th&gt;誤差&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SNTP&lt;/td&gt;
&lt;td&gt;約 ±5ms&lt;/td&gt;
&lt;td&gt;精度表現很好，實測相當穩定&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTTP&lt;/td&gt;
&lt;td&gt;約 ±50ms&lt;/td&gt;
&lt;td&gt;主要是 TCP 開銷。精度不如 SNTP，但在網頁這類不能用 UDP 的情境仍然很實用&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;依照實際使用環境選 SNTP 或 HTTP，不同平台都能維持不錯的時間同步。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;特別感謝&quot;&gt;特別感謝&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;感謝 &lt;strong&gt;台灣數位串流有限公司 TWDS（Taiwan Digital Streaming）&lt;/strong&gt; 提供伺服器贊助，ExpTech NTP Server 才能穩定運作。&lt;/p&gt;
&lt;div&gt;&lt;img src=&quot;https://exptech.dev/img/sponsor/twds_text_standard.svg&quot; alt=&quot;TWDS Logo&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/div&gt;</content:encoded><category>Sharing</category></item><item><title>從 JavaScript 到 Golang：TREM 與 DPIP 的架構變遷</title><link>https://exptech.dev/en/blog/sharing-2025-12-15/</link><guid isPermaLink="true">https://exptech.dev/en/blog/sharing-2025-12-15/</guid><description>TREM 與 DPIP 從 2022 年做到現在：從一顆 60 元的 MPU6050、PM2 + JavaScript，到 Docker、Golang 重寫、OpenResty + Lua 與 NATS。回顧整個系統架構怎麼一路變過來，也說明 DPIP 為什麼曾經這麼難用。</description><pubDate>Mon, 15 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h2 id=&quot;前言&quot;&gt;前言&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;TREM 與 DPIP 從 2022 年 5 月中開始做。當時我完全不會寫程式，邊做邊學；服務也從地震慢慢擴到其他類型。
範圍變廣、系統變複雜之後，維護變難，穩定性也跟著往下掉。&lt;/p&gt;

&lt;p&gt;這篇稿放了半年，現在才把故事寫完。要解釋 DPIP 為什麼這麼難用，得先從 TREM 怎麼長出來講起。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;為什麼選擇做地震&quot;&gt;為什麼選擇做地震？&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;起點是 &lt;a href=&quot;https://zh.wikipedia.org/zh-tw/2022%E5%B9%B4%E8%8A%B1%E8%93%AE%E5%9C%B0%E9%9C%87&quot;&gt;2022 年 3 月 23 日的花蓮地震&lt;/a&gt;。人在臺南，搖晃先到，警報才來。我開始想：能不能自己測，看出哪裡正在地震？學測剛考完，時間夠用，同年 5 月這個計畫就開始了。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;trem-net-觀測網&quot;&gt;TREM-net 觀測網&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;TREM-net（TREM 地震觀測網）由三種感測器組成：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;名稱&lt;/th&gt;
&lt;th&gt;感測器&lt;/th&gt;
&lt;th&gt;上線&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;SE-net&lt;/code&gt;（Strong Earthquake）&lt;/td&gt;
&lt;td&gt;MEMS 加速度儀&lt;/td&gt;
&lt;td&gt;2022-05-31&lt;/td&gt;
&lt;td&gt;強震觀測網&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;MS-net&lt;/code&gt;（Micro Seismographic）&lt;/td&gt;
&lt;td&gt;磁電式速度儀&lt;/td&gt;
&lt;td&gt;2023-04-09&lt;/td&gt;
&lt;td&gt;微地震觀測網&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;ES-net&lt;/code&gt;（Enhanced Sensitivity）&lt;/td&gt;
&lt;td&gt;MEMS 加速度儀&lt;/td&gt;
&lt;td&gt;2025-11-02&lt;/td&gt;
&lt;td&gt;增強靈敏度地震觀測網&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;aside aria-label=&quot;2026 Q4 的交接&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;2026 Q4 的交接&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;SE-net&lt;/code&gt;、&lt;code dir=&quot;auto&quot;&gt;MS-net&lt;/code&gt; 預計 2026 Q4 淘汰，之後由 &lt;code dir=&quot;auto&quot;&gt;ES-net&lt;/code&gt; 接替。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h3 id=&quot;第一台地震儀&quot;&gt;第一台地震儀&lt;/h3&gt;&lt;/div&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2025-12-15/seismograph-6732340.webp&quot; alt=&quot;編號 6732340 地震儀&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3541&quot; height=&quot;2643&quot;&gt;&lt;figcaption&gt;編號 6732340 地震儀&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;這台用 MPU6050 + ESP32 做的，編號 &lt;code dir=&quot;auto&quot;&gt;6732340&lt;/code&gt;，放在我家。從 2022 年 5 月運作到現在（2026 年 8 月），目前仍正常運作。&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2025-12-15/seismograph-se-net.webp&quot; alt=&quot;SE-net 地震儀&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3686&quot; height=&quot;2573&quot;&gt;&lt;figcaption&gt;SE-net 地震儀&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;上圖是裝在一般住家的 &lt;code dir=&quot;auto&quot;&gt;SE-net&lt;/code&gt; 地震儀 &lt;code dir=&quot;auto&quot;&gt;ver 1.0&lt;/code&gt;。後面幾個版本改的是供電和外殼：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;ver 1.0&lt;/code&gt;&lt;/strong&gt;：AC 110V 供電，機內降壓到 DC 5V。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;ver 2.0&lt;/code&gt;&lt;/strong&gt;：改成外部 DC 5V（一般手機充電器）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;ver 2.1&lt;/code&gt;&lt;/strong&gt;：透明 Arduino UNO 外殼，加工比較簡單、比較好生產，體積也更小。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;ver 2.2&lt;/code&gt;&lt;/strong&gt;：第一次試 3D 列印外殼。雖然創新，但當時還沒有自己的 3D 印表機，只做了極少量，後來停產，主力還是 &lt;code dir=&quot;auto&quot;&gt;ver 2.1&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;2022 年 5 月到 2026 年 8 月，&lt;code dir=&quot;auto&quot;&gt;SE-net&lt;/code&gt; 一直是 DPIP 即時資訊與強震監視器通知的主要資料來源。時間一久，問題也慢慢出來。2025 年 9 月，在 &lt;span&gt;&lt;a href=&quot;https://github.com/bclswl0827&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img src=&quot;https://github.com/bclswl0827.png?size=40&quot; alt=&quot;&quot; width=&quot;20&quot; height=&quot;20&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;span&gt;ttyAMA0&lt;/span&gt;&lt;svg width=&quot;14&quot; height=&quot;14&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 .3a12 12 0 0 0-3.8 23.38c.6.12.83-.26.83-.57L9 21.07c-3.34.72-4.04-1.61-4.04-1.61-.55-1.39-1.34-1.76-1.34-1.76-1.08-.74.09-.73.09-.73 1.2.09 1.83 1.24 1.83 1.24 1.08 1.83 2.81 1.3 3.5 1 .1-.78.42-1.31.76-1.61-2.67-.3-5.47-1.33-5.47-5.93 0-1.31.47-2.38 1.24-3.22-.14-.3-.54-1.52.1-3.18 0 0 1-.32 3.3 1.23a11.5 11.5 0 0 1 6 0c2.28-1.55 3.29-1.23 3.29-1.23.64 1.66.24 2.88.12 3.18a4.65 4.65 0 0 1 1.23 3.22c0 4.61-2.8 5.63-5.48 5.92.42.36.81 1.1.81 2.22l-.01 3.29c0 .31.2.69.82.57A12 12 0 0 0 12 .3Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;14&quot; height=&quot;14&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M7 7h10v10&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M7 17 17 7&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;span&gt;&lt;a href=&quot;https://github.com/bclswl0827&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; tabindex=&quot;-1&quot; aria-hidden=&quot;true&quot;&gt;&lt;img src=&quot;https://github.com/bclswl0827.png?size=128&quot; alt=&quot;&quot; width=&quot;52&quot; height=&quot;52&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;ttyAMA0&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;14&quot; height=&quot;14&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M7 7h10v10&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M7 17 17 7&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;&lt;svg width=&quot;14&quot; height=&quot;14&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 .3a12 12 0 0 0-3.8 23.38c.6.12.83-.26.83-.57L9 21.07c-3.34.72-4.04-1.61-4.04-1.61-.55-1.39-1.34-1.76-1.34-1.76-1.08-.74.09-.73.09-.73 1.2.09 1.83 1.24 1.83 1.24 1.08 1.83 2.81 1.3 3.5 1 .1-.78.42-1.31.76-1.61-2.67-.3-5.47-1.33-5.47-5.93 0-1.31.47-2.38 1.24-3.22-.14-.3-.54-1.52.1-3.18 0 0 1-.32 3.3 1.23a11.5 11.5 0 0 1 6 0c2.28-1.55 3.29-1.23 3.29-1.23.64 1.66.24 2.88.12 3.18a4.65 4.65 0 0 1 1.23 3.22c0 4.61-2.8 5.63-5.48 5.92.42.36.81 1.1.81 2.22l-.01 3.29c0 .31.2.69.82.57A12 12 0 0 0 12 .3Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;@bclswl0827&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt; 的幫助下，開始著手開發新一代 &lt;code dir=&quot;auto&quot;&gt;ES-net&lt;/code&gt;，目標是更穩定、更靈敏。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;新舊地震儀比較&quot;&gt;新舊地震儀比較&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;以 2026/08/25 臺灣東南部海域 M5.8 地震為例，看兩套地震儀在同一場地震的表現。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;se-net&quot;&gt;SE-net&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;臺東縣臺東市 &lt;code dir=&quot;auto&quot;&gt;7725352&lt;/code&gt;&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2025-12-15/se-net_7725352.webp&quot; alt=&quot;SE-net 地震儀&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;800&quot; height=&quot;750&quot;&gt;&lt;figcaption&gt;SE-net 地震儀&lt;/figcaption&gt;&lt;/figure&gt;
&lt;aside aria-label=&quot;強震時容易掉資料&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;強震時容易掉資料&lt;/p&gt;&lt;div&gt;&lt;p&gt;因為架構設計，&lt;code dir=&quot;auto&quot;&gt;SE-net&lt;/code&gt; 遇到強震時容易掉資料。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;&lt;strong&gt;三軸分量&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;EW&lt;/th&gt;
&lt;th&gt;NS&lt;/th&gt;
&lt;th&gt;UD&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;加速度 (cm/s²)&lt;/td&gt;
&lt;td&gt;36.12&lt;/td&gt;
&lt;td&gt;19.19&lt;/td&gt;
&lt;td&gt;10.51&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;速度 (cm/s)&lt;/td&gt;
&lt;td&gt;1.62&lt;/td&gt;
&lt;td&gt;1.16&lt;/td&gt;
&lt;td&gt;1.55&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;綜合指標&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;數值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;3 分量合成加速度 (PGA, gal)&lt;/td&gt;
&lt;td&gt;39.07&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3 分量合成速度 (PGV, kine)&lt;/td&gt;
&lt;td&gt;1.65&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;最大計測震度&lt;/td&gt;
&lt;td&gt;3.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;最大震度階&lt;/td&gt;
&lt;td&gt;4 級&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;速度反應譜 (SVA)&lt;/td&gt;
&lt;td&gt;3.43&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;長周期地震動階級 (LPGM)&lt;/td&gt;
&lt;td&gt;0 (3.43 cm/s)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;開始時間&lt;/td&gt;
&lt;td&gt;2026/08/25 15:00:06&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;結束時間&lt;/td&gt;
&lt;td&gt;2026/08/25 15:01:22&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;h3 id=&quot;es-net&quot;&gt;ES-net&lt;/h3&gt;&lt;/div&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2025-12-15/es-net_1C1136C.webp&quot; alt=&quot;ES-net 地震儀&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2481&quot; height=&quot;1772&quot;&gt;&lt;figcaption&gt;ES-net 地震儀&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h3 id=&quot;分析&quot;&gt;分析&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;穩定性以外，雜訊也差一截：&lt;code dir=&quot;auto&quot;&gt;SE-net&lt;/code&gt; 高達 &lt;code dir=&quot;auto&quot;&gt;400 µg/√Hz&lt;/code&gt;，&lt;code dir=&quot;auto&quot;&gt;ES-net&lt;/code&gt; 則是 &lt;code dir=&quot;auto&quot;&gt;60 µg/√Hz&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;而且不穩不只發生在強震當下。&lt;code dir=&quot;auto&quot;&gt;SE-net&lt;/code&gt; 平時就很容易斷線，工作人員得頻繁聯絡用戶，請對方把地震儀重新插拔，維運的工作量因此大很多。&lt;/p&gt;
&lt;p&gt;高雜訊、不穩定，再加上大量雜訊誤報，是我們下定決心開發新版地震儀的主要原因。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;講故事&quot;&gt;講故事&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;硬體是一段辛酸史，軟體架構也沒少踩雷。時間拉回最前面，看整個系統怎麼一路長出來，也一路壞掉。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;第-1-卷&quot;&gt;第 1 卷&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;2022 年 5 月，大約高三學測剛考完，開始做 &lt;code dir=&quot;auto&quot;&gt;SE-net&lt;/code&gt;。當時完全沒有程式基礎，用 PM2 + JavaScript。現在回頭看，選 JavaScript 等於替後面埋了一串炸彈；但那時候，它是我唯一寫得動大型專案的語言。&lt;/p&gt;
&lt;p&gt;當時沒有 AI 可以問。身邊沒有朋友或家人在做這行，也沒有人可以請教（別指望普通高中的老師，高職或許有機會）。&lt;/p&gt;
&lt;aside aria-label=&quot;從 CMD 換到 PM2&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;從 CMD 換到 PM2&lt;/p&gt;&lt;div&gt;&lt;p&gt;換成 PM2 的時候很震驚：原來有這麼好用的東西（笑）。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;過程中認識了&lt;a href=&quot;https://www.instagram.com/eggrollpvp/&quot;&gt;蛋捲PVP&lt;/a&gt;，學到很多，主要是地球科學。在蛋捲的推動下，開始在全臺各地部署 SE-net 地震儀。&lt;/p&gt;
&lt;aside aria-label=&quot;MPU6050，一顆 60 元&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;MPU6050，一顆 60 元&lt;/p&gt;&lt;div&gt;&lt;p&gt;當時根本不知道這樣測不測得到地震。那可是 MPU6050，一顆 60 元台幣，說出來我自己都不信。我跟蛋捲都是在賭。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;同年，一位熱心人士引薦，認識了 CWB 地震測報中心科長&lt;a href=&quot;http://seismology.gl.ntu.edu.tw/chen-da-yi_2.htm&quot;&gt;陳達毅&lt;/a&gt;。從他那邊學到非常多 EEW 系統的知識，12 月正式與交通部中央氣象局（CWB）簽約合作。&lt;/p&gt;
&lt;aside aria-label=&quot;CWB 與 CWA&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;CWB 與 CWA&lt;/p&gt;&lt;div&gt;&lt;p&gt;當時的名稱是交通部中央氣象局（CWB），現在是交通部中央氣象署（CWA）。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;簽約半年後，在東華大學放上第一台 MS-net 磁電式速度儀。做法很粗：ADS1115 + Geophone（4.5 Hz）+ ESP32，就這三樣，卻一直運作到現在。我覺得已經是奇蹟了。要高精度的磁電式地震儀，可以看 &lt;a href=&quot;https://anyshake.org/&quot;&gt;AnyShake&lt;/a&gt;。&lt;/p&gt;
&lt;aside aria-label=&quot;兩個網各做什麼&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;兩個網各做什麼&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;SE-net&lt;/code&gt; 是範圍主力，收集全臺的觀測資料；&lt;code dir=&quot;auto&quot;&gt;MS-net&lt;/code&gt; 是速度主力，測得到很小的 P 波，預警可以更快。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2025-12-15/computer-2021.webp&quot; alt=&quot;2021 年的電腦&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1707&quot; height=&quot;1280&quot;&gt;&lt;figcaption&gt;2021 年的電腦&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;當時的主力電腦是家人汰換下來的 ASUS X55V：CPU Pentium 2020M、記憶體 4GB DDR3。開個 VSCode 都卡到炸——&lt;del&gt;天崩開局&lt;/del&gt;。&lt;code dir=&quot;auto&quot;&gt;SE-net&lt;/code&gt; 就是在這樣的環境下誕生的。沒錯，它現在還活著。再說一次：當時真的沒有 AI 可以問。&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2025-12-15/server-2021.webp&quot; alt=&quot;2021 年的伺服器&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1707&quot; height=&quot;1280&quot;&gt;&lt;figcaption&gt;2021 年的伺服器&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;當時的主力伺服器是 AMD Ryzen 5 5600X。現在還在服役（笑），只是從主力換成打雜，負責各類非即時資料整理。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;第-2-卷&quot;&gt;第 2 卷&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;PM2 用到 2024 年初，然後大改一次：&lt;code dir=&quot;auto&quot;&gt;PM2&lt;/code&gt; 換成 &lt;code dir=&quot;auto&quot;&gt;Docker&lt;/code&gt;，&lt;code dir=&quot;auto&quot;&gt;Node.js&lt;/code&gt; 換成 &lt;code dir=&quot;auto&quot;&gt;Bun.js&lt;/code&gt;（還是 JavaScript）。改完當下，「看似」還不錯。&lt;/p&gt;
&lt;p&gt;好景不常。幾個月後，JavaScript 沒有型別的問題冒出來。新功能一直往上疊，錯誤變得很頻繁，於是開始加 TypeScript，想把這類問題壓下來。&lt;/p&gt;
&lt;aside aria-label=&quot;TREM-Lite 為什麼難用&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;TREM-Lite 為什麼難用&lt;/p&gt;&lt;div&gt;&lt;p&gt;TREM-Lite 就是這個時期做出來的。IDE 不會提示型別，每個變數的型別和用意都得自己背。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;aside aria-label=&quot;0403 地震（M7.1）&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;0403 地震（M7.1）&lt;/p&gt;&lt;div&gt;&lt;p&gt;2024 年 4 月的 0403 地震（M7.1），流量突然暴增。設備、經驗兩頭空，完全束手無策。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h3 id=&quot;第-25-卷&quot;&gt;第 2.5 卷？&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;0403 之後，意外認識了更多人，也來了很強的外援。&lt;/p&gt;
&lt;div data-astro-cid-7qmvx3iy=&quot;&quot;&gt;&lt;article data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;p data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;svg data-astro-cid-oag6qnet=&quot;true&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M21 14h-1V7a3 3 0 0 0-3-3H7a3 3 0 0 0-3 3v7H3a1 1 0 0 0-1 1v2a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-2a1 1 0 0 0-1-1ZM6 7a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v7H6V7Zm14 10a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-1h16v1Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span data-astro-cid-oag6qnet=&quot;&quot;&gt;個人電腦與伺服器&lt;/span&gt;&lt;/p&gt;&lt;div data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://www.geoscience.com.tw/&quot;&gt;巨科資訊有限公司&lt;/a&gt; 贊助個人電腦（換掉那台 ASUS X55V）和伺服器（AMD Ryzen 9 7900X）。&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;article data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;p data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;svg data-astro-cid-oag6qnet=&quot;true&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M1.44 8.855v-.001l3.527-3.516c.34-.344.802-.541 1.285-.548h6.649l.947-.947c3.07-3.07 6.207-3.072 7.62-2.868a1.821 1.821 0 0 1 1.557 1.557c.204 1.413.203 4.55-2.868 7.62l-.946.946v6.649a1.845 1.845 0 0 1-.549 1.286l-3.516 3.528a1.844 1.844 0 0 1-3.11-.944l-.858-4.275-4.52-4.52-2.31-.463-1.964-.394A1.847 1.847 0 0 1 .98 10.693a1.843 1.843 0 0 1 .46-1.838Zm5.379 2.017-3.873-.776L6.32 6.733h4.638l-4.14 4.14Zm8.403-5.655c2.459-2.46 4.856-2.463 5.89-2.33.134 1.035.13 3.432-2.329 5.891l-6.71 6.71-3.561-3.56 6.71-6.711Zm-1.318 15.837-.776-3.873 4.14-4.14v4.639l-3.364 3.374Z&quot; clip-rule=&quot;evenodd&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M9.318 18.345a.972.972 0 0 0-1.86-.561c-.482 1.435-1.687 2.204-2.934 2.619a8.22 8.22 0 0 1-1.23.302c.062-.365.157-.79.303-1.229.415-1.247 1.184-2.452 2.62-2.935a.971.971 0 1 0-.62-1.842c-.12.04-.236.084-.35.13-2.02.828-3.012 2.588-3.493 4.033a10.383 10.383 0 0 0-.51 2.845l-.001.016v.063c0 .536.434.972.97.972H2.24a7.21 7.21 0 0 0 .878-.065c.527-.063 1.248-.19 2.02-.447 1.445-.48 3.205-1.472 4.033-3.494a5.828 5.828 0 0 0 .147-.407Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span data-astro-cid-oag6qnet=&quot;&quot;&gt;高頻寬伺服器&lt;/span&gt;&lt;/p&gt;&lt;div data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://www.twds.com.tw/zh-tw/&quot;&gt;台灣數位串流有限公司&lt;/a&gt; 提供超高頻寬的伺服器，用來應付地震時的突發流量。&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/div&gt;
&lt;p&gt;地震觀測本來就冷門，這兩家願意幫忙，真的非常感激。&lt;/p&gt;
&lt;aside aria-label=&quot;Ryzen 9 7900X 還是主力&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Ryzen 9 7900X 還是主力&lt;/p&gt;&lt;div&gt;&lt;p&gt;到目前（截止 2026 年 8 月）它都還是主力，而且看樣子還會撐很長一段時間。現在硬體貴成這樣，要換可能得傾家蕩產（笑）。最近開始出現不少毛病，例如硬碟頻繁掉盤等，讓我很頭痛。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h3 id=&quot;第-3-卷&quot;&gt;第 3 卷&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;整個 2025 年上半年都在修修補補，沒有多少實質進展。&lt;/p&gt;
&lt;p&gt;真正的改變在同年 9 月。在 &lt;span&gt;&lt;a href=&quot;https://github.com/bclswl0827&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img src=&quot;https://github.com/bclswl0827.png?size=40&quot; alt=&quot;&quot; width=&quot;20&quot; height=&quot;20&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;span&gt;ttyAMA0&lt;/span&gt;&lt;svg width=&quot;14&quot; height=&quot;14&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 .3a12 12 0 0 0-3.8 23.38c.6.12.83-.26.83-.57L9 21.07c-3.34.72-4.04-1.61-4.04-1.61-.55-1.39-1.34-1.76-1.34-1.76-1.08-.74.09-.73.09-.73 1.2.09 1.83 1.24 1.83 1.24 1.08 1.83 2.81 1.3 3.5 1 .1-.78.42-1.31.76-1.61-2.67-.3-5.47-1.33-5.47-5.93 0-1.31.47-2.38 1.24-3.22-.14-.3-.54-1.52.1-3.18 0 0 1-.32 3.3 1.23a11.5 11.5 0 0 1 6 0c2.28-1.55 3.29-1.23 3.29-1.23.64 1.66.24 2.88.12 3.18a4.65 4.65 0 0 1 1.23 3.22c0 4.61-2.8 5.63-5.48 5.92.42.36.81 1.1.81 2.22l-.01 3.29c0 .31.2.69.82.57A12 12 0 0 0 12 .3Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;14&quot; height=&quot;14&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M7 7h10v10&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M7 17 17 7&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;span&gt;&lt;a href=&quot;https://github.com/bclswl0827&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; tabindex=&quot;-1&quot; aria-hidden=&quot;true&quot;&gt;&lt;img src=&quot;https://github.com/bclswl0827.png?size=128&quot; alt=&quot;&quot; width=&quot;52&quot; height=&quot;52&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;ttyAMA0&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;14&quot; height=&quot;14&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M7 7h10v10&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M7 17 17 7&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span&gt;&lt;svg width=&quot;14&quot; height=&quot;14&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 .3a12 12 0 0 0-3.8 23.38c.6.12.83-.26.83-.57L9 21.07c-3.34.72-4.04-1.61-4.04-1.61-.55-1.39-1.34-1.76-1.34-1.76-1.08-.74.09-.73.09-.73 1.2.09 1.83 1.24 1.83 1.24 1.08 1.83 2.81 1.3 3.5 1 .1-.78.42-1.31.76-1.61-2.67-.3-5.47-1.33-5.47-5.93 0-1.31.47-2.38 1.24-3.22-.14-.3-.54-1.52.1-3.18 0 0 1-.32 3.3 1.23a11.5 11.5 0 0 1 6 0c2.28-1.55 3.29-1.23 3.29-1.23.64 1.66.24 2.88.12 3.18a4.65 4.65 0 0 1 1.23 3.22c0 4.61-2.8 5.63-5.48 5.92.42.36.81 1.1.81 2.22l-.01 3.29c0 .31.2.69.82.57A12 12 0 0 0 12 .3Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;@bclswl0827&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt; 的推薦下，開始嘗試 Golang，再逐步、分批把舊服務全部用 Golang 重寫（是 rewrite，不是 native port）。&lt;/p&gt;
&lt;p&gt;效果很明顯：跟 JavaScript 比，總算能有效用上多核；記憶體用量更低；同樣的計算，CPU 用量更低；打包出來的 Image 也更小，等等。&lt;/p&gt;
&lt;p&gt;架構也砍掉一大塊。以前太複雜、太冗餘，常常不穩。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;以前&lt;/th&gt;
&lt;th&gt;現在&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Balance Server&lt;/td&gt;
&lt;td&gt;Nginx 後面還有一層 Server&lt;/td&gt;
&lt;td&gt;拿掉那層，改成 Openresty + Lua，快取控得更細&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;儲存&lt;/td&gt;
&lt;td&gt;JSON&lt;/td&gt;
&lt;td&gt;SQLite（歷史遺留。嚴肅，別笑）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;資料庫&lt;/td&gt;
&lt;td&gt;MariaDB&lt;/td&gt;
&lt;td&gt;ClickHouse（波形）+ HA PostgreSQL（解算資料）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;內部通訊&lt;/td&gt;
&lt;td&gt;WebSocket&lt;/td&gt;
&lt;td&gt;NATS。不用維護健康狀態，邏輯比較簡單，也比較穩，而且本身就有異地備援&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;去 YouTube 翻地震紀錄影片，會發現現在延遲超級低。差在改用 Lua JIT。&lt;/p&gt;
&lt;aside aria-label=&quot;JSON 時期的 API&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;JSON 時期的 API&lt;/p&gt;&lt;div&gt;&lt;p&gt;以前用 JSON 的時候，API 回應速度會有明顯延遲。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;aside aria-label=&quot;2026 Q4&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;2026 Q4&lt;/p&gt;&lt;div&gt;&lt;p&gt;2026 Q4 預計從 HTTP Polling 改成 SSE。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h4 id=&quot;新舊-trem-eew-系統差異&quot;&gt;新舊 TREM EEW 系統差異&lt;/h4&gt;&lt;/div&gt;
&lt;aside aria-label=&quot;TREM EEW 是什麼&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;TREM EEW 是什麼&lt;/p&gt;&lt;div&gt;&lt;p&gt;TREM EEW 是 TREM 系統以 TREM-net 觀測資料自行解算的地震預警，屬非官方資訊，一切以中央氣象署發布為準。依《氣象法》，TREM EEW 只提供給特定用戶，不對不特定大眾發布；下面說的「發報」「發布權限」，指的是由哪個節點負責送出 TREM EEW。對所有使用者轉發的，是中央氣象署的強震即時警報。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2025-12-15/architecture.webp&quot; alt=&quot;新系統&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2220&quot; height=&quot;1036&quot;&gt;&lt;figcaption&gt;新系統&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;&lt;a href=&quot;https://static.core-tnn1.exptech.dev/seismograph-info/&quot;&gt;地震儀裝置監控面板&lt;/a&gt;&lt;/p&gt;
&lt;div data-astro-cid-7qmvx3iy=&quot;&quot;&gt;&lt;article data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;p data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;svg data-astro-cid-oag6qnet=&quot;true&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M8.7 10a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-6.27-6.3a1 1 0 0 0-1.42 1.42ZM21 14a1 1 0 0 0-1 1v3.59L15.44 14A1 1 0 0 0 14 15.44L18.59 20H15a1 1 0 0 0 0 2h6a1 1 0 0 0 .38-.08 1 1 0 0 0 .54-.54A1 1 0 0 0 22 21v-6a1 1 0 0 0-1-1Zm.92-11.38a1 1 0 0 0-.54-.54A1 1 0 0 0 21 2h-6a1 1 0 0 0 0 2h3.59L2.29 20.29a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0L20 5.41V9a1 1 0 0 0 2 0V3a1 1 0 0 0-.08-.38Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span data-astro-cid-oag6qnet=&quot;&quot;&gt;舊版異地多活&lt;/span&gt;&lt;/p&gt;&lt;div data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;p&gt;兩個節點都會發報，但解算結果通常差很多。實際使用時只能固定單一節點，故障時要手動切換。&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;article data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;p data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;svg data-astro-cid-oag6qnet=&quot;true&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;m14.72 8.79-4.29 4.3-1.65-1.65a1 1 0 1 0-1.41 1.41l2.35 2.36a1 1 0 0 0 1.41 0l5-5a1.002 1.002 0 1 0-1.41-1.42ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span data-astro-cid-oag6qnet=&quot;&quot;&gt;新系統&lt;/span&gt;&lt;/p&gt;&lt;div data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;p&gt;兩邊一樣都會解算，最後用仲裁決定哪個節點有發布權限（自動故障轉移）。也會自動補齊兩邊的差異測站，避免特定測站只存在單邊（例如一邊連不上）。&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://report.exptech.dev/&quot;&gt;TREM 檢知報告&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;h4 id=&quot;狀態監測&quot;&gt;狀態監測&lt;/h4&gt;&lt;/div&gt;
&lt;figure&gt;&lt;img src=&quot;https://exptech.dev/img/sharing/2025-12-15/status.webp&quot; alt=&quot;新系統&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1846&quot; height=&quot;903&quot;&gt;&lt;figcaption&gt;新系統&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;&lt;a href=&quot;https://status.exptech.dev/status&quot;&gt;狀態監測&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;h4 id=&quot;ml-模型&quot;&gt;ML 模型&lt;/h4&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://huggingface.co/YuYu1015/YuYu1015-PhaseNet-50Hz-268k-v1&quot;&gt;YuYu1015-PhaseNet-50Hz-268k-v1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://huggingface.co/YuYu1015/YuYu1015-IntensityGMM-TW-45k-v1&quot;&gt;YuYu1015-IntensityGMM-TW-45k-v1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;番外篇&quot;&gt;番外篇&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;學生時代&quot;&gt;學生時代&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;高一到高三，成績應該都是全校倒數（不是班排，是校排）。我其實有認真在讀書，大概吧。高中念了 4 年，大一還回高中重補修，全校大概只有我。&lt;/p&gt;
&lt;p&gt;當時多半被當成怪人（不上課，都在胡搞瞎搞）加上廢人（成績爛）。家人一開始很生氣，後來就放棄了。他們很討厭我用 3C，希望我好好讀書，手機還被折成兩半（喜提折疊機）。經過好幾次家庭革命，才勉強能做自己想做的事。說到底，也只能說是運氣好，一路上遇到很多願意幫忙的人。&lt;/p&gt;
&lt;aside aria-label=&quot;用手機寫程式&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;用手機寫程式&lt;/p&gt;&lt;div&gt;&lt;p&gt;有很長一段時間是用手機寫程式，靠背記住程式在哪個檔案的哪個位置。手機螢幕很小，用背的比用找的快。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h3 id=&quot;20240403-地震&quot;&gt;2024/04/03 地震&lt;/h3&gt;&lt;/div&gt;
&lt;div data-astro-cid-7qmvx3iy=&quot;&quot;&gt;&lt;div data-astro-cid-zaaezwya=&quot;&quot;&gt;&lt;span data-astro-cid-zaaezwya=&quot;&quot;&gt;&lt;a href=&quot;https://youtu.be/BLnajRWAXIw&quot; data-astro-cid-zaaezwya=&quot;&quot;&gt;&lt;span data-astro-cid-zaaezwya=&quot;&quot;&gt;ExpTech 2024/04/03 07:58 M7.1 地震紀錄&lt;/span&gt;&lt;/a&gt;&lt;span data-astro-cid-zaaezwya=&quot;&quot;&gt;主震時的 TREM EEW 內部紀錄。&lt;/span&gt;&lt;/span&gt;&lt;svg data-astro-cid-zaaezwya=&quot;true&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M17.92 11.62a1.001 1.001 0 0 0-.21-.33l-5-5a1.003 1.003 0 1 0-1.42 1.42l3.3 3.29H7a1 1 0 0 0 0 2h7.59l-3.3 3.29a1.002 1.002 0 0 0 .325 1.639 1 1 0 0 0 1.095-.219l5-5a1 1 0 0 0 .21-.33 1 1 0 0 0 0-.76Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div data-astro-cid-zaaezwya=&quot;&quot;&gt;&lt;span data-astro-cid-zaaezwya=&quot;&quot;&gt;&lt;a href=&quot;https://youtu.be/eCoOz4duIIw&quot; data-astro-cid-zaaezwya=&quot;&quot;&gt;&lt;span data-astro-cid-zaaezwya=&quot;&quot;&gt;你是什麼人 2024/04/27 M5.8 地震紀錄&lt;/span&gt;&lt;/a&gt;&lt;span data-astro-cid-zaaezwya=&quot;&quot;&gt;餘震剛好都發生在語音通話時。事後看真的快被笑死。&lt;/span&gt;&lt;/span&gt;&lt;svg data-astro-cid-zaaezwya=&quot;true&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M17.92 11.62a1.001 1.001 0 0 0-.21-.33l-5-5a1.003 1.003 0 1 0-1.42 1.42l3.3 3.29H7a1 1 0 0 0 0 2h7.59l-3.3 3.29a1.002 1.002 0 0 0 .325 1.639 1 1 0 0 0 1.095-.219l5-5a1 1 0 0 0 .21-.33 1 1 0 0 0 0-.76Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/div&gt;&lt;/div&gt;</content:encoded><category>Sharing</category></item><item><title>LB Server 請求分析</title><link>https://exptech.dev/en/blog/analysis-2025-12-14/</link><guid isPermaLink="true">https://exptech.dev/en/blog/analysis-2025-12-14/</guid><description>2025/12/13 上午 9:19:57 至 9:25:01 期間，LB Server 處理了 948,920 個請求，平均 RPS 3,121.45，峰值 RPS 3,183.02。系統穩定性極佳（零伺服器錯誤），但負載分布不均，lb-1 處理了 30.58% 的流量。</description><pubDate>Sun, 14 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h2 id=&quot;分析概述&quot;&gt;分析概述&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;分析區間是 &lt;strong&gt;2025/12/13 上午 9:19:57 至 9:25:01（UTC+8）&lt;/strong&gt;，持續 &lt;strong&gt;5 分鐘 4 秒&lt;/strong&gt;。目的是評估負載平衡伺服器的運作狀況與系統表現，重點為流量分布、伺服器負載、錯誤率與 API 使用情況。&lt;/p&gt;

&lt;div&gt;&lt;h2 id=&quot;流量&quot;&gt;流量&lt;/h2&gt;&lt;/div&gt;
&lt;div data-astro-cid-7qmvx3iy=&quot;&quot;&gt;&lt;article data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;p data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;svg data-astro-cid-oag6qnet=&quot;true&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M1.44 8.855v-.001l3.527-3.516c.34-.344.802-.541 1.285-.548h6.649l.947-.947c3.07-3.07 6.207-3.072 7.62-2.868a1.821 1.821 0 0 1 1.557 1.557c.204 1.413.203 4.55-2.868 7.62l-.946.946v6.649a1.845 1.845 0 0 1-.549 1.286l-3.516 3.528a1.844 1.844 0 0 1-3.11-.944l-.858-4.275-4.52-4.52-2.31-.463-1.964-.394A1.847 1.847 0 0 1 .98 10.693a1.843 1.843 0 0 1 .46-1.838Zm5.379 2.017-3.873-.776L6.32 6.733h4.638l-4.14 4.14Zm8.403-5.655c2.459-2.46 4.856-2.463 5.89-2.33.134 1.035.13 3.432-2.329 5.891l-6.71 6.71-3.561-3.56 6.71-6.711Zm-1.318 15.837-.776-3.873 4.14-4.14v4.639l-3.364 3.374Z&quot; clip-rule=&quot;evenodd&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M9.318 18.345a.972.972 0 0 0-1.86-.561c-.482 1.435-1.687 2.204-2.934 2.619a8.22 8.22 0 0 1-1.23.302c.062-.365.157-.79.303-1.229.415-1.247 1.184-2.452 2.62-2.935a.971.971 0 1 0-.62-1.842c-.12.04-.236.084-.35.13-2.02.828-3.012 2.588-3.493 4.033a10.383 10.383 0 0 0-.51 2.845l-.001.016v.063c0 .536.434.972.97.972H2.24a7.21 7.21 0 0 0 .878-.065c.527-.063 1.248-.19 2.02-.447 1.445-.48 3.205-1.472 4.033-3.494a5.828 5.828 0 0 0 .147-.407Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span data-astro-cid-oag6qnet=&quot;&quot;&gt;總請求數&lt;/span&gt;&lt;/p&gt;&lt;div data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;p&gt;948,920&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;article data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;p data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;svg data-astro-cid-oag6qnet=&quot;true&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M5 12a1 1 0 0 0-1 1v8a1 1 0 0 0 2 0v-8a1 1 0 0 0-1-1m5-10a1 1 0 0 0-1 1v18a1 1 0 0 0 2 0V3a1 1 0 0 0-1-1m10 14a1 1 0 0 0-1 1v4a1 1 0 0 0 2 0v-4a1 1 0 0 0-1-1m-5-8a1 1 0 0 0-1 1v12a1 1 0 0 0 2 0V9a1 1 0 0 0-1-1&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span data-astro-cid-oag6qnet=&quot;&quot;&gt;RPS&lt;/span&gt;&lt;/p&gt;&lt;div data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;p&gt;平均 3,121.45，峰值 3,183.02&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;article data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;p data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;svg data-astro-cid-oag6qnet=&quot;true&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M8.29 13.29a1 1 0 0 0 0 1.42l3 3a1 1 0 0 0 1.42 0l3-3a1 1 0 0 0-1.42-1.42L13 14.59V3a1 1 0 0 0-2 0v11.59l-1.29-1.3a1 1 0 0 0-1.42 0ZM18 9h-2a1 1 0 0 0 0 2h2a1 1 0 0 1 1 1v7a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-7a1 1 0 0 1 1-1h2a1 1 0 0 0 0-2H6a3 3 0 0 0-3 3v7a3 3 0 0 0 3 3h12a3 3 0 0 0 3-3v-7a3 3 0 0 0-3-3Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span data-astro-cid-oag6qnet=&quot;&quot;&gt;總傳輸量&lt;/span&gt;&lt;/p&gt;&lt;div data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;p&gt;659.64 MB&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;article data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;p data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;svg data-astro-cid-oag6qnet=&quot;true&quot; aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M12 11a1 1 0 0 0-1 1v4a1 1 0 0 0 2 0v-4a1 1 0 0 0-1-1Zm.38-3.92a1 1 0 0 0-.76 0 1 1 0 0 0-.33.21 1.15 1.15 0 0 0-.21.33 1 1 0 0 0 .21 1.09c.097.088.209.16.33.21A1 1 0 0 0 13 8a1.05 1.05 0 0 0-.29-.71 1 1 0 0 0-.33-.21ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span data-astro-cid-oag6qnet=&quot;&quot;&gt;成功率&lt;/span&gt;&lt;/p&gt;&lt;div data-astro-cid-oag6qnet=&quot;&quot;&gt;&lt;p&gt;97.16%（5xx 為 0）&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/div&gt;
&lt;p&gt;這段期間系統成功處理 948,920 個 HTTP 請求。峰值與平均 RPS 的差距小（僅 2%）。以平均 3,121 RPS 來看，系統能穩定處理高流量，處理能力足以應付這個負載。&lt;/p&gt;
&lt;p&gt;平均請求大小 728.91 B（範圍 0 B ~ 94.12 KB），平均每個請求約 729 bytes，屬於輕量請求。總傳輸量 659.64 MB，傳輸效率良好。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;http-狀態碼&quot;&gt;HTTP 狀態碼&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;類別&quot;&gt;類別&lt;/h3&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;狀態碼類別&lt;/th&gt;
&lt;th&gt;數量&lt;/th&gt;
&lt;th&gt;比例&lt;/th&gt;
&lt;th&gt;評估&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2xx（成功）&lt;/td&gt;
&lt;td&gt;921,963&lt;/td&gt;
&lt;td&gt;97.16%&lt;/td&gt;
&lt;td&gt;優秀&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3xx（重新導向）&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0.00%&lt;/td&gt;
&lt;td&gt;正常&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4xx（客戶端錯誤）&lt;/td&gt;
&lt;td&gt;26,956&lt;/td&gt;
&lt;td&gt;2.84%&lt;/td&gt;
&lt;td&gt;需改善&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5xx（伺服器錯誤）&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0.00%&lt;/td&gt;
&lt;td&gt;極佳&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;h3 id=&quot;個別狀態碼&quot;&gt;個別狀態碼&lt;/h3&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;狀態碼&lt;/th&gt;
&lt;th&gt;數量&lt;/th&gt;
&lt;th&gt;比例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;200&lt;/td&gt;
&lt;td&gt;921,702&lt;/td&gt;
&lt;td&gt;97.13%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;404&lt;/td&gt;
&lt;td&gt;26,932&lt;/td&gt;
&lt;td&gt;2.84%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;204&lt;/td&gt;
&lt;td&gt;261&lt;/td&gt;
&lt;td&gt;0.03%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;499&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;0.00%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;302&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0.00%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;aside aria-label=&quot;穩定性&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;穩定性&lt;/p&gt;&lt;div&gt;&lt;p&gt;5xx 為 0。後端服務運作正常，負載平衡器與後端伺服器都沒有故障，架構穩定可靠。97.16% 的請求成功，符合高品質服務標準（&gt; 95%），整體運作品質優秀。499 只有 24 筆（0.00%），是客戶端取消請求，回應速度良好，使用者體驗佳。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;aside aria-label=&quot;404 略高於理想值&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;404 略高於理想值&lt;/p&gt;&lt;div&gt;&lt;p&gt;404 有 26,932 筆（2.84%），略高於理想值（&amp;#x3C; 2%）。可能原因：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;客戶端使用舊版 API 路徑或已變更的端點&lt;/li&gt;
&lt;li&gt;API 版本不符&lt;/li&gt;
&lt;li&gt;客戶端設定錯誤（端點路徑不對）&lt;/li&gt;
&lt;li&gt;舊版客戶端仍在使用已棄用的端點&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;這會影響使用者體驗，應用程式功能可能異常，需要使用者更新客戶端或修正設定。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h2 id=&quot;熱門端點&quot;&gt;熱門端點&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;流量集中在核心 API。前 8 個最熱門的端點佔總流量的 &lt;strong&gt;73.48%&lt;/strong&gt;，其中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;地震預警（&lt;code dir=&quot;auto&quot;&gt;/api/v2/eq/…&lt;/code&gt;，轉發中央氣象署的強震即時警報，完整路徑不列出）：36.87%&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;/api/v2/trem/rts&lt;/code&gt;（即時測站）：36.63%&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;地震預警與即時測站在 4 台負載平衡器上各約 9%，分布均勻，符合預期的使用模式。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;排名&lt;/th&gt;
&lt;th&gt;請求&lt;/th&gt;
&lt;th&gt;請求數&lt;/th&gt;
&lt;th&gt;比例&lt;/th&gt;
&lt;th&gt;累積比例&lt;/th&gt;
&lt;th&gt;RPS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /api/v2/eq/… [lb-2.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;88,110&lt;/td&gt;
&lt;td&gt;9.29%&lt;/td&gt;
&lt;td&gt;9.29%&lt;/td&gt;
&lt;td&gt;289.84&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /api/v2/eq/… [lb-1.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;87,496&lt;/td&gt;
&lt;td&gt;9.22%&lt;/td&gt;
&lt;td&gt;18.51%&lt;/td&gt;
&lt;td&gt;287.82&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /api/v2/eq/… [lb-3.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;87,108&lt;/td&gt;
&lt;td&gt;9.18%&lt;/td&gt;
&lt;td&gt;27.69%&lt;/td&gt;
&lt;td&gt;286.54&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /api/v2/eq/… [lb-4.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;87,065&lt;/td&gt;
&lt;td&gt;9.18%&lt;/td&gt;
&lt;td&gt;36.86%&lt;/td&gt;
&lt;td&gt;286.40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /api/v2/trem/rts [lb-2.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;86,989&lt;/td&gt;
&lt;td&gt;9.17%&lt;/td&gt;
&lt;td&gt;46.03%&lt;/td&gt;
&lt;td&gt;286.15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /api/v2/trem/rts [lb-4.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;86,966&lt;/td&gt;
&lt;td&gt;9.16%&lt;/td&gt;
&lt;td&gt;55.19%&lt;/td&gt;
&lt;td&gt;286.07&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /api/v2/trem/rts [lb-1.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;86,954&lt;/td&gt;
&lt;td&gt;9.16%&lt;/td&gt;
&lt;td&gt;64.36%&lt;/td&gt;
&lt;td&gt;286.03&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /api/v2/trem/rts [lb-3.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;86,615&lt;/td&gt;
&lt;td&gt;9.13%&lt;/td&gt;
&lt;td&gt;73.48%&lt;/td&gt;
&lt;td&gt;284.92&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /api/v1/trem/rts [lb-1.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;60,190&lt;/td&gt;
&lt;td&gt;6.34%&lt;/td&gt;
&lt;td&gt;79.83%&lt;/td&gt;
&lt;td&gt;197.99&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /ntp [lb-1.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;40,335&lt;/td&gt;
&lt;td&gt;4.25%&lt;/td&gt;
&lt;td&gt;84.08%&lt;/td&gt;
&lt;td&gt;132.68&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /api/v1/trem/rts [lb-2.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;25,096&lt;/td&gt;
&lt;td&gt;2.64%&lt;/td&gt;
&lt;td&gt;86.72%&lt;/td&gt;
&lt;td&gt;82.55&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /ntp [lb-2.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;17,428&lt;/td&gt;
&lt;td&gt;1.84%&lt;/td&gt;
&lt;td&gt;88.56%&lt;/td&gt;
&lt;td&gt;57.33&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /ntp [lb-3.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;17,332&lt;/td&gt;
&lt;td&gt;1.83%&lt;/td&gt;
&lt;td&gt;90.39%&lt;/td&gt;
&lt;td&gt;57.01&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /ntp [lb-4.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;17,321&lt;/td&gt;
&lt;td&gt;1.83%&lt;/td&gt;
&lt;td&gt;92.21%&lt;/td&gt;
&lt;td&gt;56.98&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /websocket [lb-4.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;8,575&lt;/td&gt;
&lt;td&gt;0.90%&lt;/td&gt;
&lt;td&gt;93.11%&lt;/td&gt;
&lt;td&gt;28.21&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /websocket [lb-3.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;8,544&lt;/td&gt;
&lt;td&gt;0.90%&lt;/td&gt;
&lt;td&gt;94.01%&lt;/td&gt;
&lt;td&gt;28.11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /websocket [lb-1.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;8,475&lt;/td&gt;
&lt;td&gt;0.89%&lt;/td&gt;
&lt;td&gt;94.91%&lt;/td&gt;
&lt;td&gt;27.88&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /api/v1/eq/… [lb-1.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;6,633&lt;/td&gt;
&lt;td&gt;0.70%&lt;/td&gt;
&lt;td&gt;95.61%&lt;/td&gt;
&lt;td&gt;21.82&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /api/v1/eq/… [lb-3.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;6,351&lt;/td&gt;
&lt;td&gt;0.67%&lt;/td&gt;
&lt;td&gt;96.28%&lt;/td&gt;
&lt;td&gt;20.89&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /api/v1/eq/… [lb-4.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;6,346&lt;/td&gt;
&lt;td&gt;0.67%&lt;/td&gt;
&lt;td&gt;96.94%&lt;/td&gt;
&lt;td&gt;20.88&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /api/v1/trem/rts [lb-3.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;6,305&lt;/td&gt;
&lt;td&gt;0.66%&lt;/td&gt;
&lt;td&gt;97.61%&lt;/td&gt;
&lt;td&gt;20.74&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /api/v1/eq/… [lb-2.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;6,287&lt;/td&gt;
&lt;td&gt;0.66%&lt;/td&gt;
&lt;td&gt;98.27%&lt;/td&gt;
&lt;td&gt;20.68&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /api/v1/trem/rts [lb-4.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;5,934&lt;/td&gt;
&lt;td&gt;0.63%&lt;/td&gt;
&lt;td&gt;98.90%&lt;/td&gt;
&lt;td&gt;19.52&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /api/v1/trem/rts [lb.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;5,750&lt;/td&gt;
&lt;td&gt;0.61%&lt;/td&gt;
&lt;td&gt;99.50%&lt;/td&gt;
&lt;td&gt;18.91&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /websocket [lb-2.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;769&lt;/td&gt;
&lt;td&gt;0.08%&lt;/td&gt;
&lt;td&gt;99.58%&lt;/td&gt;
&lt;td&gt;2.53&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /ntp [lb.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;365&lt;/td&gt;
&lt;td&gt;0.04%&lt;/td&gt;
&lt;td&gt;99.62%&lt;/td&gt;
&lt;td&gt;1.20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /api/v2/trem/rts [lb.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;360&lt;/td&gt;
&lt;td&gt;0.04%&lt;/td&gt;
&lt;td&gt;99.66%&lt;/td&gt;
&lt;td&gt;1.18&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;GET /api/v1/eq/… [lb.exptech.dev]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;360&lt;/td&gt;
&lt;td&gt;0.04%&lt;/td&gt;
&lt;td&gt;99.70%&lt;/td&gt;
&lt;td&gt;1.18&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;h2 id=&quot;api-端點&quot;&gt;API 端點&lt;/h2&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API 端點&lt;/th&gt;
&lt;th&gt;總請求數&lt;/th&gt;
&lt;th&gt;比例&lt;/th&gt;
&lt;th&gt;平均 RPS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;/api/v2/eq/…&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;349,779&lt;/td&gt;
&lt;td&gt;36.87%&lt;/td&gt;
&lt;td&gt;~1,150&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;/api/v2/trem/rts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;347,524&lt;/td&gt;
&lt;td&gt;36.63%&lt;/td&gt;
&lt;td&gt;~1,143&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;/api/v1/trem/rts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;97,525&lt;/td&gt;
&lt;td&gt;10.28%&lt;/td&gt;
&lt;td&gt;~321&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;/ntp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;92,440&lt;/td&gt;
&lt;td&gt;9.75%&lt;/td&gt;
&lt;td&gt;~304&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;/websocket&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;34,363&lt;/td&gt;
&lt;td&gt;3.62%&lt;/td&gt;
&lt;td&gt;~113&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;/api/v1/eq/…&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;25,977&lt;/td&gt;
&lt;td&gt;2.74%&lt;/td&gt;
&lt;td&gt;~85&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;地震預警&lt;/strong&gt; 是流量最高的核心功能（36.87%），在 4 台負載平衡器上分布均勻，平均 RPS 約 1,150，處理能力良好。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;即時測站（&lt;code dir=&quot;auto&quot;&gt;/api/v2/trem/rts&lt;/code&gt;）&lt;/strong&gt; 與地震預警並列為核心服務（36.63%），負載分布均勻。兩個核心 API 合計 73.5%，核心服務運作正常。&lt;/p&gt;
&lt;p&gt;v2 API 使用率 73.5%，是主要版本，大部分使用者已遷移至 v2 API。&lt;/p&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;/ntp&lt;/code&gt; 佔 9.75%，提供時間同步，使用率正常，運作穩定。&lt;code dir=&quot;auto&quot;&gt;/websocket&lt;/code&gt; 佔 3.62%，連線數穩定，用於即時資料推送，運作正常。&lt;/p&gt;
&lt;aside aria-label=&quot;v1 仍在使用&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;v1 仍在使用&lt;/p&gt;&lt;div&gt;&lt;p&gt;v1 API 仍佔 13.02%，還有一部分使用者使用舊版。需要留意 v1 的維護成本與相容性，以及版本遷移進度。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h2 id=&quot;負載平衡器&quot;&gt;負載平衡器&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;共 5 個不同的 Host。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;排名&lt;/th&gt;
&lt;th&gt;Host&lt;/th&gt;
&lt;th&gt;請求數&lt;/th&gt;
&lt;th&gt;比例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;lb-1.exptech.dev&lt;/td&gt;
&lt;td&gt;290,151&lt;/td&gt;
&lt;td&gt;30.58%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;lb-2.exptech.dev&lt;/td&gt;
&lt;td&gt;224,730&lt;/td&gt;
&lt;td&gt;23.68%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;lb-3.exptech.dev&lt;/td&gt;
&lt;td&gt;212,328&lt;/td&gt;
&lt;td&gt;22.38%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;lb-4.exptech.dev&lt;/td&gt;
&lt;td&gt;212,276&lt;/td&gt;
&lt;td&gt;22.37%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;lb.exptech.dev&lt;/td&gt;
&lt;td&gt;8,886&lt;/td&gt;
&lt;td&gt;0.94%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;4 台負載平衡器與理想值（25%）的差異：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;伺服器&lt;/th&gt;
&lt;th&gt;請求數&lt;/th&gt;
&lt;th&gt;比例&lt;/th&gt;
&lt;th&gt;與理想值差異&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;lb-1&lt;/td&gt;
&lt;td&gt;290,151&lt;/td&gt;
&lt;td&gt;30.58%&lt;/td&gt;
&lt;td&gt;+5.58%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;lb-2&lt;/td&gt;
&lt;td&gt;224,730&lt;/td&gt;
&lt;td&gt;23.68%&lt;/td&gt;
&lt;td&gt;-1.32%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;lb-3&lt;/td&gt;
&lt;td&gt;212,328&lt;/td&gt;
&lt;td&gt;22.38%&lt;/td&gt;
&lt;td&gt;-2.62%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;lb-4&lt;/td&gt;
&lt;td&gt;212,276&lt;/td&gt;
&lt;td&gt;22.37%&lt;/td&gt;
&lt;td&gt;-2.63%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;4 台都在正常運作，沒有單點故障。負載相對均勻，差異在可接受範圍（22-31%）。核心 API 端點在 4 台上分布均勻。&lt;/p&gt;
&lt;p&gt;通用網域 &lt;code dir=&quot;auto&quot;&gt;lb.exptech.dev&lt;/code&gt; 只處理 &lt;strong&gt;0.94%&lt;/strong&gt; 的流量，表示大部分客戶端直接指定特定負載平衡器。這個做法有助於故障隔離，提升系統可靠性。&lt;/p&gt;
&lt;aside aria-label=&quot;lb-1 負載偏高&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;lb-1 負載偏高&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;lb-1.exptech.dev&lt;/code&gt; 處理了 &lt;strong&gt;30.58%&lt;/strong&gt; 的流量，明顯高於其他伺服器（理想值應為 25%）。負載不均可能讓 lb-1 承受較大壓力。若 lb-1 故障，影響約 30% 的流量，也可能影響整體效能。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h2 id=&quot;客戶端平台&quot;&gt;客戶端平台&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;共 14 個不同的平台。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;排名&lt;/th&gt;
&lt;th&gt;平台&lt;/th&gt;
&lt;th&gt;請求數&lt;/th&gt;
&lt;th&gt;比例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;trem_lite&lt;/td&gt;
&lt;td&gt;375,765&lt;/td&gt;
&lt;td&gt;39.60%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M23.840 19.720L23.840 9.880L18.880 4.960L14.920 1Q14.600 0.640 14.060 0.400Q13.520 0.160 13.080 0.160L13.080 0.160Q12.120 0.160 11.560 0.480L11.560 0.480L4.640 3.960L4.160 4.200L0.480 11.880Q0.160 12.560 0.160 13.040L0.160 13.040Q0.160 14.240 1 15.080L1 15.080L9.760 23.840L19.720 23.840L19.720 19.720L23.840 19.720ZM5.480 4.120L11.840 0.920Q12.280 0.640 13.080 0.640L13.080 0.640Q13.400 0.640 13.840 0.860Q14.280 1.080 14.560 1.360L14.560 1.360L17.360 4.160L17.280 4.160Q16.920 4.120 16.560 4.120L16.560 4.120L5.480 4.120ZM19.200 19.560L19.200 23.320L9.960 23.320L5.320 18.680Q4.880 18.240 4.760 17.900Q4.640 17.560 4.640 16.720L4.640 16.720L4.640 5L19.200 19.560Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;Dart/Flutter&lt;/td&gt;
&lt;td&gt;264,753&lt;/td&gt;
&lt;td&gt;27.90%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;tremv&lt;/td&gt;
&lt;td&gt;165,834&lt;/td&gt;
&lt;td&gt;17.48%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;ZeroQuake&lt;/td&gt;
&lt;td&gt;72,434&lt;/td&gt;
&lt;td&gt;7.63%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Unknown&lt;/td&gt;
&lt;td&gt;27,754&lt;/td&gt;
&lt;td&gt;2.92%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Node.js&lt;/td&gt;
&lt;td&gt;25,429&lt;/td&gt;
&lt;td&gt;2.68%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Other&lt;/td&gt;
&lt;td&gt;6,962&lt;/td&gt;
&lt;td&gt;0.73%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Chrome&lt;/td&gt;
&lt;td&gt;3,948&lt;/td&gt;
&lt;td&gt;0.42%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M11.460 11.300L11.460 11.300L8.688 11.300Q7.236 11.300 6.378 12.158Q5.520 13.016 5.520 14.468L5.520 14.468L5.520 16.932Q5.520 17.372 5.124 17.372L5.124 17.372L3.892 17.372Q1.956 17.372 1.120 15.700L1.120 15.700Q0.460 14.336 0.460 13.236L0.460 13.236Q0.196 10.508 0.856 8.704L0.856 8.704Q1.560 6.592 3.452 6.240L3.452 6.240L11.416 6.240Q11.856 6.240 11.856 6.108L11.856 6.108L11.856 5.404L11.680 5.316Q11.504 5.272 11.460 5.272L11.460 5.272L6.752 5.272Q6.444 5.272 6.334 5.140Q6.224 5.008 6.224 4.700L6.224 4.700L6.224 2.940Q6.224 1.400 7.456 1.004L7.456 1.004Q8.820 0.432 9.524 0.300L9.524 0.300Q12.164-0.140 14.452 0.432L14.452 0.432Q15.596 0.696 16.388 1.268L16.388 1.268Q16.872 1.752 17.048 2.148L17.048 2.148Q17.312 2.632 17.224 3.204L17.224 3.204L17.224 8.132Q17.224 9.584 16.432 10.376Q15.640 11.168 14.188 11.168L14.188 11.168Q13.220 11.300 11.460 11.300ZM7.588 3.072L7.588 3.072Q7.588 3.512 7.896 3.842Q8.204 4.172 8.644 4.172Q9.084 4.172 9.436 3.820Q9.788 3.468 9.788 3.072Q9.788 2.676 9.458 2.368Q9.128 2.060 8.688 1.972L8.688 1.972Q8.204 1.972 7.896 2.302Q7.588 2.632 7.588 3.072ZM12.560 12.708L12.560 12.708L15.288 12.708Q16.740 12.708 17.598 11.850Q18.456 10.992 18.456 9.540L18.456 9.540L18.456 7.032Q18.456 6.636 18.852 6.636L18.852 6.636L20.084 6.636Q22.020 6.636 22.856 8.308L22.856 8.308Q23.560 9.672 23.560 10.772L23.560 10.772Q23.780 13.500 23.120 15.304L23.120 15.304Q22.416 17.416 20.524 17.768L20.524 17.768L12.560 17.768Q12.120 17.768 12.120 17.900L12.120 17.900L12.120 18.604L12.296 18.692Q12.472 18.736 12.560 18.736L12.560 18.736L17.224 18.736Q17.532 18.736 17.642 18.868Q17.752 19.000 17.752 19.308L17.752 19.308L17.752 21.068Q17.752 22.608 16.520 23.004L16.520 23.004Q15.156 23.532 14.452 23.708L14.452 23.708Q11.812 24.148 9.524 23.532L9.524 23.532Q8.380 23.312 7.588 22.740L7.588 22.740Q7.104 22.256 6.928 21.860L6.928 21.860Q6.664 21.376 6.752 20.804L6.752 20.804L6.752 15.832Q6.752 14.424 7.544 13.632Q8.336 12.840 9.788 12.840L9.788 12.840Q10.756 12.708 12.560 12.708ZM16.388 20.936L16.388 20.936Q16.388 20.496 16.080 20.166Q15.772 19.836 15.332 19.836Q14.892 19.836 14.540 20.188Q14.188 20.540 14.188 20.936Q14.188 21.332 14.518 21.640Q14.848 21.948 15.288 22.036L15.288 22.036Q15.772 22.036 16.080 21.706Q16.388 21.376 16.388 20.936Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;Python&lt;/td&gt;
&lt;td&gt;2,104&lt;/td&gt;
&lt;td&gt;0.22%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;Axios&lt;/td&gt;
&lt;td&gt;2,081&lt;/td&gt;
&lt;td&gt;0.22%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; data-astro-cid-hkc32dio=&quot;&quot;&gt;&lt;path d=&quot;M9.977 3.222L9.935 3.222Q9.305 3.432 8.717 3.810L8.717 3.810Q8.549 3.894 8.213 4.146L8.213 4.146Q7.709 4.524 7.289 5.070L7.289 5.070L6.995 5.448Q6.575 6.120 6.449 6.666L6.449 6.666Q6.365 6.918 6.323 7.254L6.323 7.254Q6.239 7.884 6.323 8.556L6.323 8.556Q6.365 8.976 6.449 9.396L6.449 9.396Q6.617 10.026 6.995 10.614L6.995 10.614L7.289 10.992Q7.667 11.454 8.255 11.874L8.255 11.874L8.885 12.336Q9.347 12.672 10.061 12.966L10.061 12.966L11.069 13.386L11.531 13.554Q12.119 13.764 12.329 13.848L12.329 13.848L12.413 13.932Q13.757 14.310 14.345 15.360L14.345 15.360Q14.597 15.864 14.597 16.284L14.597 16.284L14.597 16.452Q14.681 16.998 14.555 17.250L14.555 17.250Q14.051 18.258 13.253 18.552L13.253 18.552Q12.749 18.720 11.447 18.678L11.447 18.678Q10.565 18.468 10.061 17.922L10.061 17.922Q9.599 17.418 9.305 16.494L9.305 16.494L9.263 16.326Q9.221 16.032 9.032 15.843Q8.843 15.654 8.549 15.654L8.549 15.654L6.449 15.654Q6.155 15.654 5.966 15.843Q5.777 16.032 5.819 16.326L5.819 16.326Q5.819 16.956 5.966 17.544Q6.113 18.132 6.449 18.804L6.449 18.804Q6.659 19.140 6.911 19.455Q7.163 19.770 7.877 20.316L7.877 20.316Q8.213 20.568 8.465 20.694L8.465 20.694Q8.843 20.904 9.683 21.240L9.683 21.240L9.977 21.324Q10.271 21.408 10.460 21.597Q10.649 21.786 10.649 22.080L10.649 22.080L10.649 23.130Q10.649 23.424 10.838 23.613Q11.027 23.802 11.321 23.802L11.321 23.802L12.749 23.802Q13.043 23.802 13.232 23.613Q13.421 23.424 13.421 23.130L13.421 23.130L13.421 22.080Q13.421 21.786 13.610 21.555Q13.799 21.324 14.051 21.282L14.051 21.282Q14.219 21.240 14.513 21.114L14.513 21.114Q15.269 20.820 15.731 20.568L15.731 20.568Q16.613 20.022 17.411 18.888L17.411 18.888Q17.873 18.216 17.999 17.712L17.999 17.712Q18.125 17.418 18.167 16.998L18.167 16.998Q18.209 16.326 18.167 15.696L18.167 15.696Q18.125 15.276 17.999 14.982L17.999 14.982Q17.831 14.310 17.453 13.764L17.453 13.764Q16.907 12.882 15.563 11.916L15.563 11.916Q14.975 11.538 14.387 11.244L14.387 11.244Q13.925 11.034 12.959 10.656L12.959 10.656L12.035 10.320Q11.153 9.984 10.859 9.732L10.859 9.732Q10.355 9.312 10.124 8.913Q9.893 8.514 9.851 8.094L9.851 8.094L9.851 8.052Q9.851 7.590 9.914 7.254Q9.977 6.918 10.313 6.414L10.313 6.414Q10.565 6.078 10.943 5.994L10.943 5.994Q11.405 5.826 11.825 5.826L11.825 5.826Q12.539 5.784 12.896 5.847Q13.253 5.910 13.694 6.267Q14.135 6.624 14.345 7.044L14.345 7.044Q14.597 7.590 14.597 8.094L14.597 8.094L14.597 8.094Q14.639 8.388 14.828 8.577Q15.017 8.766 15.269 8.766L15.269 8.766L17.369 8.766Q17.663 8.766 17.852 8.556Q18.041 8.346 17.999 8.094L17.999 8.094Q17.957 7.590 17.852 7.107Q17.747 6.624 17.411 5.868L17.411 5.868Q17.285 5.574 17.117 5.322L17.117 5.322Q16.697 4.650 16.277 4.272L16.277 4.272Q16.067 4.062 15.857 3.894Q15.647 3.726 15.017 3.390L15.017 3.390L14.681 3.222L14.345 3.054Q14.051 2.928 13.862 2.697Q13.673 2.466 13.673 2.214L13.673 2.214L13.673 0.870Q13.673 0.576 13.484 0.387Q13.295 0.198 13.043 0.198L13.043 0.198L11.573 0.198Q11.279 0.198 11.090 0.387Q10.901 0.576 10.901 0.870L10.901 0.870L10.901 2.340Q10.901 2.802 10.313 3.054L10.313 3.054Q10.229 3.138 9.977 3.222L9.977 3.222Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;curl&lt;/td&gt;
&lt;td&gt;1,080&lt;/td&gt;
&lt;td&gt;0.11%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;dpip&lt;/td&gt;
&lt;td&gt;585&lt;/td&gt;
&lt;td&gt;0.06%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;Safari&lt;/td&gt;
&lt;td&gt;183&lt;/td&gt;
&lt;td&gt;0.02%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;Firefox&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;0.00%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;主要平台 trem_lite、Dart/Flutter、tremv 運作正常，合計 &lt;strong&gt;84.98%&lt;/strong&gt;。trem_lite（39.60%）是最大的單一客戶端，運作穩定；Dart/Flutter（27.90%）是行動應用程式，使用率穩定；tremv（17.48%）是第三大平台，運作正常。14 個平台顯示系統被廣泛採用。&lt;/p&gt;
&lt;aside aria-label=&quot;Unknown 平台&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Unknown 平台&lt;/p&gt;&lt;div&gt;&lt;p&gt;Unknown 佔 2.92%（27,754 筆），無法識別平台來源。這可能影響資料分析的準確性，也無法依平台分別調整。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h2 id=&quot;請求大小與傳輸&quot;&gt;請求大小與傳輸&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;請求大小&quot;&gt;請求大小&lt;/h3&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;數值&lt;/th&gt;
&lt;th&gt;評估&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;平均請求大小&lt;/td&gt;
&lt;td&gt;728.91 bytes&lt;/td&gt;
&lt;td&gt;輕量級，效能良好&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;最小請求大小&lt;/td&gt;
&lt;td&gt;0 B&lt;/td&gt;
&lt;td&gt;正常（健康檢查）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;最大請求大小&lt;/td&gt;
&lt;td&gt;94.12 KB&lt;/td&gt;
&lt;td&gt;正常（WebSocket）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;平均請求大小合理，屬於輕量級 API 請求。大小分布正常，沒有異常模式，系統能有效處理這類請求。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;傳輸量&quot;&gt;傳輸量&lt;/h3&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;數值&lt;/th&gt;
&lt;th&gt;評估&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;總傳輸量&lt;/td&gt;
&lt;td&gt;659.64 MB&lt;/td&gt;
&lt;td&gt;5 分鐘內傳輸量正常&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;平均傳輸速度&lt;/td&gt;
&lt;td&gt;約 2.2 MB/s&lt;/td&gt;
&lt;td&gt;傳輸速度穩定&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;平均每個請求大小&lt;/td&gt;
&lt;td&gt;729 bytes&lt;/td&gt;
&lt;td&gt;輕量級請求，效率良好&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;資料傳輸效率良好，符合 RESTful API 的典型特徵。網路頻寬使用率在合理範圍，沒有明顯瓶頸；傳輸速度穩定，系統運作順暢。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;總結&quot;&gt;總結&lt;/h2&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;評估項目&lt;/th&gt;
&lt;th&gt;狀態&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;系統穩定性&lt;/td&gt;
&lt;td&gt;優秀&lt;/td&gt;
&lt;td&gt;零伺服器錯誤，成功率 97.16%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;負載平衡&lt;/td&gt;
&lt;td&gt;需改善&lt;/td&gt;
&lt;td&gt;lb-1 負載過高（30.58%，理想值 25%）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API 端點&lt;/td&gt;
&lt;td&gt;良好&lt;/td&gt;
&lt;td&gt;核心 API 運作正常，流量分布均勻&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;錯誤處理&lt;/td&gt;
&lt;td&gt;需改善&lt;/td&gt;
&lt;td&gt;404 錯誤率 2.84%，略高於理想值&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;平台支援&lt;/td&gt;
&lt;td&gt;良好&lt;/td&gt;
&lt;td&gt;支援 14 個平台，主要平台運作正常&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;h3 id=&quot;表現良好&quot;&gt;表現良好&lt;/h3&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;系統穩定。&lt;/strong&gt; 5xx 為 0，後端運作正常。97.16% 的請求成功，符合高品質服務標準。能穩定處理平均 3,121 RPS 的流量。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;核心服務正常。&lt;/strong&gt; 地震預警與即時測站運作穩定，在 4 台負載平衡器上分布均勻。流量集中在核心功能，符合預期的使用模式。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;平台支援廣。&lt;/strong&gt; 支援 14 個不同的平台。主要平台 trem_lite、Dart/Flutter、tremv 運作正常。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;效能良好。&lt;/strong&gt; 請求處理效率高，平均請求大小合理。資料傳輸效率良好，頻寬使用率正常。&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;h3 id=&quot;需要改善&quot;&gt;需要改善&lt;/h3&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;負載不均。&lt;/strong&gt; &lt;code dir=&quot;auto&quot;&gt;lb-1&lt;/code&gt; 處理 30.58% 的流量，高於其他伺服器，承受較大壓力，可能影響整體效能。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;404 偏高。&lt;/strong&gt; 2.84% 略高於理想值（&amp;#x3C; 2%），可能影響使用者體驗。需要留意客戶端設定與 API 版本。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;v1 仍在使用。&lt;/strong&gt; 仍有 13.02% 的流量使用 v1 API，需要留意版本遷移進度。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unknown 平台。&lt;/strong&gt; 2.92% 的請求無法識別來源，可能影響資料分析的準確性。&lt;/li&gt;
&lt;/ol&gt;</content:encoded><category>Analysis</category></item><item><title>12/13 TREM 地震報告重複推送問題</title><link>https://exptech.dev/en/blog/rca-2025-12-13_1/</link><guid isPermaLink="true">https://exptech.dev/en/blog/rca-2025-12-13_1/</guid><description>2025/12/13 03:33 UTC+8 維護過程中，TREM Lite 出現地震報告重複推送的問題，原因為快取鍵設定不當，導致不同參數的請求共用相同的快取結果。</description><pubDate>Sat, 13 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h2 id=&quot;事件概述&quot;&gt;事件概述&lt;/h2&gt;&lt;/div&gt;
&lt;section data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;span data-severity=&quot;medium&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect data-on=&quot;&quot; x=&quot;1.5&quot; y=&quot;9.5&quot; width=&quot;2.25&quot; height=&quot;4.5&quot; rx=&quot;0.75&quot;&gt;&lt;/rect&gt;&lt;rect data-on=&quot;&quot; x=&quot;5.25&quot; y=&quot;7&quot; width=&quot;2.25&quot; height=&quot;7&quot; rx=&quot;0.75&quot;&gt;&lt;/rect&gt;&lt;rect x=&quot;9&quot; y=&quot;4.5&quot; width=&quot;2.25&quot; height=&quot;9.5&quot; rx=&quot;0.75&quot;&gt;&lt;/rect&gt;&lt;rect x=&quot;12.75&quot; y=&quot;2&quot; width=&quot;2.25&quot; height=&quot;12&quot; rx=&quot;0.75&quot;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;span&gt;嚴重程度&lt;/span&gt;&lt;span&gt;：&lt;/span&gt;&lt;span&gt;中&lt;/span&gt;&lt;/span&gt;&lt;span data-status=&quot;resolved&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 16 16&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.6&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;circle cx=&quot;8&quot; cy=&quot;8&quot; r=&quot;6.25&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;m5.4 8.2 1.8 1.8 3.5-3.6&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span&gt;狀態&lt;/span&gt;&lt;span&gt;：&lt;/span&gt;&lt;span&gt;已結案&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;dl data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;dt data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;13&quot; height=&quot;13&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;path d=&quot;M8 2v4&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M16 2v4&quot;&gt;&lt;/path&gt;&lt;rect width=&quot;18&quot; height=&quot;18&quot; x=&quot;3&quot; y=&quot;4&quot; rx=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M3 10h18&quot;&gt;&lt;/path&gt;&lt;/svg&gt;發生時間&lt;/dt&gt;&lt;dd data-astro-cid-g5zafgs6=&quot;&quot;&gt;2025/12/13 03:33 (UTC+8) 左右&lt;/dd&gt;&lt;/div&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;dt data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;13&quot; height=&quot;13&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;path d=&quot;M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;觸發條件&lt;/dt&gt;&lt;dd data-astro-cid-g5zafgs6=&quot;&quot;&gt;維護過程中&lt;/dd&gt;&lt;/div&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;dt data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;13&quot; height=&quot;13&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;path d=&quot;M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 2v5a1 1 0 0 0 1 1h5&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M10 9H8&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M16 13H8&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M16 17H8&quot;&gt;&lt;/path&gt;&lt;/svg&gt;問題描述&lt;/dt&gt;&lt;dd data-astro-cid-g5zafgs6=&quot;&quot;&gt;TREM Lite 地震報告重複推送的問題&lt;/dd&gt;&lt;/div&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;dt data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;13&quot; height=&quot;13&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;path d=&quot;m21 21-4.34-4.34&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;11&quot; cy=&quot;11&quot; r=&quot;8&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;根本原因&lt;/dt&gt;&lt;dd data-astro-cid-g5zafgs6=&quot;&quot;&gt;快取鍵衝突&lt;/dd&gt;&lt;/div&gt;&lt;/dl&gt;&lt;/section&gt;

&lt;div&gt;&lt;h2 id=&quot;時間軸&quot;&gt;時間軸&lt;/h2&gt;&lt;/div&gt;
&lt;section aria-label=&quot;時間軸&quot; data-astro-cid-z7ssoihh=&quot;&quot;&gt;&lt;header data-astro-cid-z7ssoihh=&quot;&quot;&gt;&lt;p data-astro-cid-z7ssoihh=&quot;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;12&quot; height=&quot;12&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; data-astro-cid-z7ssoihh=&quot;&quot;&gt;&lt;path d=&quot;M12 6v6l4 2&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;10&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;時間 (UTC+8)&lt;/p&gt;&lt;/header&gt;&lt;ol role=&quot;list&quot; data-astro-cid-z7ssoihh=&quot;&quot;&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;critical&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 1.25 14.75 8 8 14.75 1.25 8Z&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;嚴重 &lt;/span&gt;&lt;time datetime=&quot;2025-12-13T03:33&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;2025/12/13 03:33&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;問題發生：TREM Lite 地震報告重複推送&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;info&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;circle cx=&quot;8&quot; cy=&quot;8&quot; r=&quot;5&quot; fill=&quot;currentColor&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;資訊 &lt;/span&gt;&lt;time datetime=&quot;2025-12-13T03:53&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;2025/12/13 03:53&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;確認問題並開始進行修復&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;warning&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 1.15 15.05 14.7H0.95Z&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;警告 &lt;/span&gt;&lt;time datetime=&quot;2025-12-13T03:54&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;2025/12/13 03:54&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;執行緊急處理，嘗試緩解問題&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li role=&quot;listitem&quot; data-tone=&quot;resolved&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;div aria-hidden=&quot;true&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.8&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; d=&quot;M3.7 8.25 6.55 11.15 12.35 4.9&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;div data-astro-cid-kroj6hsp=&quot;&quot;&gt;&lt;span data-astro-cid-kroj6hsp=&quot;&quot;&gt;已恢復 &lt;/span&gt;&lt;time datetime=&quot;2025-12-13T03:55&quot; data-astro-cid-kroj6hsp=&quot;&quot;&gt;2025/12/13 03:55&lt;/time&gt;&lt;p data-astro-cid-kroj6hsp=&quot;&quot;&gt;觀察到問題已緩解&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/section&gt;
&lt;div&gt;&lt;h2 id=&quot;事件經過&quot;&gt;事件經過&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;在進行 TNN Core Server 的維護作業期間，調整 Nginx 設定時將 report server 容器重啟，隨後發生 TREM Lite 地震報告重複推送的問題。
問題發生後，立即進行排查，確認問題根源並執行修復，約 22 分鐘後問題得到緩解。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;根本原因分析&quot;&gt;根本原因分析&lt;/h2&gt;&lt;/div&gt;
&lt;aside aria-label=&quot;問題根源&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;問題根源&lt;/p&gt;&lt;div&gt;&lt;p&gt;快取鍵設定不當，導致不同參數的請求共用相同的快取結果，造成 API 回應不符合預期。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h3 id=&quot;問題說明&quot;&gt;問題說明&lt;/h3&gt;&lt;/div&gt;
&lt;aside aria-label=&quot;問題主因&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;問題主因&lt;/p&gt;&lt;div&gt;&lt;p&gt;當系統從不同的 upstream 取得資料時，會將不一致的資料寫入 cache。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;故障時 Nginx 設定如下：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;~&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;^/api/&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;v1&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;v2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;/eq/report&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$cache_key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$uri&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;$arg_limit&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;$arg_page&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;$arg_minIntensity&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;$arg_maxIntensity&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;$arg_minMagnitude&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;$arg_maxMagnitude&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;$arg_minDepth&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;$arg_maxDepth&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;proxy_pass&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;http://report&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;proxy_cache_key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$cache_key&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;include&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/etc/nginx/conf.d/cache_1s.inc&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;cache_1s.inc&lt;/code&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;proxy_cache&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my_cache&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;proxy_cache_key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$url&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;proxy_cache_valid&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;200&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1s&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;proxy_cache_lock&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;proxy_cache_lock_timeout&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1s&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;proxy_cache_use_stale&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;updating&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timeout&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;http_500&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;http_502&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;http_503&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;http_504&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;proxy_cache_background_update&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;問題點：&lt;/strong&gt;&lt;/p&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;快取鍵設定衝突：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 &lt;code dir=&quot;auto&quot;&gt;location&lt;/code&gt; 區塊中設定了 &lt;code dir=&quot;auto&quot;&gt;proxy_cache_key $cache_key&lt;/code&gt;（使用自訂的快取鍵）&lt;/li&gt;
&lt;li&gt;但在 &lt;code dir=&quot;auto&quot;&gt;cache_1s.inc&lt;/code&gt; 中又設定了 &lt;code dir=&quot;auto&quot;&gt;proxy_cache_key $url&lt;/code&gt;（使用 URL 作為快取鍵）&lt;/li&gt;
&lt;li&gt;兩個 &lt;code dir=&quot;auto&quot;&gt;proxy_cache_key&lt;/code&gt; 設定衝突，導致快取鍵不一致&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;回應不符預期：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;cache_1s.inc&lt;/code&gt; 中的 &lt;code dir=&quot;auto&quot;&gt;proxy_cache_key $url;&lt;/code&gt; 會覆蓋 &lt;code dir=&quot;auto&quot;&gt;location&lt;/code&gt; 區塊中的 &lt;code dir=&quot;auto&quot;&gt;proxy_cache_key $cache_key;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;當請求有查詢參數和沒有查詢參數時，&lt;code dir=&quot;auto&quot;&gt;$url&lt;/code&gt; 可能產生相同的快取鍵&lt;/li&gt;
&lt;li&gt;例如：&lt;code dir=&quot;auto&quot;&gt;/api/v1/eq/report&lt;/code&gt; 和 &lt;code dir=&quot;auto&quot;&gt;/api/v1/eq/report?limit=10&lt;/code&gt; 可能使用相同的快取鍵&lt;/li&gt;
&lt;li&gt;導致不同參數的請求共用相同的快取結果，返回不符合預期的資料&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;影響：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;客戶端收到不一致的地震報告資料&lt;/li&gt;
&lt;li&gt;相同的地震事件被重複推送&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;h2 id=&quot;解決方案&quot;&gt;解決方案&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;修改後的設定&quot;&gt;修改後的設定&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;移除 &lt;code dir=&quot;auto&quot;&gt;cache_1s.inc&lt;/code&gt; 中的 &lt;code dir=&quot;auto&quot;&gt;proxy_cache_key $url;&lt;/code&gt; 設定，統一使用 &lt;code dir=&quot;auto&quot;&gt;location&lt;/code&gt; 區塊中定義的 &lt;code dir=&quot;auto&quot;&gt;$cache_key&lt;/code&gt;：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;~&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;^/api/&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;v1&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;v2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;/eq/report&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$cache_key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$uri&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;$arg_limit&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;$arg_page&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;$arg_minIntensity&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;$arg_maxIntensity&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;$arg_minMagnitude&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;$arg_maxMagnitude&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;$arg_minDepth&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;$arg_maxDepth&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;proxy_pass&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;http://report&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;proxy_cache_key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$cache_key&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;include&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/etc/nginx/conf.d/cache_1s.inc&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;cache_1s.inc&lt;/code&gt;（修改後）&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;proxy_cache&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my_cache&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# 移除 proxy_cache_key $url; 避免與 location 區塊中的設定衝突&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;proxy_cache_valid&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;200&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1s&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;proxy_cache_lock&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;proxy_cache_lock_timeout&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1s&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;proxy_cache_use_stale&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;updating&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timeout&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;http_500&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;http_502&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;http_503&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;http_504&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;proxy_cache_background_update&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;改進說明&quot;&gt;改進說明&lt;/h3&gt;&lt;/div&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;統一快取鍵設定：&lt;/strong&gt; 移除 &lt;code dir=&quot;auto&quot;&gt;cache_1s.inc&lt;/code&gt; 中的 &lt;code dir=&quot;auto&quot;&gt;proxy_cache_key $url;&lt;/code&gt;，避免與 &lt;code dir=&quot;auto&quot;&gt;location&lt;/code&gt; 區塊中的自訂快取鍵衝突&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;確保快取鍵唯一性：&lt;/strong&gt; 使用包含所有查詢參數的自訂快取鍵，確保有參數和無參數的請求使用不同的快取鍵&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;確保回應正確性：&lt;/strong&gt; 透過正確的快取鍵設定，確保不同參數的請求使用不同的快取，返回符合預期的資料&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;aside aria-label=&quot;後續觀察&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;後續觀察&lt;/p&gt;&lt;div&gt;&lt;p&gt;經觀察後，問題已得到緩解。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;</content:encoded><category>RCA</category></item><item><title>12/12 TREM 檢知重複觸發問題</title><link>https://exptech.dev/en/blog/rca-2025-12-12_1/</link><guid isPermaLink="true">https://exptech.dev/en/blog/rca-2025-12-12_1/</guid><description>2025/12/12 04:24:28 UTC+8 地震後，TREM Lite 出現檢知重複觸發的問題，原因為 upstream 資料不一致污染 cache，導致系統異常。</description><pubDate>Fri, 12 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h2 id=&quot;事件概述&quot;&gt;事件概述&lt;/h2&gt;&lt;/div&gt;
&lt;section data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;span data-severity=&quot;medium&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 16 16&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect data-on=&quot;&quot; x=&quot;1.5&quot; y=&quot;9.5&quot; width=&quot;2.25&quot; height=&quot;4.5&quot; rx=&quot;0.75&quot;&gt;&lt;/rect&gt;&lt;rect data-on=&quot;&quot; x=&quot;5.25&quot; y=&quot;7&quot; width=&quot;2.25&quot; height=&quot;7&quot; rx=&quot;0.75&quot;&gt;&lt;/rect&gt;&lt;rect x=&quot;9&quot; y=&quot;4.5&quot; width=&quot;2.25&quot; height=&quot;9.5&quot; rx=&quot;0.75&quot;&gt;&lt;/rect&gt;&lt;rect x=&quot;12.75&quot; y=&quot;2&quot; width=&quot;2.25&quot; height=&quot;12&quot; rx=&quot;0.75&quot;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;span&gt;嚴重程度&lt;/span&gt;&lt;span&gt;：&lt;/span&gt;&lt;span&gt;中&lt;/span&gt;&lt;/span&gt;&lt;span data-status=&quot;resolved&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 16 16&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.6&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;circle cx=&quot;8&quot; cy=&quot;8&quot; r=&quot;6.25&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;m5.4 8.2 1.8 1.8 3.5-3.6&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span&gt;狀態&lt;/span&gt;&lt;span&gt;：&lt;/span&gt;&lt;span&gt;已結案&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;dl data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;dt data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;13&quot; height=&quot;13&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;path d=&quot;M8 2v4&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M16 2v4&quot;&gt;&lt;/path&gt;&lt;rect width=&quot;18&quot; height=&quot;18&quot; x=&quot;3&quot; y=&quot;4&quot; rx=&quot;2&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;M3 10h18&quot;&gt;&lt;/path&gt;&lt;/svg&gt;發生時間&lt;/dt&gt;&lt;dd data-astro-cid-g5zafgs6=&quot;&quot;&gt;2025/12/12 04:24:28 (UTC+8)&lt;/dd&gt;&lt;/div&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;dt data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;13&quot; height=&quot;13&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;path d=&quot;M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;觸發條件&lt;/dt&gt;&lt;dd data-astro-cid-g5zafgs6=&quot;&quot;&gt;地震後&lt;/dd&gt;&lt;/div&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;dt data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;13&quot; height=&quot;13&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;path d=&quot;M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 2v5a1 1 0 0 0 1 1h5&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M10 9H8&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M16 13H8&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M16 17H8&quot;&gt;&lt;/path&gt;&lt;/svg&gt;問題描述&lt;/dt&gt;&lt;dd data-astro-cid-g5zafgs6=&quot;&quot;&gt;TREM Lite 出現檢知重複觸發的問題&lt;/dd&gt;&lt;/div&gt;&lt;div data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;dt data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;13&quot; height=&quot;13&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; data-astro-cid-g5zafgs6=&quot;&quot;&gt;&lt;path d=&quot;m21 21-4.34-4.34&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;11&quot; cy=&quot;11&quot; r=&quot;8&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;根本原因&lt;/dt&gt;&lt;dd data-astro-cid-g5zafgs6=&quot;&quot;&gt;upstream 資料不一致污染 cache，導致系統異常&lt;/dd&gt;&lt;/div&gt;&lt;/dl&gt;&lt;/section&gt;

&lt;div&gt;&lt;h2 id=&quot;相關影片&quot;&gt;相關影片&lt;/h2&gt;&lt;/div&gt;
&lt;div data-astro-cid-4dbawa7w=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/UI9hKzP17LE&quot; title=&quot;TREM Lite 檢知重複觸發&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen data-astro-cid-4dbawa7w=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div&gt;&lt;h2 id=&quot;根本原因分析&quot;&gt;根本原因分析&lt;/h2&gt;&lt;/div&gt;
&lt;aside aria-label=&quot;問題根源&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;問題根源&lt;/p&gt;&lt;div&gt;&lt;p&gt;upstream 資料不一致污染 cache，導致系統異常。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;Balance Server 上的 Nginx 使用了以下負載平衡設定：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;upstream&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;core_servers&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;server&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tnn.exptech.dev:80&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;server&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tpe.exptech.dev:80&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;hash&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$remote_addr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;consistent&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;aside aria-label=&quot;問題主因&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;問題主因&lt;/p&gt;&lt;div&gt;&lt;p&gt;當系統從不同的 upstream 取得資料時，會將不一致的資料寫入 cache。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;兩個 upstream 的資料不一致&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;tnn.exptech.dev&lt;/code&gt; 和 &lt;code dir=&quot;auto&quot;&gt;tpe.exptech.dev&lt;/code&gt; 的資料不一致。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;一致性雜湊把請求分到不同 upstream&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用 &lt;code dir=&quot;auto&quot;&gt;hash $remote_addr consistent;&lt;/code&gt; 時，請求可能被分配到不同的 upstream。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;不一致的資料寫入 cache&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;從不同的 upstream 取得資料時，會將不一致的資料寫入 cache。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;後續請求讀到被污染的 cache&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;資料狀態因此混亂。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;檢知重複觸發&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;進而引發 TREM Lite 檢知重複觸發。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;h2 id=&quot;解決方案&quot;&gt;解決方案&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;修改後的設定&quot;&gt;修改後的設定&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Nginx upstream 改成下面的設定：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;upstream&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;core_servers&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;server&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tnn.exptech.dev:80&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;max_fails=&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fail_timeout=10s&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;server&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tpe.exptech.dev:80&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;backup&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;改進說明&quot;&gt;改進說明&lt;/h3&gt;&lt;/div&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;主伺服器設定：&lt;/strong&gt; &lt;code dir=&quot;auto&quot;&gt;tnn.exptech.dev&lt;/code&gt; 設為主伺服器，並設定故障檢測參數&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;max_fails=1&lt;/code&gt;：允許最多 1 次失敗&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;fail_timeout=10s&lt;/code&gt;：故障後 10 秒內不再嘗試該伺服器&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;備援伺服器設定：&lt;/strong&gt; &lt;code dir=&quot;auto&quot;&gt;tpe.exptech.dev&lt;/code&gt; 設為備援伺服器（&lt;code dir=&quot;auto&quot;&gt;backup&lt;/code&gt;）&lt;/p&gt;
&lt;p&gt;只在主伺服器不可用時才會使用。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;移除一致性雜湊：&lt;/strong&gt; 避免請求被分配到不同的 upstream 伺服器&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;單一資料來源：&lt;/strong&gt; 使用主備模式，讓所有請求都從同一個資料來源取得資料，避免不同 upstream 的資料不一致污染 cache&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;h2 id=&quot;後續觀察&quot;&gt;後續觀察&lt;/h2&gt;&lt;/div&gt;
&lt;aside aria-label=&quot;後續觀察&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;後續觀察&lt;/p&gt;&lt;div&gt;&lt;p&gt;經觀察後，故障應該已經排除。建議持續監控系統狀態，確保問題不再發生。&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;</content:encoded><category>RCA</category></item></channel></rss>