亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種檢測和防止java腳本程序中不安全行為的方法和裝置的制作方法

文檔序號:6570297閱讀:261來源:國知局
專利名稱:一種檢測和防止java腳本程序中不安全行為的方法和裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及計算機編程領(lǐng)域;更具體地,本發(fā)明涉及檢測和防止 程序中的不安全行為。
背景技術(shù)
網(wǎng)絡(luò)瀏覽器的安全是個嚴重的問題??蛻舳藶g覽器所遭受的無數(shù) 攻擊已經(jīng)危及了敏感用戶信息(密碼,在線身份)完整性的安全,并 且嚴重降低了客戶端機器的性能。這些攻擊經(jīng)常濫用流行的客戶端腳 本語言如JAVA中發(fā)現(xiàn)的計算設(shè)施,或濫用瀏覽器和腳本解釋器中的 實施錯誤。潛在地,這種安全狀況在蜂窩電話設(shè)備中更糟糕,這些設(shè) 備具有更多樣的移動瀏覽器(以及潛在的安全缺陷)和供惡意腳本濫 用設(shè)備資源的機會。
通常的有害攻擊的一些例子包括跨站點腳本,釣魚,拒絕服務(wù)以 及濫用API,以下詳細描述。
跨站點腳本(XSS)是最重要的安全弱點之一,常見于基于網(wǎng)絡(luò) 的應(yīng)用。此弱點允許攻擊者向由可信任的網(wǎng)絡(luò)服務(wù)器產(chǎn)生的網(wǎng)頁中注 入一段腳本(例如Java腳本)。瀏覽器執(zhí)行該注入的代碼,如同其是
由服務(wù)器所提供。由于瀏覽器的安全限制是基于網(wǎng)頁的來源,在與網(wǎng) 絡(luò)應(yīng)用域相同的許可下,該代碼被瀏覽器執(zhí)行,繞過了安全限制。這
種情況如圖2所示。 一般而言,XSS弱點很容易被利用。無辜的用戶
點擊電子郵件或即時消息中的鏈接,或簡單地閱讀網(wǎng)絡(luò)論壇,它就可
能啟動。利用XSS弱點,惡意方可以發(fā)起多種攻擊,范圍包括從騷擾 行為(例如改變?yōu)g覽器主頁),到呈現(xiàn)錯誤信息(例如通過動態(tài)修改主 機HTML代碼),到搶劫帳戶(例如通過從cookie中盜取用戶的登錄 名和密碼)。結(jié)合利用瀏覽器的實現(xiàn)缺陷(安全漏洞),黑客可能制造 進一步的嚴重破壞,如讀取用戶文件以及執(zhí)行惡意程序。
由于Java腳本提供了對一些手機資源的訪問,其訪問或通過文檔 目標(biāo)模型(DOM),或通過提供網(wǎng)絡(luò)接入的各種API,惡意Java腳本 代碼就可能損害這些資源。重要資源包括磁盤空間,通過Java腳本 具有的寫入cookie的功能,這是DOM的一部分;網(wǎng)絡(luò)利用,通過Java 腳本能夠打開其來源站點的連接的功能(特別地,這種利用可能隱藏 在用戶關(guān)注的窗口生出的子窗口中,因而導(dǎo)致了無意識的網(wǎng)絡(luò)利用); 用戶接口元素,如窗口大小,定位等等(通過DOM, Java腳本具有 修改其打開的窗口的這些屬性的能力);以及瀏覽器元素的預(yù)期功能, 如返回按鈕等等(當(dāng)控制線程試圖離開特定頁面時,通過返回按鈕或 點擊不同的鏈接,惡意Java腳本可對發(fā)生的時間重編程。這樣的Java 腳本能執(zhí)行任意動作,如打開多個窗口等等)。
釣魚(也稱為欺騙))是基于社會工程的攻擊形式。它通過假扮作 受信任方(例如銀行網(wǎng)站)欺騙受害者使其交出敏感信息(如密碼和 信用卡號碼)。釣魚攻擊的數(shù)量正在增長,其典型目標(biāo)是銀行客戶和在 線支付服務(wù)。這種攻擊的損失可能很嚴重,如真實的財產(chǎn)損失或身份 遭竊。
在如IE之類的瀏覽器中,Java腳本通過一個名為clipboardData 的對象訪問用戶的剪貼板。該對象為三種剪貼板活動提供API:清除、 讀和寫。例如,下列簡單腳本從剪貼板中讀取文字并顯示在瀏覽器中
document.write(window.clipboardData.getData('Text,));
不難看出,剪貼板可以潛在地用做在當(dāng)前網(wǎng)頁和系統(tǒng)其他部分之
間共享的資源。這就提供了一種繞過同源策略的渠道。對象
clipboardData不是為了在源自不同域的頁面之間轉(zhuǎn)移數(shù)據(jù)。不幸地, 上面這一行簡單的腳本成功地得到了剪貼板數(shù)據(jù),即使該數(shù)據(jù)之前未 被來自當(dāng)前域的頁面設(shè)定過。
Java腳本API的惡意使用可造成惱人的效果,或便于發(fā)起其他攻 擊。 一種常見的這樣的惡意使用是使用彈出窗口 (或彈下窗口)?,F(xiàn)在 己經(jīng)有許多可用的彈出窗口阻止器。
一些現(xiàn)有的解決腳本攻擊的方法是特定的(ad-hoc)且非常有限。 首先,實施漏洞可以通過補丁填補,但是過去15年的個人計算經(jīng)驗表 明,不能指望這樣的主動行為。其次,存在瀏覽器插件工具以抵御如 彈出窗口的騷擾,并提供啟發(fā)以檢査釣魚攻擊。然而,這些工具暗中 使用的安全策略不可由用戶或操作者擴展,且僅捕捉特定攻擊類型的 特定事件,而不是整個攻擊類型本身。例如,彈出窗口阻止器不限制 Java腳本打開的窗口的數(shù)量或位置,或這些窗口是否進行無意識的網(wǎng) 絡(luò)通信。

發(fā)明內(nèi)容
公開了一種檢測和防止腳本程序中不安全行為的方法和裝置。在 一個實施例中,方法包括基于第一安全策略對腳本程序進行靜態(tài)分析, 以檢測腳本程序中的不安全行為,如果在執(zhí)行腳本程序時會違反安全 策略,則防止腳本程序的執(zhí)行。


通過以下給出的詳細描述,以及本發(fā)明各種實施例的附圖,可以 更全面地理解本發(fā)明。然而,不能認為這些附圖是將本發(fā)明限于特定 的實施例,而僅是為了解釋和理解本發(fā)明。
圖1示出了采用基于靜態(tài)分析的、本公開的技術(shù)的總體框架的方 框圖。
圖2示出了跨站點腳本的示例。
圖3示出了與XSS相關(guān)的Java腳本和DOM API的本質(zhì)提取內(nèi)容。
圖4示出了基于流的工具的處理過程一個實施例的方框圖。
圖5示出了說明基于流的工具的Java腳本工具的示例。
圖6示出了使用該工具的系統(tǒng)的方框圖。
圖7示出了使用該工具與優(yōu)化的系統(tǒng)的方框圖。
圖8示出了采用基于代碼重寫的、本公開技術(shù)的總體框架的方框圖。
圖9示出了在能夠濫用API的情況下進行代碼重寫的系統(tǒng)的一個 實施例的方框圖。
圖10示出了在能夠濫用API的情況下進行代碼重寫的系統(tǒng)的另 一個實施例的方框圖。
圖11示出了采用本公開技術(shù)的總體架構(gòu)的一個實施例的方框圖。
圖12示出了計算機系統(tǒng)的一個實施例的方框圖。
具體實施例方式
本發(fā)明提供了多種檢測和防止腳本(如Java腳本)程序違反給定 的安全策略的技術(shù)。此處描述的技術(shù)可以用于抵御跨站點腳本攻擊、 拒絕服務(wù)攻擊及其他濫用瀏覽器和/或Java腳本解釋器實現(xiàn)缺陷的攻 擊。在實施例中,該技術(shù)同時采用了靜態(tài)分析和動態(tài)監(jiān)控以過濾將執(zhí) 行的腳本。通過過濾器的腳本或是被安全策略證明是安全的,或是在 其在運行期違反安全策略之前促使其停止執(zhí)行。這些技術(shù)的特征之一 是不修改腳本語義,因而確保腳本中任何有用的功能不會被誤修改。
基于給定的安全策略,給出多種技術(shù)限制不信任腳本的行為。此 處描述的技術(shù)可用于抵御釣魚、濫用共享資源、惡意利用API、非預(yù) 期行為、以及拒絕服務(wù)的攻擊。在一個實施例中,采用了在目標(biāo)腳本 中進行代碼重寫的技術(shù)。與阻止?jié)撛诘膼阂饽_本不同,代碼被修改以 使其安全執(zhí)行。因而,在一個實施例中,產(chǎn)生的代碼保證不會發(fā)生運 行期錯誤。這些技術(shù)的一個與眾不同的特征在于,腳本語義在分析期 間被修改,以防止善意腳本(次假陽性)的過早終止。這補充了之前 段落描述的通過靜態(tài)分析和動態(tài)監(jiān)控來禁止違法策略的技術(shù)。
在一個實施例中,安全屬性由可擴展的策略規(guī)范語言表述,可覆
蓋多種攻擊,且提出的架構(gòu)可用于在腳本語言,如Java腳本中實施這 些技術(shù)。在一個實施例中,策略語言用于編寫過濾器和由于抵御多種 不同類型攻擊的工具。以下給出示例,以說明其如何幫助抵御XSS、 釣魚、DOS以及未確認輸入和參數(shù)。這也有助于在開發(fā)安全補丁或病 毒定義之前采用快速預(yù)補丁過濾器。
在以下的描述中,闡述了大量細節(jié),以提供本發(fā)明的更加完整的 解釋。然而,很顯然,對本領(lǐng)域技術(shù)人員而言,沒有這些具體細節(jié), 也可以實施本發(fā)明。在其他實例中,公知結(jié)構(gòu)和設(shè)備以框圖而非細節(jié) 的形式示出,以避免使本發(fā)明含糊。
以下詳細描述中的一部分針對在計算機存儲器中對數(shù)據(jù)比特的算 法和符號的運算表示給出的。這些算法描述和表示是數(shù)據(jù)處理領(lǐng)域的 技術(shù)人員使用的最有效地向本領(lǐng)域其他技術(shù)人員傳遞其工作實質(zhì)的手 段。此處,算法通常被設(shè)想為導(dǎo)向所希望結(jié)果的有條理的步驟序列。 這些步驟需要物理量的物理操作。通常,雖然并不是必須的,這些量 采用電或磁信號的形式,能夠進行存儲、轉(zhuǎn)發(fā)、合并、比較及其他操 作。有時,原則上出于通用的原因,這些信號以比特、值、元素、符 號、字符、術(shù)語、數(shù)字等等的方式表示被證明是方便的。
然而,應(yīng)記住,所有這些以及相似的術(shù)語是與合適的物理量相關(guān) 聯(lián)的,且僅是便于用于這些量的標(biāo)記。除非特別聲明,否則在以下討 論中顯而易見,應(yīng)理解在整個描述中,使用諸如"處理"或"計算"或"運 算"或"判定"或"顯示"等等之類的術(shù)語的討論涉及計算機系統(tǒng)或類似 電子計算設(shè)備的作用和處理,其處理計算機系統(tǒng)寄存器和存儲器中以 物理(電子)量表示的數(shù)據(jù)并將其轉(zhuǎn)換為計算機系統(tǒng)存儲器或寄存器 或其它這樣的信息存儲、轉(zhuǎn)換或顯示設(shè)備中的類似的以物理量表示的 其他數(shù)據(jù)。
本發(fā)明同時涉及進行此操作的裝置。該裝置可為所需目的而專門 組成,或可包括通用目的計算機,選擇性地由計算機中存儲的計算機 程序激活或配置。這樣的計算機程序可存儲于計算機可讀的存儲介質(zhì) 中,如,但不局限于,任何類型的碟片包括軟盤、光盤、CD-ROM以 及磁光盤、只讀存儲器(ROM)、隨機存取存儲器(RAM)、 EPROM、
EEPEOM,磁或光卡,或任何類型的適合存儲電子指令的介質(zhì),每一 種都與計算機系統(tǒng)總線耦合。
在此給出的本算法和顯示并不自然地涉及任何特定的計算機或其 他裝置。各種通用目的系統(tǒng)可與遵照此處教導(dǎo)的程序共同使用,或者, 構(gòu)造更專用的裝置實施所需要的方法步驟可能被證明是方便的。各種 這樣的系統(tǒng)所需要的結(jié)構(gòu)將在以下描述中給示。此外,本發(fā)明并不參 照任何特定的編程語言而描述。應(yīng)理解,如此處描述的,可以使用各 種編程語言實現(xiàn)本發(fā)明教導(dǎo)的方法。
機器可讀介質(zhì)包括任何用于以機器可讀的形式存儲或傳輸信息的 裝置。例如,機器可讀介質(zhì)包括只讀存儲器(ROM),隨機存取存儲 器(RAM),磁盤存儲介質(zhì),光盤存儲介質(zhì),閃存設(shè)備,電、光、聲 或其他形式的傳播信號(例如載波、紅外信號、數(shù)字信號等)等等。
基于靜態(tài)分析的技術(shù)概述
此處描述靜態(tài)分析技術(shù),可用于防止各種攻擊,包括跨站點腳本、 拒絕服務(wù)攻擊,API濫用,并適合基于公共可擴展策略的框架。圖l是 表示采用這樣技術(shù)的總體框架的方框圖。參照圖l,程序代碼101 (例 如Java腳本代碼)輸入靜態(tài)分析器102?;诎踩呗?03,靜態(tài)分析 器102檢查程序代碼101.,試圖在不執(zhí)行它的情況下靜態(tài)判斷其安全性。 在不安全代碼的情況下,靜態(tài)分析器102立即拒絕該代碼。否則,代碼 輸入動態(tài)解釋器104,其對程序代碼101進行0個或多個動態(tài)檢査,以確 保不發(fā)生運行期違規(guī)。在實施例中,動態(tài)解釋器104僅在不能靜態(tài)判斷 運行期結(jié)果的位置進行檢查。若運行期將要發(fā)生違規(guī),則這些檢查用 于停止程序的執(zhí)行。在一個實施例中,提供了策略語言和相關(guān)的技術(shù), 用于編寫代碼濾器以抵御多種不同類型的攻擊。
抵御跨站點腳本攻擊
在一個實施例中,提供了客戶端解決方案。與識別哪段代碼是惡 意的并過濾惡意代碼的方法不同,該方法是基于通過關(guān)注影響用戶安 全的關(guān)鍵操作以實現(xiàn)對關(guān)鍵用戶資源的保護。通過這樣做,該方法對
用戶的判斷力提出警告。
為此目的,所有關(guān)鍵資源被統(tǒng)一處理,并稱為secret (秘密)。secret 可以是下列任一個實體,例如cookie文件、密碼域(或密碼類型的 文本框)、瀏覽器設(shè)定、來自未初始化剪貼板的數(shù)據(jù)以及歷史條目。為 此目的,所有對URL的網(wǎng)絡(luò)請求都統(tǒng)一作為load(URL)處理。load可以 是下列任一實體,例如加載當(dāng)前頁(例如location.href = URL)、表 格(例如action-URL)、圖像(例如img src = URL)、框架(例如iframe src-URL)以及層對象load(URL, width)。
基于上述對用戶資源的統(tǒng)一處理,圖3示出了與XSS相關(guān)的Java腳 本和DOMAPI的本質(zhì)的提取內(nèi)容。域名D, URLU及值V都是字符串。 布爾值b為O或l。環(huán)境T將變量X映射為類型T。類型T是域名列表。表 達式為下列之一secret、對子表達式op、值V或變量X的運算。命令 為賦值、條件、網(wǎng)絡(luò)請求或終止。
基于流的工具
在一個實施例中,靜態(tài)分析器向關(guān)鍵用戶資源標(biāo)記其擁有者(域 名,在同源策略中使用),其信息流由靜態(tài)分析器分析,并且,動態(tài)解 釋器在關(guān)鍵信息將要發(fā)送至不同于當(dāng)前HTML源的域之處插入運行期
檢查(警告)。圖4是基于流的工真的處理過程的一個實施例的方框圖, 是所公開的基于靜態(tài)分析的通用技術(shù)的特別實例。參照圖4, Java腳本 代碼401輸入流分析器402并由其接收,流分析器402根據(jù)信息流策略 403將各種代碼資源(例如URL、 cookie等)進行標(biāo)記。產(chǎn)生的經(jīng)標(biāo)記 的代碼輸入動態(tài)解釋器404,以在由流分析器402表示的程序點處插入 檢査點。在一個實施例中,若將要發(fā)生違規(guī),則插入的檢查點將阻止 程序執(zhí)行,因此產(chǎn)生的代碼在運行期總是安全執(zhí)行。
圖5是Java腳本工具的示例,清晰地說明了標(biāo)記是如何注釋的,以 及檢查點是如何插入的。這是在靜態(tài)環(huán)境?的幫助下實施的。該環(huán)境 幫助判定表達式的秘密性。包含當(dāng)前域秘密信息的表達式具有以下其 中之一該表達式是secret;該表達式包含秘密子表達式如參數(shù);以及 該表達式是一個變量且由當(dāng)前域名標(biāo)記過。該工具系統(tǒng)檢査程序代碼并在需要時進行更改。對于賦值,該系
統(tǒng)更新環(huán)境,將賦值對象標(biāo)記為相應(yīng)的秘密。對加載URL,若該URL 包含不屬于如該URL中所寫的目標(biāo)域的秘密信息,該系統(tǒng)插入對用戶 的判斷力的警告。該系統(tǒng)在使用期間不改變其他命令,此規(guī)則是微不 足道的并在此省略。
放松條件的工具
在可選實施例中,一些放松條件的方法可以用于更容易地實施(較 少的規(guī)則),但其精確性較低(潛在地有更多用戶相互作用)??墒褂?以下可選實施例的組合。
在一個可選實施例中,為了在讀取secret后防止load(URL),執(zhí)行
以下工具。在程序開始處,對用戶資源使用全局標(biāo)記變量。 一旦秘密 條目被讀取,該標(biāo)記就被設(shè)置。在可能泄漏這些資源的API調(diào)用前, 插入代碼以檢查該標(biāo)記是否被設(shè)置。若標(biāo)記為設(shè)置,則API照常繼續(xù)。 否則,插入的代碼將對用戶提出警告,并詢問是否繼續(xù)。該工具所遵 照的規(guī)則如下
卜fVogrom今/ := 0; /Vo,am'
secre《secret) secref(op(W))
sgcrei(g) 爭卜C斗(7 # h X :=C7嶺/ := 1;X := E;C7'
_# <7 =4> <7_
*卜load(£/);<7'=^/ 咖m[loaid(t/)] 1oad(tT);(7'
在另一可選實施例中,為防止嵌入與load(URL)中的secret,同時 禁止在load參數(shù)中使用變量,使用以下工具。特別地,URL作為load 的參數(shù)進行分析并檢査以判斷其是否包含secret或變量。<formula>formula see original document page 11</formula>
在一個實施例中,為禁止指針指向來自不同于當(dāng)前HTML源的域 的腳本,使用以下工具。當(dāng)加載URL時,檢査URL的域及URL的目標(biāo)。 若該域不是當(dāng)前域且其目標(biāo)是Java腳本文件,則插入警告并詢問用戶
是否繼續(xù)。否則,加載照常繼續(xù)。
nain W) — curjdo邁 pm'se([/) = /咖ascrip《 卜C* =4 C7'
*卜load(卩);C斗簡-打[load( 7);(7'
do nain(t/") = cur_doia or戸rse(C/") - j肌ascri;pi ^卜C C ^卜1oad(l/); C1oad([7); C'
在一個實施例中,工具可同其他補充技術(shù)一起應(yīng)用,以較少假陽 性的數(shù)量。例如,白名單(黑名單)可用于允許(阻止)已知的安全 (易受攻擊)的站點。
抵御拒絕服務(wù)攻擊
在一個實施例中,為檢測并防止拒絕服務(wù)攻擊,對涉及資源濫用 的API調(diào)用進行限制。定義表示這種限制的特別語言如下
Policy := (FunctionSpec, InstrumentationSpec)
FunctionSpec := (FunctionName, Arglist) Arglist := Arg * Arg := Var | Const
InstrumentationSpec := Instrumentation * Instrumentation := Pred(Arg) | StaticPred(Arg) Pred(Arg) := Compare(Arg, Arg) | Pred(Arg) AND Pred(Arg) |
Pred(Arg) OR Pred(Arg) | NOT Pred(Arg) | Fun(Arg)
StaticPred(Arg) := Compare(Arg, Const) |
StaticPred(Arg) AND StaticPred(Arg) | StaticPred(Arg) OR StaticPred(Arg) | NOT StaticPred(Arg) Fun(Arg) := Arg IN Arg* Compare(x, y):=x = y(x<y|x>y|
Compare (x, y) AND Compare (x, y) 安全策略由上面的語言表示。無論何時當(dāng)一段給定的Java腳本代 碼與策略中的函數(shù)調(diào)用相匹配,對應(yīng)的動態(tài)檢查就在調(diào)用前插入。圖5 是使用該工具的系統(tǒng)方框圖。參照圖6,程序代碼601 (例如Java腳本 代碼)輸入動態(tài)工具單元602并由其接收,動態(tài)工具單元602與包含安 全過濾器的策略603中指定的函數(shù)調(diào)用相匹配。若找到匹配,動態(tài)工具 單元602在該函數(shù)調(diào)用前加入動態(tài)檢查。 一旦結(jié)束,動態(tài)工具單元602 將代碼以安全執(zhí)行的形式輸出D
在一個實施例中,對插入的動態(tài)工具進行進一步靜態(tài)優(yōu)化。這在 上面的語言中由StaticPred表示。若與給定Java腳本代碼段匹配的安全 策略包括一些StaticPred作為工具的一部分,則對這些斷言是否成立進 行靜態(tài)判定。這可以消除一些動態(tài)工具,以增加最終代碼的效率,并 可能在StaticPred之一失敗的情況下預(yù)清空整段代碼的執(zhí)行。圖7是使 用該工具的系統(tǒng)方框圖。參照圖7,程序代碼701 (例如Java腳本代碼) 輸入動態(tài)工具單元702并由其接收,動態(tài)工具單元702與包含安全過濾 器的策略703中指定的函數(shù)調(diào)用相匹配。若找到匹配,動態(tài)工具單元702 在該函數(shù)調(diào)用前加入動態(tài)檢查。 一旦結(jié)束,動態(tài)工具單元702輸出經(jīng)處 理的代碼704。此后,經(jīng)處理的代碼704輸入靜態(tài)優(yōu)化單元705,由其判 定StaticPred斷言是否成立。對靜態(tài)成立的情況,由動態(tài)工具單元702 加入的對應(yīng)的動態(tài)檢査將從經(jīng)處理的代碼704中移除。接著輸出結(jié)果代 碼。
基于代碼重寫的技術(shù)概述
下面描述代碼重寫技術(shù),可用于對抗各種攻擊,包括釣魚、共享 資源如剪貼板的濫用、惡意使用API、非預(yù)期行為以及拒絕服務(wù)攻擊。
圖8是這些技術(shù)的一個實施例的總體框架的方框圖。參照圖8,由代碼 重寫單元802接收程序代碼801 (例如Java腳本代碼)?;谥付税踩?轉(zhuǎn)換的安全策略803,代碼重寫單元802用執(zhí)行相同功能的安全版本的 代碼替換將程序代碼801中潛在的惡意(Java腳本)代碼。在一個實施 例中,由于安全策略指定的轉(zhuǎn)換小心地改變了代碼語義以保證安全, Java腳本代碼總是被安全執(zhí)行,不發(fā)生運行期錯誤。
在一個實施例中,這些技術(shù)包括策略語言和相關(guān)的技術(shù),用于指 定代碼重寫器,以低于多種不同類型的攻擊,其細節(jié)如下所述。
抵御釣魚
為了抵御釣魚,在一個實施例中,網(wǎng)站的實際信息被展示給用戶, 因而加大了攻擊者偽裝為其他人的難度。
網(wǎng)頁的源
關(guān)于網(wǎng)頁的源,瀏覽器的地址條顯示了從其加載當(dāng)前網(wǎng)頁的URL。 其內(nèi)容不在Java腳本的控制之內(nèi)。然而,在打開新窗口 (例如彈出窗 口)時,Java腳本能夠?qū)⑺械刂窏l隱藏起來。釣魚攻擊經(jīng)常使用它 來隱藏當(dāng)前網(wǎng)頁的源。瀏覽器的相關(guān)的導(dǎo)航控制是狀態(tài)條。Java腳本 可以將狀態(tài)條的內(nèi)容更新為任意文本,也可以選擇不顯示狀態(tài)條。
在一個實施例中,工具單元使用網(wǎng)頁的內(nèi)容,使地址條和狀態(tài)條 基于瀏覽器用戶給定的用戶定制的策略而正確顯示。這可以通過檢査 網(wǎng)元中用于打開新窗口的API,并重寫隱藏有用導(dǎo)航控制的代碼來完成。
以下示出了用于創(chuàng)建新窗口的工具示例。在本實施中,檢查設(shè)置 地址和狀態(tài)標(biāo)記為假的途徑,包括設(shè)定其為假、非或零,或簡單地將 其省略。
open(URL, windowName, location=false, status=false)
=> open(URL, windowName, location=true, status=true) 腳本打開新窗口還有其他途徑(API)。例如,無邊框彈出窗口可 以由特別的API createP叩up創(chuàng)建。在一個實施例中,工具單元使用基 于用戶策略的代碼。若策略允許無邊框彈出窗口 (選擇該選項說明用 戶相信其受過足夠的教育,不至于陷入無邊框彈出窗口中的釣魚攻擊, 如從不點擊其中的任何鏈接),則該API的調(diào)用保留其原樣。若策略不 允許無邊框彈出窗口 ,工具單元使用基本打開API編寫該API的調(diào)用。
更新狀態(tài)條
在本技術(shù)的一個實施例中,關(guān)于更新狀態(tài)條,對所得代碼進行重 寫,以在狀態(tài)條中顯示頁面的源。直接地,這可以通過對所有窗口插 入下面的腳本來完成
window, status-location.href.
實際上,網(wǎng)頁利用狀態(tài)條顯示各種信息。在一個實施例中,代碼 工具單元使用對狀態(tài)條的訪問以顯示給定文本信息的連接及頁面的 源。
window.status="Welcome to DoCoMo USA Labs!"
window.status=location.href+ " | " + "\Velcome to DoCoMo USA
Labs!"
在一個實施例中,HTML的動態(tài)特性被用于交替顯示頁面的源及 給定的文本信息。這樣的示例需要使用高級Java腳本特性,如定時器 API。在一個實施例中,除了源(域名),甚至顯示了更多關(guān)于當(dāng)前網(wǎng) 頁的信息。 一些示例包括其主機在何處以及何時創(chuàng)建。在瀏覽器窗口 的分離區(qū)域中,或在"氣球"中顯示這樣的信息也是可能的。
作為總結(jié),通過使用該程序(Java腳本)代碼,與網(wǎng)頁的主機域 相關(guān)的信息可以清晰地顯示。這有助于用戶評估欺騙性URL (例如, curious.com不可能是花旗銀行的網(wǎng)站,或美洲銀行不可能將主機設(shè)在 日本)。
欺騙性URL
攻擊者利用URL中的特殊字符欺騙用戶。通過檢査網(wǎng)頁的內(nèi)容, 我們可以識別這些可疑的URL。
符號(^有時在URL中使用。其本意是在該符號前允許包括用戶名 和/或密碼域。真正的URL目標(biāo)是接下來的域名。例如, http:〃docomo.com(^curious.com是指curious.com而不是docomo.com。 這樣的URL可欺騙用戶使其相信網(wǎng)頁的假源。通過識別這樣的URL,
我們可以使用之前的技術(shù)將實際的域名顯示給用戶。
類j以i也,http:〃www.docomo.com.curious.com/也具有欺騙'性。此夕卜, 使用百分比符號跟隨數(shù)字(換碼順序)通常除了欺騙沒有實際用途。 在一個實施例中,對所有這些可疑的URL進行分析并在顯示給用戶之 前進行合適的分解。
可以使用通用的現(xiàn)有方法作為上述技術(shù)的補充。 一方面,可以對 已知的釣魚域保持黑名單知識庫。另一方面,可以對大型金融組織的 域名保持白名單,并使用模式匹配搜索欺騙性URL (例如, DOCOMO.COM對D0C0M0.COM)。這可能是有效的,因為攻擊者的 典型目標(biāo)是擁有大量用戶的組織,以加大人們陷入攻擊的機率。
抵御共享資源的濫用
在諸如IE之類的瀏覽器中,Java腳本通過一個名為clipboardData
的對象訪問用戶的剪貼板。該對象為三種剪貼板活動提供API:清除、
讀和寫。例如,下列簡單腳本從剪貼板中讀取文字并顯示在瀏覽器中。
document.write(window.clipboardData,getData('Text,));
不難看出,剪貼板可以潛在地用做在當(dāng)前網(wǎng)頁和系統(tǒng)其他部分之
間共享的資源。這就提供了一種繞過同源策略的渠道。對象
clipboardData不是為了在源自不同域的頁面之間轉(zhuǎn)移數(shù)據(jù)。不幸地,
上面這一行簡單的腳本成功地得到了剪貼板數(shù)據(jù),即使該數(shù)據(jù)之前未
被來自當(dāng)前域的頁面設(shè)定過。
上述剪貼板的示例此處作為此類攻擊的規(guī)范性示例。在一個實施
例中,當(dāng)加載頁面時,若網(wǎng)頁的任何部分試圖讀取剪貼板,就強制執(zhí)
行對剪貼板數(shù)據(jù)的清除。在實施例中,這通過在網(wǎng)頁開始處插入以下
腳本來完成。需要簡單的靜態(tài)分析以判定剪貼板讀操作發(fā)生在頁面內(nèi)。
document. write(window.clipboardData.clearData(,Text, ,,URL,,,F(xiàn)ile, ,,HTML,,'Image'))
一般而言,該技術(shù)可以應(yīng)用于任何在當(dāng)前網(wǎng)頁和系統(tǒng)其他部分之 間的潛在共享資源。
抵御惡意使用API
在一個實施例中,通過用戶定制策略所允許的途徑重寫一些API 調(diào)用以加強現(xiàn)有瀏覽器的有限的限制。在一個實施例中,修改相關(guān)窗 口API調(diào)用的位置和大小的參數(shù),使窗口落入預(yù)期的范圍內(nèi)。
window.moveto(x,y)=>
window.moveto(x % screen.availWidth, y % screen.availHeight) window.resizeTo(x,y)=>
window.resizeTo(((x>screen.availWidth) screen.availWidth : x),
((y>screen.availHeight) screen.availHeight: y)) 一些API調(diào)用不能以這種方式直接使用,因為正確的工具需要關(guān) 于執(zhí)行歷史的知識。API moveBy(deltaX, deltaY)禾卩resizeBy(deltaX, ddtaY)是兩個這樣的示例;他們通過偏移量而不是絕對值來改變窗口 的位置和大小。在這種情況下,工具要求更加精密,工具單元首先得 到關(guān)于窗口的信息,在計算目標(biāo)參數(shù)并將原調(diào)用替換為不同的調(diào)用。 如下所述
window.moveBy(dx,dy)=〉
window.moveto((window.screenX+dx) % screen.availWidth, (window.screenX+dx) % screen.availWi她)
window.resizeBy(dx,dy)=>
window.resize丁o("window.outerWidth+dx > screen.availWidth) screen.availWidth : (window.outerWi她+dx)),
((window.outerHeight+dy > screen.availHeight)
screen.ava服eight: (window.outerHeight+dy)》
這些特別的重寫規(guī)則防止了特定的"野"窗口,這些窗口實際上 經(jīng)常被用作攻擊的手段。例如,不可見窗口 (位于邊界之外或在背景 中)可暗中連接到Web服務(wù)器。與其他攻擊相結(jié)合,可以在你的系統(tǒng) 中下載敲擊鍵盤記錄代碼,或?qū)⑽募蛎艽a上傳給遠端PC。通過與匿 名代理站點一起使用,受害者甚至不能跟蹤遠端計算機的位置。
抵御非預(yù)期行為
Java腳本可以創(chuàng)建各種事件句柄用于處理數(shù)據(jù)或當(dāng)事件發(fā)生時處 理提示信息。例如,網(wǎng)頁可在卸載瀏覽器當(dāng)前內(nèi)容之前提示用戶是否 保存或放棄其輸入信息。這在用戶不小心關(guān)閉窗口而未提交或保存表 單數(shù)據(jù)時十分有用。當(dāng)被惡意方利用時,相同的能力可能用于進行騷 擾行為,如不能被用戶輕松關(guān)閉的"永久"窗口。以下是利用ommload 事件句柄以在當(dāng)前窗口關(guān)閉之前"重新產(chǎn)生"新窗口的簡單攻擊
<html>
<head>
<title>Persistent Window</titIe> <script type="text/javascript"> function respawn() { window.open(URL)
}
</script> </head>
<body onunload="respawn()">
Content of the webpage loaded from URL.
</body>
</html>
注意惡意句柄腳本的語義和該句柄所期望的語義之間的差異。在 一個實施例中,通過在卸載句柄內(nèi)時忽略API調(diào)用window.open()以保 護客戶端不受該攻擊。使用一些靜態(tài)分析檢查該句柄代碼open()API
調(diào)用可能不直接位于句柄的頂層代碼;它可能被裝入分開定義的功能中。
一般而言,許多其他事件句柄可通過類似的方式被利用。更具體
地,對窗口對象,在一個實施例中,下列API調(diào)用被忽略
*在句柄onbeforeunload和onload中打開新窗口 ;
* 在句柄onmove, onresize, onresizeend禾卩onresizestart移動或重置 窗口大??;
* 在句柄onblur, onbeforedeactivate, ondeactivate, onfocus禾口 onactivate中改變焦點。
注意,該技術(shù)也可應(yīng)用于其他瀏覽器對象,例如document和form。
抵御拒絕服務(wù)攻擊
上面描述了基于靜態(tài)分析抵御拒絕服務(wù)的攻擊。以下描述基于代 碼重寫的、另一種抵御拒絕服務(wù)攻擊的方法。
為了制止拒絕服務(wù)攻擊,在一個實施例中,提供了與資源濫用相 關(guān)的API調(diào)用的安全行為。以下定義了一種能夠表達這種安全行為的 規(guī)范語言。
安全策略由語言表示如下
Policy := (FunctionSpec, SafeFunctionSpec) FunctionSpec := (FunctionN'ame, Arglist) Arglist := Arg * Arg := Var | Const
SafeFunctionSpec := (FunctionName, SafeArgList) SafeArgList := SafeArg *
SafeArg := IF Safe(Arg) THEN Arg ELSE MakeSafe(Arg) Safe(Arg) := Pred(Arg) | StaticPred(Arg) Pred(Arg) := Compare(Arg, Arg) |
Pred(Arg) AND Pred(Arg) |
Pred(Arg) OR Pred(Arg) |
NOT Pred(Arg) |
Fun(Arg)
StaticPred(Arg) := Compare(Arg, Const) |
StaticPred(Arg) AND StaticPred(Arg) | StaticPred(Arg) OR StaticPred(Arg) | NOT StaticPred(Arg) Fun(Arg) := Arg IN Arg* Compare(x, y):=x = y|x<y|x>y|
Compare (x, y) AND Compare (x, y) 無論何時,當(dāng)一段給定的Java腳本代碼與策略中的函數(shù)調(diào)用相匹 配,對應(yīng)的調(diào)用將被安全的版本替換。圖9是執(zhí)行重寫的系統(tǒng)的一個實 施例的方框圖。參照圖9,程序代碼901 (例如Java腳本代碼)輸入代 碼重寫單元902并由其接收。代碼重寫單元卯2與包含對可能濫用的 API的安全轉(zhuǎn)換的策略903中指定的函數(shù)調(diào)用相匹配。若找到匹配,代 碼重寫單元902用策略1003中指定的安全版本替換該函數(shù)調(diào)用。一旦結(jié) 束,動態(tài)工具單元卯2以可能濫用的API的安全版本輸出安全執(zhí)行的代 碼904。
上述規(guī)范系統(tǒng)的基本思想是,函數(shù)調(diào)用與該調(diào)用的安全版本成對。 在安全版本中,在一個實施例中,在每個爭論之前放置保護,并通過 利用在源函數(shù)體之前的對應(yīng)代碼重寫函數(shù)調(diào)用來實施。
在一個實施例中,對重寫代碼進行進一步靜態(tài)優(yōu)化。在語言中通 過StaticPred表示。若與一段給定的Java腳本代碼匹配的安全策略包括 StaticPred作為重寫的一部分,則有時可能靜態(tài)判定其斷言是否成立。 這為我們提供了優(yōu)化一些重寫的可能,因此增加了最終代碼的效率, 并可能在StaticPred失敗的情況下預(yù)占全部代碼的執(zhí)行。圖10是執(zhí)行該 工具的系統(tǒng)的選擇性實施例的方框圖。參照圖io,程序代碼1001 (例 如Java腳本代碼)輸入到代碼重寫器1002并由其接收,代碼重寫器1002 將其與包含對可能濫用的API的安全轉(zhuǎn)換的策略1003中指定的函數(shù)調(diào) 用相匹配。若找到匹配,代碼重寫器1002用策略1003中指定的安全版 本替換該函數(shù)調(diào)用。 一旦結(jié)束,代碼重寫器1002以可能濫用的API的 安全版本輸出代碼1004。靜態(tài)優(yōu)化器1005對代碼1004進行靜態(tài)優(yōu)化,
此后代碼1004安全執(zhí)行。 狀態(tài)跟蹤
在一個實施例中,為通過對特定API呼叫次數(shù)進行限制來抵御拒 絕服務(wù)攻擊,使用跟蹤該計數(shù)的全局變量。為了實現(xiàn)這一點,在一個 實施例中,使用上述安全轉(zhuǎn)移語言用返回原代碼的安全版本替換有疑 問的API,而且每次源API被調(diào)用時增大內(nèi)部變量。因而該技術(shù)可用于 限制由Java腳本產(chǎn)生的窗口數(shù)量,作為一個示例。
所采用架構(gòu)的示例
圖ll是采用上述技術(shù)的總體架構(gòu)的一個實施例的方框圖。參照圖 11,安全代理1101位于運行客戶端瀏覽器1102的客戶端設(shè)備與因特網(wǎng) 1103其他設(shè)備之間的網(wǎng)絡(luò)中。所有進出該客戶端的流量通過代理1101, 在代理1101中,可對流量進行分析,且對利用安全缺陷的內(nèi)容進行潛 在過濾。在一個實施例中,代理1101具有過濾器,用于處理客戶端從 因特網(wǎng)1103取回的不同種類的內(nèi)容,如HTTP包頭內(nèi)容(例如URL)和 HTTP響應(yīng)內(nèi)容(如Java腳本)。更具體地,客戶端瀏覽器1102可接收 用戶輸入1116??蛻舳藶g覽器1102產(chǎn)生頁面請求1151。代理1101接收 頁面請求1151并使用URL過濾器1161對URL進行過濾,使用HTTP請求 包頭過濾器1162對HTTP請求包頭進行過濾。過濾之后,代理1101將頁 面請求1151發(fā)送至因特網(wǎng)1103。來自因特網(wǎng)1103的對頁面請求1151的 響應(yīng)由代理1101接收,并使用HTTP響應(yīng)包頭過濾器1164對包頭進行過 濾。在使用HTTP響應(yīng)包頭過濾器1164過濾之后,代理1101使用HTML 內(nèi)容過濾器1163和/或Java腳本過濾器及工具1110對內(nèi)容進行過濾。經(jīng) 過濾的內(nèi)容U52,代表HTML內(nèi)容過濾器1163和Java腳本過濾器及工 具1110兩者或兩者之一的輸出,由代理1101輸出并發(fā)送給客戶端瀏覽 器1102。HTML內(nèi)容過濾器1163和Java腳本過濾器及工具1110的輸出也
可以用于促進基于經(jīng)過濾內(nèi)容的攻擊特征的瀏覽器開發(fā)。 上述技術(shù)在Java腳本過濾器及工具單元1110中執(zhí)行。 安全描述文件1120對應(yīng)于由上述技術(shù)執(zhí)行的任何策略規(guī)范。
計算機系統(tǒng)的示例
圖12是執(zhí)行此處描述的一個或多個操作的示例性計算機系統(tǒng)的方
框圖。參照圖12,計算機系統(tǒng)1200可包括示例性客戶端或服務(wù)器計算 機系統(tǒng)。計算機系統(tǒng)1200包括通信機構(gòu)或總線1211,用于信息通信; 處理器1212與總線1211耦合,用于處理信息。處理器1212包括微處理 器,但不限于微處理器,例如PentiumTM, PowerPC , AlphaTM等等。
系統(tǒng)1200還包括隨機存取存儲器(RAM),或其他耦合到總線1211 的動態(tài)存儲設(shè)備1204 (稱為主存儲器),用于存儲處理器1212執(zhí)行的信 息和指令。主存儲器1204也可用于在處理器1212執(zhí)行指令期間存儲臨
時變量或其它中間信息。
計算機系統(tǒng)1200也包括只讀存儲器(ROM)和/或其他耦合到總 線1211的靜態(tài)存儲設(shè)備1206,用于存儲處理器1212的靜態(tài)信息和指令; 以及數(shù)據(jù)存儲設(shè)備1207,如磁盤或光盤及其對應(yīng)的盤驅(qū)動器。數(shù)據(jù)存 儲設(shè)備1207耦合到總線1211用于存儲信息和指令。
計算機系統(tǒng)1200可進一步耦合到顯示設(shè)備1221,如陰極射線管 (CRT)或液晶顯示器(LCD),耦合到總線1211以向計算機用戶顯示 信息。字母數(shù)字輸入設(shè)備1222,包括字母數(shù)字和其他鍵,也可耦合到 總線1211,用于同處理器1212進行信息和命令集通信。附加用戶輸入 設(shè)備是光標(biāo)控制器1223,如鼠標(biāo)、跟蹤球,跟蹤板、鐵筆或光標(biāo)方向 鍵,耦合到總線1211用于同處理器1212進行方向信息和命令集通信, 并用于控制顯示器1221上的光標(biāo)移動。
另一個可耦合到總線1211的設(shè)備是硬拷貝設(shè)備1223,可用于將信 息打印到介質(zhì)上,如紙、膠片或類似介質(zhì)。另一個可連接到總線1211 的設(shè)備是有線/無線通信設(shè)備1225,用于同電話或手持掌上設(shè)備通信。
應(yīng)該指出,系統(tǒng)1200的任一或全部組件及相關(guān)硬件可以用于本發(fā) 明。然而,應(yīng)理解,計算機系統(tǒng)的其他配置可以包括這些設(shè)備中的一 些或全部。
在閱讀前面的描述之后,對本技術(shù)領(lǐng)域普通技術(shù)人員來說,本發(fā) 明的許多選擇和修改是顯而易見的。應(yīng)理解,以示例方式示出和描述 的任何特定實施例都不應(yīng)視為對本發(fā)明的限定。因此,對各種實施例
中細節(jié)的參考不應(yīng)限制權(quán)力要求的范圍,在權(quán)利要求中僅陳述了與本 發(fā)明的本質(zhì)相關(guān)的特征。
權(quán)利要求
1.一種方法,包括基于第一安全策略對腳本程序進行靜態(tài)分析,以檢測腳本程序的不安全行為;以及當(dāng)執(zhí)行腳本程序?qū)⑦`反安全策略,則防止腳本程序的執(zhí)行。
2. 具有一個或多個計算機可讀介質(zhì)的制造產(chǎn)品,介質(zhì)上存儲指令, 當(dāng)由系統(tǒng)執(zhí)行指令時,指令使系統(tǒng)執(zhí)行下述方法,所述方法包括基于第一安全策略對腳本程序進行靜態(tài)分析,以檢測腳本程序的 不安全行為;以及當(dāng)執(zhí)行腳本程序?qū)⑦`反安全策略,則防止腳本程序的執(zhí)行。
3. —種方法,包括基于第一安全策略分析腳本程序;以及 修改腳本程序以確保腳本程序的安全執(zhí)行。
4. 具有一個或多個計算機可讀介質(zhì)的制造產(chǎn)品,介質(zhì)上存儲指令, 當(dāng)由系統(tǒng)執(zhí)行該指令時,指令使得系統(tǒng)實施下述方法,所述方法包括:基于第一安全策略對腳本程序進行分析;以及修改腳本程序以確保腳本程序的安全執(zhí)行。
全文摘要
公開了一種檢測和防止腳本程序中不安全行為的方法和裝置。在一個實施例中,該方法包括基于第一安全策略對腳本程序進行靜態(tài)分析,以檢測腳本程序中的不安全行為,如果在執(zhí)行腳本程序時違反安全策略,則防止腳本程序的執(zhí)行。
文檔編號G06F21/00GK101356535SQ200680050803
公開日2009年1月28日 申請日期2006年11月8日 優(yōu)先權(quán)日2005年11月10日
發(fā)明者于大川, 阿杰·查得 申請人:株式會社Ntt都科摩
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1