0 引言?
??? 隨著Internet的迅猛發(fā)展,,世界正進入以計算機互聯(lián)網(wǎng)絡為中心的計算時代,。要使用計算機就必然會同時用到網(wǎng)絡,不會使用網(wǎng)絡就等于不會使用計算機,。Sun公司1995年推出的Java技術(shù)適應了網(wǎng)絡新時代的需求,。Java語言具有簡單,,獨立于平臺,面向?qū)ο?,分布式,,安全性,可移植性,,動態(tài)性,,多線程等特點,。Java的設(shè)計思想是最大限度地利用網(wǎng)絡,它提供的代碼可移植性和平臺無關(guān)性,,使網(wǎng)絡交換的不僅是信息,,還可以是程序?qū)嶓w。在Web網(wǎng)頁中可以嵌入Java可執(zhí)行程序,,給互聯(lián)網(wǎng)增添了多姿的色彩,。但惡意的Applet,也能非法侵入,,服務攻擊,,竊取保密性數(shù)據(jù),因此有必要對Java的安全性進行探討,。?
1 Java Applet的危害性?
??? WWW萬維網(wǎng)技術(shù),,伴隨著網(wǎng)絡技術(shù)的飛速發(fā)展而日新月異。Java技術(shù)也應運而生,,可以說WWW是網(wǎng)絡計算體系結(jié)構(gòu)演變的必然結(jié)果,。個人PC在某種意義上,可以是基于Java技術(shù)的一種面向網(wǎng)絡的,,可運行Java程序的客戶機,。Java的諸多優(yōu)秀特性使之成為個人PC的靈魂和強有力的武器。個人PC上的網(wǎng)絡瀏覽軟件實際上就是提供一個Java運行環(huán)境,。?
1.1 Java程序分類?
??? Java是與平臺無關(guān)的編程語言,,它允許在Web文檔中嵌入可執(zhí)行的內(nèi)容JavaApplet。當客戶端的Web瀏覽器訪問一個含有Applet的頁面時,,可執(zhí)行的程序(編譯過的Java字節(jié)碼)將通過瀏覽器下載到本地客戶機上,,在支持Java的瀏覽器中的Java虛擬機這個解釋的環(huán)境內(nèi)執(zhí)行。?
??? 利用Java可以編寫兩種程序,,一種是獨立的,、可執(zhí)行的程序,稱為Java應用程序" title="應用程序">應用程序(Application),,它有一個main()方法,,可以從命令行運行。另一種是嵌入到HTML網(wǎng)頁中的JavaApplet,,即Java小程序,,在瀏覽Web頁面時,代碼被下載執(zhí)行,?;贘ava的Web瀏覽器必須在確保它們的客戶沒有受到不必要的安全性攻擊下才能允許小程序即Applet的執(zhí)行。?
1.2 Applet的危害和限制?
??? Java可執(zhí)行程序,在完成動畫播放,、交互操作,、實時計算等各種功能的同時,某些惡意的Applet可能破壞客戶機文件系統(tǒng)的信息,,占用系統(tǒng)運行所需的資源(如內(nèi)存),,泄露用戶的私有信息,或者以運行所在的客戶機為跳板,,攻擊其它局域網(wǎng)內(nèi)的其它操作系統(tǒng),。?
??? 由于個人PC的主板、硬盤上存有用戶的數(shù)據(jù)信息和程序,,Applet可能會造成的巨大的危害,。嚴重的如修改Cmos或者硬盤引導區(qū)數(shù)據(jù),將會對PC造成不可恢復的破壞,。輕則如占用系統(tǒng)內(nèi)存,,導致內(nèi)存用光而死機,重則竊取用戶個人信息,。因此,,仍然有必要對Applet的運行進行限制以保證可靠的安全性。?
2 瀏覽器安全性機制?
??? 瀏覽器是Applet的安全性的底層,,它的安全性依賴于Java語言的設(shè)計所提供的相關(guān)聯(lián)的三層安全機制" title="安全機制">安全機制,,以及上層瀏覽器自身對Applet訪問能力控制,。?
2.1 瀏覽器安全管理器" title="安全管理器">安全管理器機制?
??? 瀏覽器中的安全性訪問控制是通過安全管理器SecurityManager機制實現(xiàn)的,,安全管理器可以有選擇地通過限制小程序的敏感操作來實施不同的安全性策略。?
??? 安全管理器的工作由一個類來完成,,這個類是java.lang.securityManager類的子類,。最初securityManager類被設(shè)計成抽象的,沒有實現(xiàn),,而留給應用程序?qū)崿F(xiàn),。應用程序需要編寫自己的安全管理器類,這個類繼承java.lang.securityManager??? 類,,根據(jù)安全策略實現(xiàn)securityManager類中的抽象方法,。?
??? SecurityManager類中執(zhí)行安全檢查" title="安全檢查">安全檢查的方法如表1,它們覆蓋了對系統(tǒng)各種資源的訪問控制和對網(wǎng)絡連接" title="網(wǎng)絡連接">網(wǎng)絡連接的控制,。?
表1 SecurityManager類進行安全檢查的方法?
操作對象? |
驗證方法? |
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 安全管理器的實現(xiàn)方法?
??? 瀏覽器作為應用程序?qū)崿F(xiàn)了自己的安全管理器后,,就可以安裝和使用這個安全管理器。一般在瀏覽器啟動時安裝,,通過調(diào)用System.setsectyManager(new browsersecurityManager)來安裝瀏覽器并進一步實現(xiàn)安全管理器browsersecurityManager,。安全管理器在瀏覽器運行期間不能被修改和覆蓋。?
??? 安裝了安全管理器之后,瀏覽器執(zhí)行的操作就要受到安全管理器的檢查,。當Java類庫中各種方法執(zhí)行某些敏感操作前,,將調(diào)用上述這些以Check作為名字開頭的方法。如:?
SecurityManager security=System.getsecurityManager(),;?
If(security?。絥ull)?
{Security.checkXXX(argument,……);}?
??? 如果該操作被允許,,這些方法正常返回,;若操作不被允許,就拋出安全性異常SecurityException,。?
??? SecurityManager類中還提供了一些非抽象的方法可以從虛擬機中得到當前方法的信息,。這些信息可為我們實現(xiàn)不同的安全策略提供判斷的依據(jù)。在實現(xiàn)安全檢查方法時,,安全性策略可以基于代碼來進行動態(tài)調(diào)整,。Socket類提供了這樣的例子。? Socket類實現(xiàn)安全性策略可以動態(tài)調(diào)整以反映對調(diào)用它的代碼的可信任性,,以及調(diào)用調(diào)用者的代碼的可信任性,,直到方法執(zhí)行鏈的開始。?
3 java安全性機制分析?
3.1 Java語言規(guī)范說明和編譯器?
??? 語言和編譯器組成了防護結(jié)構(gòu)的第一層,,確保源代碼沒有違反安全規(guī)則,。Java語言在設(shè)計時,總結(jié)并限制了在C,、C++中可能出現(xiàn)的不安全操作,。Java不允許對內(nèi)存的直接訪問。它對分配的對象采用引用而不是指針,。Java不能對指針進行數(shù)學操作,,不能更改指針。Java中有真正的數(shù)組,,對數(shù)組的訪問遵循嚴格的邊界檢查,。另外,編譯時進行所有的類型轉(zhuǎn)換以檢查其合法性,。但這些限制只能保證惡意的攻擊不能躲過符合語言規(guī)范的編譯器的檢查,。?
3.2 字節(jié)碼校驗和類裝載器?
??? 字節(jié)碼校驗是第二安全層??尚湃蔚腏ava編譯器保證Java源代碼不違反安全規(guī)則,。但惡意的攻擊者可能更改編譯器,產(chǎn)生非法字節(jié)碼,。字節(jié)碼校驗防止改造的編譯器產(chǎn)生的不符合安全規(guī)則的代碼,,檢查字節(jié)碼格式的正確性,。通過檢查,能保證以下屬性:沒有偽造指針,;沒有違反訪問限制,;以對象的本來訪問對象;使用正確類型和數(shù)量的參數(shù)調(diào)用方法,;沒有棧溢出,。安全層之三是類裝入器。類裝入器是抽象類java.fang.ClassLoader的子類的實例,。類裝載器負責從網(wǎng)上下載Applet,,確保類在裝入時不違反名字空間和訪問限制。運行Java字節(jié)碼的線程可以被看成一個被分成幾個名字空間的類的集合,。?
3.3 瀏覽器環(huán)境對Applet增加的限制?
??? Java的安全理論模型整體非常嚴整,,并且得到很好的實現(xiàn),沒有嚴重的概念性安全漏洞,。但這種模式實現(xiàn)中的一些小錯誤也使得Java安全系統(tǒng)上存在漏洞,,惡意的小程序仍然可能在客戶系統(tǒng)上開展攻擊性的任務。?
??? 為了防止下載小程序可能有的危害,,瀏覽器環(huán)境需要對JavaApplet增加進一步的限制,。這是最后一層安全機制。瀏覽器中對小程序的限制依靠前三層提供的安全保證,。瀏覽器可以實現(xiàn)不同的安全性策略,,以控制從網(wǎng)絡上下載的APPLET訪問本地系統(tǒng)關(guān)鍵資源的權(quán)限,以及控制能夠創(chuàng)建的網(wǎng)絡連接,。這些限制可以防止Applet對系統(tǒng)資源的破壞和非法訪問本地網(wǎng)絡上的其它主機,。?
4 java安全模型的設(shè)計?
4.1 Java安全模式分析?
??? 針對瀏覽器及Java語言的安全性機制,主要的安全模式有以下三種?
??? (1)原始的沙盒模型?
??? 沙盒模型為從網(wǎng)上獲得的Java可執(zhí)行代碼的運行提供一個嚴格受限的環(huán)境,,它的本質(zhì)是本地代碼受到完全的信任,,有完全的權(quán)限可以訪問系統(tǒng)的關(guān)鍵資源,。而從網(wǎng)上下載的代碼只能訪問受限制的沙盒中的少數(shù)資源,。?
??? (2)支持簽名Applet的沙盒安全模式?
??? 從Jdki1.l或兼容版本開始提出簽名小程序“Signed Applet”的概念,經(jīng)過正確數(shù)字簽名的Applet被認為是可信任的,,和本地一樣對待,,簽名Applet和它們的簽名通過JAR格式傳送,沒有簽名的Applet仍然和沙盒模型中一樣處理,,而簽名Applet在瀏覽器中運行,。?
??? (3)新的安全模式?
??? 從JDKI.2或兼容版本開始出現(xiàn)一種新的更加靈活的安全模式,在這種安全模式下,,SecurityManager類不再是一個抽象類,,各個檢查方法CheckXX()都已經(jīng)實現(xiàn),。這些方法能夠根據(jù)一個安全策略配置文件,進一步判斷Java對安全敏感的操作是否允許進行,。這些代碼在運行時有不同的許可,,并沒有內(nèi)置的信任代碼的概念。模型如圖1所示,。?
?
4.2 實例設(shè)計與分析?
??? 根據(jù)瀏覽器的層次結(jié)構(gòu),,以某網(wǎng)吧的代理服務器為例,對JavaApplet的安全性做如下設(shè)計,。?
??? (1)瀏覽器設(shè)計?
??? 為了使界面更加美觀,,瀏覽器用戶界面的設(shè)計主要采用了JFC Swing類庫中的組件。JFC(Java Foundation Class)是Sun Microsystem公司的圖形用戶界面開發(fā)包,,Swing是其中的一個包,,它包括基本組件,以及一個能使GUI(Graphical User Interfaces)獨立于特定平臺進行顯示的框架,。瀏覽器啟動時安裝安全管理器,,瀏覽器所執(zhí)行的操作就要受到安全管理器的檢查。?
??? (2)HTML文檔的獲取?
??? 當應用程序第一次創(chuàng)建某種協(xié)議的URL對象時,,運行環(huán)境將為這種協(xié)議創(chuàng)建該協(xié)議的處理器,。本例采用URLStreamHandlerFactory類作為URL的流協(xié)議處理器工廠,然后調(diào)用該實例的createURLstreamHandler(String Protocol)方法為特定的協(xié)議創(chuàng)建協(xié)議流處理器,。?
??? (3)Web頁面的顯示?
??? 經(jīng)過HTML文檔的獲取工作,,客戶瀏覽器從服務器得到一個包含HTML文檔的字符流。接著,,瀏覽器可以對這個包含HTML文檔的字符流進行分析處理,,提取出需要處理的標記,然后解釋這些標記的涵義,,并按照一定的格式在屏幕上瀏覽器窗口中顯示標記的內(nèi)容,。?
??? (4)JavaApplet小程序的運行監(jiān)控?
??? 在瀏覽器運行期問,用戶可以對其進行監(jiān)視和控制,,在這里面采用圖2所示新的安全模型,,來實現(xiàn)不同的安全性策略,用以控制從網(wǎng)絡上下載的Applet訪問本地系統(tǒng)關(guān)鍵資源的權(quán)限,,以及控制能夠創(chuàng)建的網(wǎng)絡連接,。在安全策略文件中,語言和編譯器確保源代碼沒有違反安全規(guī)則,。字節(jié)碼校驗防止改造的編譯器產(chǎn)生的不符合安全規(guī)則的代碼,,使用安全策略配置文件,并進一步判斷Java對安全敏感的操作是否允許進行,。安全策略配置文件可以根據(jù)不同的安全等級進行不同的設(shè)置,,以滿足不同用戶的安全需要,。?
5 主要結(jié)論?
??? 由于Internet自身的開放性和復雜性以及Java程序的可移植、分布等特點,,導致了其安全問題的復雜性,。本文通過對Java語言的類安全機制及實例的分析,主要結(jié)論有:?
??? (1)瀏覽器能提供關(guān)于下載的Applet的可信任的信息,。最簡單的方法是系統(tǒng)檢查代碼的來源來判定它來自防火墻的內(nèi)部或外部,。另一種復雜的方法是在代碼上加上公用密匙和密碼信息(簽名Applet),不僅能識別誰寫了代碼而且保證代碼的完整性,。?
??? (2)應用程序可以使用自己的安全策略文件,。安全策略文件定義了來自不同地點,不同簽名的代碼對特定資源的訪問權(quán)限,。這樣安全性控制可以變得非常靈活,、簡單。?
??? (3)瀏覽器作為應用程序,,其安全性取決于虛擬機采用的安全模式和類庫中SecuntyManager類的實現(xiàn),。這種編程方法對安全特別敏感,技術(shù)要求高,,需要建立在對計算機安全性知識透徹了解的基礎(chǔ)之上,,否則可能出現(xiàn)大的安全性漏洞。?
??? (4)虛擬機在應用新的安全模式后,,應用程序所做的就是要配置安全策略文件,。這種方法相對安全可靠。?
Java語言是面向?qū)ο蟮牡淖吭酱?,它的移植性使其能夠用于不同的操作系統(tǒng)和平臺,,同時也對傳統(tǒng)的安全模型提出了挑戰(zhàn)。本文只做了相關(guān)安全性的探討,,對于適應計算機不同平臺的安全性和效率方面以及擴展HTML標記的處理能力,,有待于進一步的研究。?
參考文獻?
[1] 曾明,,李建軍.Internet訪問管理與代理服務器.北京:人民郵電出版社,,2000?
[2] Strebe M,Perkins C,吳焱等譯.高效構(gòu)筑與管理防火墻.北京:電子工業(yè)出版社,2000?
[3] Levis M,Berg M,關(guān)欣譯.深入學習:Java多線程編程.北京:電子工業(yè)出版社,,2000?
[4] 劉波,,王克.Java程序設(shè)計.北京:清華大學出版社,1998?
[5] 王佑中.Web動態(tài)技術(shù)入門.北京:機械工業(yè)出版社,,1997?
[6] 馬小軍,沈輝,,季全芝.網(wǎng)絡程序設(shè)計與Java語言,,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?