Lightweight SelfProtecting JavaScript.docx
- 文档编号:9230949
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:13
- 大小:410.80KB
Lightweight SelfProtecting JavaScript.docx
《Lightweight SelfProtecting JavaScript.docx》由会员分享,可在线阅读,更多相关《Lightweight SelfProtecting JavaScript.docx(13页珍藏版)》请在冰豆网上搜索。
LightweightSelfProtectingJavaScript
轻量级自我保护的JAVASCRIPT
摘要:
本论文介绍了一种可控制javascript执行的方法。
目的是阻止或者修正如下不当的原因导致的行为:
程序被注入恶意的脚本或者使用不当设计的第三方代码。
而本文的方法是基于修正代码的原则从而确保实现自我保护:
保护机构(安全策略)被嵌入代码本身从而拦截和安全相关的API调用。
而这种方法的挑战来自js代码本身:
任何变量在程序的作用域里面可以被重新定义,所以代码可以被一直创造和运行,这就导致了潜在的问题。
所以我们为此建立了防篡改保护机制以确保没有任何与安全相关的问题。
但是不像以前实施用以和调整js行为的控制和管理的方法,我们提出的解决方法是轻量级的,他不需要改良的浏览器,不需要任何运行时的语法和改进代码(包括动态生成的代码)。
结果是,这种方法相对于其他满足的方法,有着低运行时间的特点,而且不需要浏览器的修正需求意味着这种策略甚至可以应用在服务器上,以减轻跨站点脚本漏洞。
关键词:
基于语言的安全,内联参考监视
1:
介绍
Javascript是不可被信任的,由于浏览器架构的复杂天性,脚本语言动态内容的反应特点,导致其可以提供许多方法来击败内置的安全机制或将恶意代码注入到网页中。
本文研究的经典方法,是通过将一个参考监视器强加给另外的不受信任的系统使之可被信任的安全策略。
安全参考监视器的概念是通过一个方法来指定,并通过使用一个组件接口实现安全系统,该接口用于拦截安全相关资源,适用于请求和安全策略来决定是否资助申请的请求。
这种思想的变体包括不安全事件的自动变换-例如:
修复已知漏洞。
在javascript的背景下,一种方法来实现这个想法是修改脚本运行的浏览器运行时的系统,这种方法给了实施计划很大的自由,比如使监测机制篡改会更加直接。
在另一边,他需要浏览器明确地构建到位,并为客户端提供动态的保护。
另一种可选的方法是将策略机制内联入代码,这样代码便可以实现自我保护。
现在有可考虑的最近的兴起的这种作为-一种提供可表现的高效的软件接口上面的应用的明确保护机制的方法,比如:
软件错误隔离,内联参数监控。
有了潜在的内联参数监控,如果他们可以静态的被显示为安全的话,特定的动态检查可以便可被避免。
对于javascript来说,他有着更少的问题是因为语言的本质天性使得他很难去优化。
然而这种自我保护的程序由于很多的原因而显得十分有趣,首先他不是依赖于修正改良的浏览器技术,这便意味着代码的转换可以在任何的点发生在浏览器和代码生成器之间。
比如说:
一个网站传输一些动态的特定的内容。
服务器端知道这个请求,并且知道只会使用一个修正的特定的数字或者资源。
(例如对话和cookie)。
所有超越这个的要么归咎于编程的错误,要么是跨站点的脚本攻击。
在服务器端使用内联的机制可以内联控制脚本页面的资源的使用。
而可选的内联也许会被某些代理展示。
自我保护的js的挑战:
执行自我保护的javascript的主要挑战是什么呢:
关键的事项是完整性和防篡改。
完整性确保所有与安全相关的事宜被截获-由于js的反应能力。
防篡改确保代码不会破坏监控机制本身,因为它基于相同的代码基础。
本文中最密切相关的方法之一为浏览器屏蔽工具:
在不需要浏览器支持的情况下拦截和转换javascript操作。
防篡改与动态的命名空间相应对-确保底层的代码命名空间和监控代码的命名空间是不相交的。
文稿:
在本文中使用轻量级的自我保护机制,而轻量级意味着:
1:
不需要浏览器的修正,所以保护可以被应用在客户端或者服务器端,或者都可以。
2:
非暴力侵入性:
原始代码不是语法修正的,唯一的修正是页面的头部信息的载入。
3:
他的实现是对于面向方向的编程库的小的,简单的适应过程组织:
2.Javascript的强制执行的安全机制:
2.1攻击的假想:
我们假想攻击者恶意地尝试着去注入危险的js代码来获取进入某个页面的入口的渠道。
当一个用户访问页面,恶意的脚本被有特权的脚本页面从数据库加载并且在用户的浏览器中执行,这样的用户便成为了脚本攻击的受害者。
我们希望页面被安全的保护着,不被恶意的攻击者所盗用,攻击者也不可以修改页面的内容。
我们也可以假定页面是被用户信任着的,这样便可以含蓄的执行脚本,并且期望隐私信息同样安全而不会落入第三方的团体手中。
2.2:
强制执行措施
主要的策略去实现强制执行是在执行之前,拦截每一条与安全相关的事件,这些事件可能会由于机制策略的影响而或获准继续运行,或者被拒绝,或者被修改。
这是一个安全引用监视器的经典理念的变化,并且我们需要遵循的这种机制便被称作为参考监控。
这种想法的实现需要源对源的代码转换。
有时被称为:
内联参数监控方法
尽管相似的方法可能会在其他的地方出现。
就像我们在稍后的讨论的一样,转换可以发生在服务器端的代理或者客户端
首先我们要决定哪个将要被监控,我们需要持这样的观点:
他是与安全事宜相关的内置对象的方法和领域.这些运行时会被展现的方法和领域,和具有语义独立的正被执行的程序-对于js运行在网络浏览器时的基础的意味着API方法将-直接影响着DOM树。
参考监视,基于一些决定是否或者怎么样调用原始方法的安全状态信息。
设M范围的安全性相关的方法。
基本的拦截方法是创建记录计算历史的相关部分需要一个安全状态,并确保任何安全相关的事件,经过监测,即相关每个安全
方法M.我们
1.创建一个别名,以原来的方法
Morig=M
2.重新定义了原来的方法只能通过包装方法调用原始的方法:
M(params)=wrapperM(Morig,params,SecurityState)
考虑,例如,一个安全自动机的情况下(在术语截断自动机)。
这里的安全状态模型的状态自动机。
对于wrapperM伪代码将是:
ifpermitted(M,params,SecurityState)then
SecurityState:
=update(SecurityState,M,params);
Morig(params);
else
abort;
endif
其中,“允许”该呼叫决定是否允许M在当前状态,如果是这样的安全状态被更新,并且呼叫继续进行。
否则执行被中止。
实施这种方法,使得JavaScript方面确实在计划的范围,并且使什么都可以重新定义的挑战可能包括:
(i)Morig,
(ii)安全状态及其任何辅助功能,
(iii)包装函数M(params)=wrapperM(···)
(ⅰ)和(ⅱ)的解决方式看起来是很直接的:
通过适当的使用范围界定机制:
原始内置方法和安全状态信息的参考被保持在局部范围的可见的包装代码。
相比之下,浏览器屏蔽使用运行时“名称解析的管理”,在该计划的实施所有其他变量(包库那些在运行时动态确定和决定反应)为了不与保护机制库发生冲突。
那么part(III)呢,虽然我们可以做任何的辅助函数部分的局部范围,新版本的M必须是全局可见,但JavaScript不提供任何语言级别的机制,使这一新的定义不变。
在这儿我们的解决方法是不做任何事情,我们允许脚本自由的重定义任何的这样子的方法M-要么是局部,要么是全局。
我们的策略关注的是防止(或修改)的内置方法的某些行为,该策略并不关心碰巧有着相同的名称作为内置插件的方法。
举个例子:
如果我们以监测内置window.open方法,以确保有不超过2个弹出是允许的。
该策略指的是执行的window.open操作的实际本地代码,而并不关心该方法本身的名称。
如果程序重新定义的window.open那么策略仍然是只关心原始方法的本地代码,而不是这种新方法。
这种新方法(在这种特殊的策略下)可以被自由的调用任意次数。
使这种方法安全的关键是:
具有内置方法的本地代码代码是只有通过包装方法访问。
虽然包装方法可以被覆盖,参考原始内置方法唯一地由包装方法进行。
3.实现:
这里,我们描述了该方法的实施。
该代码是基于转型本身,这将插入代码的策略,一些库代码放到页面的页眉一个简单的转换。
这个过程的确切结构不是主要的焦点,并且它可以由代码生成器来执行,在服务器处,由一个应用防火墙或代理,或甚至作为浏览器插件。
List1:
包含策略执行代码的网页结构
具有嵌入式策略的网页的具体结构如list1所示;策略嵌入的流程是:
在开发和代码浏览器之间的某些地方需要静态表现,此静态方法具有优势,因为它是简单的,并且不需要任何HTMLandJavaScript代码分析。
这可能在服务器端代码(或代码存根)静态执行具有一定的潜在优势。
特别是没有额外的计算为在服务器上的每个HTTP请求运行。
与其中被用于在客户端和服务器之间的代理每个HTTP请求进行的计算类似的方法,如浏览器屏蔽或内核脚本相比,这个优点是显着的,并且计算开销可由观察由每个客户端取网页的尺寸的决定。
必须解决,使这个方案可行的核心问题是要求使原来的方法“拯救”,但是,这不能成为包装函数外部访问,此外,任何所需的额外状态变量不应修改程序的其余部分。
这些要求是由标准的JavaScript作用域技术轻松解决,首先在方案代码必须住里面一个局部范围,这可以通过将它们放置在其由一个会被自动被执行匿名函数来实现,其次,我们实现了重通过他们的局部变量得知了参照原有方法和安全状态隐私(由VAR定义)。
这些变量的寿命延伸超过范围,因为它们是(很可能)包装内使用方法。
列表2中的代码草图说明了适合结构包装一个名为“内置”单一的方法。
这种结构的保护初始化代码的最终结果是使得可见的攻击代码的唯一变量是内置的,新的版本-我们允许代码来随意覆盖。
另一个值得关注的可能是攻击者试图注入的代码(如通过文件撰写)插入页面从而抢占这一保护初始化代码的执行。
在我们的模型中,在方面定义的策略都位于第一个
copyright@ 2008-2022 冰点文档网站版权所有
经营许可证编号:鄂ICP备2022015515号-1