欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

引擎保護方法和裝置與流程

文檔序號:12597104閱讀:343來源:國知局
引擎保護方法和裝置與流程

本公開涉及網(wǎng)絡(luò)安全領(lǐng)域,具體地,涉及一種引擎保護方法和裝置。



背景技術(shù):

目前大部分瀏覽器引擎以及Java、Perl、Ruby、Flash等都使用了JIT編譯(Just-In-Time Compilation)技術(shù)來提高代碼執(zhí)行效率。JIT編譯技術(shù)在為可執(zhí)行對象分配內(nèi)存時會直接分配可預(yù)期的、具有可讀寫可執(zhí)行(Read、Write、Exeute,RWX)權(quán)限的內(nèi)存地址,這樣違背了數(shù)據(jù)執(zhí)行保護以及隨機地址分配的保護措施,使得可執(zhí)行對象執(zhí)行時其引擎很容易受到緩沖區(qū)溢出、堆噴射等惡意攻擊。因此,少數(shù)使用JIT編譯技術(shù)的引擎采取了實時修改內(nèi)存地址權(quán)限的方法對其進行保護,將分配給可執(zhí)行對象的內(nèi)存地址的寫權(quán)限與可執(zhí)行權(quán)限分開。但是這樣又會使其處理周期過長,造成使用JIT編譯技術(shù)的引擎效率降低。



技術(shù)實現(xiàn)要素:

本公開的目的是提供一種引擎保護方法,該方法能夠在一定程度上避免引擎在可執(zhí)行對象執(zhí)行時被非法惡意攻擊。

為了實現(xiàn)上述目的,本公開提供一種引擎保護方法,該方法包括:

按照第一預(yù)設(shè)規(guī)則給可執(zhí)行對象分配內(nèi)存地址;

按照第二預(yù)設(shè)規(guī)則為所分配的內(nèi)存地址設(shè)置保護區(qū),其中所述保護區(qū)的權(quán)限為不可寫。

可選的,所述按照第一預(yù)設(shè)規(guī)則給可執(zhí)行對象分配內(nèi)存地址包括:

根據(jù)默認內(nèi)存地址分配規(guī)則給所述可執(zhí)行對象分配內(nèi)存地址。

可選的,所述按照第一預(yù)設(shè)規(guī)則給可執(zhí)行對象分配內(nèi)存地址包括:

獲取為所述可執(zhí)行對象申請內(nèi)存的內(nèi)存申請函數(shù)中的申請內(nèi)存大小、申請內(nèi)存地址和申請內(nèi)存權(quán)限;

當所述申請內(nèi)存地址為空且所述申請內(nèi)存權(quán)限為可讀寫可執(zhí)行權(quán)限時,對所述申請內(nèi)存地址進行隨機化處理以得到隨機化內(nèi)存地址;

根據(jù)所述隨機化內(nèi)存地址、所述申請內(nèi)存大小和所述申請內(nèi)存權(quán)限確定要分配給所述可執(zhí)行對象的內(nèi)存地址;

當所確定的內(nèi)存地址屬于系統(tǒng)內(nèi)存地址時,返回所述對所述申請內(nèi)存地址進行隨機化處理以得到隨機化內(nèi)存地址的步驟;

當所確定的內(nèi)存地址不屬于系統(tǒng)內(nèi)存地址時,將所確定的內(nèi)存地址分配給所述可執(zhí)行對象。

可選的,在所述獲取為所述可執(zhí)行對象申請內(nèi)存的內(nèi)存申請函數(shù)中的申請內(nèi)存大小、申請內(nèi)存地址和申請內(nèi)存權(quán)限之后,所述按照第一預(yù)設(shè)規(guī)則給可執(zhí)行對象分配內(nèi)存地址還包括:

判斷所述申請內(nèi)存大小是否是2的冪次方;

當所述申請內(nèi)存大小不是2的冪次方時,將所述申請內(nèi)存大小增加至大于所述申請內(nèi)存大小的最小的2的冪次方。

可選的,所述按照第二預(yù)設(shè)規(guī)則為所分配的內(nèi)存地址設(shè)置保護區(qū)包括:

將所述保護區(qū)設(shè)置在從所分配的內(nèi)存地址的首地址開始的預(yù)設(shè)大小的內(nèi)存空間內(nèi);

將所分配的內(nèi)存地址向后偏移,其中偏移的大小為所述預(yù)設(shè)大小。

本公開還提供一種引擎保護裝置,該裝置包括:

內(nèi)存地址分配模塊,用于按照第一預(yù)設(shè)規(guī)則給可執(zhí)行對象分配內(nèi)存地址;

