首页> 中国专利> 一种检测和防止JAVA脚本程序中不安全行为的方法和装置

一种检测和防止JAVA脚本程序中不安全行为的方法和装置

摘要

公开了一种检测和防止脚本程序中不安全行为的方法和装置。在一个实施例中,该方法包括基于第一安全策略对脚本程序进行静态分析,以检测脚本程序中的不安全行为,如果在执行脚本程序时违反安全策略,则防止脚本程序的执行。

著录项

  • 公开/公告号CN101356535A

    专利类型发明专利

  • 公开/公告日2009-01-28

    原文格式PDF

  • 申请/专利权人 株式会社NTT都科摩;

    申请/专利号CN200680050803.1

  • 发明设计人 阿杰·查得;于大川;

    申请日2006-11-08

  • 分类号G06F21/00;

  • 代理机构中科专利商标代理有限责任公司;

  • 代理人王玮

  • 地址 日本国東京都

  • 入库时间 2023-12-17 21:19:23

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2011-08-24

    授权

    授权

  • 2009-03-25

    实质审查的生效

    实质审查的生效

  • 2009-01-28

    公开

    公开

说明书

优先权

本专利申请要求2005年11月10日提交的、对应的临时专利申请序列号为no.60/735,772,名称为“一种检测和防止JAVA脚本程序中不安全行为的方法和装置”,;以及2005年11月10日提交的、临时专利申请序列号为no.60/735,513,名称为“一种策略引导的将JAVA脚本程序转化为保证安全的程序的方法和装置”的优先权,并在此引进入该申请作为参考。

技术领域

本发明涉及计算机编程领域;更具体地,本发明涉及检测和防止程序中的不安全行为。

背景技术

网络浏览器的安全是个严重的问题。客户端浏览器所遭受的无数攻击已经危及了敏感用户信息(密码,在线身份)完整性的安全,并且严重降低了客户端机器的性能。这些攻击经常滥用流行的客户端脚本语言如JAVA中发现的计算设施,或滥用浏览器和脚本解释器中的实施错误。潜在地,这种安全状况在蜂窝电话设备中更糟糕,这些设备具有更多样的移动浏览器(以及潜在的安全缺陷)和供恶意脚本滥用设备资源的机会。

通常的有害攻击的一些例子包括跨站点脚本,钓鱼,拒绝服务以及滥用API,以下详细描述。

跨站点脚本(XSS)是最重要的安全弱点之一,常见于基于网络的应用。此弱点允许攻击者向由可信任的网络服务器产生的网页中注入一段脚本(例如Java脚本)。浏览器执行该注入的代码,如同其是由服务器所提供。由于浏览器的安全限制是基于网页的来源,在与网络应用域相同的许可下,该代码被浏览器执行,绕过了安全限制。这种情况如图2所示。一般而言,XSS弱点很容易被利用。无辜的用户点击电子邮件或即时消息中的链接,或简单地阅读网络论坛,它就可能启动。利用XSS弱点,恶意方可以发起多种攻击,范围包括从骚扰行为(例如改变浏览器主页),到呈现错误信息(例如通过动态修改主机HTML代码),到抢劫帐户(例如通过从cookie中盗取用户的登录名和密码)。结合利用浏览器的实现缺陷(安全漏洞),黑客可能制造进一步的严重破坏,如读取用户文件以及执行恶意程序。

由于Java脚本提供了对一些手机资源的访问,其访问或通过文档目标模型(DOM),或通过提供网络接入的各种API,恶意Java脚本代码就可能损害这些资源。重要资源包括:磁盘空间,通过Java脚本具有的写入cookie的功能,这是DOM的一部分;网络利用,通过Java脚本能够打开其来源站点的连接的功能(特别地,这种利用可能隐藏在用户关注的窗口生出的子窗口中,因而导致了无意识的网络利用);用户接口元素,如窗口大小,定位等等(通过DOM,Java脚本具有修改其打开的窗口的这些属性的能力);以及浏览器元素的预期功能,如返回按钮等等(当控制线程试图离开特定页面时,通过返回按钮或点击不同的链接,恶意Java脚本可对发生的时间重编程。这样的Java脚本能执行任意动作,如打开多个窗口等等)。

