《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 其他 > 業(yè)界動(dòng)態(tài) > 基于Internet的Java安全性分析

基于Internet的Java安全性分析

2008-12-19
作者:何海龍 王精業(yè)

0 引言?

??? 隨著Internet的迅猛發(fā)展,世界正進(jìn)入以計(jì)算機(jī)互聯(lián)網(wǎng)絡(luò)為中心的計(jì)算時(shí)代。要使用計(jì)算機(jī)就必然會(huì)同時(shí)用到網(wǎng)絡(luò),不會(huì)使用網(wǎng)絡(luò)就等于不會(huì)使用計(jì)算機(jī)。Sun公司1995年推出的Java技術(shù)適應(yīng)了網(wǎng)絡(luò)新時(shí)代的需求。Java語(yǔ)言具有簡(jiǎn)單,獨(dú)立于平臺(tái),面向?qū)ο?,分布式,安全性,可移植性,?dòng)態(tài)性,多線(xiàn)程等特點(diǎn)。Java的設(shè)計(jì)思想是最大限度地利用網(wǎng)絡(luò),它提供的代碼可移植性和平臺(tái)無(wú)關(guān)性,使網(wǎng)絡(luò)交換的不僅是信息,還可以是程序?qū)嶓w。在Web網(wǎng)頁(yè)中可以嵌入Java可執(zhí)行程序,給互聯(lián)網(wǎng)增添了多姿的色彩。但惡意的Applet,也能非法侵入,服務(wù)攻擊,竊取保密性數(shù)據(jù),因此有必要對(duì)Java的安全性進(jìn)行探討。?

1 Java Applet的危害性?

??? WWW萬(wàn)維網(wǎng)技術(shù),伴隨著網(wǎng)絡(luò)技術(shù)的飛速發(fā)展而日新月異。Java技術(shù)也應(yīng)運(yùn)而生,可以說(shuō)WWW是網(wǎng)絡(luò)計(jì)算體系結(jié)構(gòu)演變的必然結(jié)果。個(gè)人PC在某種意義上,可以是基于Java技術(shù)的一種面向網(wǎng)絡(luò)的,可運(yùn)行Java程序的客戶(hù)機(jī)。Java的諸多優(yōu)秀特性使之成為個(gè)人PC的靈魂和強(qiáng)有力的武器。個(gè)人PC上的網(wǎng)絡(luò)瀏覽軟件實(shí)際上就是提供一個(gè)Java運(yùn)行環(huán)境。?

1.1 Java程序分類(lèi)?

??? Java是與平臺(tái)無(wú)關(guān)的編程語(yǔ)言,它允許在Web文檔中嵌入可執(zhí)行的內(nèi)容JavaApplet。當(dāng)客戶(hù)端的Web瀏覽器訪(fǎng)問(wèn)一個(gè)含有Applet的頁(yè)面時(shí),可執(zhí)行的程序(編譯過(guò)的Java字節(jié)碼)將通過(guò)瀏覽器下載到本地客戶(hù)機(jī)上,在支持Java的瀏覽器中的Java虛擬機(jī)這個(gè)解釋的環(huán)境內(nèi)執(zhí)行。?

??? 利用Java可以編寫(xiě)兩種程序,一種是獨(dú)立的、可執(zhí)行的程序,稱(chēng)為Java應(yīng)用程序" title="應(yīng)用程序">應(yīng)用程序(Application),它有一個(gè)main()方法,可以從命令行運(yùn)行。另一種是嵌入到HTML網(wǎng)頁(yè)中的JavaApplet,即Java小程序,在瀏覽Web頁(yè)面時(shí),代碼被下載執(zhí)行?;贘ava的Web瀏覽器必須在確保它們的客戶(hù)沒(méi)有受到不必要的安全性攻擊下才能允許小程序即Applet的執(zhí)行。?

1.2 Applet的危害和限制?

??? Java可執(zhí)行程序,在完成動(dòng)畫(huà)播放、交互操作、實(shí)時(shí)計(jì)算等各種功能的同時(shí),某些惡意的Applet可能破壞客戶(hù)機(jī)文件系統(tǒng)的信息,占用系統(tǒng)運(yùn)行所需的資源(如內(nèi)存),泄露用戶(hù)的私有信息,或者以運(yùn)行所在的客戶(hù)機(jī)為跳板,攻擊其它局域網(wǎng)內(nèi)的其它操作系統(tǒng)。?

