你以為只是記帳?小心 App 的個資安全!

就以一個工程師的角度來看,光帳號、密碼竟然還以明碼傳送,我就不會使用這個 APP 了。
評論
評論

 

6757849129_68dd2374cc_o
Photo Credit: 401(K) 2012

原文發表於臉書,由兩位不願具名的作者授權轉載,兩位皆為 PTT 資深魯蛇,略懂法律跟程式的肥宅,INSIDE 編輯部審查兩位作者身份與內容後,同意刊登。

幾天前,一則標題叫做「" 不用上班" 他每月被動收入就超過 30 萬」(新聞連結已經被撤下)的聳動文章引起了廣大的迴響,資深一點的網路讀者大概都讀得出這是一則以記帳為成功之本的概念去深化記帳有多重要,進而推廣某個特定記帳 APP 的文章(俗稱業配文)。隨後神人陸續被網友、財經部落客和媒體迅速起底(文章一文章二新聞備份)。

一般人的反應大概僅只於:「喔!原來直銷才是賺錢的主力。」或就認為這是一個推銷某記帳 APP 的業配新聞,可以不用太在意。這裡我們不討論直銷部分(直銷可以不違法,但有多少爭議相信大家都很清楚),要討論的是更跟你切身相關的問題: 隱藏在 APP 裡面,所有你的使用模式及財務記錄到底安不安全?

實際上記帳 APP 的開發難度不高,幾乎是 Android 系統入門的 APP 等級,許多新手工程師也都會寫這種 APP 來練手,App Store 中的記帳 APP 也不乏其數,何以要特別製作一個很普通的記帳 APP 然後又花資源去特別推廣一個很普通的記帳 APP?

答案可能是:收集你的消費模式數據。

較有規格的公司一般都會建有客戶管理系統(Customer relationship management,CRM),為的就是從客戶的消費型態上做出更精準的分析,以利於後續的客戶服務及刺激客戶持續消費,也能把資料拿來在異業間做廣告或是其他合作。舉例來說:很多銀行就是從分析客戶的刷卡消費紀錄之後,再決定要向客戶推銷什麼商品(包含一般商品、服務或是金融產品)。

這款特定的 APP 主要目的應該就是收集使用者日常的所有消費,連銀行無法收集到的資料這個 APP 都能掌握,小額消費可能是你每天喝一杯手搖茶或咖啡、吃一塊雞排,大額消費可能是用現金買了珠寶、鑽戒、手錶或是一台汽車沒有貸款... 諸如此類使用現金金流又沒有留下可以追蹤痕跡的消費,甚至連消費時間、發票跟店家所在位置都可完整被記錄下來了。某個程度上來說,這個 APP 做到了破壞式創新:沒有發行信用卡,卻掌握了更詳細的消費紀錄。長久累積下來,如果使用者人數和紀錄的消費資訊夠多,在商業上的價值不言可喻。

身為一個工程師,也不會對這種商業模式太感興趣,有興趣的是這個 APP 是怎麼開發、怎麼紀錄資訊的?但稍微看了一下之後,卻發現這個 APP 在資訊處理上很不安全。解析這款記帳 APP 的 API 之後,發現居然連傳送帳號、密碼都使用明碼,也沒有 SSL 機制,沒有加密、沒有保護,什麼都沒有!

這很重要嗎?當然很重要!當然很重要!當然很重要!所以一定要說三次,沒有保護機制,你跟在網路上裸奔沒有兩樣,除了系統管理者可以拿到這些資料外,如果中途被攔截(例如你使用大眾場所的免費 Wi-Fi),不只你個人的財務狀況是赤裸裸攤在別人眼中的,連你的生活軌跡都會被知道,這可怕嗎?也許一般人不知道可怕的地步到什麼程度,下面會有簡單說明。