保護區(qū)設(shè)置模塊,用于按照第二預(yù)設(shè)規(guī)則為所分配的內(nèi)存地址設(shè)置保護區(qū),其中所述保護區(qū)的權(quán)限為不可寫。

可選的,所述內(nèi)存地址分配模塊包括:

內(nèi)存地址默認分配子模塊,用于根據(jù)默認內(nèi)存地址分配規(guī)則給所述可執(zhí)行對象分配內(nèi)存地址。

可選的,所述內(nèi)存地址分配模塊包括:

獲取子模塊,用于獲取為所述可執(zhí)行對象申請內(nèi)存的內(nèi)存申請函數(shù)中的申請內(nèi)存大小、申請內(nèi)存地址和申請內(nèi)存權(quán)限;

內(nèi)存地址隨機化子模塊,用于當所述申請內(nèi)存地址為空且所述申請內(nèi)存權(quán)限為可讀寫可執(zhí)行權(quán)限時,對所述申請內(nèi)存地址進行隨機化處理以得到隨機化內(nèi)存地址;

內(nèi)存地址確定子模塊,用于根據(jù)所述隨機化內(nèi)存地址、所述申請內(nèi)存大小和所述申請內(nèi)存權(quán)限確定要分配給所述可執(zhí)行對象的內(nèi)存地址;

內(nèi)存地址判斷子模塊,用于判斷所述內(nèi)存地址確定子模塊所確定的內(nèi)存地址是否屬于系統(tǒng)內(nèi)存地址,并當所確定的內(nèi)存地址屬于系統(tǒng)內(nèi)存地址時,通知所述內(nèi)存地址隨機化子模塊重新對所述申請內(nèi)存地址進行隨機化處理以得到隨機化內(nèi)存地址;

內(nèi)存地址分配子模塊,用于當所述內(nèi)存地址判斷子模塊判斷所確定的內(nèi)存地址不屬于系統(tǒng)內(nèi)存地址時,將所確定的內(nèi)存地址分配給所述可執(zhí)行對象。

可選的,在所述獲取子模塊獲取為所述可執(zhí)行對象申請內(nèi)存的內(nèi)存申請函數(shù)中的申請內(nèi)存大小、申請內(nèi)存地址和申請內(nèi)存權(quán)限之后,所述內(nèi)存地址分配模塊還包括:

申請內(nèi)存大小判斷子模塊,用于判斷所述申請內(nèi)存大小是否是2的冪次方;

申請內(nèi)存大小增加子模塊,用于當所述申請內(nèi)存大小不是2的冪次方時,將所述申請內(nèi)存大小增加至大于所述申請內(nèi)存大小的最小的2的冪次方。

可選的,所述保護區(qū)設(shè)置模塊包括:

保護區(qū)設(shè)置子模塊,用于將所述保護區(qū)設(shè)置在從所分配的內(nèi)存地址的首地址開始的預(yù)設(shè)大小的內(nèi)存空間內(nèi);

內(nèi)存地址偏移子模塊,用于將所分配的內(nèi)存地址向后偏移,其中偏移的大小為所述預(yù)設(shè)大小。

通過上述技術(shù)方案,先按照第一預(yù)設(shè)規(guī)則給可執(zhí)行對象分配內(nèi)存地址,然后按照第二預(yù)設(shè)規(guī)則為所分配的內(nèi)存地址設(shè)置保護區(qū),其中所述保護區(qū)的權(quán)限為不可寫,這樣就能夠在一定程度上保護所述內(nèi)存地址,且避免其引擎在可執(zhí)行對象執(zhí)行時被非法惡意攻擊。

本公開的其他特征和優(yōu)點將在隨后的具體實施方式部分予以詳細說明。

附圖說明

附圖是用來提供對本公開的進一步理解,并且構(gòu)成說明書的一部分,與下面的具體實施方式一起用于解釋本公開,但并不構(gòu)成對本公開的限制。在附圖中:

圖1是根據(jù)本公開一種實施方式的引擎保護方法的流程圖。

圖2是根據(jù)本公開又一種實施方式的引擎保護方法的流程圖。

圖3是根據(jù)本公開又一種實施方式的引擎保護方法的流程圖。

圖4是根據(jù)本公開又一種實施方式的引擎保護方法的流程圖。

圖5是根據(jù)本公開又一種實施方式的引擎保護方法的流程圖。

圖6是根據(jù)本公開一種實施方式的引擎保護裝置的示意框圖。

圖7是根據(jù)本公開又一種實施方式的引擎保護裝置中的內(nèi)存地址分配模塊的示意框圖。