??? 由于個(gè)人PC的主板、硬盤(pán)上存有用戶(hù)的數(shù)據(jù)信息和程序,Applet可能會(huì)造成的巨大的危害。嚴(yán)重的如修改Cmos或者硬盤(pán)引導(dǎo)區(qū)數(shù)據(jù),將會(huì)對(duì)PC造成不可恢復(fù)的破壞。輕則如占用系統(tǒng)內(nèi)存,導(dǎo)致內(nèi)存用光而死機(jī),重則竊取用戶(hù)個(gè)人信息。因此,仍然有必要對(duì)Applet的運(yùn)行進(jìn)行限制以保證可靠的安全性。?

2 瀏覽器安全性機(jī)制?

??? 瀏覽器是Applet的安全性的底層,它的安全性依賴(lài)于Java語(yǔ)言的設(shè)計(jì)所提供的相關(guān)聯(lián)的三層安全機(jī)制" title="安全機(jī)制">安全機(jī)制,以及上層瀏覽器自身對(duì)Applet訪(fǎng)問(wèn)能力控制。?

2.1 瀏覽器安全管理器" title="安全管理器">安全管理器機(jī)制?

??? 瀏覽器中的安全性訪(fǎng)問(wèn)控制是通過(guò)安全管理器SecurityManager機(jī)制實(shí)現(xiàn)的,安全管理器可以有選擇地通過(guò)限制小程序的敏感操作來(lái)實(shí)施不同的安全性策略。?

??? 安全管理器的工作由一個(gè)類(lèi)來(lái)完成,這個(gè)類(lèi)是java.lang.securityManager類(lèi)的子類(lèi)。最初securityManager類(lèi)被設(shè)計(jì)成抽象的,沒(méi)有實(shí)現(xiàn),而留給應(yīng)用程序?qū)崿F(xiàn)。應(yīng)用程序需要編寫(xiě)自己的安全管理器類(lèi),這個(gè)類(lèi)繼承java.lang.securityManager??? 類(lèi),根據(jù)安全策略實(shí)現(xiàn)securityManager類(lèi)中的抽象方法。?

??? SecurityManager類(lèi)中執(zhí)行安全檢查" title="安全檢查">安全檢查的方法如表1,它們覆蓋了對(duì)系統(tǒng)各種資源的訪(fǎng)問(wèn)控制和對(duì)網(wǎng)絡(luò)連接" title="網(wǎng)絡(luò)連接">網(wǎng)絡(luò)連接的控制。?

表1 SecurityManager類(lèi)進(jìn)行安全檢查的方法?

操作對(duì)象?

驗(yàn)證方法?

Sockets?

CheckAccept(string host,int port)?

CheckConnect(string host,int port)?

CheckConnect(string host,int port,Object executionContext)?

CheckListen (int port)?

Threads?

CheckAccept(Thread thread)?

CheckAccept(ThreadGroup threadgroup)?

Class loader?

ChectCreatClassloader()?

System commands?

CheckExec(string command) ?

…?

…?

2.2 安全管理器的實(shí)現(xiàn)方法?

??? 瀏覽器作為應(yīng)用程序?qū)崿F(xiàn)了自己的安全管理器后,就可以安裝和使用這個(gè)安全管理器。一般在瀏覽器啟動(dòng)時(shí)安裝,通過(guò)調(diào)用System.setsectyManager(new browsersecurityManager)來(lái)安裝瀏覽器并進(jìn)一步實(shí)現(xiàn)安全管理器browsersecurityManager。安全管理器在瀏覽器運(yùn)行期間不能被修改和覆蓋。?

??? 安裝了安全管理器之后,瀏覽器執(zhí)行的操作就要受到安全管理器的檢查。當(dāng)Java類(lèi)庫(kù)中各種方法執(zhí)行某些敏感操作前,將調(diào)用上述這些以Check作為名字開(kāi)頭的方法。如:?

SecurityManager security=System.getsecurityManager();?

If(security?。絥ull)?

{Security.checkXXX(argument,……);}?

??? 如果該操作被允許,這些方法正常返回;若操作不被允許,就拋出安全性異常SecurityException。?

