「公司可以在技術性保護上花數百萬美元,而如果有人能打通電話給某個人,說服他在電腦上做某件降低電腦防禦的事、或洩漏他們想要的資訊,那筆錢就白花了。」——凱文·米特尼克(Kevin Mitnick)於國會作證
為什麼手機是現代世界的中心#
保護手機、它們所支撐的 app 生態系、以及它們所倚賴的電信網路,是現代世界的核心。
- iPhone 推出後十年間,世界從用 PC 或筆電上網,轉為改用智慧手機,並新增了數十億使用者。地球上 55 億成人中有 50 億有手機,其中 40 億有智慧手機。
- 新一代連網裝置(從智慧音箱到汽車)非常像手機,往往使用相同平台、共享相同漏洞。
- 手機如今提供認證的基石:如果你忘了密碼,就會收到簡訊來救回——所以能從你這裡偷走簡訊的人,可能就能花掉你的錢。
- 行動網路對其他基礎設施至關重要:電力公司倚賴手機在修復故障時調度工程師,所以若電話系統在停電幾小時後也掛掉,就有真正的問題。
- 還有公共政策:智慧手機靠提供銀行等服務革新了第三世界窮人的生活,但它們也助長了監控與控制。
電信安全的歷史很有啟發性:早期攻擊由愛好者(「電話飛客」)對電話公司發動以取得免費通話;接著電話系統的漏洞被騙子利用以規避警方監聽;接著付費加值電話被引入,帶來大規模詐欺;接著電信市場自由化後,有些電話公司開始攻擊彼此的客戶——有些電話公司甚至互相攻擊。
手機作為平台的安全取決於兩件事:
- 它所連上的網路是否已被以某種方式攻陷——不論是靠某種竊聽,還是靠削弱手機網路身分的 SIM 調換攻擊;
- 裝置本身是否已被攻陷——不論是靠惡意程式取得作業系統的 root,還是靠安裝潛在敵意的應用或函式庫。
手機安全過去全是關於第一件事,但如今主要是關於第二件。
對電話網路的攻擊#
通訊的濫用可回溯數個世紀。 在希爾發明郵票之前,郵資由收件人支付;不請自來的郵件成了大問題(尤其對名人),所以收件人被允許檢視信件後拒收。人們很快想出在被對方拒收的信封外面寫短訊息的辦法。
電話也不會有例外。
計費、剪接與社交工程:一世紀的通話竊取
早期的電話計費系統對創意濫用毫無防備:
- 1950 年代,某些系統的接線生得靠聽硬幣落在金屬板上的聲音來判斷公用電話客戶是否付了錢,所以人們練習用一片金屬敲擊投幣箱,敲出對的音。
- 起初接線生無從得知電話從哪支話機打來,所以她得問來電者號碼,而他可以給別人的號碼——那人就會被收費。
- 接線生開始為國際電話回撥驗證號碼,於是人們發展出社交工程攻擊(「這裡是 IBM,我們想預約一通到舊金山的電話,因為時差關係能不能讓我們的總經理今晚在家裡接?他的號碼是 xxx-yyyy」)。於是公用電話線加了警示提醒接線生。但英國的實作有個 bug:從公用電話打給接線生的客戶,只要短暫按下掛機鍵就會被重新接通(往往接到不同的接線生),而這次沒有「來自公用電話」的警示。他於是能打到任何地方並記帳到任一個本地號碼。
- 早期系統也用一或多個脈衝來示意投入硬幣。 在若干學院,有生意頭腦的學生在學生會的公用電話裡裝了能模擬這個的「魔法按鈕」,好讓人免費打電話。(帳單這時就寄給學生會,對他們來說這個魔法按鈕就沒那麼有趣了。)
其他攻擊涉及所謂的「剪接(clip-on)」——實體把一支電話接到別人的線上以竊取其服務。
英國電話公司沒有其挪威同行那麼開明,其政策是否認竊聽是可能的,好讓自己能直接向受害家戶收取通話費。這偶爾造成附帶損害,一個 Cramlington 的家庭就吃了苦頭:他們第一個麻煩跡象是在自己線上聽到別人的對話;第二個是警察來訪,說有人投訴騷擾電話。
結果是一名毒販住在附近,而合理推論是他剪接了這家人的線路以聯絡他在公用電話的信差。 靠使用一個無辜家庭的電話線而非自己的,他不只省了電話費,也更有機會躲過警方監控。
但警方與當地電話公司都拒絕進入毒販曾住的房子,宣稱那太危險——即使毒販此時已被判六年徒刑。挪威電話公司婉拒了為辯方就剪接作證的邀請。結果訂戶被判犯下騷擾電話罪,這被普遍認為是一起冤獄。
社交工程給出另一條路:
你(如果不夠警覺)說:不,是 123-456-7890-5678。而 123-456-7890 是你的電話號碼、5678 是你的密碼,所以那個騙子現在能把通話記到你頭上了。
對信令的攻擊#
「電話飛客(phone phreaking)」一詞指的是對信令的攻擊,也包括純粹的通話費詐欺。
作者聽過最早的攻擊可回溯到 1952 年,而到 1960 年代中後期,美英許多愛好者都想出了重導通話的方法。先驅之一 Joe Engresia 有絕對音感,小時候就發現他能靠吹出在長途電話背景中聽到的一個音調來免費打電話。 他天賦較差的同好則用自製的音調產生器,最常見的叫「藍盒子(blue box)」。
訣竅是打一個 0800 號碼,然後送出一個 2600Hz 的音調,讓遠端的線路「清空」——也就是切斷被叫方,同時讓來電者保有一條連到交換機的中繼線。來電者現在能輸入他真正想打的號碼並被接通,而不必付錢。
電話飛客是灣區生根之電腦駭客文化的根源之一。賈伯斯與沃茲尼克在轉向電腦之前,先做的是藍盒子。
家用電話線被牽涉進服務竊取的人,發現自己得吞下這些費用。
電話公司也與國家安全結盟。 許多國家的電話飛客發現了「能讓警方或間諜從辦公桌前舒服地竊聽你電話、而不必派線務員出去接竊聽器」的信令碼或交換機功能。在越戰與學運的年代,這是煽動性的東西:電話飛客是反文化英雄,而電話公司與黑暗勢力手牽手。
對交換與組態的攻擊#
一旦電話交換機變得可程式化,第二波攻擊就瞄準了電腦。
典型上這些是交換機房區網上的 Unix 機器,該區網也有做排程維護等行政功能的機器。靠駭進其中一台防守較差的機器,飛客就能橫跨區網闖進交換設備——或闖進訂戶資料庫這類次要系統。
加州飛客 Kevin Poulsen 在 1985–88 年取得了 PacBell 許多交換機與其他系統的 root 存取權。 他做了些小事,例如取得名人的未列號碼,以及從洛杉磯電台 KIIS-FM 贏得一輛保時捷:該電台每週送一輛保時捷給第 102 位來電者,於是 Poulsen 與同夥封鎖了電台 25 條線上除自己外的所有來電,打了第 102 通,領走保時捷。
進口電話交換機而非自製的國家,只能假設其交換設備有供應商政府所知的漏洞。(2001 年入侵阿富汗期間,喀布爾有兩座交換機:一座老舊的機電式、一座新的電子式。美國空軍只轟炸了第一座。)
若干電信商如今給企業客戶 SS7 存取權(例如若他們想大量發簡訊來認證客戶)。存取交換結構讓他們能玩 1980 年代 Poulsen 與米特尼克玩的那種把戲。
例如,若我想駭你的 Gmail 帳號,我送一則訊息給你的行動服務商,說你已漫遊到我的網路。接著我在 Google 發起帳號救回,它會送一則簡訊來重設你的密碼。
這如今正被積極用於銀行詐欺:第一起用它從銀行客戶偷錢的案例是 2016 年在德國(客戶在不知情下被轉到另一個網路);2019 年倫敦也有類似詐欺。SS7 也曾被沙烏地阿拉伯的行動業者濫用來追蹤在美國的沙烏地異議人士。
簡言之:我們過去以為涉及 SS7 的攻擊是國家的專利,但情況已不再如此。
不安全的終端系統與功能互動#
現代電話網路的下一組主要漏洞,是不安全的終端設備與功能互動。
2011 年揭露:一名替《世界新聞報》(當時梅鐸帝國在英國的旗艦)工作的調查員駭了 Millie 的語音信箱,過程中干擾了警方調查,並可能造成她某些訊息被刪除,給了 Millie 家人「她可能還活著」的錯誤希望。
由此引發的公憤導致該報關閉、數起刑事定罪,以及一場關於新聞業標準的公開調查。
但真正利用不安全終端系統的大型詐欺,往往鎖定有能力付大額電話費的公司與政府部門。
PBX 通常附帶「直接內線系統存取(DISA)」的轉接功能:公司業務團隊能打一個 0800 號碼、輸入 PIN 或密碼,然後利用大公司能拿到的低長途費率再撥出去。如你所料,這些 PIN 會外流並被歹徒交易,結果就是所謂的「轉接詐欺(dial-through fraud)」。
在許多案例中,PIN 被製造商設成預設值,而客戶從未改過。 許多 PBX 設計也有固定的工程密碼允許遠端維護存取,而審慎的人推定任何 PBX 都至少有一個後門,好讓執法與情報機關能輕易存取(據說是出口許可的條件)。
罪犯的動機之一,是取得不會被竊聽的通訊管道。
在另一起著名案件中,涉及勞動市場敲詐(從福建走私非法移民到英國)的中國幫派,駭了一個英格蘭區議會的 PBX,用它轉接了超過一百萬英鎊的通話到中國。 該幫派在其若干勞工死亡後才被警方處理——他們在莫克姆灣撿貝類時漲潮淹死了。
這裡幫派同樣不只想省錢,也想規避監控:他們把通話經由阿爾巴尼亞一台被攻陷的 PBX 繞到中國,好讓「最可能被機關監控」的跨境段落,發生在其蒐集系統不會碰的號碼之間。
功能互動:越獄、目錄查詢、來電轉接與電話會議
- 華盛頓州 Clallam Bay 懲教中心的囚犯只被允許打對方付費電話,他們發現了對「電話公司自動處理對方付費電話之系統」的有趣利用。系統會撥打被叫號碼,用合成語音說:「如果您願意接受來自……(來電者姓名)……的對方付費電話,請按兩次數字 3。」囚犯應該說出自己的名字讓機器錄下並插入。系統有個附加功能:能用西班牙語播放問候語。囚犯選了西語,而在被要求表明身分時說:「若您想以英語聽這則訊息,請按 33。」 這招夠常成功,讓他們能接通企業 PBX 並說服接線生給一條外線。
- 許多目錄查詢服務會替你接通剛給你的號碼,作為給無法邊開車邊撥號之駕駛的加值服務。這也能用來擊敗倚賴端點識別的機制:頑皮的孩子用它繞過封鎖打色情專線,而頑皮的大人用它防止配偶在家庭電話帳單上看到情人的號碼。
- 來電轉接是許多騙局的來源。 過去它被用來惡作劇(例如小孩社交工程電話公司接線生,把老師的來電轉到色情專線)。如今它可以既專業又惡毒:詐騙者可能叫受害者「撥一串數字向銀行確認電話號碼」——而那串數字把來電轉到攻擊者控制的號碼。於是銀行的回撥機制就被擊敗了。
- 電話會議能以各種方式被利用。 例如某些國家的足球流氓被施以宵禁,要求他們在比賽期間待在家,並打電話給觀護單位證明(單位驗證其來電顯示)。於是你請伴侶把觀護單位與你的手機設成電話會議。若觀護人問起人群噪音,你告訴他那是電視、而且你不能轉小聲否則你的朋友會宰了你。(而如果他想回撥給你,你就請伴侶把來電轉接。)
電話公司自己的詐欺#
電話詐欺並不只是「不誠實的客戶對電信商做通話費詐欺」的故事。有許多騙局是不擇手段的電信商幹的。
計費制度是在電話公司還是壟斷者(通常國有)的年代設計的,假設電話公司彼此信任:若 A 公司產生一筆通話資料紀錄說「B 電信商的某位客戶打給我們的訂戶」,就直接把它交給 B 電信商,B 就付錢(它沒有動機爭辯,因為它有抽成)。
作者自己就是一次塞單企圖的受害者:在巴塞隆納度假時妻子的包包被搶,於是他們打電話取消了裡面那支手機。數月後,他們收到一張帳單,要求支付那張 SIM 卡「近期在西班牙產生」的漫遊費。
十之八九,是西班牙電話公司單純把一些費用塞給一個他們先前見過的號碼,心知肚明通常能矇混過關。 妻子的前業者堅稱即使她取消了號碼,她仍對數月後記到該號碼的通話負責、必須付錢。他們之所以能脫身,只是因為作者曾在學術研討會上見過該公司執行長,能請其私人辦公室解決問題。沒有這種門路的客戶通常只能吃虧。
別以為塞單與盜轉只是小型皮包公司在做。AT&T 曾是最惡劣的犯行者之一,不只因盜轉被罰,還因偽造訂戶簽名使其看起來像是同意轉換服務而被罰。他們是在偽造了德州一位訂戶已故配偶的簽名時被抓到的。
第一,傾向形成主宰廠商市場。 多年來電話服務在多數國家被視為「自然壟斷」並由政府經營;AT&T 拆分與柴契爾私有化英國電信之後,世界轉向另一種模式——受管制的競爭。
第二,競爭區段(如長途通話)的價格迅速掉到接近零。 有些區段被 app 變成競爭性的:Skype 與 WhatsApp 讓國際電話基本上免費。
在許多電信市場,結果是「混淆定價」:產品持續汰換,新方案給慷慨的入門折扣以與低價業者競爭,但費率之後偷偷調高。 如果你懶得持續比價,你可能會遇上一些不愉快的驚喜。
行動世代#
自 1981 年作為昂貴奢侈品起步以來,手機已成為重大的技術成功故事。到 2020 年我們有超過五十億訂戶。
從 1G 到 2G GSM#
主要客戶之一是「賣話(call-sell)」行當——竊取電話服務再便宜轉賣,往往賣給想打電話回家的移民或學生。賣話業者會帶著複製手機在已知據點守候,客人排隊花幾塊錢打電話回家。
賣話市場的互補是犯罪界對匿名通訊的需求:人們駭手機讓每通電話用不同身分。這種手機叫「tumbler」,對警方特別難追蹤。
第二代手機(2G)採用數位技術。GSM 於 1987 年由 15 家公司簽署成立協會,1992 年推出服務。
業界起初試圖把構成 GSM 協定核心的密碼與其他保護機制保密。這行不通:有些最終外洩,其餘的被逆向工程發現。
GSM 認證協定與它的漏洞
話機是通用商品,靠「使用者識別模組(SIM)」個人化——一張你申辦網路服務時拿到、載入話機的智慧卡。SIM 可以想成含有三個數字:
- 可能有一組**個人識別碼(PIN)**供你解鎖卡片;
- 一組國際行動用戶識別碼(IMSI),一個對應到你手機號碼的唯一號碼;
- 一把用戶認證金鑰 K_i,一個 128 位元的數字,用來認證該 IMSI,且為你的歸屬網路所知。
另外還有話機序號,即國際行動設備識別碼(IMEI)。
認證協定的運作:
上電時,SIM 送出 IMSI,話機把它連同 IMEI 送到最近的基地台。IMSI 被轉送到訂戶的歸屬位置暫存器(HLR),後者產生五組三元組,每組包含:隨機挑戰 RAND、回應 SRES、以及加密金鑰 K_c。
演算法是:RAND 在 SIM 的認證金鑰 K_i 下加密,得出 SRES 串接 K_c:
{RAND}K_i = (SRES | K_c)SIM --> HLR IMSI HLR --> BSC (RAND, SRES, K_c), … BSC --> SIM RAND SIM --> BSC SRES BSC --> 話機 {流量}K_c
第一,基地台未被認證,所以竊聽者很容易用假基地台攔截通話。這類裝置在歐洲叫「IMSI 捕捉器」、在美國叫「StingRay」,如今是標準的執法設備。(2G 設計時,一座基地台佔滿整個房間、要價十萬美元,所以忽略中間人攻擊或許看似合理。如今只需要一台低成本軟體無線電。)
第二,多數國家基地台與訪客位置暫存器之間的通訊在微波鏈路上未加密傳送(設備能加密流量,但一般電話公司沒有動機把加密打開)。這讓情報機關能大量攔截,並在許多情況下取得偽造或解密流量所需的三元組。
2G 也提供了位置安全與通話內容機密性:
內容機密性靠在認證與註冊完成後,加密話機與基地台之間的流量。 語音被數位化、壓縮並切成封包,每個封包靠與「從 K_c 與封包編號產生的偽隨機序列」互斥或來加密。歐洲常用的演算法是 A5/1,一個原本保密的串流密碼;一如 Comp128,它外洩後很快就被找到攻擊。
到 2000 年代中期,執法設備供應商已在賣「一秒內破解金鑰」的裝置,讓監控小組能吸走所有 GSM 流量並解密,然後挑出感興趣的對話。話機還支援一個更弱的演算法 A5/2(被許可出口到非歐盟國家),幾乎能立即被破解。
更妙的是這能回溯地做:若你在跟監一名使用手機的嫌疑人,你錄下通話(包括初始的挑戰與回應交換)。等他講完,你打開 IMSI 捕捉器讓他註冊到你的假基地台,捕捉器叫他的手機用 A5/2 而非 A5/1,並送出先前用過的那個挑戰。於是手機產生與先前相同的金鑰 K_c——而由於這現在被用在一個弱密碼中,它能被迅速破解,讓你能存取剛才錄下的對話。
3G、4G 與 5G#
第三代(3G)於 2003–04 年進入服務。
密碼學被用來保護訊息內容與信令資料的完整性與機密性(而非只有內容機密性),且保護從話機一路到核心網路,而不只是到本地基地台。所以從基地台或微波回傳線路撿取金鑰或明文,不再是可行的攻擊。
認證現在是雙向而非單向的。 理論上這會終結對流氓基地台的脆弱性、IMSI 捕捉器不再有用。實務上它們運作良好,因為它們只要叫目標話機退回 2G 運作就好。
5G 的主要驅動力是頻寬。
行動流量在 2018 Q3 到 2019 Q3 間成長了 68%(多半來自影片),預期到 2025 年前每年成長超過 25%,屆時全球近半流量會是 5G。
5G 讓行動業者建置新容量更便宜也更容易,不只在既有頻率,也在 20GHz 以上的毫米波頻率——這意味著路燈、公車站等處會有多得多的小型基地台。
一項實質改善是:你的裝置身分是用歸屬網路的公鑰加密後送出的,所以位置隱私會更難被破解;而我們被告知 IMSI 捕捉器不再有用。(我們在 3G 時就聽過這種說法:竊聽者只是強迫退回 2G。)
行動業者將不再是防守熟悉的技術,而是倚賴他們不理解、且多數只會向最便宜廠商購買的新技術。組態上一個錯誤,東西就可能全世界都讀得到;而除非 SGX 之類的東西能真的管用,雲端業者的政府很可能能靠對雲端業者(而非對電信業者)發出令狀來取得存取權。
同時規格複雜、實作仍不穩。 隨著標準演進,一場角力是在「想操縱流量以打破網路中立性、往價值鏈上游爬」的大型資料承載商,與「想要端對端信任」的大型行動業者之間。
另一場是美國政府試圖阻止華為在中國以外取得關鍵規模的裝機量。
行動業者的通病#
其中之一是對「手機所支撐之認證功能」的快速成長攻擊。 除了 SS7 安全問題,行動世界還帶來了 SIM 調換、通道劫持,以及從認證器 app 竊取 cookie。這許多的根源都是安全經濟學:系統中各主體之間的誘因有所錯位。
這能打開各種混亂的大門;個人的人生可能被接管其線上帳號的攻擊者毀掉。名人是目標:2019 年 8 月,Twitter 執行長 Jack Dorsey 的帳號被接管一小時、用來發送種族歧視與反猶推文,讓評論者不禁想:接管川普總統推特帳號的人,會不會發動第三次世界大戰?
然而電話公司的回應充其量只是零零星星。唯一讓 SIM 調換變難的美國大型行動業者是 Verizon。
但不是所有對策都幫得到所有使用者:如果對策是選用的,公司就更容易對「沒選用的客戶」的損失撇清責任。
電話公司也能靠「在第二因素簡訊的回應中送出 IMSI 的雜湊」來幫助依賴方偵測 SIM 調換;但很少有電信商這麼做。
基於各種理由,他們無法與開發者互動、也無法推動一個能讓自己萃取價值的 app 生態系。他們最後被商品化——變成必須維護基礎設施、卻眼睜睜看著過去享有的壟斷利潤被別人撈走的「位元搬運工」。
平台安全#
手機故事的第二部分是 app 生態系。它們修好了一些問題,也創造了另一些:最尖銳的安全問題是「平台本身是否值得信任」,或者說「你的手機是否可能違背你的利益行事」。
- 它打破了「原廠不得與客戶有關係」的禁忌;
- 它讓第三方廠商寫 app 容易得多;
- 它把 App Store 放在平台策略的中心,靠抽取音樂下載與軟體的分潤來變現。
效果是把權力從行動業者移到 Apple。Google 隔年推出 Android,策略是把類似的平台做得盡可能開放,讓任何人都能寫 app。
他們記得微軟在 1980 年代初靠提供更開放的平台,從 Apple 手中搶走了大部分 PC 軟體市場,並希望在手機上如法炮製。這最終沒有發生,而我們現在有兩個在許多方面已趨同的大型生態系。
但 Apple 的變現策略確實給了它更好的維護平台誘因:iPhone 通常至少修補五年,而 Android 產品是三年,往往更少。
Android 生態系#
Android 是部署最廣的終端使用者作業系統,不只在手機,也在平板、手錶、電視、汽車與其他裝置中——每月活躍裝置總計超過 20 億。
實作方式是:Android 不像傳統 *nix 系統那樣給終端使用者一個 userid,而是用不同的 userid 執行每個 app;私有 app 目錄中的資料由該 app 控制,而共享儲存中的資料由終端使用者控制,並有強制存取控制機制確保關鍵系統資料仍在平台控制之下(除非被 root)。
威脅模型涵蓋從實體攻擊、竊聽,到利用作業系統、函式庫與其他 app 的漏洞;並假設使用者會被誘騙安裝惡意 app。
更多 app 則帶有掠奪性,即使它們是由看似正派的企業(硬體廠商、行動業者與資安公司)散布的。 令人難過的事實是:使用者資料已成為主要商品——考慮到多數 app 免費、且生態系主要由廣告收入驅動,這也沒什麼好意外的。
一個重大後果是:Android 不支援對隱私最關鍵的權限——讓使用者控制某個 app 的網路存取。(BlackBerry 曾允許使用者拒絕網路存取。)這討好了廣告公司,因為否則許多使用者一裝上手電筒/遊戲/指南針 app 就會立刻關掉它的網路存取。
Android 的四類系統性問題
一、拙劣的原廠實作。
若原廠的工程師不費心實作安全刪除,太常見的結果就是:買你二手手機的人能取回 Google 主 cookie,並存取與該手機關聯的 Gmail 帳號。
這些品質問題也延伸到 TrustZone 與其可信執行環境。 例如某廠商的 TEE 系統讓可信 app 能映射主機作業系統的記憶體區域,結果是任何不安全的可信 app 都能讓對手 root 該裝置。 可信環境所用的軟體安全機制落後技術現況數年:位址空間隨機化缺席或薄弱、可信計算基礎過大、透過除錯通道洩漏資訊、沒有執行防護、多重側通道,而且沒有好的方式撤銷邪惡或脆弱的可信 app。
許多原廠只支援目前正在積極行銷的版本;他們不願花工程師時間把修補回溯到舊版本。 2015 年一項調查揭露:以 2011–15 年平均計,87% 的活躍裝置是不安全的,因為它們跑的作業系統版本含有已知漏洞。
而且問題比「原廠工程投入」更深。 若在 OpenSSL 或 Bouncy Castle 密碼函式庫中發現漏洞,這個修補得傳播到 Linux、再到 Android、再到每家原廠,然後在許多情況下再到每家行動業者(因為業者控制鎖網手機的更新)。每一步都可能花數月,每一步都可能因商業理由被忽略。
二、權限與同意。
早期 Android 版本中,app 的資訊清單指定它所要求的存取權,而使用者必須在安裝時全部批准才能執行它。這導致廣泛濫用,因為多數使用者只會按「批准」好把安裝弄完,而大量工具 app 變成了採集並轉賣你通訊錄、瀏覽歷史與其他個資的機器。
早在 2012 年,研究就顯示只有 17% 的使用者在安裝時會注意,而只有 3% 能回答關於發生了什麼的基本問題。
2015 年 Android 6 轉向 Apple 模式——在首次使用時批准這類資源的存取。 事實上,逐步限制較危險的權限,比任何其他因素都更能驅動平台演進:Android 6 把細緻位置存取變成獨立權限;7 限制 app 存取其他 app 的後設資料;8 隨機化 MAC 位址;9 限制背景模式下對感測器的存取;10 限制背景模式下的位置存取。
開發者只是想把東西弄成能動好出貨,而使用者只是想取用某項服務。開發者可用性是 bug 的重要來源;相當比例的開發者出於無知或困惑而要求超過所需的權限,連系統 app 的開發者也是。Google 未能實作安全預設;API 令人困惑且文件拙劣。這驅使開發者透過 stackexchange 這類論壇互抄程式碼,程度甚至超過傳統開發。
三、Android 惡意程式。
惡意程式可以是大量的或針對性的,可以來自私部門罪犯或國家行為者。以量計多數是大量的私部門品種,而其中多數來自正規散布管道。
單一最大的惡意程式來源一直是 Play 商店,其中相當比例的 app 在某些時候是有害的;而某些替代市場曾經一次移除其多數 app,因為它們有害。
app 可能天生有害、或其倚賴的函式庫變壞、或壞人買下經營不善的 app 公司(就像他們搶購已倒閉銀行的網域一樣)。近期揭發的最大犯罪集團之一,靠買下 Android app、用其使用者資料訓練點擊廣告的機器人,做了數億美元的廣告詐欺。
自 2012 年起,多數涉及「重新打包」:惡意程式開發者拿一個合法 app(載體)加上有害程式碼(搭載者)。這靠「把許多良性載體與同一搭載者的變體重新打包」而工業化。
搭載者可能試圖 root 手機以取得持久存取,並投放一個能在命令伺服器指揮下賺錢的遠端存取木馬。
變現策略也在演化:2010 年焦點在打付費加值電話,但到 2018 年已轉向廣告詐欺與個資外洩。絕大多數搭載者使用加密這類混淆技巧,而只有四分之一的良性 app 這麼做。
常見做法是「覆蓋攻擊」:惡意程式誘騙使用者允許它使用 Android 無障礙服務,這讓它能在(例如)你的銀行 app 上建立一層覆蓋,好在遠端命令伺服器控制下擷取畫面與輸入資料。
Android 惡意程式竊取銀行簡訊已有一段時間,而 Google 靠「只允許核准的 app 有讀簡訊權限」反擊;2020 年的最新發展是 Cerberus 銀行惡意程式現在也能偷 Google 認證器的 cookie。
四、廣告、第三方服務與預裝 app。
一個例子是 CamScanner,一個超過一億人下載的掃描與文件管理 app。某個時點該 app 被更新加入一個新的廣告網路,而其中含有惡意模組。負評讓防毒研究者去看了一眼,結果發現該模組正在把木馬投放到人們的手機上。
最大的是 Alphabet 與 Facebook,但那些「整個生意就是廣告追蹤服務」的公司(如 Chartboost、Vungle 與 Adjust)也有可觀市佔,而使用者相對不認識它們。
付費 app 的追蹤器最少,免費 app 較多,而允許 app 內購(往往是付費服務)的免費 app 傾向最多。
多數人以為付費買 app 就能得到更多隱私。 但由於開發者也倚賴第三方服務做分析,這要花力氣,而許多開發者懶得花。一項比較同一 app 免費版與付費版的研究發現:三分之一的付費版在資料蒐集上一樣掠奪;另外六分之一至少蒐集部分相同資料;四分之三使用相同權限;而幾乎全部有相同的安全政策。
散布版通常反映了手機原廠與行動業者之間的夥伴關係,帶著各種關係企業的開發者、廣告網路與經銷商。它們可能控管拙劣;已有多起惡意程式混進去的案例,以及為商業或法規理由做大規模資料蒐集的軟體。
多數預裝 app 不在 Play 商店提供,因而似乎落在傳統框架之外。有些來自 Facebook 與 AccuWeather 這類以積極蒐集個資聞名的公司,而許多並非這些公司的公開版本。
更甚者,74% 的非公開 app 似乎不會被更新,而 41% 未被修補達五年以上。
行為分析顯示,相當比例的預裝 app 能存取並散布使用者與裝置識別碼、組態與當前位置。 某些預裝 app(尤其在便宜手機上)在系統分割區中有使用者無法輕易移除的元件,而它們會播放惱人的廣告、甚至充當木馬的載入器。
Apple 的 app 生態系#
Apple 從一開始就在安全可用性上領先,遠早於 Android 就提供細緻的存取控制,但其生態系一向更封閉。
如今 Apple 在已開發國家有一半市場(青少年中有四分之三),這正變成反托拉斯議題。 每個開發者都有恐怖故事;而雖然 Amazon 在 2020 年 4 月被允許在 Apple 裝置上賣電影而不必給 Apple 抽成,這只是凸顯了 Apple 規則的任意性。 為什麼 match.com 這類交友網站得交出 30% 的銷售,而 Uber 不用?
公司對開發者做盡職調查,要求他們每年付 99 美元的授權費。其 app 審查流程比 Google 嚴格得多:有廣泛的自動化安全測試,接著是人工審查以確保 app 遵循 Apple 在付款、內容與濫用等事項上的政策。
對惡意程式的整體防護是所有大眾市場系統中最好的,iOS 的零日遠端漏洞利用能賣到數百萬美元,且一被大規模使用就會立刻被修補。
事實上,當作者所在大學的財務部門問「如何保護真正高價值的交易不被釣魚」時,他的建議很簡單:買一台 iPad,只用來跑銀行的認證器 app 放行付款,其餘時間鎖在保險箱裡。
iOS 生態系的四個繞道
越獄一出來,Apple 就修補;所以至少該公司有動機把裝置修補到最新,而不像典型 Android 原廠那樣賣完就不管。
有時無法修補,例如漏洞利用的是裝置的開機 ROM:2019 年的 Checkra1n 越獄能解放 2017 年前售出的多數裝置,而鑑識業使用的 Checkm8 越獄利用了從 4S 到 X 所有 iPhone 的開機 ROM——這被廣泛用在賣給全球警方的鑑識「服務站」中。
本書描述過阿聯用這類工具鎖定異議人士,以及沙烏地阿拉伯用一個對付貝佐斯(他們痛恨他的《華盛頓郵報》);沙烏地也駭了其區域對手卡達國王。網路罪犯也這麼做。
Apple 總是很快修補這類漏洞,所以你的數百萬只讓你能存取少數幾個目標。若有人可能花一百萬美元攻陷你的手機,你最好有好幾支,而且別告訴敵人「裝著你真正在意之資料」的那支私人手機的號碼。
這導致濫用與爭執:Facebook 的企業憑證被停用,直到其 app 不再違反 App Store 政策;Google 在 iPhone 上的 app 也有類似遭遇,而突然間大量色情、賭博與間諜軟體 app 的濫用曝了光。它們一直在濫用企業憑證、光明正大地藏在 app 商店裡。許多壞行為者是靠假裝成低度開發國家行動業者的客服 app 拿到企業憑證的。
許多熱門 app(包括 Grindr 與 OkCupid 這類交友 app)與廣告商分享大量資料,而仍被允許留在 Apple 生態系中。 對你可能期待更注重隱私的 app(如 VPN 與廣告阻擋器)也一樣——隱私利用是透過內嵌的廣告網路進來的,就像在 Android 生態系一樣。
在一個案例中,某個廣告 SDK 讓其作者能從「使用它、且被安裝在三億支 iPhone 上」的 1,200 個 app 偷走點擊;其程式碼有隱形功能,可能幫它通過了 app 審查流程。
兩家商店也共享一些政治問題,偶爾也會分歧:
2019 年香港抗議期間,Apple 下架了一個示威者用來避開警察的群眾外包安全 app,宣稱「您的 app 含有——或促成、使能並鼓勵一項活動——並不合法……具體而言,該 app 讓使用者能規避執法」,而 Google 讓 Android 版留著。
2020 年 2 月新加坡政府宣布一個用藍牙記錄「哪些手機曾靠近彼此」的 app。結果它運作得不太好,因為藍牙不是好的測距技術:若你把靈敏度設到能確保看見 2 公尺外的人,你也會看見相當多 10 公尺外的人。
更甚者,若跑該 app 的人口比例是 p,則「患者與其接觸者都在跑它」的機率是 p²,漏警率是 1 − p²;新加坡的 p 是 12%,所以超過 98% 的接觸被漏掉。
開發者發現,藍牙使用的限制讓這類 app 對 Android 手機很難寫、對 iPhone 基本上不可能。當他們要求更好的存取權時,Google 與 Apple 拒絕了,理由是「若所有 app 都能做藍牙接觸追蹤,會對其客戶構成隱私風險」。
這導致對 Google(尤其是 Apple)的批評:它們做了本該由民選政治人物做的政策決定。
跨界議題:寫得爛的 app#
有一個問題是許多 app 開發者根本沒想清楚的——撤銷。
事實上,在協助設計一個支付 app 時,他們花了大約一半的安全工程時間,詳細研究如何應付被偷的手機:當來自不同利害關係人的警示進來時付款要如何快速封鎖、犯罪受害者隔天走進店裡買了新手機會怎樣、你要倚賴手機店去認證他們還是要他們打給銀行的承包商、你要如何應付有自家備份與救回服務的手機原廠——一大堆令人麻木的細節。
那就是真正的工程:與你的供應鏈合作,並把客戶體驗與可能的濫用情境都想清楚。
設計拙劣的 app 能暴露其他系統,包括安全關鍵的系統。
小結#
起初系統根本沒受保護,逃避收費與重導通話都很容易。採用來防止這點的機制——頻外信令——被證明不足,因為系統快速增長的複雜度開啟了多得多的漏洞。這些漏洞從對使用者的社交工程攻擊,到 PBX 這類終端設備的拙劣設計與管理,再到各種難以預測之功能互動的利用。主要的顛覆力量是付費加值服務的發展,它讓人們能偷到真正的錢。
其工程師聚焦於通訊安全威脅而非電腦安全威脅,並以犧牲客戶利益的方式聚焦於電話公司的利益。 他們的努力不是全然徒勞,但已導向一個極其複雜、且成為重大政治角力(尤其是 5G 基礎設施的控制權)主題的全球生態系。
Android 生態系吸引了數十萬名開發者,從把 app 建成大型國際企業的 Uber,到許多既有企業提供的 app 與大量專門工具,再到相當可觀的犯罪邊緣。Apple 生態系管制較嚴,但在若干方面類似。
兩個生態系中許多看似無害的 app 都能被以有趣的方式濫用,而它們所用的廣告網路是對隱私無所不在的威脅。
而由於多數 Android 手機沒有被修補到最新、因而不安全,真正吃重的工作不是在技術性平台安全的層次做的,而是在生態系的層次。
研究問題#
行動性正延伸到各種其他裝置,從你的手錶到你的車,而許多圍繞 app 生態系的議題正在智慧音箱與其他家用裝置上浮現。
考慮到這些新興生態系的龐大規模,我們會需要創新的方式來自動化「獵捕威脅與漏洞」。 一種取徑是建蜜罐並尋找攻擊流量;較前進的防禦或許是分析用來控制 IoT 裝置的伴隨 app,並從中推斷漏洞。