• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于Java漏洞的安全策略探析

    2018-09-12 09:51:58◆鄭
    關(guān)鍵詞:應(yīng)用服務(wù)安全策略管理器

    ◆鄭 艷

    ?

    基于Java漏洞的安全策略探析

    ◆鄭 艷

    (無錫城市職業(yè)技術(shù)學(xué)院 江蘇 214000)

    互聯(lián)網(wǎng)技術(shù)的快速發(fā)展引發(fā)了人們對(duì)于網(wǎng)絡(luò)安全的廣泛關(guān)注。特別是近期發(fā)生的安全事例表明,面向Java的攻擊已經(jīng)成為網(wǎng)絡(luò)系統(tǒng)安全的潛在主因。本文從Java平臺(tái)的安全體系出發(fā),結(jié)合實(shí)際的案例分析漏洞原因,從多個(gè)層面提出了Java應(yīng)用服務(wù)管理的安全應(yīng)對(duì)策略。

    Java平臺(tái);安全漏洞;網(wǎng)絡(luò)安全;安全策略

    0 引言

    Java是一種廣泛地運(yùn)用于網(wǎng)絡(luò)數(shù)據(jù)的共享和分布處理的軟件技術(shù),安裝在各種不同類型的設(shè)備上,包括大多數(shù)PC機(jī)、蘋果電腦和Linux臺(tái)式機(jī),以及智能手機(jī)和其他嵌入式設(shè)備。最近幾年發(fā)布的卡巴斯基安全公告顯示:Oracle Java已經(jīng)成為最常被網(wǎng)絡(luò)罪犯進(jìn)行漏洞攻擊的軟件,針對(duì)Java安全漏洞的襲擊數(shù)量一直在穩(wěn)步上升,造成的感染占所有相關(guān)攻擊的50%左右[1]。網(wǎng)絡(luò)技術(shù)具有被惡意程序攻擊的特殊性,Java成為最易受到攻擊的軟件之一,因此針對(duì)Java漏洞進(jìn)行攻擊的安全問題急需大家思考面對(duì)[2]。

    Java的安全存在以下幾個(gè)主要因素:

    (1)由于Java開源,黑客容易發(fā)現(xiàn)不安全代碼,這使得一些不安全的編碼成為攻擊的重點(diǎn);

    (2)Java的跨平臺(tái)特性,使得Java在出現(xiàn)漏洞后,很多不同的系統(tǒng)平臺(tái)上易受到漏洞的影響很大;

    (3)Java的安全團(tuán)隊(duì)建設(shè)落后,它的安全補(bǔ)丁更新相對(duì)緩慢,且版本更新通常落后于安全修補(bǔ)過程;

    (4)Java的新版本和舊版本之間存在一些兼容性問題,使得很多企業(yè)不愿意升級(jí)到新版本的Java上。正是存在這些原因,Java面臨的安全形勢總體上不容樂觀。

    本文在第二部分首先介紹Java技術(shù)上目前的安全體系;在第三部分通過一些實(shí)際的漏洞案例,分析漏洞出現(xiàn)的可能原因;最后本文提出Java在程序設(shè)計(jì)和管理等方面的安全應(yīng)對(duì)思路。

    1 Java安全體系

    圖1 Java安全體系結(jié)構(gòu)

    Java既是一種安全性的編程語言,也是一種需要安裝從而支持Java程序運(yùn)行的軟件,它具有額外的保護(hù),比如說沙箱(sandboxes)和額外的內(nèi)存保護(hù),這是其他編程語言沒有的。Java平臺(tái)提供了Java安全的基本功能[3],它在初始化和運(yùn)行時(shí)兩方面提供安全管理,以全局集中、節(jié)點(diǎn)自治的協(xié)同方式保證安全。安全管理器定義沙箱的邊界,保護(hù)虛擬機(jī)的外部資源。

    Java安全策略包含以下基本組件:Java內(nèi)置的語言安全特性、字節(jié)碼校驗(yàn)器、類加載器、安全管理器,結(jié)構(gòu)如圖1所示。安全體系的各組件相互配合、相互保護(hù),共同形成Java的基本安全防御體系。

    1.1 語言安全特性

    Java語言的安全特性主要來源于對(duì)直接內(nèi)存操作的約束。Java在使用對(duì)象時(shí),嚴(yán)格遵守類型規(guī)則:只有相同類型的對(duì)象,才能進(jìn)行轉(zhuǎn)換;另外它還通過在字節(jié)碼指令中去除非結(jié)構(gòu)化的內(nèi)存訪問指令,保證了Java 程序只能使用類型安全的、結(jié)構(gòu)化的方法去訪問內(nèi)存;Java虛擬機(jī)的內(nèi)存布局也與具體平臺(tái)相關(guān),這增強(qiáng)了內(nèi)存訪問限制的難度。另外,通過自動(dòng)垃圾收集機(jī)制,開發(fā)人員無需在內(nèi)存沖突的問題上糾纏不清,不必為顯式釋放內(nèi)存而擔(dān)心。這種機(jī)制降低了程序出錯(cuò)的可能性,提高了編程的效率。

    通過在每次操作數(shù)組時(shí),檢查數(shù)組的邊界,Java避免了潛在的內(nèi)存沖突;通過對(duì)對(duì)象引用的檢查,Java確保這些引用不為空值;通過在編譯階段檢查未被初始化的局部變量,Java避免了容易出問題的編程陷阱。利用這些語言級(jí)的安全特性,不僅使得Java程序更為健壯,也使得Java虛擬機(jī)的運(yùn)行更為安全。

    1.2 字節(jié)碼校驗(yàn)器

    字節(jié)碼校驗(yàn)器主要是為了確保Class文件的字節(jié)流中包含的信息符合當(dāng)前虛擬機(jī)的要求,并且不會(huì)危害虛擬機(jī)自身的安全。校驗(yàn)包括文件格式驗(yàn)證、元數(shù)據(jù)驗(yàn)證、字節(jié)碼驗(yàn)證和符號(hào)引用驗(yàn)證。

    文件格式驗(yàn)證主要驗(yàn)證字節(jié)流是否符合Class文件格式的規(guī)范,并且能被當(dāng)前的虛擬機(jī)處理,判斷是否以魔數(shù)開頭、版本號(hào)是否在當(dāng)前虛擬機(jī)處理范圍之內(nèi)、尾部是否附帶其他的字節(jié)等。虛擬機(jī)將依據(jù)字節(jié)流在方法區(qū)建立相應(yīng)的存儲(chǔ)結(jié)構(gòu);類數(shù)據(jù)的語義驗(yàn)證主要對(duì)上一步在方法區(qū)中建立的類的元數(shù)據(jù)進(jìn)行語義分析,以保證其符合Java語言規(guī)范的要求,判斷這個(gè)類是否有父類、是否繼承了final類、是否實(shí)現(xiàn)了其父類中的抽象方法、類中的字段、方法是否和父類產(chǎn)生矛盾等等;字節(jié)碼驗(yàn)證主要針對(duì)類數(shù)據(jù)中的方法進(jìn)行數(shù)據(jù)流和控制流分析,判斷跳轉(zhuǎn)指令是否跳轉(zhuǎn)到方法體以外的字節(jié)碼指令上、類型轉(zhuǎn)換是否有效、操作數(shù)棧是否總是包含正確的數(shù)值以及正確的類型、局部變量訪問之前是否被初始化等等;符號(hào)引用驗(yàn)證為動(dòng)態(tài)鏈接的一部分,虛擬機(jī)將追蹤那些引用——從被驗(yàn)證的class文件到被引用的class文件,此次驗(yàn)證可能涉及到裝載新的類,然后將在編譯時(shí)的符號(hào)連接轉(zhuǎn)換為直接引用—指向類、字段或方法的指針或偏移量。

    1.3 類加載器

    類加載器是將字節(jié)碼文件加載進(jìn)內(nèi)存,并最終形成可被虛擬機(jī)使用的Java類型。虛擬機(jī)的類加載器可以分為引導(dǎo)類加載器、擴(kuò)展類加載器、系統(tǒng)類加載器、網(wǎng)絡(luò)類加載器和其它自定義類加載器。如圖2所示,引導(dǎo)類加載器負(fù)責(zé)加載系統(tǒng)類(在rt.jar中),擴(kuò)展類加載器加載位于jre/lib/ext目錄下的各個(gè)類,系統(tǒng)類加載器用于加載位于CLASSPATH環(huán)境變量所指定目錄下的類,網(wǎng)絡(luò)類加載器和其它自定義類加載器負(fù)責(zé)加載網(wǎng)絡(luò)上的或者用戶指定的類。

    圖2 類加載器結(jié)構(gòu)

    虛擬機(jī)的類加載采用的是“雙親委派加載機(jī)制”。除去引導(dǎo)類加載器外的每一個(gè)類加載器,都有一個(gè)“雙親類”加載器。在某個(gè)特定的類加載器試圖加載class之前,它會(huì)先默認(rèn)地將此任務(wù)“委派”給其雙親,委派的過程一直向上,直至到達(dá)引導(dǎo)類加載器。引導(dǎo)類加載器一般是委派鏈中的最后一個(gè)類加載器。類加載器的雙親類如果有能力來加載這個(gè)類,則這個(gè)類加載器返回這個(gè)類型;否則類加載器自身試圖來加載這個(gè)類型。通過這種“委派”機(jī)制,類加載器可以保證可信任類的加載先于不可信類,并讓不可信類由另外的類加載器加載,從而形成不同的運(yùn)行時(shí)包,進(jìn)而保護(hù)可信類的包訪問權(quán)限,剔除裝著被信任的不可靠類,達(dá)到保護(hù)可信任類庫邊界的目的。

    1.4 安全管理器

    Java虛擬機(jī)中的安全管理器基于策略文件來管理權(quán)限。如圖3,安全策略建立了代碼來源和訪問權(quán)限集之間的映射關(guān)系。代碼來源由代碼位置和證書組成,代碼位置指明了類的來源,證書用來保證代碼沒有被篡改。權(quán)限是用戶允許程序的操作,由權(quán)限類型、權(quán)限名和一組權(quán)限操作組成。其類型主要有文件權(quán)限、套接字權(quán)限、屬性權(quán)限、運(yùn)行時(shí)權(quán)限等權(quán)限。在初始化時(shí),虛擬機(jī)根據(jù)安全策略,初始化相應(yīng)的權(quán)限集合,并將代碼來源和權(quán)限集合放置到一個(gè)指定的保護(hù)域的對(duì)象中,當(dāng)安全管理器在檢查某一權(quán)限時(shí),它查看當(dāng)前位于調(diào)用堆棧上的所有方法的類,獲取相應(yīng)的類保護(hù)域,并詢問每個(gè)保護(hù)域,確認(rèn)此操作是否能被保護(hù)域所允許。如果某一層保護(hù)域的因素發(fā)生不同意此操作,虛擬機(jī)就會(huì)引起安全保護(hù)異常而退出。根據(jù)應(yīng)用的不同特點(diǎn),可以對(duì)安全管理器進(jìn)行配置,以滿足應(yīng)用的不同安全需求。準(zhǔn)確、有效地配置安全策略是一項(xiàng)復(fù)雜的任務(wù),并可能導(dǎo)致錯(cuò)誤。在實(shí)現(xiàn)安全管理時(shí),任何錯(cuò)誤都將變成運(yùn)行時(shí)的安全漏洞。

    圖3 安全管理器

    在虛擬機(jī)初始化階段,虛擬機(jī)根據(jù)安全策略文件初始化在開始階段就確定訪問控制集,當(dāng)運(yùn)行時(shí)如果應(yīng)用調(diào)用可能危害系統(tǒng)安全的系統(tǒng)調(diào)用時(shí),比如建立套接字連接、修改系統(tǒng)屬性等等操作,此時(shí)核心API首先和安全管理器交互,確認(rèn)此行為是否允許。只有通過授權(quán)的行為才能繼續(xù)執(zhí)行,否則安全管理器將因安全管理異常退出。

    2 漏洞案例

    結(jié)合具體的漏洞案例,本節(jié)分別從應(yīng)用層框架、核心類庫以及虛擬機(jī)本身這幾個(gè)角度去分析一下Java漏洞的成因。

    2.1 應(yīng)用框架層漏洞

    漏洞存在于web框架struts2中,漏洞ID為CVE-2010-1870 。Struts2是Java程序員廣泛應(yīng)用的web開發(fā)框架,此漏洞允許運(yùn)程執(zhí)行用戶代碼。Struts2內(nèi)部使用WebWork調(diào)用XWork所引發(fā)。XWork目的在于提供一個(gè)泛化的、可重用且可擴(kuò)展的命令模式框架,其提供了很多核心功能,比如運(yùn)行時(shí)表單檢查、類型轉(zhuǎn)換、強(qiáng)大的表達(dá)式語言O(shè)GNL――the Object Graph Navigation Language、IoC――Inversion of Control等功能。XWork在從HTTP的參數(shù)中獲取對(duì)應(yīng)action的名稱時(shí)不允許名稱擁有’#’字符,防止和內(nèi)部自定義的變量沖突,但攻擊者通過使用’#’的Unicode編碼u0023替代‘#’,構(gòu)建出特殊的url,如圖4。

    圖4 構(gòu)建特殊的url

    其中,#_memberAccess、#foo、#context、#rt是XWork的內(nèi)部變量,通過此url可以設(shè)置XWork的內(nèi)部變量#_xwork.MethoAccessor.denyMethodExecution為true,最終使得服務(wù)端允許執(zhí)行java.lang.Runtime.getRuntime().exit(1)方法,從而形成攻擊。

    2.2 核心類庫層漏洞

    漏洞ID為CVE-2012-4681,就是一個(gè)該類的典型漏洞,它影響windows、Linux、OS X平臺(tái)。攻擊者使用applet突破沙箱限制,再利用javascript下載惡意軟件到本地機(jī)器上執(zhí)行,從而完成攻擊。利用此漏洞,攻擊者可以獲取對(duì)用戶電腦的全部權(quán)限,可以在用戶電腦上執(zhí)行任何操作。此漏洞曾被制成工具,影響數(shù)百萬臺(tái)電腦。

    通過圖5代碼可以看出,漏洞的成因主要是由于核心類的Expression類開放了讀取核心包的權(quán)限;同時(shí)Sun.awt.SunToolkit類中的方法getField在改變字段的訪問權(quán)限時(shí)繞過安全檢查;最后,使用反射的技術(shù),將Statement類的私有數(shù)據(jù)成員acc(類型為AccessControlContext)修改為公有,并設(shè)置成擁有完全權(quán)限,從而達(dá)到突破沙箱的目的。

    圖5 漏洞攻擊代碼

    2.3 虛擬機(jī)層漏洞

    漏洞ID為CVE-2010-4476,漏洞類型為拒絕服務(wù),主要會(huì)影響web服務(wù)提供商。此漏洞的成因主要是出現(xiàn)在虛擬機(jī)內(nèi)部,對(duì)雙精度浮點(diǎn)的極值處理不當(dāng)上,當(dāng)攻擊者構(gòu)造一個(gè)特殊的url,比如http://www.xxxxx.net/order.do?order.money=2.2250738585072012e-308,此數(shù)字應(yīng)該被轉(zhuǎn)換為0x1.0p-1022(Double.MIN_NORMAL),但是虛擬機(jī)陷入0x1p-1022到0x1.fffffffffffffP-1022之間的循環(huán),即虛擬機(jī)陷入死循環(huán),從而形成拒絕服務(wù)攻擊。

    3 應(yīng)對(duì)策略

    通過前面的分析,可知Java漏洞可能存在于應(yīng)用本身、應(yīng)用服務(wù)及中間件、核心類庫及虛擬機(jī)內(nèi)部等各個(gè)方面。本小節(jié)就從Java應(yīng)用安全、應(yīng)用服務(wù)及中間安全、Java虛擬機(jī)平臺(tái)安全這三個(gè)角度分別去探討開發(fā)者在Java開發(fā)過程中的應(yīng)對(duì)思路。

    3.1 應(yīng)用安全

    根據(jù)美國國家漏洞數(shù)據(jù)庫的數(shù)據(jù)顯示,每年發(fā)現(xiàn)的漏洞趨勢有以下特點(diǎn):每年有數(shù)千個(gè)漏洞被發(fā)現(xiàn),其中大多數(shù)漏洞的危害程度高,而復(fù)雜性卻反而較低;這些漏洞多出現(xiàn)于應(yīng)用程序中,易于被利用的漏洞占了大多數(shù),因此確保應(yīng)用的安全十分重要。為此,微軟首先提出了安全開發(fā)流程SDL(Security Development Lifecycle)。SDL試圖在軟件開發(fā)的開始,就將安全性融入到軟件開發(fā)的整個(gè)生命周期,從安全漏洞的源頭上解決問題,以保證產(chǎn)品的安全性。

    3.2 應(yīng)用服務(wù)及中間件安全

    通過使用應(yīng)用服務(wù)和中間件,可以大幅降低軟件開發(fā)成本,提高開發(fā)效率,但一旦其出現(xiàn)安全漏洞,影響應(yīng)用的范圍也很大。故而,應(yīng)用服務(wù)及中間件的安全很重要。在應(yīng)用服務(wù)及中間件這一層,解決某些問題很有效,比如通過使用模版引擎可以有效解決XSS攻擊、通過使用標(biāo)記可以解決CSRF攻擊。在這一層中,統(tǒng)一解決此類問題,不僅可以有效防止“遺漏”的問題,而且有利于制定一致的安全方案,統(tǒng)一安全標(biāo)準(zhǔn)。最后,保證應(yīng)用服務(wù)及中間件的安全,還需要建立積極地應(yīng)對(duì)策略,保證其組件能夠打上最新的安全補(bǔ)丁。

    3.3 Java平臺(tái)安全

    為了增強(qiáng)Java平臺(tái)安全,可以調(diào)整Java的訪問控制模型。文獻(xiàn)[4-6]探討并修改了訪問控制模型,動(dòng)態(tài)形成訪問控制權(quán)限的可能性;文獻(xiàn)[7]分析了在分布式環(huán)境下安全模型的適應(yīng)性;文獻(xiàn)[8]研究了在MOP模型下Java安全性問題。

    虛擬機(jī)對(duì)于本地共享庫的安全防護(hù)僅僅局限于是否允許加載,而對(duì)其本地庫的行為沒有做任何的驗(yàn)證。安全管理器可以考慮將本地共享庫也納入到安全管理范疇。最后,虛擬機(jī)存在大量的本地代碼(97828行代碼,使用wc程序統(tǒng)計(jì)),這部分代碼可能會(huì)破壞虛擬機(jī)內(nèi)存中的數(shù)據(jù)結(jié)構(gòu),故而需要對(duì)這一部分代碼執(zhí)行檢查。可以事先制定本地安全編碼規(guī)則對(duì)這部分本地代碼做安全檢查。

    4 結(jié)束語

    Java所面臨的威脅不容低估,它是當(dāng)前各種網(wǎng)絡(luò)攻擊的重點(diǎn),對(duì)于攻擊者而言是很有吸引力的目標(biāo)。雖然Java本身有一套結(jié)構(gòu)嚴(yán)密的安全體系,且Oracle宣布將著重解決Java的安全漏洞問題,但因?yàn)镴ava是開源的,且最新的Java版本更新頻繁(包括安全補(bǔ)丁的更新),Java漏洞的存在總是難以避免。因此那些負(fù)有直接責(zé)任的Java應(yīng)用開發(fā)人員時(shí)時(shí)要提高安全意識(shí),在開發(fā)過程中創(chuàng)建一個(gè)Java的安全框架,使用安全開發(fā)流程,管理人員需要在發(fā)現(xiàn)漏洞存在的時(shí)候盡快更新JDK,增加更新Java的優(yōu)化措施,以防止系統(tǒng)被黑客利用,減少與Java相關(guān)的風(fēng)險(xiǎn)。

    [1]卡巴斯基年度安全報(bào)告.卡巴斯基實(shí)驗(yàn)室, 2013-2017.

    [2]Venners, Bill. Inside the Java 2 Virtual Machine[M]. McGraw-Hill Companies, 2000.

    [3]Oaks, Scott. Java Security[M]. O'Reilly Media, 2002.

    [4]Liu, Dongxi. Bytecode Verification for Enhanced JVM Access Control[C]. in Availability, Reliability and Security,the Second International Conference, Vienna, 2007.

    [5]Autrel, Fabien and Cuppens-Boulahia, Nora and Cuppens, Frederic. Enabling Dynamic Security Policy in the Java Security Manager[C]. in Proceedings of the 5th International Conference on Foundations and Practice of Security, Montreal, QC, Canada, 2013.

    [6]Inoue, Hajime. Inferring Java Security Policies Through Dynamic Sandboxing[C]. in In International Conference on Programming Languages and Compilers, Las Vegas, 2005.

    [7]Roudier, Refik Molva and Yves. A distributed access control model for Java[C]. in 6th European Symposium on Research in Computer Security, Toulouse, France, 2000.

    [8]Vayssière, Denis Caromel and Julien. Reflections on MOPs, components, and Java security[C]. in 15th European Conference Object-Oriented Programming Proceedings, Bugapest, Hungary, 2001.

    猜你喜歡
    應(yīng)用服務(wù)安全策略管理器
    基于認(rèn)知負(fù)荷理論的叉車安全策略分析
    全球衛(wèi)星互聯(lián)網(wǎng)應(yīng)用服務(wù)及我國的發(fā)展策略
    應(yīng)急狀態(tài)啟動(dòng)磁盤管理器
    基于飛行疲勞角度探究民航飛行員飛行安全策略
    國家不動(dòng)產(chǎn)統(tǒng)一登記信息平臺(tái)構(gòu)建與應(yīng)用服務(wù)
    Windows文件緩沖處理技術(shù)概述
    淺析涉密信息系統(tǒng)安全策略
    全國征集衛(wèi)星應(yīng)用服務(wù)解決方案
    太空探索(2015年5期)2015-07-12 12:52:36
    應(yīng)用服務(wù)型人才培養(yǎng)體系下的嵌入式操作系統(tǒng)教學(xué)改革探索
    高集成度2.5A備份電源管理器簡化鋰離子電池備份系統(tǒng)
    安吉县| 读书| 绥宁县| 新巴尔虎右旗| 贵阳市| 元朗区| 苗栗县| 宣武区| 宣化县| 准格尔旗| 克山县| 昌邑市| 临沭县| 永德县| 嵩明县| 芒康县| 噶尔县| 荆州市| 洛扎县| 连平县| 玛多县| 昆明市| 泽州县| 和田县| 始兴县| 佛坪县| 衡山县| 宜阳县| 松滋市| 楚雄市| 凤台县| 仁布县| 沁源县| 万山特区| 吉林省| 大理市| 怀宁县| 临夏县| 舒兰市| 紫金县| 乐山市|