這次換 PChome 被大規模盜帳號進行虛擬物品交易了

自從 2 年前 PTT 大規模盜帳號事件及國內證券有開複委託的被盜去下港股以來,最近輪到 PChome 被攻擊了,有許多帳號裡有高額儲值金的帳號被盜去買虛擬商品。分析了一下目前聽到的受害者狀況,我的看法其實和 PChome 官方判斷差不多,一樣是老招憑證填充攻擊 (Credential Stuffing),也就是大陸所說的撞庫。和這種攻擊法產生的典型效應一致,大部分的輿論都偏向指責 PChome 資料庫外洩、質疑怎麼其它網站都沒事、為什麼可以這麼精準去盜特定高儲金值帳戶等等,認為一定是以明文儲存密碼,然後資料庫外流,所以攻擊者可以鎖定特定族群下手。

首先還是要聲明,這不是在幫 PChome 說話。身為 10 幾年前首幾批在案發現場對抗此類攻擊的當事人,我必須說從事發到出新聞稿宣稱是憑證填充攻擊,這間隔也實在是太短了。這也代表他們工程師中有人老早就知道這種攻擊存在,否則要分析並判定是這種攻擊的速度不可能這麼快,如果他們是第一次知道這種攻擊方式的話。既然有人知道,那網站放任機器人瘋狂試登,沒有強制 2FA 也沒有登入驗證碼,就是非常嚴重而愚蠢的錯誤,不能說是憑證填充攻擊就把責任完全甩鍋給使用者,怪使用者沒有保管好自己密碼。就算官司上使用者敗訴無法獲得賠償,無論帳號被盜的原理是什麼,一般使用者對你這網站的印象就是資安有問題、帳號容易被盜、資料庫外洩給人、有內鬼賣使用者個資等負面印象,原本已經有大量客戶往蝦皮跟 momo 跑,現在只會跑得更多。

不過在這次 PTT 的討論當中也有人提到,受害者向他陳述,此人在 PChome 沒有綁定信箱,因此只能使用手機號碼和密碼登入,而此人在全世界的網站當中,只有在 PChome 使用這組密碼。如果這位受害者的敘述為真,不是因為他一時想不起來有在什麼地方使用過相同密碼,也不是為了想將責任完全推給 PChome 而謊稱自己沒有在其它網站使用過相同密碼,那麼這次事件就不會是憑證填充攻擊。

為什麼說這樣的話就不會是呢?先來看看在這十幾年間,什麼「防毒軟體才是病毒我根本不裝」、「XP/Win7 再戰十年」之類的言論,可是從來沒有少過,這樣的態度長年可說是把這些賣家和買家養得肥滋滋。要知道,利用已公開的漏洞來牟取利益,遠比自己發現前人未知的新漏洞要來得輕鬆,何樂而不為呢?別以為懶得更新程式版本只有發生在一般人身上,很多站長也是,拿或買別人寫好的網站程式,把站架好以後整整十幾年都沒更新過的,可說是不計其數。而這些網站呢,正是最豐富的帳號密碼清單來源之一。即使是自行開發的網站,也可能因為太過古老,加上工程團隊成員歷經各種輪替,導致一些年久失修的漏洞一直擺在那。如果說利用這種漏洞就能直接操作網站上的帳號進行交易,那還浪費時間來製作帳號密碼清單幹嘛?只是這次的情況實在很不像,因為從試登帳號收集資訊到發動交易中間有不算小的時間間隔,這個後面說明。

總而言之,如果要訴諸法律向 PChome 求償,宣稱自己沒有在其它網站用過相同密碼,因此 PChome 應該負全責的這種做法,是比較困難的。因為受害者很難證明自己只註冊過哪些網站,並且在所有註冊的網站裡都沒有使用跟 PChome 帳號一樣的密碼。畢竟密碼是可以案發後再修改的,而且 PChome 也能主張使用者沒有誠實交代所有註冊過的網站。所以走這條路除了博得大眾同情還有一起鄙視 PChome 之外,也沒有其它作用了。

相對地,PChome 當然也很難舉證這一切都是憑證填充攻擊造成的,都是受害者密碼保管不當導致,甚至也無法舉證自己資料庫是否外流、密碼是否以明文形式儲存等等。畢竟 PChome 也不可能長年來都對加密過的資料庫備份和伺服器 log 做數位簽章,然後公開發佈給不特定人士隨意下載留存,所以既無法證明資料庫的密碼欄不是事後變造的,也無法證明符合憑證填充攻擊特徵的 access log 不是事後變造的。

至於將犯案者逮捕到案那又是不可能的任務,畢竟都是透過 botnet 進行的,要抓也只是抓出一些網路設備被植入後門的設備擁有者,這些人還不一定是台灣人。綜合上面兩段所述,其實走純粹的法律途徑是比較不容易得到好結果的,但這還是很看法官的自由心證,所以也不全然是絕望。