钓鱼(也称为欺骗))是基于社会工程的攻击形式。它通过假扮作受信任方(例如银行网站)欺骗受害者使其交出敏感信息(如密码和信用卡号码)。钓鱼攻击的数量正在增长,其典型目标是银行客户和在线支付服务。这种攻击的损失可能很严重,如真实的财产损失或身份遭窃。

在如IE之类的浏览器中,Java脚本通过一个名为clipboardData的对象访问用户的剪贴板。该对象为三种剪贴板活动提供API:清除、读和写。例如,下列简单脚本从剪贴板中读取文字并显示在浏览器中:

document.write(window.clipboardData.getData(‘Text’));

不难看出,剪贴板可以潜在地用做在当前网页和系统其他部分之间共享的资源。这就提供了一种绕过同源策略的渠道。对象clipboardData不是为了在源自不同域的页面之间转移数据。不幸地,上面这一行简单的脚本成功地得到了剪贴板数据,即使该数据之前未被来自当前域的页面设定过。

Java脚本API的恶意使用可造成恼人的效果,或便于发起其他攻击。一种常见的这样的恶意使用是使用弹出窗口(或弹下窗口)。现在已经有许多可用的弹出窗口阻止器。

一些现有的解决脚本攻击的方法是特定的(ad-hoc)且非常有限。首先,实施漏洞可以通过补丁填补,但是过去15年的个人计算经验表明,不能指望这样的主动行为。其次,存在浏览器插件工具以抵御如弹出窗口的骚扰,并提供启发以检查钓鱼攻击。然而,这些工具暗中使用的安全策略不可由用户或操作者扩展,且仅捕捉特定攻击类型的特定事件,而不是整个攻击类型本身。例如,弹出窗口阻止器不限制Java脚本打开的窗口的数量或位置,或这些窗口是否进行无意识的网络通信。

发明内容

公开了一种检测和防止脚本程序中不安全行为的方法和装置。在一个实施例中,方法包括基于第一安全策略对脚本程序进行静态分析,以检测脚本程序中的不安全行为,如果在执行脚本程序时会违反安全策略,则防止脚本程序的执行。

附图说明

通过以下给出的详细描述,以及本发明各种实施例的附图,可以更全面地理解本发明。然而,不能认为这些附图是将本发明限于特定的实施例,而仅是为了解释和理解本发明。

图1示出了采用基于静态分析的、本公开的技术的总体框架的方框图。

图2示出了跨站点脚本的示例。

图3示出了与XSS相关的Java脚本和DOM API的本质提取内容。

图4示出了基于流的工具的处理过程一个实施例的方框图。

图5示出了说明基于流的工具的Java脚本工具的示例。

图6示出了使用该工具的系统的方框图。

图7示出了使用该工具与优化的系统的方框图。

图8示出了采用基于代码重写的、本公开技术的总体框架的方框图。

图9示出了在能够滥用API的情况下进行代码重写的系统的一个实施例的方框图。

图10示出了在能够滥用API的情况下进行代码重写的系统的另一个实施例的方框图。

图11示出了采用本公开技术的总体架构的一个实施例的方框图。

图12示出了计算机系统的一个实施例的方框图。

具体实施方式

本发明提供了多种检测和防止脚本(如Java脚本)程序违反给定的安全策略的技术。此处描述的技术可以用于抵御跨站点脚本攻击、拒绝服务攻击及其他滥用浏览器和/或Java脚本解释器实现缺陷的攻击。在实施例中,该技术同时采用了静态分析和动态监控以过滤将执行的脚本。通过过滤器的脚本或是被安全策略证明是安全的,或是在其在运行期违反安全策略之前促使其停止执行。这些技术的特征之一是不修改脚本语义,因而确保脚本中任何有用的功能不会被误修改。

基于给定的安全策略,给出多种技术限制不信任脚本的行为。此处描述的技术可用于抵御钓鱼、滥用共享资源、恶意利用API、非预期行为、以及拒绝服务的攻击。在一个实施例中,采用了在目标脚本中进行代码重写的技术。与阻止潜在的恶意脚本不同,代码被修改以使其安全执行。因而,在一个实施例中,产生的代码保证不会发生运行期错误。这些技术的一个与众不同的特征在于,脚本语义在分析期间被修改,以防止善意脚本(次假阳性)的过早终止。这补充了之前段落描述的通过静态分析和动态监控来禁止违法策略的技术。