圖8是根據(jù)本公開又一種實施方式的引擎保護裝置中的內(nèi)存地址分配模塊的示意框圖。

圖9是根據(jù)本公開又一種實施方式的引擎保護裝置中的內(nèi)存地址分配模塊的示意框圖。

圖10是根據(jù)本公開一種實施方式的引擎保護裝置中的保護區(qū)設(shè)置模塊的示意框圖。

附圖標記說明

100引擎保護裝置 10內(nèi)存地址分配模塊

20保護區(qū)設(shè)置模塊 101內(nèi)存地址默認分配子模塊

102獲取子模塊 103內(nèi)存地址隨機化子模塊

104內(nèi)存地址確定子模塊 105內(nèi)存地址判斷子模塊

106內(nèi)存地址分配子模塊 107申請內(nèi)存大小判斷子模塊

108申請內(nèi)存大小增加子模塊 201保護區(qū)設(shè)置子模塊

202內(nèi)存地址偏移子模塊

具體實施方式

以下結(jié)合附圖對本公開的具體實施方式進行詳細說明。應(yīng)當理解的是,此處所描述的具體實施方式僅用于說明和解釋本公開,并不用于限制本公開。

圖1是根據(jù)本公開一種實施方式的引擎保護方法的流程圖,如圖1所示,該方法包括步驟S101和步驟S102。

在步驟S101中,按照第一預(yù)設(shè)規(guī)則給可執(zhí)行對象分配內(nèi)存地址。

在步驟S102中,按照第二預(yù)設(shè)規(guī)則為所分配的內(nèi)存地址設(shè)置保護區(qū),其中所述保護區(qū)的權(quán)限為不可寫。

所述保護區(qū)的設(shè)置目的是為了保護所述內(nèi)存地址,其保護的方法即將所述保護區(qū)的權(quán)限設(shè)置為不可寫。

通過上述技術(shù)方案,當需要給可執(zhí)行對象分配內(nèi)存時,先按照第一預(yù)設(shè)規(guī)則給可執(zhí)行對象分配內(nèi)存地址,然后按照第二預(yù)設(shè)規(guī)則為所分配的內(nèi)存地址設(shè)置保護區(qū),其中所述保護區(qū)的權(quán)限為不可寫,這樣就能夠在一定程度上保護所分配的內(nèi)存地址,且避免其引擎在可執(zhí)行對象執(zhí)行時被非法惡意攻擊。

圖2是根據(jù)本公開又一種實施方式的引擎保護方法的流程圖,如圖2所示,該方法包括圖1中的步驟S102,還包括步驟S201。

在步驟S201中,根據(jù)默認內(nèi)存地址分配規(guī)則給所述可執(zhí)行對象分配內(nèi)存地址。

上述步驟即為圖1中步驟S101中所述的第一預(yù)設(shè)規(guī)則的其中一種。

所述默認內(nèi)存地址分配規(guī)則即按照現(xiàn)有技術(shù)中使用JIT編譯技術(shù)的引擎為可執(zhí)行對象分配內(nèi)存地址的規(guī)則,本公開對所述默認內(nèi)存地址分配規(guī)則不作限定。

通過上述技術(shù)方案,先根據(jù)默認內(nèi)存地址分配規(guī)則給所述可執(zhí)行對象分配內(nèi)存地址,然后按照第二預(yù)設(shè)規(guī)則為所分配的內(nèi)存地址設(shè)置保護區(qū),其中所述保護區(qū)的權(quán)限為不可寫,這樣提供了一種通過為所分配的內(nèi)存地址設(shè)置保護區(qū)進而來保護引擎不受非法惡意攻擊的方法。

圖3是根據(jù)本公開又一種實施方式的引擎保護方法的流程圖,圖3所示的方法是圖1中步驟S101中所述的第一預(yù)設(shè)規(guī)則中的另外一種。如圖3所示,該方法包括步驟S301至步驟S307。

在步驟S301中,獲取為所述可執(zhí)行對象申請內(nèi)存的內(nèi)存申請函數(shù)中的申請內(nèi)存大小、申請內(nèi)存地址和申請內(nèi)存權(quán)限。

可執(zhí)行對象申請內(nèi)存時,會通過自己的內(nèi)存申請函數(shù)來進行申請,所述內(nèi)存申請函數(shù)中主要包括申請的內(nèi)存大小,申請內(nèi)存的首地址,以及所要申請的內(nèi)存頁的權(quán)限等參數(shù)信息。

在步驟S302中,判斷所述申請內(nèi)存地址是否為空且所述申請內(nèi)存權(quán)限是否為可讀寫可執(zhí)行權(quán)限,如果是,則轉(zhuǎn)至步驟S303,如果不是,則轉(zhuǎn)至步驟S304。