??? SecurityManager類(lèi)中還提供了一些非抽象的方法可以從虛擬機(jī)中得到當(dāng)前方法的信息。這些信息可為我們實(shí)現(xiàn)不同的安全策略提供判斷的依據(jù)。在實(shí)現(xiàn)安全檢查方法時(shí),安全性策略可以基于代碼來(lái)進(jìn)行動(dòng)態(tài)調(diào)整。Socket類(lèi)提供了這樣的例子。? Socket類(lèi)實(shí)現(xiàn)安全性策略可以動(dòng)態(tài)調(diào)整以反映對(duì)調(diào)用它的代碼的可信任性,以及調(diào)用調(diào)用者的代碼的可信任性,直到方法執(zhí)行鏈的開(kāi)始。?

3 java安全性機(jī)制分析?

3.1 Java語(yǔ)言規(guī)范說(shuō)明和編譯器?

??? 語(yǔ)言和編譯器組成了防護(hù)結(jié)構(gòu)的第一層,確保源代碼沒(méi)有違反安全規(guī)則。Java語(yǔ)言在設(shè)計(jì)時(shí),總結(jié)并限制了在C、C++中可能出現(xiàn)的不安全操作。Java不允許對(duì)內(nèi)存的直接訪(fǎng)問(wèn)。它對(duì)分配的對(duì)象采用引用而不是指針。Java不能對(duì)指針進(jìn)行數(shù)學(xué)操作,不能更改指針。Java中有真正的數(shù)組,對(duì)數(shù)組的訪(fǎng)問(wèn)遵循嚴(yán)格的邊界檢查。另外,編譯時(shí)進(jìn)行所有的類(lèi)型轉(zhuǎn)換以檢查其合法性。但這些限制只能保證惡意的攻擊不能躲過(guò)符合語(yǔ)言規(guī)范的編譯器的檢查。?

3.2 字節(jié)碼校驗(yàn)和類(lèi)裝載器?

??? 字節(jié)碼校驗(yàn)是第二安全層??尚湃蔚腏ava編譯器保證Java源代碼不違反安全規(guī)則。但惡意的攻擊者可能更改編譯器,產(chǎn)生非法字節(jié)碼。字節(jié)碼校驗(yàn)防止改造的編譯器產(chǎn)生的不符合安全規(guī)則的代碼,檢查字節(jié)碼格式的正確性。通過(guò)檢查,能保證以下屬性:沒(méi)有偽造指針;沒(méi)有違反訪(fǎng)問(wèn)限制;以對(duì)象的本來(lái)訪(fǎng)問(wèn)對(duì)象;使用正確類(lèi)型和數(shù)量的參數(shù)調(diào)用方法;沒(méi)有棧溢出。安全層之三是類(lèi)裝入器。類(lèi)裝入器是抽象類(lèi)java.fang.ClassLoader的子類(lèi)的實(shí)例。類(lèi)裝載器負(fù)責(zé)從網(wǎng)上下載Applet,確保類(lèi)在裝入時(shí)不違反名字空間和訪(fǎng)問(wèn)限制。運(yùn)行Java字節(jié)碼的線(xiàn)程可以被看成一個(gè)被分成幾個(gè)名字空間的類(lèi)的集合。?

3.3 瀏覽器環(huán)境對(duì)Applet增加的限制?

??? Java的安全理論模型整體非常嚴(yán)整,并且得到很好的實(shí)現(xiàn),沒(méi)有嚴(yán)重的概念性安全漏洞。但這種模式實(shí)現(xiàn)中的一些小錯(cuò)誤也使得Java安全系統(tǒng)上存在漏洞,惡意的小程序仍然可能在客戶(hù)系統(tǒng)上開(kāi)展攻擊性的任務(wù)。?

??? 為了防止下載小程序可能有的危害,瀏覽器環(huán)境需要對(duì)JavaApplet增加進(jìn)一步的限制。這是最后一層安全機(jī)制。瀏覽器中對(duì)小程序的限制依靠前三層提供的安全保證。瀏覽器可以實(shí)現(xiàn)不同的安全性策略,以控制從網(wǎng)絡(luò)上下載的APPLET訪(fǎng)問(wèn)本地系統(tǒng)關(guān)鍵資源的權(quán)限,以及控制能夠創(chuàng)建的網(wǎng)絡(luò)連接。這些限制可以防止Applet對(duì)系統(tǒng)資源的破壞和非法訪(fǎng)問(wèn)本地網(wǎng)絡(luò)上的其它主機(jī)。?

4 java安全模型的設(shè)計(jì)?

4.1 Java安全模式分析?

??? 針對(duì)瀏覽器及Java語(yǔ)言的安全性機(jī)制,主要的安全模式有以下三種?