在一个实施例中,安全属性由可扩展的策略规范语言表述,可覆盖多种攻击,且提出的架构可用于在脚本语言,如Java脚本中实施这些技术。在一个实施例中,策略语言用于编写过滤器和由于抵御多种不同类型攻击的工具。以下给出示例,以说明其如何帮助抵御XSS、钓鱼、DOS以及未确认输入和参数。这也有助于在开发安全补丁或病毒定义之前采用快速预补丁过滤器。

在以下的描述中,阐述了大量细节,以提供本发明的更加完整的解释。然而,很显然,对本领域技术人员而言,没有这些具体细节,也可以实施本发明。在其他实例中,公知结构和设备以框图而非细节的形式示出,以避免使本发明含糊。

以下详细描述中的一部分针对在计算机存储器中对数据比特的算法和符号的运算表示给出的。这些算法描述和表示是数据处理领域的技术人员使用的最有效地向本领域其他技术人员传递其工作实质的手段。此处,算法通常被设想为导向所希望结果的有条理的步骤序列。这些步骤需要物理量的物理操作。通常,虽然并不是必须的,这些量采用电或磁信号的形式,能够进行存储、转发、合并、比较及其他操作。有时,原则上出于通用的原因,这些信号以比特、值、元素、符号、字符、术语、数字等等的方式表示被证明是方便的。

然而,应记住,所有这些以及相似的术语是与合适的物理量相关联的,且仅是便于用于这些量的标记。除非特别声明,否则在以下讨论中显而易见,应理解在整个描述中,使用诸如“处理”或“计算”或“运算”或“判定”或“显示”等等之类的术语的讨论涉及计算机系统或类似电子计算设备的作用和处理,其处理计算机系统寄存器和存储器中以物理(电子)量表示的数据并将其转换为计算机系统存储器或寄存器或其它这样的信息存储、转换或显示设备中的类似的以物理量表示的其他数据。

本发明同时涉及进行此操作的装置。该装置可为所需目的而专门组成,或可包括通用目的计算机,选择性地由计算机中存储的计算机程序激活或配置。这样的计算机程序可存储于计算机可读的存储介质中,如,但不局限于,任何类型的碟片包括软盘、光盘、CD-ROM以及磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、EPROM、EEPEOM,磁或光卡,或任何类型的适合存储电子指令的介质,每一种都与计算机系统总线耦合。

在此给出的本算法和显示并不自然地涉及任何特定的计算机或其他装置。各种通用目的系统可与遵照此处教导的程序共同使用,或者,构造更专用的装置实施所需要的方法步骤可能被证明是方便的。各种这样的系统所需要的结构将在以下描述中给示。此外,本发明并不参照任何特定的编程语言而描述。应理解,如此处描述的,可以使用各种编程语言实现本发明教导的方法。

机器可读介质包括任何用于以机器可读的形式存储或传输信息的装置。例如,机器可读介质包括只读存储器(ROM),随机存取存储器(RAM),磁盘存储介质,光盘存储介质,闪存设备,电、光、声或其他形式的传播信号(例如:载波、红外信号、数字信号等)等等。

基于静态分析的技术概述

此处描述静态分析技术,可用于防止各种攻击,包括跨站点脚本、拒绝服务攻击,API滥用,并适合基于公共可扩展策略的框架。图1是表示采用这样技术的总体框架的方框图。参照图1,程序代码101(例如Java脚本代码)输入静态分析器102。基于安全策略103,静态分析器102检查程序代码101,试图在不执行它的情况下静态判断其安全性。在不安全代码的情况下,静态分析器102立即拒绝该代码。否则,代码输入动态解释器104,其对程序代码101进行0个或多个动态检查,以确保不发生运行期违规。在实施例中,动态解释器104仅在不能静态判断运行期结果的位置进行检查。若运行期将要发生违规,则这些检查用于停止程序的执行。在一个实施例中,提供了策略语言和相关的技术,用于编写代码滤器以抵御多种不同类型的攻击。

抵御跨站点脚本攻击