判斷所述申請內(nèi)存地址是否為空且所述申請內(nèi)存權(quán)限是否為可讀寫可執(zhí)行權(quán)限即為判斷所述可執(zhí)行對象申請的內(nèi)存是否為有被非法惡意攻擊的危險的內(nèi)存。

在步驟S303中,在申請內(nèi)存地址為空且申請內(nèi)存權(quán)限為可讀寫可執(zhí)行權(quán)限時,對所述申請內(nèi)存地址進行隨機化處理以得到隨機化內(nèi)存地址,然后轉(zhuǎn)至步驟S305。

步驟S303的主要目的是只在申請內(nèi)存地址為空且申請內(nèi)存權(quán)限為RWX權(quán)限時對申請內(nèi)存地址進行隨機化,這樣就不會過多的占用系統(tǒng)時間,不會影響引擎(例如,使用JIT編譯技術(shù)的引擎)的運行效率。

其中,所述對所述申請內(nèi)存地址進行隨機化處理可以通過利用George Marsaglia's MWC算法來進行隨機化處理。George Marsaglia's MWC算法是一種利用異或與移位運算來產(chǎn)生高偽隨機度的偽隨機數(shù)生成算法,易于軟件實現(xiàn),而且在硬件上運行速度非常快,因此對所述申請內(nèi)存地址進行隨機化處理的過程幾乎不會影響到引擎的運行效率。

在步驟S304中,根據(jù)所述申請內(nèi)存大小、所述申請內(nèi)存地址和所述申請內(nèi)存權(quán)限給所述可執(zhí)行對象分配內(nèi)存地址。

當判斷所述申請內(nèi)存地址不為空時,說明可執(zhí)行對象的申請內(nèi)存地址是具體的地址,針對這種申請內(nèi)存地址,選擇不對其進行隨機化處理,而直接根據(jù)所述申請內(nèi)存大小、所述申請內(nèi)存地址和所述申請內(nèi)存權(quán)限給所述可執(zhí)行對象分配內(nèi)存地址。

當申請內(nèi)存地址為空,但所述申請內(nèi)存權(quán)限不為可讀寫可執(zhí)行權(quán)限時,即所述可執(zhí)行對象申請的內(nèi)存地址不是RWX權(quán)限的內(nèi)存地址時,也選擇不對其進行隨機化處理,而直接根據(jù)所述申請內(nèi)存大小、所述申請內(nèi)存地址和所述申請內(nèi)存權(quán)限給所述可執(zhí)行對象分配內(nèi)存地址。因為當所述可執(zhí)行對象的申請內(nèi)存權(quán)限不是RWX權(quán)限時,所述引擎收到非法惡意攻擊的危險程度相對并不高,在這種情況下就無需占用過多的系統(tǒng)時間對引擎進行保護。

在步驟S305中,根據(jù)所述隨機化內(nèi)存地址、所述申請內(nèi)存大小和所述申請內(nèi)存權(quán)限確定要分配給所述可執(zhí)行對象的內(nèi)存地址。

所述確定要分配給所述可執(zhí)行對象的內(nèi)存地址的過程常用的方法是調(diào)用一個系統(tǒng)內(nèi)存分配函數(shù)來完成。在windows系統(tǒng)下,所述系統(tǒng)內(nèi)存分配函數(shù)可以是VitualAlloc函數(shù),當然也可以是其他系統(tǒng)內(nèi)存分配函數(shù),例如直接調(diào)用Windows堆函數(shù)或者CRT堆函數(shù)等。對于不同的系統(tǒng),調(diào)用的內(nèi)存分配函數(shù)可以不一樣。

在步驟S306中,判斷所確定的內(nèi)存地址是否屬于系統(tǒng)內(nèi)存地址,如果否,則轉(zhuǎn)至步驟S307,如果是,則轉(zhuǎn)至步驟S303。

在確定了要分配給所述可執(zhí)行對象的內(nèi)存地址之后,需要對所確定的內(nèi)存地址進行是否屬于系統(tǒng)內(nèi)存地址的判斷,這一步屬于常規(guī)判斷。如果屬于系統(tǒng)內(nèi)存地址,因為系統(tǒng)內(nèi)存地址不可用,則返回步驟S303對所確定的內(nèi)存地址進行再一次的隨機化處理,直到判斷所確定的內(nèi)存地址不屬于系統(tǒng)內(nèi)存地址時,即此時所確定的內(nèi)存地址屬于用戶可用地址空間,這時,再轉(zhuǎn)至步驟S307。

