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

文档序号:6570297阅读:233来源:国知局
专利名称:一种检测和防止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滥用,并适合基于公共可扩展策略的框架。图l是 表示采用这样技术的总体框架的方框图。参照图l,程序代码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)、框架(例如iframe src-URL)以及层对象load(URL, width)。
基于上述对用户资源的统一处理,图3示出了与XSS相关的Java脚 本和DOMAPI的本质的提取内容。域名D, URLU及值V都是字符串。 布尔值b为O或l。环境T将变量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照常继续。 否则,插入的代码将对用户提出警告,并询问是否继续。该工具所遵 照的规则如下
卜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参数中使用变量,使用以下工具。特别地,URL作为load 的参数进行分析并检査以判断其是否包含secret或变量。<formula>formula see original document page 11</formula>
在一个实施例中,为禁止指针指向来自不同于当前HTML源的域 的脚本,使用以下工具。当加载URL时,检査URL的域及URL的目标。 若该域不是当前域且其目标是Java脚本文件,则插入警告并询问用户
是否继续。否则,加载照常继续。
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'
在一个实施例中,工具可同其他补充技术一起应用,以较少假阳 性的数量。例如,白名单(黑名单)可用于允许(阻止)已知的安全 (易受攻击)的站点。
抵御拒绝服务攻击
在一个实施例中,为检测并防止拒绝服务攻击,对涉及资源滥用 的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 将代码以安全执行的形式输出D
在一个实施例中,对插入的动态工具进行进一步静态优化。这在 上面的语言中由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 createP叩up创建。在一个实施例中,工具单元使用基 于用户策略的代码。若策略允许无边框弹出窗口 (选择该选项说明用 户相信其受过足够的教育,不至于陷入无边框弹出窗口中的钓鱼攻击, 如从不点击其中的任何链接),则该API的调用保留其原样。若策略不 允许无边框弹出窗口 ,工具单元使用基本打开API编写该API的调用。
更新状态条
在本技术的一个实施例中,关于更新状态条,对所得代码进行重 写,以在状态条中显示页面的源。直接地,这可以通过对所有窗口插 入下面的脚本来完成
window, status-location.href.
实际上,网页利用状态条显示各种信息。在一个实施例中,代码 工具单元使用对状态条的访问以显示给定文本信息的连接及页面的 源。
window.status="Welcome to DoCoMo USA Labs!"
window.status=location.href+ " | " + "\Velcome to DoCoMo USA
Labs!"
在一个实施例中,HTML的动态特性被用于交替显示页面的源及 给定的文本信息。这样的示例需要使用高级Java脚本特性,如定时器 API。在一个实施例中,除了源(域名),甚至显示了更多关于当前网 页的信息。 一些示例包括其主机在何处以及何时创建。在浏览器窗口 的分离区域中,或在"气球"中显示这样的信息也是可能的。
作为总结,通过使用该程序(Java脚本)代码,与网页的主机域 相关的信息可以清晰地显示。这有助于用户评估欺骗性URL (例如, curious.com不可能是花旗银行的网站,或美洲银行不可能将主机设在 日本)。
欺骗性URL
攻击者利用URL中的特殊字符欺骗用户。通过检査网页的内容, 我们可以识别这些可疑的URL。
符号(^有时在URL中使用。其本意是在该符号前允许包括用户名 和/或密码域。真正的URL目标是接下来的域名。例如, http:〃docomo.com(^curious.com是指curious.com而不是docomo.com。 这样的URL可欺骗用户使其相信网页的假源。通过识别这样的URL,
我们可以使用之前的技术将实际的域名显示给用户。
类j以i也,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, ddtaY)是两个这样的示例;他们通过偏移量而不是绝对值来改变窗口 的位置和大小。在这种情况下,工具要求更加精密,工具单元首先得 到关于窗口的信息,在计算目标参数并将原调用替换为不同的调用。 如下所述
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)》
这些特别的重写规则防止了特定的"野"窗口,这些窗口实际上 经常被用作攻击的手段。例如,不可见窗口 (位于边界之外或在背景 中)可暗中连接到Web服务器。与其他攻击相结合,可以在你的系统 中下载敲击键盘记录代码,或将文件或密码上传给远端PC。通过与匿 名代理站点一起使用,受害者甚至不能跟踪远端计算机的位置。
抵御非预期行为
Java脚本可以创建各种事件句柄用于处理数据或当事件发生时处 理提示信息。例如,网页可在卸载浏览器当前内容之前提示用户是否 保存或放弃其输入信息。这在用户不小心关闭窗口而未提交或保存表 单数据时十分有用。当被恶意方利用时,相同的能力可能用于进行骚 扰行为,如不能被用户轻松关闭的"永久"窗口。以下是利用ommload 事件句柄以在当前窗口关闭之前"重新产生"新窗口的简单攻击
<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>
注意恶意句柄脚本的语义和该句柄所期望的语义之间的差异。在 一个实施例中,通过在卸载句柄内时忽略API调用window.open()以保 护客户端不受该攻击。使用一些静态分析检查该句柄代码open()API
调用可能不直接位于句柄的顶层代码;它可能被装入分开定义的功能中。
一般而言,许多其他事件句柄可通过类似的方式被利用。更具体
地,对窗口对象,在一个实施例中,下列API调用被忽略
*在句柄onbeforeunload和onload中打开新窗口 ;
* 在句柄onmove, onresize, onresizeend禾卩onresizestart移动或重置 窗口大小;
* 在句柄onblur, onbeforedeactivate, ondeactivate, onfocus禾口 onactivate中改变焦点。
注意,该技术也可应用于其他浏览器对象,例如document和form。
抵御拒绝服务攻击
上面描述了基于静态分析抵御拒绝服务的攻击。以下描述基于代 码重写的、另一种抵御拒绝服务攻击的方法。
为了制止拒绝服务攻击,在一个实施例中,提供了与资源滥用相 关的API调用的安全行为。以下定义了一种能够表达这种安全行为的 规范语言。
安全策略由语言表示如下
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) 无论何时,当一段给定的Java脚本代码与策略中的函数调用相匹 配,对应的调用将被安全的版本替换。图9是执行重写的系统的一个实 施例的方框图。参照图9,程序代码901 (例如Java脚本代码)输入代 码重写单元902并由其接收。代码重写单元卯2与包含对可能滥用的 API的安全转换的策略903中指定的函数调用相匹配。若找到匹配,代 码重写单元902用策略1003中指定的安全版本替换该函数调用。一旦结 束,动态工具单元卯2以可能滥用的API的安全版本输出安全执行的代 码904。
上述规范系统的基本思想是,函数调用与该调用的安全版本成对。 在安全版本中,在一个实施例中,在每个争论之前放置保护,并通过 利用在源函数体之前的对应代码重写函数调用来实施。
在一个实施例中,对重写代码进行进一步静态优化。在语言中通 过StaticPred表示。若与一段给定的Java脚本代码匹配的安全策略包括 StaticPred作为重写的一部分,则有时可能静态判定其断言是否成立。 这为我们提供了优化一些重写的可能,因此增加了最终代码的效率, 并可能在StaticPred失败的情况下预占全部代码的执行。图10是执行该 工具的系统的选择性实施例的方框图。参照图io,程序代码1001 (例 如Java脚本代码)输入到代码重写器1002并由其接收,代码重写器1002 将其与包含对可能滥用的API的安全转换的策略1003中指定的函数调 用相匹配。若找到匹配,代码重写器1002用策略1003中指定的安全版 本替换该函数调用。 一旦结束,代码重写器1002以可能滥用的API的 安全版本输出代码1004。静态优化器1005对代码1004进行静态优化,
此后代码1004安全执行。 状态跟踪
在一个实施例中,为通过对特定API呼叫次数进行限制来抵御拒 绝服务攻击,使用跟踪该计数的全局变量。为了实现这一点,在一个 实施例中,使用上述安全转移语言用返回原代码的安全版本替换有疑 问的API,而且每次源API被调用时增大内部变量。因而该技术可用于 限制由Java脚本产生的窗口数量,作为一个示例。
所采用架构的示例
图ll是采用上述技术的总体架构的一个实施例的方框图。参照图 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对内容进行过滤。经 过滤的内容U52,代表HTML内容过滤器1163和Java脚本过滤器及工 具1110两者或两者之一的输出,由代理1101输出并发送给客户端浏览 器1102。HTML内容过滤器1163和Java脚本过滤器及工具1110的输出也
可以用于促进基于经过滤内容的攻击特征的浏览器开发。 上述技术在Java脚本过滤器及工具单元1110中执行。 安全描述文件1120对应于由上述技术执行的任何策略规范。
计算机系统的示例
图12是执行此处描述的一个或多个操作的示例性计算机系统的方
框图。参照图12,计算机系统1200可包括示例性客户端或服务器计算 机系统。计算机系统1200包括通信机构或总线1211,用于信息通信; 处理器1212与总线1211耦合,用于处理信息。处理器1212包括微处理 器,但不限于微处理器,例如PentiumTM, PowerPC , 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的任一或全部组件及相关硬件可以用于本发 明。然而,应理解,计算机系统的其他配置可以包括这些设备中的一 些或全部。
在阅读前面的描述之后,对本技术领域普通技术人员来说,本发 明的许多选择和修改是显而易见的。应理解,以示例方式示出和描述 的任何特定实施例都不应视为对本发明的限定。因此,对各种实施例
中细节的参考不应限制权力要求的范围,在权利要求中仅陈述了与本 发明的本质相关的特征。
权利要求
1.一种方法,包括基于第一安全策略对脚本程序进行静态分析,以检测脚本程序的不安全行为;以及当执行脚本程序将违反安全策略,则防止脚本程序的执行。
2. 具有一个或多个计算机可读介质的制造产品,介质上存储指令, 当由系统执行指令时,指令使系统执行下述方法,所述方法包括基于第一安全策略对脚本程序进行静态分析,以检测脚本程序的 不安全行为;以及当执行脚本程序将违反安全策略,则防止脚本程序的执行。
3. —种方法,包括基于第一安全策略分析脚本程序;以及 修改脚本程序以确保脚本程序的安全执行。
4. 具有一个或多个计算机可读介质的制造产品,介质上存储指令, 当由系统执行该指令时,指令使得系统实施下述方法,所述方法包括:基于第一安全策略对脚本程序进行分析;以及修改脚本程序以确保脚本程序的安全执行。
全文摘要
公开了一种检测和防止脚本程序中不安全行为的方法和装置。在一个实施例中,该方法包括基于第一安全策略对脚本程序进行静态分析,以检测脚本程序中的不安全行为,如果在执行脚本程序时违反安全策略,则防止脚本程序的执行。
文档编号G06F21/00GK101356535SQ200680050803
公开日2009年1月28日 申请日期2006年11月8日 优先权日2005年11月10日
发明者于大川, 阿杰·查得 申请人:株式会社Ntt都科摩
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1