在一个实施例中,提供了客户端解决方案。与识别哪段代码是恶意的并过滤恶意代码的方法不同,该方法是基于通过关注影响用户安全的关键操作以实现对关键用户资源的保护。通过这样做,该方法对用户的判断力提出警告。

为此目的,所有关键资源被统一处理,并称为secret(秘密)。secret可以是下列任一个实体,例如:cookie文件、密码域(或密码类型的文本框)、浏览器设定、来自未初始化剪贴板的数据以及历史条目。为此目的,所有对URL的网络请求都统一作为load(URL)处理。load可以是下列任一实体,例如:加载当前页(例如location.href=URL)、表格(例如action=URL)、图像(例如img src=URL)、框架(例如iframesrc=URL)以及层对象:load(URL,width)。

基于上述对用户资源的统一处理,图3示出了与XSS相关的Java脚本和DOM API的本质的提取内容。域名D,URL U及值V都是字符串。布尔值b为0或1。环境ψ将变量X映射为类型T。类型T是域名列表。表达式为下列之一:secret、对子表达式op、值V或变量X的运算。命令为赋值、条件、网络请求或终止。

基于流的工具

在一个实施例中,静态分析器向关键用户资源标记其拥有者(域名,在同源策略中使用),其信息流由静态分析器分析,并且,动态解释器在关键信息将要发送至不同于当前HTML源的域之处插入运行期检查(警告)。图4是基于流的工具的处理过程的一个实施例的方框图,是所公开的基于静态分析的通用技术的特别实例。参照图4,Java脚本代码401输入流分析器402并由其接收,流分析器402根据信息流策略403将各种代码资源(例如URL、cookie等)进行标记。产生的经标记的代码输入动态解释器404,以在由流分析器402表示的程序点处插入检查点。在一个实施例中,若将要发生违规,则插入的检查点将阻止程序执行,因此产生的代码在运行期总是安全执行。

图5是Java脚本工具的示例,清晰地说明了标记是如何注释的,以及检查点是如何插入的。这是在静态环境ψ的帮助下实施的。该环境帮助判定表达式的秘密性。包含当前域秘密信息的表达式具有以下其中之一:该表达式是secret;该表达式包含秘密子表达式如参数;以及该表达式是一个变量且由当前域名标记过。

该工具系统检查程序代码并在需要时进行更改。对于赋值,该系统更新环境,将赋值对象标记为相应的秘密。对加载URL,若该URL包含不属于如该URL中所写的目标域的秘密信息,该系统插入对用户的判断力的警告。该系统在使用期间不改变其他命令,此规则是微不足道的并在此省略。

放松条件的工具

在可选实施例中,一些放松条件的方法可以用于更容易地实施(较少的规则),但其精确性较低(潜在地有更多用户相互作用)。可使用以下可选实施例的组合。

在一个可选实施例中,为了在读取secret后防止load(URL),执行以下工具。在程序开始处,对用户资源使用全局标记变量。一旦秘密条目被读取,该标记就被设置。在可能泄漏这些资源的API调用前,插入代码以检查该标记是否被设置。若标记为设置,则API照常继续。否则,插入的代码将对用户提出警告,并询问是否继续。该工具所遵照的规则如下:

secret(secret)i.secret(Ei)secret(op(E*))

在另一可选实施例中,为防止嵌入与load(URL)中的secret,同时禁止在load参数中使用变量,使用以下工具。特别地,URL作为load的参数进行分析并检查以判断其是否包含secret或变量。

U=secretNOK(U)i.NOK(Ei)NOK(op(E*))U=XNOK(U)

在一个实施例中,为禁止指针指向来自不同于当前HTML源的域的脚本,使用以下工具。当加载URL时,检查URL的域及URL的目标。若该域不是当前域且其目标是Java脚本文件,则插入警告并询问用户是否继续。否则,加载照常继续。

在一个实施例中,工具可同其他补充技术一起应用,以较少假阳性的数量。例如,白名单(黑名单)可用于允许(阻止)已知的安全(易受攻击)的站点。

抵御拒绝服务攻击

在一个实施例中,为检测并防止拒绝服务攻击,对涉及资源滥用的API调用进行限制。定义表示这种限制的特别语言如下:

     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)