在步驟S307中,將所確定的內(nèi)存地址分配給所述可執(zhí)行對象。

在判斷所確定的內(nèi)存地址屬于用戶可用地址空間后,就將所確定的內(nèi)存地址通過賦值的過程真正分配給可執(zhí)行對象。

通過上述的技術(shù)方案,首先獲取為所述可執(zhí)行對象申請內(nèi)存的內(nèi)存申請函數(shù)中的申請內(nèi)存大小、申請內(nèi)存地址和申請內(nèi)存權(quán)限,當所述申請內(nèi)存地址為空且所述申請內(nèi)存權(quán)限為可讀寫可執(zhí)行權(quán)限時,對所述申請內(nèi)存地址進行隨機化處理以得到隨機化內(nèi)存地址,然后根據(jù)所述隨機化內(nèi)存地址、所述申請內(nèi)存大小和所述申請內(nèi)存權(quán)限確定要分配給所述可執(zhí)行對象的內(nèi)存地址,當所確定的內(nèi)存地址屬于系統(tǒng)內(nèi)存地址時,返回所述對所述申請內(nèi)存地址進行隨機化處理以得到隨機化內(nèi)存地址的步驟,而當所確定的內(nèi)存地址不屬于系統(tǒng)內(nèi)存地址時,就將所確定的內(nèi)存地址分配給所述可執(zhí)行對象,這樣,如果攻擊者想要在分配給可執(zhí)行對象的內(nèi)存地址上執(zhí)行惡意代碼,由于采取了以上的隨機化處理,給可執(zhí)行對象分配的內(nèi)存地址是隨機的,攻擊者很難獲取可執(zhí)行對象的準確內(nèi)存地址,這樣,就能在一定程度上防止所述引擎被非法惡意攻擊。

以下是針對圖3中的隨機化處理方法的有效性評估。

從表1中可以看出,沒有使用本公開中的隨機化處理方法時,使用JIT編譯技術(shù)的引擎給可執(zhí)行對象分配的是連續(xù)的相差0x10000字節(jié)的內(nèi)存地址,因此攻擊者能夠猜測出可執(zhí)行對象在內(nèi)存中的準確位置。然而,使用本公開的隨機化處理方法之后,所述引擎給可執(zhí)行對象分配的地址是完全隨機的,攻擊者很難獲取可執(zhí)行對象在內(nèi)存中的準確位置。

表1

圖4是根據(jù)本公開又一種實施方式的引擎保護方法的流程圖,是圖1中步驟S101中所述的第一預(yù)設(shè)規(guī)則中的又一種。如圖4所示,該方法在圖3的步驟S301之后,還包括步驟S401和步驟S402,以及接下來的步驟S302至步驟S307。

在步驟S401中,判斷所述申請內(nèi)存大小是否是2的冪次方,如果否,則轉(zhuǎn)至步驟S402,如果是,則轉(zhuǎn)至步驟S302。

判斷所述申請內(nèi)存大小是否是2的冪次方的原因,一是通常情況下給可執(zhí)行對象分配內(nèi)存時,所述內(nèi)存大小都是以2的冪的形式對齊的;二是2的冪的大小的內(nèi)存空間適合硬件操作,有利用提高運行效率。

在步驟S402中,將所述申請內(nèi)存大小增加至大于所述申請內(nèi)存大小的最小的2的冪次方。

如果判斷所述申請內(nèi)存大小不是2的冪次方,則主動將所述申請內(nèi)存大小增加至最接近原申請內(nèi)存大小的2的冪次方,然后在進行內(nèi)存分配工作。

通過上述的技術(shù)方案,在所述獲取為所述可執(zhí)行對象申請內(nèi)存的內(nèi)存申請函數(shù)中的申請內(nèi)存大小、申請內(nèi)存地址和申請內(nèi)存權(quán)限之后,先判斷所述申請內(nèi)存大小是否是2的冪次方,當所述申請內(nèi)存大小不是2的冪次方時,將所述申請內(nèi)存大小增加至大于所述申請內(nèi)存大小的最小的2的冪次方,然后再進行后續(xù)的內(nèi)存分配,這樣,有利于提高引擎的運行效率。

圖5是根據(jù)本公開又一種實施方式的引擎保護方法的流程圖,如圖5所示,該方法包括步驟S501和步驟S502。

步驟S501,將所述保護區(qū)設(shè)置在從所分配的內(nèi)存地址的首地址開始的預(yù)設(shè)大小的內(nèi)存空間內(nèi)。

所述保護區(qū)的大小相對于所述所分配的內(nèi)存地址大小很小,例如,所述保護區(qū)的大小可以是8k。

