2015年1月16日 星期五

AFWall+ : 阻止手機內賊上傳隱私個資的防火牆

AFWall+ 白名單設定 你的 android 手機上面安裝了一大堆 apps, 你可知道平時沒事他們是否把你的隱私個資偷偷上傳到不知名的可疑網站? 把 AFWall+ 防火牆裝起來檢查一下吧!

你需要 root 才能安裝 AFWall+。 對於在乎隱私與資訊安全的人而言, Root/刷機是一定要的啦; 至於那些沒有力氣或暫時無法承擔 root/刷機過程風險的讀者, 可以考慮請身旁高手用 android-x86 加 AFWall+ 幫忙測試你慣用的軟體是否偷偷上傳你的隱私個資。

f-droid 找到並安裝 AFWall+。 首先點一下螢幕上方位於 AFWall+ 之下的 「Mode」, 決定要用哪一種模式:

  1. 白名單模式: 只允許勾選的 apps 連線
  2. 黑名單模式: 除了勾選的 apps 要封鎖之外, 其餘全部放行

我採取比較嚴格的白名單模式。 然後點右上角選單進去啟用 AFWall, 手機馬上進入自閉模式: 瀏覽器不能上網、 手機無法 用 adb 跟電腦連線傳檔、 行事曆無法與伺服器同步、 ... 除了電話簡訊之外, 跟外面的世界完全斷開連結, 整個就是超安全的 ^_^ 注意: 若設定成白名單, 以後每次安裝新的 app, 卻無法使用, 都要記得想想是否因為網路被防火牆擋下來了!

開始勾選放行一些 apps。 最左欄是區網, 中間欄是一般無線上網, 最右欄是透過電信網路 2G/3G/4G 上網。 勾選完之後要從選單裡按 「apply」 新的防火牆設定才會生效。 注意: 其中有一個 「-12: Any Application」 不要勾選 -- 不論黑白名單, 如果勾了這項, 其他項目留空就沒意義了。 (謝謝 sean robot 提醒)

在 app 清單上方還有一列小工具。 最右邊的掃把可以清除 app 清單所有勾選的項目; 右邊第二個圖示是 invert (反轉), 可以 「把所有已勾選改成不勾; 把所有未勾選改成打勾」, 當你想從白名單模式轉成黑名單模式的時候 (或反之亦然) 這會很好用。

AFWall+ 開啟各種通知訊息 然後請點右上角選單, 進入 preferences 偏好設定。 我把所有的通知訊息都盡量打開, 以便得知哪些 apps 企圖連線。 不過很多訊息曇花一現, 可能會 miss 掉。 所以再找到 log preferences 日誌設定, 啟動記錄功能 (Enable Firewall Logs 跟 Turn on log service 都打勾) 把所有 「企圖連線被擋下來」 的 app 及對方 ip 都記錄下來。

現在開始亂用一下你的手機, 看看有什麼功能失效了。 再回頭檢查 AFWall+ 的 「Firewall logs」 看看有哪些 apps 想上網卻被擋住。 就這樣我慢慢地擴增白名單清單 -- 遇到連線失敗的 app 就檢查 logs。 有些 app 需要同時開放 kernel 的上網權限 (例如 adb) ; 有些 app 需要同時開放某些系統服務的上網權限 (例如行事曆需要 CalDAV sync adaptor、 下載檔案需要 Media Storage and Download Manager); 還有一些不是很明顯, 例如時鐘 app 隔一段時間需要透過 NTP 系統服務跟網路上的伺服器對時; 但如果沒有經常對時, 短時間內也看不太出來有什麼不良後果。

[2016/8/9 補充] 以後如果有哪些 app 怪怪的、 沒辦法連線, 要記得暫時取消防火牆再試一次。 例如我對大部分的 apps 都只開放 wifi; 少數開放數據上網。 但沒想到對於 無線傳檔的 primitive ftpd 則還需要開放 LAN。 此外, 不知為何我的數據上網經常處於「驚嘆號」的狀態, 大部分時候還是能上網, 但到了國外換當地 sim 卡, 或是從一個城市移動到另一個城市, 就無法上網。 此時只要關掉 afwall+、 重開機、 等一陣子讓數據上網變成正常的 LTE, 然後就可以再打開 afwall+。 雖然又會出現驚嘆號, 但照樣能上網。

因為貴哥的手機刷成 CyanogenMod、 沒有啟用 google 帳號、 幾乎 只從 f-droid 下載 apps, 所以手機幾乎沒什麼可疑活動。 唯一無法理解的是 log 檔裡面這一段:

 AppID : 1000
 Application's Name: Settings
 Total Packets Blocked: 1
 [TCP]61.219.131.217:80(1)