當然,無論獲得補償的希望是否渺茫,受害者還是應該先報警,主張這些儲值金的交易並不是自己執行的,然後成立自救會,看能不能跟 PChome 要到一些補償,無論最終是不是採取法律途徑。自己該有的權益還是要積極去爭取,畢竟就情理來說,PChome 最起碼也得負起一半的責任。如果有個比較理性的人有這種手腕可以在進入法律程序前達成還算令人滿意的和解,最起碼還能走向好一點的結局。

另外,我也希望受害者可以仔細回想自己的密碼是否曾經在其它網站使用過,如果真的有,就大膽承認也沒有關係,這樣反而可以教育大眾去做好防範,隱瞞起來並不會提高自己獲得賠償的機率,就如同我前面說的,這種說法無法成為有效證詞,只是會被對方律師洗臉而已。當然,如果真的沒有,那就說沒有,這樣也有助於大家去注重密碼問題以外的資安問題,諸如在公共電腦或使用公共 WiFi 登入這種要帳號密碼的網站等等。會這樣說是有原因的,我曾經在 10 幾年前協助朋友處理這個攻擊的時候,為了分析攻擊行為,在 access log 裡打開了 POST 內容的紀錄,因此攻擊者輸入的帳號密碼全部都會顯示在 log 檔裡。而我隨機抽樣去找受害的會員詢問是否在其它網站用過相同帳號密碼,得到的答案清一色是否定的。於是我拿攻擊者登入他們帳號的密碼去競爭對手網站登登看,成功率非常的高,我也沒跟他們廢話,只是把觀察和測試結果回報給站長知道,至於站長決定永 ban 這些人我也沒辦法影響他決定了。我其實不太希望這些人被永 ban,但站長最大,我也不能說什麼。在我看來,做錯事受到損失,隱瞞自己的過失之處乃是人性,也沒有什麼可以指責的地方。但這麼做的目的是什麼呢?終究是要能利己才有意義。而我前面也說了,在這次事件裡,這樣做並不會有博得一部分人同情和讓更多人指責 PChome 之外的利益產生,所以我建議這樣的人還是實話實說。畢竟,這種攻擊方式在人性中最惡劣的地方,就是讓使用者和網站互相責怪對方,最後演變成雙輸局面,而攻擊者不但有錢拿,還有戲可以看,到最後爽到的也只有他。

回到技術面。在討論當中,也有人提到,為什麼可以如此精準鎖定高儲值金餘額的帳戶呢?這難道就不代表是明文儲存密碼並且資料庫外洩嗎?不,這還是憑證填充攻擊的典型。首先,討論串中已經陸續歸納出從初次登入成功,到執行交易,中間是有不算短的一段時間差的,已有懶人包在說嘗試登入的行為是在九月底發動。這是因為攻擊者一開始尚未確定他持有的這份帳號密碼清單裡,究竟有多少筆在 PChome 是有效的,他更不會知道哪些帳號有高額儲值金。所以他會使用成千上萬的 IP 大量試登帳號,並在登入後抓取帳號還有多少儲值金,並將 cookies 儲存下來,以便後續進行交易時運用。當這些資訊收集完成後,就可以針對符合條件的目標帳號進行閃電作戰,此時命中率是 100%,並且已經事先存好 cookies 了,所以還不見得需要重新登入,因此可在極短時間進行最大化的收割。

那麼如果是明文儲存密碼,並且資料庫外洩,攻擊者一開始就心知肚明哪些帳號是目標,又會是什麼情況呢?這種狀況就是可以立即執行上一段說的閃電作戰,即便沒有事先存好 cookies,執行速度仍可說是宛若疾風,畢竟命中率是 100%,程式寫起來也簡單很多。而先掃描後執行交易的做法,還要擔心較警覺的使用者收到登入通知,立即上線把密碼改掉,這樣是不能讓收益最大化的。會寫這種程式的狡猾攻擊者不是笨蛋,從登入到執行交易間隔越久風險越大。這也是為什麼我說是典型的憑證填充攻擊的主要原因,這個時間間隔就是攻擊者一開始並沒有 100% 掌握資訊的證據。回到前面懷疑的另一種可能,網站本身就有漏洞可以這麼運用,那這種無法讓收益最大化的作戰方式是不合常理的。

那麼為什麼攻擊者不選擇將兩者綜合起來呢?也就是他拿著不確定哪幾筆是有效的帳號密碼清單,直接邊登邊查邊交易,這樣豈不是兩全其美?不,身為攻擊者,好不容易 PChome 有儲值金這種免驗證可立即結帳並使容易銷贓的虛擬商品立即交貨的特性,可是一頭百年難得一見的肥羊。萬一他這清單裡幾十萬筆只有幾十筆有效,甚至只有十幾筆有效,而就一點點戰績就引起了使用者及 PChome 的警覺,加強了防護機制,以後再弄到幾百萬筆帳號密碼也無法再對 PChome 使用了,這樣他會甘願?

