專利名稱:一種基于Android系統(tǒng)的安全防護方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機操作系統(tǒng),具體的說,是涉及一種基于Android系統(tǒng)的安全防護方法。
背景技術(shù):
Android移動操作系統(tǒng)是Google公司在2007年11月研發(fā)完成了基于Linux的移動操作系統(tǒng),它是ー個真正意義上的開放的移動設(shè)備開發(fā)平臺。正是由于其開源性,使得在第三方軟件開發(fā)商的門檻降低了很多,也使得Android從剛剛推出時就受到了很多開發(fā)者的關(guān)注。通過其特有的Dalvik虛擬機使得程序在手機上運行的效率更高。更是由于其免費與開源性,讓Android能夠不僅僅局限于手機上,而是更廣闊的平板電腦或者其他智能設(shè)備之上。所以Android的應(yīng)用與開發(fā)的前景無法限量。但是隨著用戶通過Android智能終端訪問網(wǎng)絡(luò)的需求日益増加,Android智能終端網(wǎng)絡(luò)通信的安全性也就成為智能終端安 全研究的首要任務(wù)。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提出一種基于Android系統(tǒng)的安全防護方法,有效防護基于Android系統(tǒng)的智能終端遠離外部網(wǎng)絡(luò)攻擊。本發(fā)明解決上述技術(shù)問題所采用的技術(shù)方案是一種基于Android系統(tǒng)的安全防護方法,包括以下步驟a.按照Android的Linux2. 6內(nèi)核編寫底層模塊,并預(yù)留接ロ共JNI函數(shù)調(diào)用;b.按照JNI的規(guī)范編寫JNI函數(shù),并且根據(jù)需要調(diào)用底層模塊的功能函數(shù)對其進行封裝;c.利用Android自帶的編譯器將其編譯成模塊形式;d.使用調(diào)試工具將編譯好的模塊加載到Android系統(tǒng)中;e.編寫前臺UI及用戶處理程序,并調(diào)用加載好的模塊所提供的接ロ。進ー步,步驟d中,使用Android自帶的調(diào)試工具adb將編譯好的模塊加載到Android系統(tǒng)中。進ー步,步驟e中,按照Android SDK的規(guī)范編寫前臺UI及用戶處理程序。本發(fā)明的有益效果是通過對Android底層組件開發(fā)與底層數(shù)據(jù)包控制的研究,應(yīng)用基于多叉樹規(guī)則檢測算法,實現(xiàn)了一個底層包過濾的安全機制,從而有效防護了基于Android系統(tǒng)的智能終端遠離外部網(wǎng)絡(luò)攻擊。
圖I為Android底層開發(fā)與架構(gòu)示意圖;圖2為本發(fā)明的Android底層組件開發(fā)流程圖;圖3為初始多叉樹結(jié)構(gòu)示意圖4為經(jīng)過簡化后的多叉樹結(jié)構(gòu)示意圖。
具體實施例方式下面結(jié)合附圖對本發(fā)明的技術(shù)方案作進ー步的描述。本發(fā)明基于Android移動操作系統(tǒng)和智能終端網(wǎng)絡(luò)通信安全的研究,結(jié)合傳統(tǒng)防火墻解決方案提出了該平臺下的網(wǎng)絡(luò)防火墻設(shè)計模型。并提出了一個底層包過濾的安全機制,該安全機制的實現(xiàn)基本流程如下一、android框架結(jié)構(gòu),網(wǎng)絡(luò)數(shù)據(jù)包,以及數(shù)據(jù)過濾算法研究I、Android的系統(tǒng)架構(gòu)Android操作系統(tǒng)從頂至下共包含以下四個層次應(yīng)用層,應(yīng)用框架層,組件庫層和虛擬機,Linux內(nèi)核層。在應(yīng)用層An droid包含 了一套核心應(yīng)用(coreapplications) :Email客戶端、SMS (短信)序、日歷、G oogle地圖、網(wǎng)頁瀏覽器、聯(lián)系簿等等。所有的應(yīng)用均使用JAVA語言開發(fā)。在應(yīng)用框架層在開發(fā)者通過使用核心的應(yīng)用程序調(diào)用Android框架提供的API。這個應(yīng)用程序結(jié)構(gòu)被設(shè)計成方便復(fù)用的組件。任何的應(yīng)用程序都可以公布它的功能,而任何其他的應(yīng)用程序都可以使用這些功能(涉及到安全問題的功能將會被框架禁止)。在組件庫層=Android包含了ー套C/C++函數(shù)庫,供Andro i d系統(tǒng)使用。開發(fā)者可以通過Andro i d應(yīng)用程序框架使用這些庫函數(shù)提供的功能。另外還包含了ー套核心庫,這些庫提供了絕大多數(shù)JAVA編程語言核心庫的功能。每個Android應(yīng)用程序都運行于自己的進程中,具有自己的Dalvik虛擬機的實例,Dalvik使得設(shè)備可以高效地運行多個虛擬機,且針對手持設(shè)備的較小內(nèi)存做了優(yōu)化。2、Android底層組件的開發(fā)在應(yīng)用層可以說Android的提供的API已經(jīng)足夠的強大,可以提供大部分的功能支持。但是當開發(fā)者想要從事與底層硬件較為緊密的開發(fā)工作的時候就會遇到?jīng)]有相應(yīng)的API可以提供支持的尷尬。比如要進行防火墻的開發(fā),就一定會涉及到底層數(shù)據(jù)包的收發(fā)和過濾,但是由于上層接ロ出于安全性的考慮就沒有提供。這就給開發(fā)者帶來比較大的麻煩。所以在這種情況下我們就需要ー種方法用來直接獲取底層Linux接ロ,從而進行一些底層的開發(fā)。比如防火墻,或者是ー些設(shè)備驅(qū)動。而且本身Androi d的組件庫就是用C/C++編寫的,并且ー些底層與本地硬件交互的功能就是通過JNI實現(xiàn)的。所以這種方式并不違背Android的整個架構(gòu)。附圖I為Android底層開發(fā)與架構(gòu)示意圖。3、Android底層組件的開發(fā)步驟參見圖2, Android底層組件的開發(fā)步驟如下⑴按照Android的Linux2. 6內(nèi)核編寫底層模塊,并預(yù)留接ロ共JNI函數(shù)調(diào)用。(2)按照JNI的規(guī)范編寫JNI函數(shù),并且根據(jù)需要調(diào)用底層模塊的功能函數(shù)對其進行封裝。(3)利用Android自帶的編譯器將其編譯成模塊O. so)形式。(4)使用Android自帶的調(diào)試工具adb將編譯好的模塊加載到Android手機或模擬器中。(5)按照Android SDK的規(guī)范編寫前臺Π及用戶處理程序,并調(diào)用加載好的模塊(IoadLibraryO)所提供的接ロ。4、Linux基本網(wǎng)絡(luò)數(shù)據(jù)包結(jié)構(gòu)skbuff因為Linux中,所有數(shù)據(jù)的接受和發(fā)送都要建立ー個skbuff結(jié)構(gòu)來包含數(shù)據(jù),自然就要通過skbuff結(jié)構(gòu)來讀取Linux網(wǎng)絡(luò)中的數(shù)據(jù)包。在Linux內(nèi)核2. 6. 24之后,skbbuff結(jié)構(gòu)也有了許多微妙的改變。其中主要有,増加了三個數(shù)據(jù)結(jié)構(gòu)使得我們可以比以前更加方便地訪問網(wǎng)絡(luò)各層的報文頭。sk_buff_data_t transport_header;//讀取傳輸層的報文頭sk_buff_data_t network_header;//讀取網(wǎng)絡(luò)層的報文頭sk_buff_data_t mac_header;//讀取 MAC 層的報文頭通過這三個結(jié)構(gòu),我們現(xiàn)在比以前更加方便地獲取各層的頭部指針,從而通過指針的偏移取得相應(yīng)的重要信息,包括源I P地址和端口號等等。從而根據(jù)已有的規(guī)則表來進行遍歷從而決定這個數(shù)據(jù)包是接受還是舍棄。5、基于多叉樹的防護墻規(guī)則檢測算法 這里由于智能手機的資源有限性,使得在普通P C上的防火墻所采用的Netfilter結(jié)構(gòu)在Android上的應(yīng)用會顯得效率不高而且代價太高。所以在這里我們采用基于FDD法的防火墻規(guī)則遍歷檢測方法。舉例來說,I是防火墻收到數(shù)據(jù)包的端ロ ;S是數(shù)據(jù)包的源地址;D是數(shù)據(jù)包的目標地址;P是數(shù)據(jù)包的傳輸協(xié)議類型。下面是ー組已有的原始規(guī)則I=O Λ S=any Λ D=s Λ P=tcp Λ T=25 — a,I=O Λ S=any Λ D=s Λ P=any Λ T=any — d,I=O Λ S=m Λ D=any Λ P=any Λ T=any — d,I=I Λ S=h Λ D=any Λ P=any Λ T=any — a,I=I Λ S=any Λ D=any Λ P=any Λ T=any — a我們可以發(fā)現(xiàn)規(guī)則之間有沖突與冗余,所以我們這里引入多叉樹來解決規(guī)則沖突問題,以期盡量消除沖突問題從而實現(xiàn)精簡規(guī)則。先根據(jù)初始的規(guī)則集建立多叉樹,如附圖3所示。然后我們可以發(fā)現(xiàn)在第二層的Fl有節(jié)點冗余,進行進一步刪減,如圖4所示。從而我們得到相對精簡得多的多叉樹圖。而且由于多叉樹的特點,事實上現(xiàn)在根據(jù)樹來建立的規(guī)則集不可能存在沖突。當防火墻收到ー個數(shù)據(jù)包時,通過對其s k b u f f結(jié)構(gòu)的解析,分離出相應(yīng)的端口號,源地址,目的地址等等需要的信息。再從根部開始深度優(yōu)先遍歷我們剛剛建立的無沖突多叉樹,遍歷到一枝的葉子,從而得到處理這個數(shù)據(jù)包的采取動作結(jié)果即接受還是丟棄(a或者d)。ニ、基于android系統(tǒng)的安全機制的具體實現(xiàn)步驟I、底層包過濾模塊的實現(xiàn)(I)驅(qū)動設(shè)備的注冊if ((major=register_chrdev(LWFW_MAJ0R)LWFW_NAME&lwfw_fops))<0) {printk("AndFirewall:Module installationaborted. \n");return major;}Η確保設(shè)備正在使用的位被清空
lwfw—ctrl_in—use"=lwfw—ctrl_in—use;printk(^XnAndFirewall:Control device successfullyregi stered. \n");//注冊網(wǎng)絡(luò)鉤子結(jié)構(gòu)nfkiller. hook=lwfw_hookfn;nfkiller. hooknum=0; // 第一層鉤子nfkiller. pf=PF—INET;//面向 IPV4nfki ller. priority=NF_IP_PRI_FIRST; // 優(yōu)先 運行鉤子函數(shù)//具體注冊nf—register—hook(&nfkiller);(2)取得TCP的報文頭struct tcphdr*thead;//定義ー個 TCP 報文頭struct iphdr*iph;//定義ー個 IP 報文頭iph= (struct iphdr*)skb—network—header(skb);//取得網(wǎng)絡(luò)層指針if (! skb)return NF—ACCEPT;if (! iph)return NF—ACCEPT;//確保這是ー個TCP數(shù)據(jù)包if(iph->protocol!=IPPR0T0—TCP){return NF—ACCEPT;}//從網(wǎng)絡(luò)層包頭偏移skb的數(shù)據(jù)大小加上適當?shù)钠屏縯head= (struct tcphdr*)(skb_>data+(iph_>ihl*4));//檢查端口號if ((thead->dest) = =deny—port) {lwfw—statistics, total—dropped++;lwfw—statistics, tcp—dropped++;//確認舍棄return NF—DROP;}2、利用JNI函數(shù)進行封裝上述防火墻代碼主要在核心態(tài)下運行,而我們用戶使用的話必須在用戶態(tài)調(diào)用相應(yīng)的系統(tǒng)調(diào)用才能使用。但是由于Android平臺上層UI只能通過JNI才能與底層模塊交互。所以必須將系統(tǒng)調(diào)用用JNI進行封裝。3、編寫Android的make文件進行編譯在編寫完上述代碼之后,將代碼放置在Android源代碼的development目錄之下新建的MyFireWall目錄下,并按照Android的m a k e文件的規(guī)范,編寫Android, mk,最后通過編譯后成為liband. so模塊文件。4、加載模塊入Android系統(tǒng)將liband. so 模塊利用 Android 特有的 adb (AndroidDebugBridge)調(diào)試工具,將模塊加載到系統(tǒng)之中。這時,在運行我們編寫完的應(yīng)用層Android程序,就能使用該防火墻相應(yīng)的功能了。通過對于Android底層組件開發(fā)與底層數(shù)據(jù)包控制的研究,應(yīng)用基于多叉樹規(guī)則檢測算法,實現(xiàn)了一個底層包過濾防火墻,從而有效防護了 Android手機遠離外部網(wǎng)絡(luò)攻 擊。而Android本身的安全機制相結(jié)合,研究出適合Android安全模型則是我們進ー步研究的方向。
權(quán)利要求
1.一種基于Android系統(tǒng)的安全防護方法,其特征在于,包括以下步驟 a.按照Android的Linux2.6內(nèi)核編寫底層模塊,并預(yù)留接ロ共JNI函數(shù)調(diào)用; b.按照JNI的規(guī)范編寫JNI函數(shù),并且根據(jù)需要調(diào)用底層模塊的功能函數(shù)對其進行封裝; c.利用Android自帶的編譯器將其編譯成模塊形式; d.使用調(diào)試工具將編譯好的模塊加載到Android系統(tǒng)中; e.編寫前臺UI及用戶處理程序,并調(diào)用加載好的模塊所提供的接ロ。
2.如權(quán)利要求I所述的ー種基于Android系統(tǒng)的安全防護方法,其特征在于,步驟d中,使用Android自帶的調(diào)試工具adb將編譯好的模塊加載到Android系統(tǒng)中。
3.如權(quán)利要求I或2所述的ー種基于Android系統(tǒng)的安全防護方法,其特征在干,步驟e中,按照Android SDK的規(guī)范編寫前臺UI及用戶處理程序。
全文摘要
本發(fā)明涉及計算機操作系統(tǒng),其公開了一種基于Android系統(tǒng)的安全防護方法,有效防護基于Android系統(tǒng)的移動終端遠離外部網(wǎng)絡(luò)攻擊。該方法具體包括a.按照Android的Linux2.6內(nèi)核編寫底層模塊,并預(yù)留接口共JNI函數(shù)調(diào)用;b.按照JNI的規(guī)范編寫JNI函數(shù),并且根據(jù)需要調(diào)用底層模塊的功能函數(shù)對其進行封裝;c.利用Android自帶的編譯器將其編譯成模塊形式;d.使用調(diào)試工具將編譯好的模塊加載到Android系統(tǒng)中;e.編寫前臺UI及用戶處理程序,并調(diào)用加載好的模塊所提供的接口。本發(fā)明適用于對基于Android系統(tǒng)的移動終端上的安全防護。
文檔編號G06F21/55GK102867142SQ20121029958
公開日2013年1月9日 申請日期2012年8月22日 優(yōu)先權(quán)日2012年8月22日
發(fā)明者岳高強 申請人:四川長虹電器股份有限公司