將所述保護區(qū)設(shè)置在從所分配的內(nèi)存地址的首地址開始的預(yù)設(shè)大小的內(nèi)存空間內(nèi)時,保護區(qū)的內(nèi)存地址與所分配的內(nèi)存地址會出現(xiàn)重合,此時執(zhí)行步驟S502。

步驟S502,將所分配的內(nèi)存地址向后偏移,其中偏移的大小為所述預(yù)設(shè)大小。

在設(shè)置好保護區(qū)的地址之后,為避免內(nèi)存重合,將所分配的內(nèi)存地址向后偏移所述保護區(qū)的大小,保證保護區(qū)的內(nèi)存地址與所分配的內(nèi)存的保護地址是連續(xù)且不重合的。

通過上述的技術(shù)方案,先將所述保護區(qū)設(shè)置在從所分配的內(nèi)存地址的首地址開始的預(yù)設(shè)大小的內(nèi)存空間內(nèi),然后將所分配的內(nèi)存地址向后偏移,其中偏移的大小為所述預(yù)設(shè)大小,這樣就為可執(zhí)行對象的內(nèi)存地址空間設(shè)置了一個能夠起到保護作用的保護區(qū),由于這個保護區(qū)的地址與可執(zhí)行對象的內(nèi)存地址空間是連續(xù)的,且所述保護區(qū)的權(quán)限是不可寫,因此,當所述引擎受到非法惡意攻擊例如緩沖區(qū)溢出等攻擊時,就能夠及時的反應(yīng)報警,以使所述引擎終止程序的運行,從而起到保護所述引擎的功能。

本公開的發(fā)明人以JavaScript引擎V8、Tamarin以及Safari’s為例,編寫了一系列的測試用例,用來測試使用本公開內(nèi)容后引擎對于非法惡意攻擊的防范效果。表中的JIT引擎即使用JIT編譯技術(shù)的引擎。如表2所示,測試中的三個引擎對于測試用攻擊樣例的攻擊,防范效果都是有效的。

表2

本公開的發(fā)明人還將本公開內(nèi)容與使用JIT編譯技術(shù)的引擎常用的安全防范措施進行了調(diào)研比較,結(jié)果如表3所示,從表3中可以看出,目前大多數(shù)使用JIT編譯技術(shù)的引擎都沒有使用本公開中的發(fā)明內(nèi)容。

表3

其中,所述內(nèi)存權(quán)限限定的方法,即在背景技術(shù)中提到的,少數(shù)使用JIT編譯技術(shù)的引擎采取的實時修改內(nèi)存地址權(quán)限的方法,將分配給可執(zhí)行對象的內(nèi)存地址的寫權(quán)限與可執(zhí)行權(quán)限分開,在最初為可執(zhí)行對象分配內(nèi)存地址時分配的是具有RWX權(quán)限的內(nèi)存地址,并將權(quán)限修改為RW,在可執(zhí)行對象即將執(zhí)行時,將其內(nèi)存地址的權(quán)限修改為RX,執(zhí)行結(jié)束后再將其內(nèi)存地址的權(quán)限修改為RW,這樣處理非常消耗處理器周期,會降低引擎效率。

另外,引擎JagerMonkey是實現(xiàn)了內(nèi)存權(quán)限限定功能的,但是在默認情況下此功能未被開啟,因此默認其不具有此功能。

本公開的發(fā)明人還針對不同的使用JIT編譯技術(shù)的引擎進行了10000次的內(nèi)存分配操作,表4顯示了在使用和不使用本公開內(nèi)容的情況下的所用時間以及系統(tǒng)開銷,如表4所示,使用本公開內(nèi)容的引擎的系統(tǒng)開銷在10%以內(nèi),這是在可以接受的范圍內(nèi)的;且所用時間的差距也在可以接收的范圍內(nèi)。

表4

圖6是根據(jù)本公開一種實施方式的引擎保護裝置100的示意框圖。如圖6所示,該裝置包括:

內(nèi)存地址分配模塊10,用于按照第一預(yù)設(shè)規(guī)則給可執(zhí)行對象分配內(nèi)存地址;

保護區(qū)設(shè)置模塊20,用于按照第二預(yù)設(shè)規(guī)則為所分配的內(nèi)存地址設(shè)置保護區(qū),其中所述保護區(qū)的權(quán)限為不可寫。

