幾年前,在 Facebook 上面看到一位大大表演,把自己的露天會員中心,改了一串東西後,隨機換成別人的姓名和個資。那時候林北的露天帳號剛好被盜,瀏覽器的 Developer tool 我也有,怎麼沒想到這樣用?從此打開了開關,不相信任何人寫的程式,自己寫的程式也可能全是坑….

前陣子看到那位追蹤已久的大大又發了一篇共享機車服務某種程度上可以用來窺探隱私

遭許多人抨擊
「不然不要上網啊?」
「取得公開的資料叫破解嗎?」
GoShare 也提出說明:民眾僅能得知車牌與起訖點,並未涉及乘客個資。
網路上充滿了快活的空氣,一下就被人淡忘了,後續沒多大的討論。

我也是個 GoShare 使用者,也覺得是無稽之談,
不就跟我看到別人在哪個公車站牌上車、下車?
白牌、Uber,或是正常的計程車司機,都知道很多人的家住哪?
火車站外面的計程車司機、小蜜蜂,都知道軍營跟基地在哪?
很多寶友都互相知道對方住哪一帶、常打哪個VIP道館?
不少人會在結帳櫃檯大聲朗誦自己的手機號碼,為了累積點數?
有些悠遊卡/一卡通信用聯名卡的使用者,常在刷悠遊卡/一卡通結帳時,讓路人看到背後的信用卡號和安全碼?
FoodPanda、Ubereats 外送員搞不好也有個群組,弄個正妹/帥哥叫外送名單?
電商社團常常有人說要做超取退貨奧客名單?

日常生活中,私密的情資暴露在外的情況多的是,
那麼騎 GoShare 會洩漏隱私的原理是什麼?
各家共享租車精美的 API 設計方式與傳輸資料,可以達成哪些大膽的用法?

原理:HTTP嗅探、API 設計模式、外部地圖圖資

各家線上租車服務都有看地圖找車功能,當車子在已經還車、可租借的狀態,就可以從 APP 查車子的位置。
但是車子在跑的時候,不知道即時位置在哪。

1.HTTP嗅探(HTTP Sniffer)
水電工/車行會用電表查看插座或電路數值,電信人員用電纜測試儀看線路有沒有通,醫生用聽筒或是儀器檢測器官,那網路程式當然也有各種檢測工具,其中一種就是查看 HTTP 資料傳輸請求(request)、回覆(response)資訊的工具。
您現在如果正用電腦看這篇文章,那網頁瀏覽器裡面就有內建這堆凶器,像是 Developer Tool 或是 chrome://net-export/ ,就跟大多數男性下體都有的凶器一樣,每個人都是潛在的犯罪者。