安全策略由上面的语言表示。无论何时当一段给定的Java脚本代码与策略中的函数调用相匹配,对应的动态检查就在调用前插入。图5是使用该工具的系统方框图。参照图6,程序代码601(例如Java脚本代码)输入动态工具单元602并由其接收,动态工具单元602与包含安全过滤器的策略603中指定的函数调用相匹配。若找到匹配,动态工具单元602在该函数调用前加入动态检查。一旦结束,动态工具单元602将代码以安全执行的形式输出。

在一个实施例中,对插入的动态工具进行进一步静态优化。这在上面的语言中由StaticPred表示。若与给定Java脚本代码段匹配的安全策略包括一些StaticPred作为工具的一部分,则对这些断言是否成立进行静态判定。这可以消除一些动态工具,以增加最终代码的效率,并可能在StaticPred之一失败的情况下预清空整段代码的执行。图7是使用该工具的系统方框图。参照图7,程序代码701(例如Java脚本代码)输入动态工具单元702并由其接收,动态工具单元702与包含安全过滤器的策略703中指定的函数调用相匹配。若找到匹配,动态工具单元702在该函数调用前加入动态检查。一旦结束,动态工具单元702输出经处理的代码704。此后,经处理的代码704输入静态优化单元705,由其判定StaticPred断言是否成立。对静态成立的情况,由动态工具单元702加入的对应的动态检查将从经处理的代码704中移除。接着输出结果代码。

基于代码重写的技术概述

下面描述代码重写技术,可用于对抗各种攻击,包括钓鱼、共享资源如剪贴板的滥用、恶意使用API、非预期行为以及拒绝服务攻击。图8是这些技术的一个实施例的总体框架的方框图。参照图8,由代码重写单元802接收程序代码801(例如Java脚本代码)。基于指定了安全转换的安全策略803,代码重写单元802用执行相同功能的安全版本的代码替换将程序代码801中潜在的恶意(Java脚本)代码。在一个实施例中,由于安全策略指定的转换小心地改变了代码语义以保证安全,Java脚本代码总是被安全执行,不发生运行期错误。

在一个实施例中,这些技术包括策略语言和相关的技术,用于指定代码重写器,以低于多种不同类型的攻击,其细节如下所述。

抵御钓鱼

为了抵御钓鱼,在一个实施例中,网站的实际信息被展示给用户,因而加大了攻击者伪装为其他人的难度。

网页的源

关于网页的源,浏览器的地址条显示了从其加载当前网页的URL。其内容不在Java脚本的控制之内。然而,在打开新窗口(例如弹出窗口)时,Java脚本能够将所有地址条隐藏起来。钓鱼攻击经常使用它来隐藏当前网页的源。浏览器的相关的导航控制是状态条。Java脚本可以将状态条的内容更新为任意文本,也可以选择不显示状态条。

在一个实施例中,工具单元使用网页的内容,使地址条和状态条基于浏览器用户给定的用户定制的策略而正确显示。这可以通过检查网元中用于打开新窗口的API,并重写隐藏有用导航控制的代码来完成。

以下示出了用于创建新窗口的工具示例。在本实施中,检查设置地址和状态标记为假的途径,包括设定其为假、非或零,或简单地将其省略。

open(URL,windowName,location=false,status=false)

open(URL,windowName,location=true,status=true)

脚本打开新窗口还有其他途径(API)。例如,无边框弹出窗口可以由特别的API createPopup创建。在一个实施例中,工具单元使用基于用户策略的代码。若策略允许无边框弹出窗口(选择该选项说明用户相信其受过足够的教育,不至于陷入无边框弹出窗口中的钓鱼攻击,如从不点击其中的任何链接),则该API的调用保留其原样。若策略不允许无边框弹出窗口,工具单元使用基本打开API编写该API的调用。

更新状态条

在本技术的一个实施例中,关于更新状态条,对所得代码进行重写,以在状态条中显示页面的源。直接地,这可以通过对所有窗口插入下面的脚本来完成:

window.status=location.href.

实际上,网页利用状态条显示各种信息。在一个实施例中,代码工具单元使用对状态条的访问以显示给定文本信息的连接及页面的源。