通過上述技術(shù)方案,當可執(zhí)行對象申請內(nèi)存時,內(nèi)存地址分配模塊10先按照第一預(yù)設(shè)規(guī)則給可執(zhí)行對象分配內(nèi)存地址,然后保護區(qū)設(shè)置模塊20按照第二預(yù)設(shè)規(guī)則為所分配的內(nèi)存地址設(shè)置保護區(qū),其中所述保護區(qū)的權(quán)限為不可寫,這樣就能夠在一定程度上保護所述內(nèi)存地址,且避免其引擎在可執(zhí)行對象執(zhí)行時被非法惡意攻擊。

圖7是根據(jù)本公開又一種實施方式的引擎保護裝置100中的內(nèi)存地址分配模塊10的示意框圖。如圖7所示,所述內(nèi)存地址分配模塊10包括:

內(nèi)存地址默認分配子模塊101,用于根據(jù)默認內(nèi)存地址分配規(guī)則給所述可執(zhí)行對象分配內(nèi)存地址。

通過上述技術(shù)方案,內(nèi)存地址默認分配子模塊101先根據(jù)默認內(nèi)存地址分配規(guī)則給所述可執(zhí)行對象分配內(nèi)存地址,然后保護區(qū)設(shè)置模塊20再按照第二預(yù)設(shè)規(guī)則為所分配的內(nèi)存地址設(shè)置保護區(qū),其中所述保護區(qū)的權(quán)限為不可寫,這樣提供了一種通過為所分配的內(nèi)存地址設(shè)置保護區(qū)進而來保護引擎不受非法惡意攻擊的方法。

圖8是根據(jù)本公開又一種實施方式的引擎保護裝置100中的內(nèi)存地址分配模塊10的示意框圖。如圖8所示,所述內(nèi)存地址分配模塊10包括:

獲取子模塊102,用于獲取為所述可執(zhí)行對象申請內(nèi)存的內(nèi)存申請函數(shù)中的申請內(nèi)存大小、申請內(nèi)存地址和申請內(nèi)存權(quán)限;

內(nèi)存地址隨機化子模塊103,用于當所述申請內(nèi)存地址為空且所述申請內(nèi)存權(quán)限為可讀寫可執(zhí)行權(quán)限時,對所述申請內(nèi)存地址進行隨機化處理以得到隨機化內(nèi)存地址;

內(nèi)存地址確定子模塊104,用于根據(jù)所述隨機化內(nèi)存地址、所述申請內(nèi)存大小和所述申請內(nèi)存權(quán)限確定要分配給所述可執(zhí)行對象的內(nèi)存地址;

內(nèi)存地址判斷子模塊105,用于判斷所述內(nèi)存地址確定子模塊所確定的內(nèi)存地址是否屬于系統(tǒng)內(nèi)存地址,并當所確定的內(nèi)存地址屬于系統(tǒng)內(nèi)存地址時,通知所述內(nèi)存地址隨機化子模塊重新對所述申請內(nèi)存地址進行隨機化處理以得到隨機化內(nèi)存地址;

內(nèi)存地址分配子模塊106,用于當所述內(nèi)存地址判斷子模塊105判斷所確定的內(nèi)存地址不屬于系統(tǒng)內(nèi)存地址時,將所確定的內(nèi)存地址分配給所述可執(zhí)行對象。

通過上述的技術(shù)方案,首先獲取子模塊102獲取為所述可執(zhí)行對象申請內(nèi)存的內(nèi)存申請函數(shù)中的申請內(nèi)存大小、申請內(nèi)存地址和申請內(nèi)存權(quán)限,內(nèi)存地址隨機化子模塊103在當所述申請內(nèi)存地址為空且所述申請內(nèi)存權(quán)限為可讀寫可執(zhí)行權(quán)限時,對所述申請內(nèi)存地址進行隨機化處理以得到隨機化內(nèi)存地址,然后內(nèi)存地址確定子模塊104根據(jù)所述隨機化內(nèi)存地址、所述申請內(nèi)存大小和所述申請內(nèi)存權(quán)限確定要分配給所述可執(zhí)行對象的內(nèi)存地址,內(nèi)存地址判斷子模塊105在當所確定的內(nèi)存地址屬于系統(tǒng)內(nèi)存地址時,返回所述對所述申請內(nèi)存地址進行隨機化處理以得到隨機化內(nèi)存地址的步驟,而內(nèi)存地址分配子模塊106在當所確定的內(nèi)存地址不屬于系統(tǒng)內(nèi)存地址時,將所確定的內(nèi)存地址分配給所述可執(zhí)行對象,這樣,如果攻擊者想要在分配給可執(zhí)行對象的內(nèi)存地址上執(zhí)行惡意代碼,由于采取了以上的隨機化處理,給可執(zhí)行對象分配的內(nèi)存地址是隨機的,攻擊者很難獲取可執(zhí)行對象的準確內(nèi)存地址,這樣,就能在一定程度上防止所述引擎被非法惡意攻擊。