2.呼叫 API
現代的系統程式環境越來越複雜,同一組資料要給 Android APP 、iOS APP、WEB 小網、WEB、Windows 系統程式、MacOS 系統程式、Linux 系統程式,在每個系統平台都從頭寫一遍資料存取跟控制邏輯,肯定可以帶來很多工作機會!
但是軟體開發就如同紡織廠裡的工人一樣,花費能壓就壓。所以通常會做一套 API 讓各平台的程式來呼叫,程式取得資料後再想辦法 Render 出 UI,這樣出問題時 API 設計人員跟程式開發人員才能互相踢皮球(?

3.地圖圖資
應用程式裡面有地圖的,大部分都是使用外部廠商的地圖資料。我們這種幸福自由開放的民主國家,當然是使用 Google Map。所以理論上 APP 看到的資料,地圖上那些曲折的道路河川路名,跟「地圖上顯示的車子點點」,這兩者的資料肯定是分開的。
綜合前兩點,想辦法撈到應用程式裡「地圖上顯示的點的資料」,然後再自己拼湊,就可以做出各種可能會讓人上法院的應用。

根據上述原理,Pokemon GO 可以做出哪些大膽的應用?

Pokemon GO 一開始也是使用 Google Map,後來2017年後換成 OpenStreetMap,至今仍有許多地方明明有路,但在遊戲裡面卻是一大塊。總之知名的 AR 遊戲 Pokemon GO 裡面也有地圖,能不能做出什麼大膽的用法?

首先 APP 右下角有一個「附近的寶可夢」功能,而且沒抓過的會用影子顯示,如果依照上述的原理,能自動把資料爬出來,然後用 Line Notify 通知我,玩家不用自己每次開遊戲 app,主動得知附近有出現什麼新寶可夢,不就很方便?

還有遊戲有好友功能,好友可以互相交換寶可夢或是PVP對戰,但是基本上都要在兩人面對面的距離才行,如果好友距離太遠,系統會提示「好友距離太遠」,那這個好友距離太遠,是伺服器只有回傳一個 boolean 值,還是伺服器回傳對方的最後/即時上線的GPS位置數值到我的裝置本機,然後在我的裝置本機上進行計算?如果是後者,這就有趣囉!

但是實際用相關抓包工具查看連線資訊,會發現 Pokemon GO APP 這時候會完全無法連線,看來是有做一些的防禦機制。

騎 GoShare 可能讓隱私外洩? 在有跟沒有之間…

開頭那位大大講的原理,就是間接洩密。
就跟假設記者看到某 Youtuber 上了某台計程車,然後這台計程車停在汽車旅館門口,剛好另一個 Youtuber 開的消光黑賓士 Coupé 也在汽車旅館,所以記者就可以捕風捉影寫說:

「汽車旅館多人混戰!Youtuber 硬上疑中鏢」

但也有可能他們只是不小心滑進去,去借廁所討論公事而已。

可能透過監測地圖得知本來在A地的車移到B地,移動車的是何人、移動的時間,A地或B地可能是敏感地點,所以騎共享機車真的會隱私外洩嗎?

情境1:直接騎回家洩密之術
小明在超商買東西結帳時,報出自己的手機號碼累積點數,被排隊排在後面的習大大聽到,小明騎 GoShare 離開的時候又被習大大看到車牌號碼,然後小明又厚顏無恥把車子停在家裡,這樣習大大在 GoShare 的地圖上,就會發現有台 GoShare 停在房子裡,這房子可能是小明的家?而且還知道小明的手機號碼?

情境2:我看見阿發上妓院之術
我看到隔壁老王騎某個車牌號碼的 GoShare 出去,然後又看到這台車停在按摩店門口,而且這台車中間沒有其他租借記錄,可以推測隔壁老王去按摩店。

情境3:請勿聽從陌生人指示騎乘共享機車
我看到金城武的車ㄉㄧㄠˊ在路邊,就把我騎的 GoShare 先還車,換成讓金城武騎回家,金城武還真的騎回他家,這樣我就可以在 GoShare 的地圖上知道金城武住哪裡了。

情境4:請勿聽從陌生人指示將共享機車牽到指定地點
我跟沒騎過的人說,你把 GoShare 車子牽到家裡面,車子就會自己亂叫喔!賭一千塊。而且你要把車牌拍給我看,證明真的停在家裡!
於是這樣就可以在 GoShare 的地圖上,透過查這台車在哪裡,間接得知這個人住哪。也可以用 GoShare 的小鈴鐺尋車功能讓那台車發出音效。(車子不要太遠的話)

情境5:拍照打卡洩密術
這原理跟之前常聽說的,出國還在臉書公開貼文炫耀,結果回來發現家裡被闖空門…滿像的。
例如有人欠錢跑路,還在 FB 公開貼文貼上自己和 GoShare 的合照(還拍到車牌),如果債主剛好在 GoShare APP 裡面看到那台車停在威秀門口,就可以趕快烙人來…

情境6:掌握男友行蹤術
女朋友看著男朋友騎 GoShare 出門去買宵夜,查詢地圖,看男朋友剛剛騎的 GoShare 還沒變成可租借狀態(還沒還車),所以他應該還在騎車,可以安心在房間搜索私房錢。

情境6:內容農場文章改編術
悲觀的業務員看了競品共享機車業者的分布地點資料,發現XX區都沒有車,糟了!這裡的人都不騎共享機車的!
樂觀的業務員看了競品共享機車業者的分布地點資料,發現XX區都沒有車,太好了!這裡的人都沒車騎,趕快去投放車子!

再問一次,騎共享機車真的會隱私外洩嗎?

在有跟沒有之間…
直接外洩肯定是沒有的,一般老百姓無法直接查到每台車的歷次使用者的大名、生辰八字、聯絡資訊、歷次借還車地點、別人駕照上的證件照。
但是間接的數據資料創意組合是無限的。
但前提是滑地圖找車的手速要夠快,
或是真的有人做好爬蟲,把資料爬好爬滿,而且做出方便穩定的行蹤查詢 as a Service.

如果要做一個「離我最近可以騎的共享機車」線上服務

我們要做的是讓世界更好,例如不必開 N 個 APP 找附近哪邊有車可騎,做一個「離我最近可以騎的共享機車」的查詢系統?

但是這其實應該是假需求:
第一,台灣其他的線上租機車服務,交集的地區只有台北,這可能是一個市場小之又小的服務,想要推廣到天龍國外,可能還要把 ubike 或租車店的資料也串進來。
第二,應該沒有業者,願意跟其他家的車擺在同一個地圖上,一起大逃殺,玩我比你便宜1元,你有活動折抵,他有抽獎活動…之類的比價生死鬥。

分析一下那一家的最好爬:

goshare
有這個畫面,理論上可以把全台北的車子位置一次撈出來?
但是真的無法(878發明家語氣),這個畫面上其實只有一兩百個點而已,要畫面拉近 zoomin 之後,程式才會發出新的請求,得到一小區塊的更多資料。
API 要資料會帶兩組參數,第二組參數可以用 base64 decode,但解出來還是不知道參數意義為何。

其他還有一些方法,例如看新聞報導知道當 GoShare 的車子電量太低時,車子就會下線,一般使用者從 APP 上將會無法查到這台車,然後 GoShare 的工作人員就會載著電池去幫這些車子換電池。GoShare 的工作人員要怎麼找這些車?翻簿冊?紙本作業?監測全台灣的監視器做車牌辨識然後比對資料?合理推測也有一個內部專用的APP用來查沒電的車,甚至還跟差勤連動,可能只是改幾個 API request 的參數,或是 API 路徑的英文單字換一下…但是軟體不是靠嘴砲或是靠畫甘特圖,實際做得出來才是真的。

irent
我們再考察另一家的,這家的 APP 打開時比較頓,果然傳輸的資料比較多,直接可以撈到一千多台,不需要思考移動地圖才會載入車子位置這回事…
API 發出請求時要帶身分證字號等多組參數。

wemo
再考察第三家的,竟然有線上租車 APP 直接內建了追蹤功能?!
這家的 APP 比較好用,GoShare 還要自己把地圖拉來拉去才能找到別人車騎到哪去,這間直接內建看車牌查位置的功能,是為了東西忘在車上,可以找到車子在哪?經由本文開頭那位大大的啟發,可能就有許多大膽的想法了。
監聽到 API 主要有兩支,依車牌找車的就直接帶車牌。依位置找車的就帶 lat 跟 lng 的經緯度值,不用特別再編碼。但是兩支都要帶個 Authorization 的參數,base64 decode 出來是有個人帳號的ID、JWT的 token 和過期時間之類的。

公共自行車 UBike 呢?
例如監聽查詢卡片的騎乘紀錄的程式,然後改個參數變成查別人的卡片騎乘記錄?可惜查詢時都要帶上多組參數,而且 md5 decode 後還是無法得知數字是什麼意思。就算知道這張卡有哪幾筆借閱記錄,還是不知道卡片的擁有者是誰。
一樣偷看 UBike 車號,查車子最後停在哪呢?第一代是用站點設置方式,使用者根本無法查閱每個站點裡面,究竟有哪些車號的 Ubike。但是新版的 Ubike 2.0 車上多了一台智慧型車機,會不會增加什麼新的功能,或是惡意應用呢?

GoShare錯誤

爬蟲撈資料,如果不只是自用,要公開使用,勢必會面臨幾個問題
1.這個是未經授權爬取企業營業資訊,像爬電影時刻資訊(Moovy)、爬租屋資訊的(豬豬快租),然後把爬到的資料營利使用的前輩們,最後都被吉了。爬蟲技術本身不是違法的,不然 Google 搜尋引擎的工程師都要被關到死了,而是視用途跟資料而定。
2.車輛位置和車輛是否可租借,是一種更新頻率很高的資訊,要避免因為爬取頻率太頻繁,連線量過大,而被封鎖 server IP 連線,或是造成對方的伺服器當機/服務異常,又不知道如何隱藏自己,肯定會被吉。
3.透過 API 偷爬還要帶 token 過期時間、個人 ID,還有一大堆不知道用途的參數,這就麻煩了,這通常是自動化非法爬蟲的最後一哩路…所以一定要經過合法授權,才可能會有比較方便的介接模式。
4.這個服務不需要登入才能查車子,但爬到的這些資料,勢必當然也是用 Google Map API 來顯示,但 Google Map API 用量太高,是要收費的,如果有乾爹免費贊助,但使用者資料要拿去供他使用,可能膝蓋跟腰一軟,然後就…。

講這麼多,所以結論是我做不出來。這種東西也不該出現在這世界上,可能會被吉。


有這麼多時間和心力,還不如像老高一樣拿去用在正途。

結論

大數據應用的作文比賽,最後一定要提一下大數據真香,像是韓國就有一個「為國服務」的案例,利用電信商的用戶通話記錄的發話地點、帳單地址交叉比對,來評估哪邊需要增設夜間公車路線。

方便的科技服務(找出離我最近的共享機車),跟可怕的跟蹤功能(找出剛剛騎某車號的那個人把車停在哪),幾乎只有一線之隔,背後的資料其實是一模一樣的(空車的車子位置),只是操作介面跟用途不同。

科技發達,平台管理者有心要監視個人資訊,技術上是可以做到很多應用的!平台商的道德操守有達到聖人等級?各種開發預算跟時程一壓再壓,能動、能賺錢就好的線上服務,平台真的能避免使用者個資不小心被有心人士拿去做「創意」應用?

每天騎幾分鐘的公用機車就讓大家這麼關心資料隱私,那現在家用的物聯網設備這麼多,什麼監視器,智慧音箱、智慧門鎖,連電動牙刷都可以指責我哪邊的牙沒刷到,也許未來哪一天依據家中的監視畫面+餐廳的監視畫面+咀嚼時的習慣+牙刷記錄的的牙齒健康度來找人,都不是一件難事了吧。