看到 app 名稱是 Settings, 原本以為是 CM 的開發者要統計用戶的設定資料; 但沒想到一查 IP, 竟是 中華電信。 先不管中華電信在蒐集用戶什麼資料, 它到底如何把這段程式碼植入 CM? 不論是透過 AOSP 開發團隊或是透過 CM 開發團隊 (還是 google 注音?) 都說不太通啊...

在 android-x86 裡面剛開機不久後的 AFWall+ log 檔 受到 養蠱 / 流氓軟體大對決 的啟發, 貴哥把廣受臺灣女性喜愛的 Camera360 放進 (已啟用 AFWall+ 的) android x86 模擬器 裡面, 看看它有多麼活躍。 一開機, 除了 AFWall+ 之外, 什麼 app 都還沒打開, 在 Firewall logs 裡面就看到 Google Account Manager、 Google Search、 YouTube 急著想連線。 好吧, 因為 android x86 是從 AOSP 改來的, 原始碼都攤在陽光下, 我就姑且假設 google 不會做太邪惡的事吧。

Camera 360 企圖跟許多奇怪的網站連線 可是在此同時, Camera360 竟然也開始傳送資料了...? 再把 Camera360 打開, 它更是盡情地跟一些中國網站互通款曲: 世纪互联湖北省網路中国移动网宿科技。 我連怎麼把電腦的相機分享給虛擬機裡的 android-x86 都還沒學會咧... (事實上我連 usb 網路相機都還沒接到電腦上) Camera360 就已經忙得不可開交了, 真是辛苦你啦!

如果搭配 wireshark, 就可以查看到底一個 app 上傳了哪些資料。 如果 app 上傳時採用 https, 那就要用 mitmproxy 來觀察。

其他還有哪些 「明明不需要上網卻被 AFWall+ 發現想要偷偷上網」 的 apps 呢? 它們想連到哪些 IP? 請留言分享, 或是貼上標題/摘要/網址指到您的部落格文章。 手機裡面有哪些內賊軟體? 讓我們一起把它們揪出來吧!

ps 1: 沒事上網的軟體有可能真的很邪惡; 但也有可能只是想送廣告給你而已。

ps 2: 順便公告一下: 已把 「手機」 的標籤通通改成 「android」 (除了這帖之外)

5 則留言:

  1. 貴哥你好,在上面的文章中你有寫到你的手機有刷機並只從F-droid下載app,但我想請問要是當你要找的app並沒有在F-droid上時你會怎麼做呢? (像是中文或一些日常必須的(例如Line)在F-droid上都沒有提供下載)

    回覆刪除
    回覆
    1. 沒在用一般的通訊軟體耶。 我用 chatsecure。 所以朋友很少, 也不太需要花時間聊天 :-) 我用的 apps 多半有原始碼, 所以理論上可以自行編譯。 不過我更常偷懶, 直接用 app 名稱加上 apk 去搜尋, 例如 「google 注音 apk」。 但採用別人編譯的 apk 會有風險, 請自行評估該網站是否可靠。 如果提供 apk 的網站不是官網, 甚至該 apk 原本是要付費的 (也就是提供下載的是盜版) 那就更要三思了: 他都不介意盜版了, 會不會也順便在 apk 裡幫你加料?

      刪除
  2. 最近我想說也要和貴哥你一樣把手機刷成有原始碼的第三方系統,但就一直在煩惱以後的app來源,畢竟已經換成有原始碼的系統了也就不太想繼續用Google Play,其他的app市場上的中文app又不多,看來唯一的路就如你所說的上網找apk了阿,但一方面有加料的問題,另一方面也不夠方便,可能這個網站和另一個網站提供的版本不一樣,我們還必須花時間比對哪個才是正確、最新的版本...看來還必須多多研究下這方面呢

    回覆刪除
  3. 貴哥我回來了!這幾個星期我成功把手機刷成CM了,並且關於app來源我最後選擇用一些Google Play APK Downloader網站來下載Play商店上的app,如此應該就能避免加料的問題了,只是後來又發現:有的app會使用一些Google服務的功能,因此在CM上就無法順利的運作,我的解決方法是同樣安裝Google Play,再用Xposed框架的XPrivacy模組來把Play的所有權限限制住,如此...應該就行了吧?雖然這就違背當初不碰Google的目標。

    回覆刪除