圖9是根據(jù)本公開又一種實施方式的引擎保護裝置100中的內(nèi)存地址分配模塊10的示意框圖。如圖9所示,在獲取子模塊102獲取為所述可執(zhí)行對象申請內(nèi)存的內(nèi)存申請函數(shù)中的申請內(nèi)存大小、申請內(nèi)存地址和申請內(nèi)存權(quán)限之后,所述內(nèi)存地址分配模塊10還包括:

申請內(nèi)存大小判斷子模塊107,用于判斷所述申請內(nèi)存大小是否是2的冪次方;

申請內(nèi)存大小增加子模塊108,用于當所述申請內(nèi)存大小不是2的冪次方時,將所述申請內(nèi)存大小增加至大于所述申請內(nèi)存大小的最小的2的冪次方。

通過上述的技術(shù)方案,在獲取子模塊102獲取為所述可執(zhí)行對象申請內(nèi)存的內(nèi)存申請函數(shù)中的申請內(nèi)存大小、申請內(nèi)存地址和申請內(nèi)存權(quán)限之后,申請內(nèi)存大小判斷子模塊107判斷所述申請內(nèi)存大小是否是2的冪次方,申請內(nèi)存大小增加子模塊108在當所述申請內(nèi)存大小不是2的冪次方時,將所述申請內(nèi)存大小增加至大于所述申請內(nèi)存大小的最小的2的冪次方,然后再進行后續(xù)的內(nèi)存分配,這樣,有利于提高引擎的運行效率。

圖10是根據(jù)本公開一種實施方式的引擎保護裝置100中的保護區(qū)設(shè)置模塊20的示意框圖。如圖10所示,所述保護區(qū)設(shè)置模塊20包括:

保護區(qū)設(shè)置子模塊201,用于將所述保護區(qū)設(shè)置在從所分配的內(nèi)存地址的首地址開始的預(yù)設(shè)大小的內(nèi)存空間內(nèi);

內(nèi)存地址偏移子模塊202,用于將所分配的內(nèi)存地址向后偏移,其中偏移的大小為所述預(yù)設(shè)大小。

通過上述的技術(shù)方案,保護區(qū)設(shè)置子模塊201先將所述保護區(qū)設(shè)置在從所分配的內(nèi)存地址的首地址開始的預(yù)設(shè)大小的內(nèi)存空間內(nèi),然后內(nèi)存地址偏移子模塊202將所分配的內(nèi)存地址向后偏移,其中偏移的大小為所述預(yù)設(shè)大小,這樣就為可執(zhí)行對象的內(nèi)存地址空間設(shè)置了一個能夠起到保護作用的保護區(qū),由于這個保護區(qū)的地址與可執(zhí)行對象的內(nèi)存地址空間是連續(xù)的,且所述保護區(qū)的權(quán)限是不可寫,因此,當所述引擎受到非法惡意攻擊例如緩沖區(qū)溢出等攻擊時,就能夠及時的反應(yīng)報警,以使所述引擎終止程序的運行,從而起到保護所述引擎的功能。

以上結(jié)合附圖詳細描述了本公開的優(yōu)選實施方式,但是,本公開并不限于上述實施方式中的具體細節(jié),在本公開的技術(shù)構(gòu)思范圍內(nèi),可以對本公開的技術(shù)方案進行多種簡單變型,這些簡單變型均屬于本公開的保護范圍。

另外需要說明的是,在上述具體實施方式中所描述的各個具體技術(shù)特征,在不矛盾的情況下,可以通過任何合適的方式進行組合。為了避免不必要的重復(fù),本公開對各種可能的組合方式不再另行說明。

此外,本公開的各種不同的實施方式之間也可以進行任意組合,只要其不違背本公開的思想,其同樣應(yīng)當視為本公開所公開的內(nèi)容。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
宿州市| 玉山县| 岳阳县| 麻阳| 克拉玛依市| 河西区| 米林县| 泰和县| 松桃| 新营市| 扶余县| 龙门县| 旌德县| 衡阳县| 宜兰市| 玉龙| 沧州市| 平谷区| 罗甸县| 化州市| 武义县| 太谷县| 忻城县| 新乡市| 安塞县| 彭水| 蓝山县| 旌德县| 土默特左旗| 太和县| 务川| 彰武县| 鄂伦春自治旗| 莱州市| 婺源县| 高雄县| 冀州市| 谢通门县| 康乐县| 土默特右旗| 北海市|