window.status=″Welcome to DoCoMo USA Labs!″

window.status=location.href+″|″+″Welcome to DoCoMo USALabs!″

在一个实施例中,HTML的动态特性被用于交替显示页面的源及给定的文本信息。这样的示例需要使用高级Java脚本特性,如定时器API。在一个实施例中,除了源(域名),甚至显示了更多关于当前网页的信息。一些示例包括其主机在何处以及何时创建。在浏览器窗口的分离区域中,或在“气球”中显示这样的信息也是可能的。

作为总结,通过使用该程序(Java脚本)代码,与网页的主机域相关的信息可以清晰地显示。这有助于用户评估欺骗性URL(例如,curious.com不可能是花旗银行的网站,或美洲银行不可能将主机设在日本)。

欺骗性URL

攻击者利用URL中的特殊字符欺骗用户。通过检查网页的内容,我们可以识别这些可疑的URL。

符号@有时在URL中使用。其本意是在该符号前允许包括用户名和/或密码域。真正的URL目标是接下来的域名。例如,http://docomo.com@curious.com是指curious.com而不是docomo.com。这样的URL可欺骗用户使其相信网页的假源。通过识别这样的URL,我们可以使用之前的技术将实际的域名显示给用户。

类似地,http://www.docomo.com.curious.com/也具有欺骗性。此外,使用百分比符号跟随数字(换码顺序)通常除了欺骗没有实际用途。在一个实施例中,对所有这些可疑的URL进行分析并在显示给用户之前进行合适的分解。

可以使用通用的现有方法作为上述技术的补充。一方面,可以对已知的钓鱼域保持黑名单知识库。另一方面,可以对大型金融组织的域名保持白名单,并使用模式匹配搜索欺骗性URL(例如,DOCOMO.COM对D0C0M0.COM)。这可能是有效的,因为攻击者的典型目标是拥有大量用户的组织,以加大人们陷入攻击的机率。

抵御共享资源的滥用

在诸如IE之类的浏览器中,Java脚本通过一个名为clipboardData的对象访问用户的剪贴板。该对象为三种剪贴板活动提供API:清除、读和写。例如,下列简单脚本从剪贴板中读取文字并显示在浏览器中。

document.write(window.clipboardData.getData(‘Text’));

不难看出,剪贴板可以潜在地用做在当前网页和系统其他部分之间共享的资源。这就提供了一种绕过同源策略的渠道。对象clipboardData不是为了在源自不同域的页面之间转移数据。不幸地,上面这一行简单的脚本成功地得到了剪贴板数据,即使该数据之前未被来自当前域的页面设定过。

上述剪贴板的示例此处作为此类攻击的规范性示例。在一个实施例中,当加载页面时,若网页的任何部分试图读取剪贴板,就强制执行对剪贴板数据的清除。在实施例中,这通过在网页开始处插入以下脚本来完成。需要简单的静态分析以判定剪贴板读操作发生在页面内。

document.write(window.clipboardData.clearData(’Text’,’URL’,’File’,’HTML’,’Image’))

一般而言,该技术可以应用于任何在当前网页和系统其他部分之间的潜在共享资源。

抵御恶意使用API

在一个实施例中,通过用户定制策略所允许的途径重写一些API调用以加强现有浏览器的有限的限制。在一个实施例中,修改相关窗口API调用的位置和大小的参数,使窗口落入预期的范围内。

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调用不能以这种方式直接使用,因为正确的工具需要关于执行历史的知识。API moveBy(deltaX,deltaY)和resizeBy(deltaX,deltaY)是两个这样的示例;他们通过偏移量而不是绝对值来改变窗口的位置和大小。在这种情况下,工具要求更加精密,工具单元首先得到关于窗口的信息,在计算目标参数并将原调用替换为不同的调用。如下所述:

window.moveBy(dx,dy)=>

  window.moveto((window.screenX+dx)%screen.availWidth,

      (window.screenX+dx)%screen.availWidth)

window.resizeBy(dx,dy)=>

  window.resizeTo(((window.outerWidth+dx>screen.availWidth)?

    screen.availWidth:(window.outerWidth+dx)),

         ((window.outerHeight+dy>screen.availHeight)?

    screen.availHeight:(window.outerHeight+dy)))

