[S7換機紀錄] 前言、安全性、防火牆

這是我要講我如何跟S7這隻手機奮戰的第一篇文章。在開始講解決各種問題之前,你需要先知道幾件事情:

  1. 三星的手機一旦root直接破保
     - 三星的保固有許多案例明確表示只要手機root就直接破保,且三星的Knox有個保固位元,一旦root該位元便會自動從0X0轉為0X1(原廠稱為燒熔)而且無法恢復,也因此基本上你無法先unlock後relock又絲毫不留痕跡。雖然XDA上是有人提出不會破壞Knox保固位元的root方法,但一方面只看到支援S6,一方面畢竟不像HTC有官方的解鎖流程,用起來實在是怕怕的,還是打消了這個念頭。由於有這麼麻煩的限制,加上我還是希望可以保留手機的保固,因此之後解決問題的方法都基於不需root的狀態處理。
    順帶一提,如果你破壞了Knox保固位元,那麼Samsung Pay也會因此而無法使用。
  2. 過程中用到的手機使用介面以英文為主
     - 為了方便搜尋相關資訊,我將我的手機介面改為英文。也因此,絕大多數在文章中提到的各種設定都是以英文為主喔。
  3. 請不要說出「用隻手機有需要搞成這樣嗎?」
     - 就是因為我希望我使用的裝置都可以順順利利地完成我想做的事情,因此我很不喜歡在這些事情上妥協。除非真的想盡一切的辦法,最後發現要達成我的目的所要花的代價太大,我才會心不甘情不願地說「好吧」。所以如果你是會說出「用隻手機有需要搞成這樣嗎?」的人,我建議你就別再繼續看下去了,因為我在做的都是會讓你說出這句話的事情。
  4. Android是一種Linux系統
     - 所以有蠻多東西我在搜尋資料的時候會看到很多Linux相關的用法。我並不熟悉Linux,但為了Android我因此學會了一些Linux相關的事情。也因為這樣,假如我在文章中提到Linux的話請不要覺得奇怪,其實也是給Android用的東西就是了。
  5. 需要穩定在背景運作的App請加入電源管理的例外清單
     - 由於三星不按照牌理出牌的寫法,如果你需要App可以穩定地在背景運作的話,除了Android系統標準的設定,也就是Apps -> 右上三點選單 -> Special access -> Optimize battery usage將App從All apps中關閉開關(意思是不對該App做電池最佳化)以外,你還需要在Device Maintenance -> Battery將App加入Unmonitored apps中。這篇會提到的防火牆就屬於這種應該要在背景穩定運作的App。

手機的安全性近來有越來越重要的趨勢,畢竟所有的金融機構都在搶進Fintech領域,實體的金錢正漸漸轉換為虛擬的數字(想起來是也有點可怕就是了),交易用的裝置的安全性越來越受到重視也就不奇怪了。

關於手機的安全性這件事情有很多可以討論的面向,要認真討論起來還要戰系統(iOS vs Android)或是戰root或不root。這些討論都蠻有趣的,但這裡我們只討論一件事情:防火牆。

Android自從進入6.0 Marshmallow後多了一個非常重要的功能,也就是應用程式權限控制功能App permissions。雖然App開發者還是可以決定以舊方式處理App permissions,也就是所需要的權限全開,但使用者依然可以手動到應用程式管理頁面去把不想給予的權限關閉。對於新的App來說,應該都會遵守這個Policy,在用到App內某個需要權限的功能時才向使用者要求權限。然而無論是何者,App都還是有可能在不給予權限的情況下無法執行部分功能,甚至是完全無法開啟。的確有些App非常好用,但又很流氓的要求你給它超多權限才能正常運作,假如你不信任它的話(比方說非Google或是手機原廠的App),要安全地使用它最可行的作法大概就是讓它無法連上網路!畢竟沒有網路,想做什麼後門回傳難度都會非常地高。而要讓App沒有網路權限,同時你還是可以繼續上網的話,就需要來道防火牆。

沒錯!手機上是可以跟電腦一樣設定防火牆的。最理想的作法其實是像AFWall+這個App做的一樣,直接設定Android kernel中的iptables,這就是Linux系統本身有的防火牆。But!Android系統上,如果需要跟kernel有這種互動的話,就需要root權限,因此雖然我其實花錢買過AFWall+的Unlocker,但在新買的S7上也只能忍痛跟它說掰掰。除了透過AFWall+這種App以外,其實也有部份的Custom ROM有內建的網路權限管理功能,比如AOSP Based的LineageOS就可以在每一個App的Data Usage頁面設定App可否透過數據/Wi-Fi連線。由於類似LineageOS這種管理App網路權限的功能是系統內建的,因此可以不用root就使用。要刷Custom ROM雖然不一定要root,但至少還是需要unlock,而且無論如何,那該死的Knox保固位元還是會被燒毀,所以這也是一條行不通而且工程浩大的路。
LineageOS中內建可以管理App網路權限的功能

好吧,所以,這樣還有什麼可做的呢?答案就是設一個local的VPN。在AFWall+的GitHub頁面上有一篇Similar Firewall solutions解釋了所有Android上可行的防火牆方案,其中non-root方案直接明白地告訴你就是只有local VPN一條路可選擇 。而在各種local VPN中,又以NetGuard這個開源的App是我覺得最可以信任的。

NetGuard有些進階功能是需要付費購買的,但免費版本除了有廣告外(從2018 年5月的2.198版開始居然把廣告移除了!!!大家真的要透過小額購買一些進階功能支持開發者啊!),可以完整地達到防火牆正常運作的一切功能。NetGuard在預設的情況下是黑名單模式,也就是你不希望他可以連上網路的App才封鎖。不過我推薦將模式改為白名單模式,也就是所有的App在還沒設定前通通都是無法連上網的情況,只有經過你認可的App才可連上網。這樣有一個非常大的好處,就是即使你安裝了一個新的App,還不確定這App有沒有問題之前,這些新裝的App一開始都是被設定為拒絕網路連線的狀態,保障隱私安全的小漏洞。

雖然以local VPN作為防火牆的解決方案並不完美(請見Similar Firewall solutions中所說的缺點),但在無法root的情況下也至少是個折衷的方案就是了,在之後的App測試上也會比較放心。只不過,其實最根本的事情還是慎選安裝的App、絕對不要安裝來路不明的App,也要詳細檢視App本身要求的權限是否合理啊。

留言

這個網誌中的熱門文章

[S7換機紀錄] 如何減輕AMOLED傷害你的眼睛

在 M1 Macs 上安裝 h5py 及 pandas 的 HDF5 支援

MacBook Pro 2013-2015 更換 NVMe SSD 紀錄