??? (1)原始的沙盒模型?

??? 沙盒模型為從網(wǎng)上獲得的Java可執(zhí)行代碼的運(yùn)行提供一個(gè)嚴(yán)格受限的環(huán)境,它的本質(zhì)是本地代碼受到完全的信任,有完全的權(quán)限可以訪(fǎng)問(wèn)系統(tǒng)的關(guān)鍵資源。而從網(wǎng)上下載的代碼只能訪(fǎng)問(wèn)受限制的沙盒中的少數(shù)資源。?

??? (2)支持簽名Applet的沙盒安全模式?

??? 從Jdki1.l或兼容版本開(kāi)始提出簽名小程序“Signed Applet”的概念,經(jīng)過(guò)正確數(shù)字簽名的Applet被認(rèn)為是可信任的,和本地一樣對(duì)待,簽名Applet和它們的簽名通過(guò)JAR格式傳送,沒(méi)有簽名的Applet仍然和沙盒模型中一樣處理,而簽名Applet在瀏覽器中運(yùn)行。?

??? (3)新的安全模式?

??? 從JDKI.2或兼容版本開(kāi)始出現(xiàn)一種新的更加靈活的安全模式,在這種安全模式下,SecurityManager類(lèi)不再是一個(gè)抽象類(lèi),各個(gè)檢查方法CheckXX()都已經(jīng)實(shí)現(xiàn)。這些方法能夠根據(jù)一個(gè)安全策略配置文件,進(jìn)一步判斷Java對(duì)安全敏感的操作是否允許進(jìn)行。這些代碼在運(yùn)行時(shí)有不同的許可,并沒(méi)有內(nèi)置的信任代碼的概念。模型如圖1所示。?

?

4.2 實(shí)例設(shè)計(jì)與分析?

??? 根據(jù)瀏覽器的層次結(jié)構(gòu),以某網(wǎng)吧的代理服務(wù)器為例,對(duì)JavaApplet的安全性做如下設(shè)計(jì)。?

??? (1)瀏覽器設(shè)計(jì)?

??? 為了使界面更加美觀,瀏覽器用戶(hù)界面的設(shè)計(jì)主要采用了JFC Swing類(lèi)庫(kù)中的組件。JFC(Java Foundation Class)是Sun Microsystem公司的圖形用戶(hù)界面開(kāi)發(fā)包,Swing是其中的一個(gè)包,它包括基本組件,以及一個(gè)能使GUI(Graphical User Interfaces)獨(dú)立于特定平臺(tái)進(jìn)行顯示的框架。瀏覽器啟動(dòng)時(shí)安裝安全管理器,瀏覽器所執(zhí)行的操作就要受到安全管理器的檢查。?

??? (2)HTML文檔的獲取?

??? 當(dāng)應(yīng)用程序第一次創(chuàng)建某種協(xié)議的URL對(duì)象時(shí),運(yùn)行環(huán)境將為這種協(xié)議創(chuàng)建該協(xié)議的處理器。本例采用URLStreamHandlerFactory類(lèi)作為URL的流協(xié)議處理器工廠(chǎng),然后調(diào)用該實(shí)例的createURLstreamHandler(String Protocol)方法為特定的協(xié)議創(chuàng)建協(xié)議流處理器。?

??? (3)Web頁(yè)面的顯示?

??? 經(jīng)過(guò)HTML文檔的獲取工作,客戶(hù)瀏覽器從服務(wù)器得到一個(gè)包含HTML文檔的字符流。接著,瀏覽器可以對(duì)這個(gè)包含HTML文檔的字符流進(jìn)行分析處理,提取出需要處理的標(biāo)記,然后解釋這些標(biāo)記的涵義,并按照一定的格式在屏幕上瀏覽器窗口中顯示標(biāo)記的內(nèi)容。?

??? (4)JavaApplet小程序的運(yùn)行監(jiān)控?