这些特别的重写规则防止了特定的“野”窗口,这些窗口实际上经常被用作攻击的手段。例如,不可见窗口(位于边界之外或在背景中)可暗中连接到Web服务器。与其他攻击相结合,可以在你的系统中下载敲击键盘记录代码,或将文件或密码上传给远端PC。通过与匿名代理站点一起使用,受害者甚至不能跟踪远端计算机的位置。

抵御非预期行为

Java脚本可以创建各种事件句柄用于处理数据或当事件发生时处理提示信息。例如,网页可在卸载浏览器当前内容之前提示用户是否保存或放弃其输入信息。这在用户不小心关闭窗口而未提交或保存表单数据时十分有用。当被恶意方利用时,相同的能力可能用于进行骚扰行为,如不能被用户轻松关闭的“永久”窗口。以下是利用onunload事件句柄以在当前窗口关闭之前“重新产生”新窗口的简单攻击:

<html>

<head>

<title>Persistent Window</title>

<script type=″text/javascript″>

function respawn(){

    window.open(URL)

}

</script>

</head>

<body onunload=″respawn()″>

Content of the webpage loaded from URL.

</body>

</html>

注意恶意句柄脚本的语义和该句柄所期望的语义之间的差异。在一个实施例中,通过在卸载句柄内时忽略API调用window.open()以保护客户端不受该攻击。使用一些静态分析检查该句柄代码:open()API调用可能不直接位于句柄的顶层代码;它可能被装入分开定义的功能中。

一般而言,许多其他事件句柄可通过类似的方式被利用。更具体地,对窗口对象,在一个实施例中,下列API调用被忽略:

●在句柄onbeforeunload和onload中打开新窗口;

●在句柄onmove,onresize,onresizeend和onresizestart移动或重置窗口大小;

●在句柄onblur,onbeforedeactivate,ondeactivate,onfocus和onactivate中改变焦点。

注意,该技术也可应用于其他浏览器对象,例如document和form。

抵御拒绝服务攻击

上面描述了基于静态分析抵御拒绝服务的攻击。以下描述基于代码重写的、另一种抵御拒绝服务攻击的方法。

为了制止拒绝服务攻击,在一个实施例中,提供了与资源滥用相关的API调用的安全行为。以下定义了一种能够表达这种安全行为的规范语言。

安全策略由语言表示如下:

Policy:=(FunctionSpec,SafeFunctionSpec)

