付影平 馬 龍
(1.西安郵電大學信息中心,陜西 西安 710061;2.西安郵電大學計算機學院,陜西 西安 710061)
隨著移動通信網絡技術的高速發展及移動互聯網的普及,智能手機做為一種便捷的上網設備已被廣泛接受。據IDC2014年1月份數據報告,在過去的一年里,智能手機的全球出貨量突破10 億,Android 智能手機的份額更是占到了78.6%[1]。目前,針對的手機的騷擾電話、短信,病毒的侵襲等問題,國內外有一些解決的辦法[2]。但對于手機廠商或者運營商等的定制軟件的無端啟動連接則沒有很好的辦法解決。本文分析了手機防火墻的主要工作模式,基于開源軟件Netfilter 框架提出了一種能綜合解決問題的方案。
手機防火墻的主要功能包括:通信攔截(騷擾電話短信),聯網過濾、權限管理三個方面。
與系統的交互主要包括:設置通訊黑名單,設置攔截關鍵字,在軟件權限分級結果上進行添加信任操作,在風險應用啟動是彈框提示時進行確認操作和設置禁用聯網程序列表。
目前,Android 網絡防火墻是存在其他多種實現方式的,包括了應用層的敏感函數hook、框架層的INTERNET 權限,以及基于Netfilter框架的Android 防火墻。他們的主要工作模式和優缺點,序號1:工作位置:Android 應用層:敏感函數hook;工作原理:通過調用Android Framework 來實現網絡通訊的,所以遍歷對這些類中的所有函數然后把它們一個一個的全部鉤起來,這樣就可以起到防火墻所需的作用;主要方式:使用對每一個應用本身進行修改的方式加入Hook 代碼,之后再通過進程注入的方式將Client 代碼再一次寫進每個應用的進程中。當進程存在網絡活動時,應用進程會發起IPC 請求到Server 進程并由Server 進程決定是否對其放行;優缺點:優勢就體現在無需root也可實現控制不能做到對所有的網絡訪問入口的攔截對騷擾短信電話攔截需另外開發。序號2:工作位置:Android 框架層:android.permission.INTERNET 權限;工作原理:在Android 操作系統中,任何應用都必須申請android.permission.INTERNET 權限后才能訪問網絡。當Zygote 服務fork()到一個AndroidManifest.xml 中存在該權限的應用時,會將其加入到inet 組中;主要方式:其一是變更應用的AndroidManifest.xml 文件來去除對應的權限,其二就是重寫Zygote 進程阻止其在對說明文件偵測后將inet 加入應用的gid 組中;優缺點:實現起來不算復雜。
對于一個被設置過的gid 組,程序不再擁有修改的權限,雖然能從根本上實現對應用的上網權限禁止,但想再次獲得上網權限就必須使用Zygote 服務再一次生成對短信電話的攔截需另外開發。序號3:工作位置:Linux 內核層:Netfilter/iptables:工作原理:Android 操作系統采用的是Linux 內核,而在Linux 內核中,Netfilter 在TCP/IP 的協議棧中加入了相應的Hook,我們使用這些鏈鉤子來過濾或者丟棄指定的數據包:主要方式:要利用Linux 為我們提供的另一個工具iptables 來簡化這一步驟:優缺點:不需要進程注入,又能對Wifi 和3G 網絡區分控制。
但需要取得root 權限。
安卓智能手機系統是基于Linux 操作系統的實現。Netfilter 是由Rusty Russell 提出的內核防火墻框架,該框架分為用戶層和內核層部分,在用戶層的iptables 的作用就是創建出鏈表規則,完成這些包過濾任務的還是位于內核底層的Netfilter 以及相關的一些其它模塊。這個機構既簡潔又靈活,可實現安全策略應用中的許多功能。
對于一個Linux 自帶的防火墻來說,Netfilter 模塊中存放著各種表,每個表中又存在著不同的鏈,每個鏈中定義著各式的規則,而iptables 需要做的就是控制這些規則的增加、刪除、修改等操作,從而達成對網絡數據包的控制。
利用Netfilter 實現網絡防火墻比較簡單,只需要簡單的配置好安卓的開發環境,安裝好Netfilter 代碼,建立項目結構,然后以面向對象的方式調用Netfilter 所帶iptable 命令并進行防火墻的搭建就行了。

圖1 項目結構
在Broadcast.java 中重寫了onReceive 方法,這樣做可以在啟動時就直接調用已經定義好的iptables 規則。

圖2 重寫onReceive 方法
MainActivity.java 的作用就是定義程序的界面,它繼承Activity類,所有的交互都在這個類中實現。

圖3 MainActivity.java

圖4 ScriptThread
Interface.java 在這個項目中承擔著對常量數據進行定義,配置生成iptables 腳本文件,生成App 信息等非常重要的工作,同時需要指出的是,SharePreference 是Android 中提供的一種用來存放簡單配置信息的數據類型,在這里正是使用的這種機制解決的iptables 規則存放問題。
Android 上的廣播存在著兩種不同的類型,一般情況下的廣播是異步的,這樣會被每一個接收者同時得到,這樣做是沒辦法實現攔截的,所以我們需要使用有序廣播的方式,提高優先級獲得廣播。此時對于需要攔截的情況,只要終止廣播就可以實現黑名單攔截。

圖5 類PhoneReceiver
自Android 正式進入4.0 時代以來,整個系統的長足進步是每個人都看在眼里的,但是作為一把雙刃劍的開源政策在為Android 拉攏來眾多人氣的同時,也必須為現在這種“碎片化”的狀況買單。
Netfilter 框架作為一種很好的開源防火墻的軟件實現,因為有了iptable 命令規則的配置使用而變得比較簡單了,是的我們可以按照自己的意愿來進行手機的防護,對手機安全不失為一種好的辦法。
[1]李剛.瘋狂Android 講義[M].2 版.電子工業出版社,2014,02,01.
[2]徐娟娟,李玲玲.基于Netfilter 的防火墻原理分析[J].安徽淮南:信息產業,2011.
[3]康海燕,陳然,苑曉姣,李清華.基于Android 防火墻日志系統的研究與實現[J].北京:北京信息科技大學學報,2012,8.
[4]張磊.基于系統的手機防火墻的設計與實現[J].應用研發,2013.
[5]張蘇穎.基于Android 系統的手機防火墻的設計及實現研究[J].信息與電腦,2012,12.