也有人說既然是這種攻擊,為什麼其它購物、拍賣網站都沒一起出事?那是因為它們早就出事了,明明人都在 PTT 了,PTT 這種連購物網站都不是的地方兩年前才出過一樣的事也可以忘記,只能說還真是不簡單。實際上這攻擊早期並不會以台灣的網站為目標,因為相較於國外的購物平台甚至金流的肉相比,台灣這邊已經是菜渣了。早期很多人都說不要用 Paypal,他一用 Paypal 就被盜刷,下面還會有很多人附和,這是為什麼呢?因為他們就是最早期的目標啊,很多 40 多歲阿伯們當年聽到這句話的時間點搞不好還在當學生呢。這種攻擊方式早在這 10 幾 20 年間就四處轟炸,只是因為事不關己,所以對相關消息沒有涉獵罷了。那些在登入頁面放圖形驗證碼甚至 reCAPTCHA 的網站又不是沒事找事,後來還搞一堆 OTP 驗證,登他們網站還要掏手機出來看,真當他們沒事找事做?工程師都太無聊,只想增加使用者的麻煩?

另外也有一說,就是這次外洩的是舊資料庫,所以曾經有儲值但是現在沒有餘額的帳號也被登過了,認為這就是資料庫外洩,而不是憑證填充攻擊。首先,我們先分成密碼是否以明文儲存來討論,如果是明文儲存,前面也說了,先收集資訊再執行交易只是徒然增加被防禦的風險,不合邏輯。如果不是以明文儲存,那麼,密碼就不是從外洩的資料庫來的,而是從外部取得帳號密碼清單來交叉比對進行初步篩選後再動手,那就是憑證填充攻擊。另一個密碼獲取的方式是直接用漏洞在 PChome 伺服器植入後門取得,但如果能對 PChome 伺服器植入後門,那代表已經可以讓網站伺服器執行想執行的程式碼了,可以在更神不知鬼不覺的情況下,連登入使用者帳號都不必,就能完成交易,沒必要還去登帳號來增加風險。所以上述這些可能性,其實邏輯上都走不通。

實際上台灣這 10 多年來一直都有遭到憑證填充攻擊的毒手,畢竟更早之前西方國家就慢慢築起了防護牆,PChome 這種可以拿儲值金交易虛擬商品的網站固然是大肥羊一隻,但有沒有想過以前是怎樣?你上個賣書還是賣雜貨的網站購物,過好一段時間突然手機接到詐騙電話,說不小心幫你設到分期,請你去 ATM 照他說的操作來取消。雖然我們都覺得這類詐騙很智障怎麼可能騙得到人,但還真的騙了不小的金額,遠比 PChome 這次攻擊事件高得多了。遙想 15 年之前的光景,就是成天看到四處有人在罵購物網站到賣自己個資,所以詐騙集團才打給他,殊不知是詐騙集團用了他的密碼正大光明登進去看他訂單和個資,所以後來出現了一個很有趣的現象,自己編輯自己個資時,電話跟地址都碼了一堆,不知道到底該打成對的還是維持 * 號,網站為什麼會這樣改?當然就是怕能登你帳號的人看到內容啊。不然他們印快遞單的時候系統再碼一部分不就好了?幹嘛製造使用者困擾?

後來就是拍賣二手物品的網站開始有帳號被盜,去賣仿冒品、假貨,甚至寄到你手上的東西只是顆石頭的案例,然後原帳號持有者被警察抓走哭說他是無辜的,是有人盜他帳號來開這賣場,這些新聞出現的時候,有多少人知道這背後就是詐騙集團結合憑證填充攻擊在操作?那些提供非法下載版權軟體、影音的地下網站,也有很多 VIP 被盜去賣,甚至連註冊網站的信箱都被盜走,求助無門,又難以跟站長證明他是他本人,於是高價購得的永久 VIP 帳號被拿去外面變賣。這些事情發生的當下,又有多少人有注意到?幾年前國內券商的帳號被這招掃出有開複委託的帳號,跑去交易港股,又有多少人關注?PTT 帳號開始大量被盜,這個風行十幾二十年的爛招還是讓廣大鄉民先去懷疑是站方外洩資料庫。還有人不知道 PTT 帳號在當時被盜來能幹嘛,PTT 帳號是可以拿來賣錢的,甚至 P 幣都能變成新台幣,凡是能變成錢就會有人想要啊。不同性質的網站帳號本來就有不同的用法,不是每間都可以像 PChome 這樣簡單而直接地進行金錢交易和銷贓的。

所以在問出「為什麼只有 PChome 出事?」這個問題前,可能真的要好好想想自己過去跟多少這類資訊擦身而過而不自知。一般非業內人士也就算了,因為這也是網站遭受此類攻擊的典型一般人反應,但如果是專攻網站開發維運或資訊安全的,問出這種問題來就真顯得孤陋寡聞了。此外,參與討論的其實很多不是受害者本人,所以也別說這是什麼檢討受害者了,這邊只是把事實陳述出來罷了。如果真的還是不能清醒,上一段也提供了足夠的關鍵字,丟 Google 查查吧。

至於解決方法,兩年前我在這講 PTT 帳號被盜那篇就寫得差不多了,這裡不再贅述。