我們閱讀真實、公開的資安事故,不是把新聞重播一次,而是以 「你的環境要如何防禦?」 的視角來解讀。本文以 公開記錄(企業官方聲明、可信報導) 為依據。出處列於文末,且不含任何攻擊手法。
- 對象
- 檔案傳輸服務「宅ふぁいる便」的使用者(營運者:Ogis-Research Institute)
- 發覺
- 2019 年 1 月 22–25 日(發現可疑檔案 → 停止服務 → 公開揭露)
- 手法分類
- 透過伺服器漏洞的未授權存取 → 竊取客戶資料(登入密碼以明文保存)
- 影響規模
- 約 481 萬筆(姓名、電子郵件、登入密碼、出生年月日、性別等;含已退會客戶)
- 根本原因
- 密碼以明文(可還原的形式)保存 + 伺服器漏洞 + 保留了包含已退會使用者在內的非必要資料
- 真正的對策
- 單向雜湊 + salt(bcrypt/Argon2id)/不持有非必要資料、最小化保存期限/漏洞管理/為重複使用預作準備(2FA)
發生了什麼事(用白話說)
服務受託保管使用者的密碼。問題在於 保管的方式。若把密碼以 明文(可直接讀取的形式)保存,或只做可還原的 加密,那麼資料外洩的那一刻,其 內容就能直接被使用。
在宅ふぁいる便,伺服器漏洞遭到利用而發生未授權存取,客戶資料外洩。隨後的後續報告揭露,外洩的登入密碼並未加密——它們是明文。由於許多人在不同服務間 重複使用 同一組密碼,明文外洩會讓攻擊者拿去別處嘗試,用於 帳號盜用。比起入侵本身,是明文保存讓損害擴大了。
「加密」和「雜湊」不是同一回事
在密碼保存上一個常見的誤解,是認為 加密就安全。加密 用金鑰就能還原,因此若金鑰也一併外洩,就和明文沒有兩樣。正確的做法是使用 無法還原的單向雜湊,再加上每位使用者各不相同的 salt,並採用 刻意放慢 的演算法(bcrypt / Argon2id)。登入時以相同方式對輸入做雜湊再比對——因此 根本不需要保存明文。
攻擊的連鎖,也是一張「防禦地圖」
這是一條 在每一步都有地方可以攔下它 的連鎖。請把它讀成 哪裡可以被斬斷,而不是操作手法。
1. 透過伺服器漏洞的未授權存取
一個被放著不管的已知弱點,成了入侵的入口。
攔截:漏洞管理;修補紀律;最小化攻擊面
2. 客戶資料與登入密碼被取得
保留了含已退會客戶在內的大量資料。
攔截:不持有非必要的資料;最小化保存期限
3. 密碼是明文 = 可立即濫用
未加密,因此外洩的那一刻就能直接使用。
攔截:單向雜湊 + salt(bcrypt/Argon2id)= 即使外洩也無法直接使用
4. 透過重複使用造成的次生損害(帳號盜用)
使用同一組密碼的其他服務遭到鎖定。
攔截:停止重複使用密碼;2FA;外洩時立即強制重設
公開的時間軸
2019-01-22
在伺服器上發現一個公司無法辨識的檔案(未授權存取的徵兆)。2019-01-23
為求安全,先行停止服務。2019-01-25
公開揭露未授權存取與資料外洩(約 481 萬筆,含已退會使用者)。2019-01-30
後續報告揭露外洩的登入密碼並未加密(明文)。2019-03
報告外部資安公司的詳細調查結果;服務持續停止。2020-01-14
宣布終止(考量安全重建所需的成本與時間);服務於當年結束。
根本原因並不只是「被入侵」
把這件事草草歸結為「他們被駭了」會錯失重點。入侵有可能發生;真正重要的是,保存方式在資料外洩時是否能 把損害最小化。
失守的配置
- 登入密碼以 明文 保存(外洩的那一刻就能濫用)
- 保留著含 已退會使用者 在內的大量資料
- 伺服器 漏洞 成了入侵的入口
- 外洩後難以攔下在重複使用網站上的 帳號盜用
站得住的配置
- 密碼以 單向雜湊 + salt(bcrypt/Argon2id)保存
- 不持有非必要的資料;最小化保存期限(退會後刪除)
- 漏洞管理/修補紀律 封住入侵的入口
- 2FA 與外洩時立即強制重設,抑制次生損害
事後的帳單,遠大於事前的設計投資
宅ふぁいる便持續停止服務,最終 整個被關閉(考量安全重建的成本與時間)。把密碼正確雜湊化的成本很低,而 明文保存所招致的信任崩壞、退會與次生損害,其代價要大得多。 密碼的保存方式,要在 你建置它的時候 就正確設計好,而不是事後。
你要如何防禦
只要你受託保管了哪怕一位使用者的密碼,這就是你的事。按優先順序:
不持有非必要的資料
只蒐集最少的欄位,並在 使用者退會或不再需要時刪除資料。你不持有的資料就不會外洩。不要囤積已退會使用者的紀錄。
封住入侵的入口——管理漏洞
修補伺服器與函式庫的漏洞,並最小化暴露的攻擊面。假設入侵有可能發生,並減少入侵的途徑。
即使外洩也要限縮損害(2FA、重複使用對策)
提供 雙因素驗證,並在外洩時立即強制重設。引導使用者遠離重複使用。與雜湊化搭配,目標是達成 即使外洩也無法直接使用 的狀態。
這與本站的建置方式重疊之處
究其根本,這起事件把最重要的祕密——密碼——以外洩後即可直接使用的形式(明文) 保存。這正好是本站自身原則的鏡像——以不可逆的形式處理祕密、不持有非必要之物、縮小爆炸半徑。「我們有加密,所以很安全」是危險的假設;密碼應該歸於單向的 雜湊 + salt。「不留明文、不持有多餘資料、讓外洩無從使用」,是任何人在任何規模都能實作的防禦。
出處(公開記錄)
此處的事實以下列公開資訊為依據。不含任何攻擊手法——只有 防禦上的教訓。
- Ogis-Research Institute 官方聲明(「關於宅ふぁいる便服務的未授權存取」/致歉與報告,2019–2020)— ogis-ri.co.jp
- 當時的報導(服務停止、詳細調查結果與終止,2019–2020),以第一手揭露為本
延伸閱讀
- 實務:如何安全儲存密碼(雜湊與加鹽)
- 詞彙:密碼雜湊是什麼 / salt(鹽)是什麼
- 詞彙:雙因素驗證(2FA)(讓外洩無法直接被使用)· 實務:個人開發 / 小規模維運的安全底線
FAQ
Q宅ふぁいる便事件中最嚴重的問題是什麼?
是外洩的登入密碼未加密、以「明文」保存。導火線是透過伺服器漏洞的未授權存取,但因為密碼是明文,外洩的那一刻就能立即被濫用。若密碼是以無法還原的單向雜湊(加上 salt)保存,即使外洩也無法直接使用,損害會小得多。
Q把密碼「加密」就夠安全了嗎?
「加密」和「雜湊」是不同的東西。加密可以用金鑰還原,因此若金鑰也一併外洩,就和明文沒有兩樣。正確的做法是使用無法還原的單向<strong>雜湊</strong>,再加上每位使用者各不相同的<strong>salt</strong>,並採用像 bcrypt 或 Argon2id 這種刻意放慢的演算法。登入時以相同方式對輸入做雜湊再比對即可——因此根本不需要保存明文。
Q身為個人使用者,我能做些什麼?
可以:(1)絕不在不同服務間重複使用同一組密碼(如此即使明文外洩,也不會導致其他網站的帳號盜用);(2)用密碼管理器產生又長又隨機的值;(3)只要有提供,就開啟雙因素驗證或通行金鑰。即便經營者的保存方式很差,只要不重複使用密碼,就能斬斷次生損害的連鎖。