以詐騙方式來說,綁票詐騙、中獎詐騙、分期詐騙... 族繁不及備載,一般人只知道詐騙集團很厲害、很可惡、很會騙,但為何詐騙集團可以一再得逞?那是因為詐騙集團也是有在做功課,好好分析各種資訊!譬如說,詐騙集團拿到一份國中小家長電話,要進行哪種詐騙手段?當然是先做假綁票詐騙,因為知道有小孩讀什麼學校,可能連小孩手機號碼都有基本資料都有了,難道你會對這份名單做假討債公司的斷手腳式詐騙嗎?「喂,陳先生?你兒子跟我們借了 20 萬還不出來,你不幫他的話我們要斷手斷腳了...」「神經病!我兒子才讀國小。」。同理,當我取得這份資料時,發現有人很喜歡網路購物,當然先進行網路交易錯誤的假分期式詐騙。

然後歸納詐騙得逞的經驗,可以得出如何再次成功的模式,比如說經過 A 模式詐騙的受害者,其實很容易再次進行同樣 A 模式的詐騙,或是經歷過 A 模式的受害者,比較容易進行 B 模式詐騙。跟行銷的再行銷有異曲同工之妙,曾經被騙成功的人,詐騙集團特別喜歡緊緊跟著。在美國著名的瑪麗亞‧杜瓦郵件詐騙案中已經證明詐騙受害者名單確實較其他隨機名單更容易受詐騙。

經過上面的簡單說明,一個不設防看起來也沒什麼大不了的記帳 APP,可能衍生的問題跟可以造成多嚴重的後果,相信很清楚了吧?其實真正要監理這種 Fintech 的產品或服務,不是禁止他們,而是去檢驗他們有沒有做到最基本的資訊安全。最後,以下為此款 APP 的串接解析(時間點為 2016/9/16):

1. 登入

001

其中我馬賽克的部分是我的電話跟密碼。對!你沒看錯,就是我的電話同時也是帳號,以及我的密碼,都是用明碼直接傳輸,前面是 http 而不是 https,這就代表任何訊息所經過的路由器,都可以知道我的帳號和密碼,當然還有 Open ID 的登入方式,也就是用 Facebook 或 Google 帳號登入,這邊理論上就不會有帳密曝光的問題。

不過如前面所講的,沒使用 SSL 加密,因此後面伺服器回傳的資料就一樣是公開的,就如下面的資料所示:

002
003

這邊身為工程師的我搞不懂的是,何必又把密碼用明文回傳給使用者。先別說這個,其實看整個 data 的 key 命名,就能夠知道這個 APP 想要記錄起來的資訊有多少,我們可以在 APP 使用時發現這個 APP 會希望你把這些資料填滿。

延伸閱讀:https 相關資料

2. 收入/支出

這邊我也只放回傳資料格式,畢竟我不想再加其他的資料上去了,我們只要看記錄了什麼上去就好,data0 是我隨便 key 的收入資料,data1 是我拿昨天下午買的礦泉水發票掃瞄,這邊的傳輸依然是用 http 而未加上 SSL,就不贅述了。

004

先來看看收入部分記錄了些甚麼資料:

005

不意外的紀錄了收入登入的日期、實際發生日期、修改日期,這邊記錄方式是採 timestamp,比較有趣的是 lon、lat 兩個欄位,也就是把紀錄這筆收入時,我所在的經緯度也寫進伺服器,這是跟我收入完全無關的紀錄。

支出部分:

006
007

以掃瞄發票的支出情況下,格式分為消費店家跟消費細項,消費店家上可以看到店家所在的經緯度、店家名稱(context)以及發票號碼(ticketno)與我的當次消費金額(amount),其他的分類 key 因為不清楚代碼就不臆測,消費品項部分就是買了什麼、買幾件、各多少錢。在支出這個部分倒是沒甚麼太大問題,看起來沒甚麼不該記的東西,不像是收入還紀錄了經緯度。

APP 的串接解析就先做到這邊,其實也沒什麼興趣繼續寫下去了。就以一個工程師的角度來看,光帳號、密碼竟然還以明碼傳送,我就不會使用這個 APP 了。 至於這個免費的記帳 APP 拿到使用者的資料之後,衍生什麼商業模式,在這邊也不臆測。天底下沒有白吃的午餐,被騙的人再度被騙的機率會特別高,這是要提醒大家的。