??? 在瀏覽器運(yùn)行期問(wèn),用戶(hù)可以對(duì)其進(jìn)行監(jiān)視和控制,在這里面采用圖2所示新的安全模型,來(lái)實(shí)現(xiàn)不同的安全性策略,用以控制從網(wǎng)絡(luò)上下載的Applet訪(fǎng)問(wèn)本地系統(tǒng)關(guān)鍵資源的權(quán)限,以及控制能夠創(chuàng)建的網(wǎng)絡(luò)連接。在安全策略文件中,語(yǔ)言和編譯器確保源代碼沒(méi)有違反安全規(guī)則。字節(jié)碼校驗(yàn)防止改造的編譯器產(chǎn)生的不符合安全規(guī)則的代碼,使用安全策略配置文件,并進(jìn)一步判斷Java對(duì)安全敏感的操作是否允許進(jìn)行。安全策略配置文件可以根據(jù)不同的安全等級(jí)進(jìn)行不同的設(shè)置,以滿(mǎn)足不同用戶(hù)的安全需要。?

5 主要結(jié)論?

??? 由于Internet自身的開(kāi)放性和復(fù)雜性以及Java程序的可移植、分布等特點(diǎn),導(dǎo)致了其安全問(wèn)題的復(fù)雜性。本文通過(guò)對(duì)Java語(yǔ)言的類(lèi)安全機(jī)制及實(shí)例的分析,主要結(jié)論有:?

??? (1)瀏覽器能提供關(guān)于下載的Applet的可信任的信息。最簡(jiǎn)單的方法是系統(tǒng)檢查代碼的來(lái)源來(lái)判定它來(lái)自防火墻的內(nèi)部或外部。另一種復(fù)雜的方法是在代碼上加上公用密匙和密碼信息(簽名Applet),不僅能識(shí)別誰(shuí)寫(xiě)了代碼而且保證代碼的完整性。?

??? (2)應(yīng)用程序可以使用自己的安全策略文件。安全策略文件定義了來(lái)自不同地點(diǎn),不同簽名的代碼對(duì)特定資源的訪(fǎng)問(wèn)權(quán)限。這樣安全性控制可以變得非常靈活、簡(jiǎn)單。?

??? (3)瀏覽器作為應(yīng)用程序,其安全性取決于虛擬機(jī)采用的安全模式和類(lèi)庫(kù)中SecuntyManager類(lèi)的實(shí)現(xiàn)。這種編程方法對(duì)安全特別敏感,技術(shù)要求高,需要建立在對(duì)計(jì)算機(jī)安全性知識(shí)透徹了解的基礎(chǔ)之上,否則可能出現(xiàn)大的安全性漏洞。?

??? (4)虛擬機(jī)在應(yīng)用新的安全模式后,應(yīng)用程序所做的就是要配置安全策略文件。這種方法相對(duì)安全可靠。?

Java語(yǔ)言是面向?qū)ο蟮牡淖吭酱恚囊浦残允蛊淠軌蛴糜诓煌牟僮飨到y(tǒng)和平臺(tái),同時(shí)也對(duì)傳統(tǒng)的安全模型提出了挑戰(zhàn)。本文只做了相關(guān)安全性的探討,對(duì)于適應(yīng)計(jì)算機(jī)不同平臺(tái)的安全性和效率方面以及擴(kuò)展HTML標(biāo)記的處理能力,有待于進(jìn)一步的研究。?

參考文獻(xiàn)?

[1] 曾明,李建軍.Internet訪(fǎng)問(wèn)管理與代理服務(wù)器.北京:人民郵電出版社,2000?

[2] Strebe M,Perkins C,吳焱等譯.高效構(gòu)筑與管理防火墻.北京:電子工業(yè)出版社,2000?

[3] Levis M,Berg M,關(guān)欣譯.深入學(xué)習(xí):Java多線(xiàn)程編程.北京:電子工業(yè)出版社,2000?

[4] 劉波,王克.Java程序設(shè)計(jì).北京:清華大學(xué)出版社,1998?

[5] 王佑中.Web動(dòng)態(tài)技術(shù)入門(mén).北京:機(jī)械工業(yè)出版社,1997?

[6] 馬小軍,沈輝,季全芝.網(wǎng)絡(luò)程序設(shè)計(jì)與Java語(yǔ)言,2002?

The Analysis of Java Security Based on Internet?

HE Hai-long Wang Jing-Ye?

(Academy of Armored Force Engineering PLA, Command and Management Department, 100072, Beijing)?

Abstract: This paper’ aim is to solve the security problems that the application of java based on Internet brings. Banding together the security mechanism of the bottom of browser, the java applet’ security hiberarchy is analyzed, and three kinds of java security models are bring up. Then an example is analyzed. At last, the conclusion and prospect are given.?

Keywords: internet? java  security?

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話(huà)通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話(huà):010-82306118;郵箱:aet@chinaaet.com。