FunctionSpec:=(FunctionName,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 Stati cPred(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)

无论何时,当一段给定的Java脚本代码与策略中的函数调用相匹配,对应的调用将被安全的版本替换。图9是执行重写的系统的一个实施例的方框图。参照图9,程序代码901(例如Java脚本代码)输入代码重写单元902并由其接收。代码重写单元902与包含对可能滥用的API的安全转换的策略903中指定的函数调用相匹配。若找到匹配,代码重写单元902用策略1003中指定的安全版本替换该函数调用。一旦结束,动态工具单元902以可能滥用的API的安全版本输出安全执行的代码904。

上述规范系统的基本思想是,函数调用与该调用的安全版本成对。在安全版本中,在一个实施例中,在每个争论之前放置保护,并通过利用在源函数体之前的对应代码重写函数调用来实施。

在一个实施例中,对重写代码进行进一步静态优化。在语言中通过StaticPred表示。若与一段给定的Java脚本代码匹配的安全策略包括StaticPred作为重写的一部分,则有时可能静态判定其断言是否成立。这为我们提供了优化一些重写的可能,因此增加了最终代码的效率,并可能在StaticPred失败的情况下预占全部代码的执行。图10是执行该工具的系统的选择性实施例的方框图。参照图10,程序代码1001(例如Java脚本代码)输入到代码重写器1002并由其接收,代码重写器1002将其与包含对可能滥用的API的安全转换的策略1003中指定的函数调用相匹配。若找到匹配,代码重写器1002用策略1003中指定的安全版本替换该函数调用。一旦结束,代码重写器1002以可能滥用的API的安全版本输出代码1004。静态优化器1005对代码1004进行静态优化,此后代码1004安全执行。

状态跟踪

在一个实施例中,为通过对特定API呼叫次数进行限制来抵御拒绝服务攻击,使用跟踪该计数的全局变量。为了实现这一点,在一个实施例中,使用上述安全转移语言用返回原代码的安全版本替换有疑问的API,而且每次源API被调用时增大内部变量。因而该技术可用于限制由Java脚本产生的窗口数量,作为一个示例。

所采用架构的示例:

图11是采用上述技术的总体架构的一个实施例的方框图。参照图11,安全代理1101位于运行客户端浏览器1102的客户端设备与因特网1103其他设备之间的网络中。所有进出该客户端的流量通过代理1101,在代理1101中,可对流量进行分析,且对利用安全缺陷的内容进行潜在过滤。在一个实施例中,代理1101具有过滤器,用于处理客户端从因特网1103取回的不同种类的内容,如HTTP包头内容(例如URL)和HTTP响应内容(如Java脚本)。更具体地,客户端浏览器1102可接收用户输入1116。客户端浏览器1102产生页面请求1151。代理1101接收页面请求1151并使用URL过滤器1161对URL进行过滤,使用HTTP请求包头过滤器1162对HTTP请求包头进行过滤。过滤之后,代理1101将页面请求1151发送至因特网1103。来自因特网1103的对页面请求1151的响应由代理1101接收,并使用HTTP响应包头过滤器1164对包头进行过滤。在使用HTTP响应包头过滤器1164过滤之后,代理1101使用HTML内容过滤器1163和/或Java脚本过滤器及工具1110对内容进行过滤。经过滤的内容1152,代表HTML内容过滤器1163和Java脚本过滤器及工具1110两者或两者之一的输出,由代理1101输出并发送给客户端浏览器1102。HTML内容过滤器1163和Java脚本过滤器及工具1110的输出也可以用于促进基于经过滤内容的攻击特征的浏览器开发。

上述技术在Java脚本过滤器及工具单元1110中执行。

安全描述文件1120对应于由上述技术执行的任何策略规范。

计算机系统的示例:

图12是执行此处描述的一个或多个操作的示例性计算机系统的方框图。参照图12,计算机系统1200可包括示例性客户端或服务器计算机系统。计算机系统1200包括通信机构或总线1211,用于信息通信;处理器1212与总线1211耦合,用于处理信息。处理器1212包括微处理器,但不限于微处理器,例如PentiumTM,PowerPCTM,AlphaTM等等。

系统1200还包括随机存取存储器(RAM),或其他耦合到总线1211的动态存储设备1204(称为主存储器),用于存储处理器1212执行的信息和指令。主存储器1204也可用于在处理器1212执行指令期间存储临时变量或其它中间信息。

计算机系统1200也包括只读存储器(ROM)和/或其他耦合到总线1211的静态存储设备1206,用于存储处理器1212的静态信息和指令;以及数据存储设备1207,如磁盘或光盘及其对应的盘驱动器。数据存储设备1207耦合到总线1211用于存储信息和指令。

计算机系统1200可进一步耦合到显示设备1221,如阴极射线管(CRT)或液晶显示器(LCD),耦合到总线1211以向计算机用户显示信息。字母数字输入设备1222,包括字母数字和其他键,也可耦合到总线1211,用于同处理器1212进行信息和命令集通信。附加用户输入设备是光标控制器1223,如鼠标、跟踪球,跟踪板、铁笔或光标方向键,耦合到总线1211用于同处理器1212进行方向信息和命令集通信,并用于控制显示器1221上的光标移动。

另一个可耦合到总线1211的设备是硬拷贝设备1223,可用于将信息打印到介质上,如纸、胶片或类似介质。另一个可连接到总线1211的设备是有线/无线通信设备1225,用于同电话或手持掌上设备通信。

应该指出,系统1200的任一或全部组件及相关硬件可以用于本发明。然而,应理解,计算机系统的其他配置可以包括这些设备中的一些或全部。

在阅读前面的描述之后,对本技术领域普通技术人员来说,本发明的许多选择和修改是显而易见的。应理解,以示例方式示出和描述的任何特定实施例都不应视为对本发明的限定。因此,对各种实施例中细节的参考不应限制权力要求的范围,在权利要求中仅陈述了与本发明的本质相关的特征。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号