第13章移动代码安全课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第13章移动代码安全课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 13 移动 代码 安全 课件
- 资源描述:
-
1、第第1313章章 移动代码安全移动代码安全 第第13章章 移动代码安全移动代码安全 13.1 引言引言 13.2 移动代码安全技术移动代码安全技术 13.3 Java安全安全 第第1313章章 移动代码安全移动代码安全 13.1 引引 言言 移动代码又称移动代理、可下载代码、可执行内容、远程代码等等,它是指在本地执行的远程代码。传统系统中,执行的代码都是驻留在执行代码的主机上,而对于移动代码,执行的代码则是来自远程主机。Carzaniga等人1将移动代码进行了分类并与传统的基于客户机服务器技术的分布式系统作了比较:第第1313章章 移动代码安全移动代码安全 (1)客户机服务器模型:客户机和服务
2、器位于不同的主机上,由客户机向服务器发送请求;处理请求所需的资源和代码都位于服务器端。(2)即时响应代码(Code-on-Demand):客户机拥有完成某项操作的资源,但没有如何完成这项操作的代码,客户机通过向远程服务器发送请求,由服务器将代码发送给客户机。这种类型的移动代码包括:Java应用程序、ActiveX控件、MIMI Tcl扩展和Postscript等。第第1313章章 移动代码安全移动代码安全 (3)远程计算:客户机拥有描述某项服务的代码,而执行代码所需的资源位于远程服务器上。客户机把代码发送到服务器上,由服务器执行代码并把结果回送到客户机。(4)移动代理:客户机进程在执行期间为了
3、完成某项服务需要访问一些资源,而这些资源位于远程服务器上,于是客户机把客户机进程移植到服务器端并由服务器完成服务。客户机进程会一直停留在服务器上直到下一个客户机进程移植过来。第第1313章章 移动代码安全移动代码安全 Java应用程序(Applet)和代理(Agent)是移动代码中的两种主要形式。Java应用程序是用户把代码从远程主机下载到本地执行。这种技术在Web浏览器中嵌入了Java虚拟机。这样,Web发布者就可以向用户提供动画、游戏等动态内容,而不仅仅提供静态的HTML页面或依赖于带宽的CGI交互式内容。而代理则相反,用户是把代码发送到网络上以完成用户所需的某项任务。最早的移动代理系统之
4、一是Telescript。第第1313章章 移动代码安全移动代码安全 从上面的讨论可以看出,移动代码是由一方生成,但在另一方控制的环境中运行的代码。这就会带来安全问题。如对于Java应用程序,用户在执行它来实现某些操作的同时要承担恶意代码破坏系统的风险,而代理则要保护其代码免受恶意主机的利用。第第1313章章 移动代码安全移动代码安全 13.2 移动代码安全技术移动代码安全技术 移动代码会导致安全问题的本质在于在运行代码时需要访问系统资源,而代码却是来自于另一台,甚至是不可信的主机。即代码提供者和代码运行者之间可能是互不信任的。移动代码易受到以下几种类型的攻击2:(1)泄漏用户或主机的机密信息
5、;(2)拒绝服务:使合法用户无法获得资源;第第1313章章 移动代码安全移动代码安全 (3)破坏或修改数据;(4)恶作剧攻击:如在用户屏幕上显示图片或在用户主机上播放音乐等。第第1313章章 移动代码安全移动代码安全 移动代码安全需要考虑以下几个方面:(1)访问控制:规定谁可以使用代码;(2)用户认证:识别合法用户;(3)数据完整性:保证代码在传输过程中未被修改过;(4)不可抵赖:发送者和接收方不能否认使用过代码;(5)数据机密性:保护敏感数据;(6)审计:跟踪移动代码的使用。第第1313章章 移动代码安全移动代码安全 在前面提到,移动代码安全可以从两个方面考虑:一是恶意代码对本地系统的破坏;
6、二是远程恶意主机对代理的非法使用。接下来,我们将从恶意代码和恶意主机两个方面来讨论移动代码的安全技术3。第第1313章章 移动代码安全移动代码安全 13.2.1 恶意代码 对于Java应用程序类的移动代码,一般的操作是用户下载可执行格式的二进制Applet然后运行。这就很容易带来安全问题:用户必须允许不可信的代码在本机运行,而这些代码可能会随机写内存,从而导致系统崩溃;代码甚至可以读、修改以至删除用户个人文件。在运行Applet之前进行认证可以解决这个问题。通过认证,用户就可以确定它所运行的代码来自于特定的可信源。但是这种方法带来了两个问题:第第1313章章 移动代码安全移动代码安全 (1)严
7、重限制了用户可以运行的Applet(必须来自可信源),而不可信服务器也可提供有用的、好的代码;(2)更重要的是来自可信源的代码可能存在bug,从而对用户系统带来恶劣的影响。对这个问题的理想解决方法就是阻止不安全的行为。接下来讨论三种解决恶意代码问题的技术:安全解释器、故障隔离和代码验证。第第1313章章 移动代码安全移动代码安全 1安全解释器 直接运行二进制代码是很危险的,解决这个问题的常用方法是不使用编译好的可执行代码,而采用解释移动代码的方法。在这种情况下,解释器能很好地控制Applet并能检查每一条指令和每一个状态以决定是否执行Applet。这样,系统的安全性就在于实现解释器的安全策略的
8、正确性上。安全解释器包括Safe-Tcl、Safe-Tcl扩展、Java等等。第第1313章章 移动代码安全移动代码安全 2故障隔离 采用安全的解释器系统能很好地解决恶意代码的问题。但是,相对编译的机器码而言,解释器存在严重的性能缺陷:执行Java Applet比执行一般的二进制代码要慢得多。为此可以转而采用一种称为“沙盒”(sandbox)的方法来获得安全。第第1313章章 移动代码安全移动代码安全 在沙盒模式中,下载的不可信代码的操作将严格局限于沙盒中。沙盒是由运行代码的主机特别为移动代码分配的地址空间,如Web浏览器特别为Java Applet分配的区域。这时,移动代码可以在沙盒中运行,
9、但不会超出沙盒的界限。例如,Applet不能读取或修改存储在用户系统上的文件。在某种情况下,即使用户偶然引入了一个敌意的Applet,这个Applet也不能破坏用户的系统。因此这种沙盒模式为移动代码提供了一个受限的运行环境,在此环境中可以运行从开放网络中获得的不被完全信任的代码(如Applet等)。第第1313章章 移动代码安全移动代码安全 实现沙盒有两种方法:(1)插入对地址进行条件检查的操作,如果地址非法则产生异常;(2)简单覆盖对应沙盒地址的高比特位。第一种方法更适合调试,而第二种方法系统开销小一些。采用沙盒模式的主要缺点是可下载的代码不再是与平台无关的,而与操作平台无关原本是Java系
10、统的主要设计目标之一。第第1313章章 移动代码安全移动代码安全 3代码验证 第三种技术是一种称为证明携带码PCC(Proof-Carrying Code)的技术4。采用这种技术时,移动代码主机为Applet确定安全策略,然后以Edinburgh逻辑结构(Logical Framework:用来发布安全策略和对证明进行编码)对安全策略编码并发布这个策略。Java Applet作者的任务不仅是把Applet编译成机器代码,还要产生一个安全证明(Safety Proof),用来证明这个代码符合安全策略中指定的安全规则(Safety Rules)。第第1313章章 移动代码安全移动代码安全 当用户下
11、载代码后,它只要验证代码中的证明,看是否合法并满足安全规则就行。如果是则加载代码并运行它。这种方法是否有效的关键在于哪些程序特性可以用LF表示和证实。PCC已成功应用于最小和最大CPU周期限制、内存的安全使用、网络带宽消耗以及类型安全中。此外,为C语言的安全子集开发了PCC编译器,它可以自动生成安全证明。第第1313章章 移动代码安全移动代码安全 PCC是一种很有前景的方法,但是,它也存在一些缺点:PCC与平台有关;LF编码的安全策略和安全证明必须和操作系统以及机器硬件密切联系。更多信息可以参考网站:raw.cs.berkeley.edu/pcc.html。第第1313章章 移动代码安全移动代
12、码安全 13.2.2 恶意主机 在讨论了恶意代码问题之后,我们开始讨论恶意主机问题。在移动代理编程中,用户所关心的是其代理能否被正确执行。如一个购物代理可能会携带电子现金,一个主机就可能会欺骗代理使它为某些商品支付高价钱,甚至窃取代理内的金钱。这都是用户所要面对的安全问题。主机为了执行代理,需要访问代理代码和状态,那么如何保证敏感数据的机密性,或者说如何保证代理算法被忠实地执行呢?Chess13等人认为保护移动代理的限制有:第第1313章章 移动代码安全移动代码安全 (1)要对代理代码或状态的任意部分保密,就必须采取加密;(2)我们无法阻止拒绝服务攻击,因为攻击者不需要专门可信硬件的帮助就可以
13、任意修改代理代码或终止代理。由此可见,要解决恶意主机问题就要从以下两个方面着手:(1)能够检验篡改;(2)能阻止机密信息泄漏。第第1313章章 移动代码安全移动代码安全 1检测篡改 我们无法采用技术途径来使代理不受破坏,但是如果能明确地识别出恶意主机,那么法律的、社会的威胁就可能阻止恶意主机的操作员破坏代理。识别恶意主机还可能使代理的所有者因代理的损失而获得某种程度的补偿。下面将介绍检测恶意主机的技术,这些技术都是基于公开密钥基础设施的,它们允许用户、主机和代理之间相互认证。这些技术主要是要证明一个主机确实是恶意主机,因此,采用数字签名非常重要。第第1313章章 移动代码安全移动代码安全 (1
14、)执行跟踪。可以通过产生代理程序执行迹的方法来检测篡改。首先,将代理代码的指令分成两类:只依赖于代理内部状态的指令以及其结果依赖于和计算环境交互的指令。对于前一类指令,服务器只有在代理的任一变量的值发生变化时,才在执行迹中记录其新值;对于后一类指令,不但要记录这些新值,还需要对这些值进行数字签名。第第1313章章 移动代码安全移动代码安全 一旦执行完毕,服务器就计算整个执行迹的密码散列值并将它返回给代理的所有者。这时,如果代理所有者怀疑在执行代理时有违规操作,它就可以要求出示执行迹,那么主机执行代理时就必须生成执行迹(执行迹的散列值可被验证),然后检验执行迹就可确定:主机是否错误地执行了只依赖
15、于内部状态的指令;主机执行代理过程中,在与计算环境交互时是否欺骗了代理。第第1313章章 移动代码安全移动代码安全 这种方法在实际的操作中存在两个问题:(a)这种方法在主机违规操作时不会向代理所有者发出警报,而只有在所有者怀疑时提供一种可验证的识别方法;(b)在需要生成执行迹时,服务器需要保存所有的执行迹,这就给服务器带来了非常高的负担。第第1313章章 移动代码安全移动代码安全 (2)认证部分结果。Yee4提出了两种检测恶意主机篡改代理的方法。第一种方法是采用部分结果认证码(PRAC),发送代理的同时发送一组密钥k1、k2、kn。在第i个服务器,代理使用密钥ki对其执行结果进行签名并由此产生
16、PARC;在转移到下一个服务器之前,代理把ki从状态中删除。这样,一个恶意主机就不能伪造来自前一个服务器的部分结果,最糟糕的情况也仅仅是把这些部分结果从代理中移除。第第1313章章 移动代码安全移动代码安全 PRACs允许代理所有者(同时拥有k1、k2、kn)自动地对返回代理中包含的每一部分结果进行密码验证。这些消息可以保证非常好的前向完整性:设移动代理访问一系列的服务器S=s1、s2、sn,而第一个恶意服务器为sc,则对于ic,服务器si的部分结果不是伪造的。当服务器仅仅通过与正在运行的代理进行欺诈性的交互实现篡改时,上述方案就无法自动检测到。此外,只有在代理所有者怀疑主机时才会产生PRAC
17、所有的PRAC都是密码有效的,但有些可能在语义上无效。第第1313章章 移动代码安全移动代码安全 Yee提出了一种投机的方法来检测语义上的篡改。对于程序x,设y为x的执行迹。主机执行完代理后把y发送给代理所有者,由所有者验证y。由于执行迹可能会很大,因此传输它的带宽开销会非常大。从而,主机把y编码成全息样片y。样片y具有如下特性:代理所有者只需要检查y某些位就能确信其正确与否。这样,服务器就可以采用哈希树的方案将样片散列成一个小的根值,然后把根值返回给代理所有者,由所有者判断y是否正确。这种方法的主要缺点是服务器的负荷问题。构造全息样片y是一个全NP问题(不存在多项式时间算法解的一类问题,全N
18、P问题则是最为困难的一类),在执行迹y大到很难传输到代理所有者时,构造y是不能实现的。第第1313章章 移动代码安全移动代码安全 2保密 在有些情况下,事后检测是不适当的或是不能解决问题的。如有时候采用法律行动的代价比篡改带来的经济损失更大;有些时候,代理发送数字签名,但由于某些原因其私钥已被泄漏。为此,Sander和Tschudin13提出了一种理论上的方案以允许代理对恶意主机保留一些机密。方案的本质是这样的:代理程序计算某个函数f,主机为代理计算f(x)但不需要知道f的任何实质性的内容。协议描述如下:第第1313章章 移动代码安全移动代码安全 (1)代理所有者加密f;(2)所有者创建程序P
19、(E(f)来实现E(f),并把它放在代理中;(3)代理到达远程主机,在远程主机上计算P(E(f)(x),并把值返回给所有者;(4)所有者解密P(E(f)(x)并获得f(x)。其中,E为某个加密函数。协议的基本思想是把基本算法转化成杂乱算法,使其结果只对代理所有者有意义。第第1313章章 移动代码安全移动代码安全 3总结 相比恶意代码而言,恶意主机问题更难以处理,目前还没有实际的、在计算上可行的方法用来检测篡改,而一些可以用来证明发生了篡改的技术也会大大增加服务器的负荷。此外,在一个不友好的环境中运行代理时,有没有可能为代理提供某种类型的机密性还是一个未知数。这些问题的存在或许可以解释移动代理为
20、什么得不到广泛应用。第第1313章章 移动代码安全移动代码安全 13.3 Java 安安 全全 13.3.1 Java综述 Java语言是Sun Microsystems公司开发的。在Sun Microsystems公司提供的技术报告5中称:“Java是一种简单的、面向对象的、适合网络编程的、解释的、健壮的、安全的、与结构无关的、可移植的、高性能的、多线程的动态语言。”第第1313章章 移动代码安全移动代码安全 简单:Java是一种易于使用的编程语言,其简单性体现在以下几个方面:(1)它和C+类似(C+程序员可以很快掌握Java编程技术);(2)它摒弃了C+中许多很少用、很难理解和容易混淆的特
21、性,如操作符重载等;第第1313章章 移动代码安全移动代码安全 (3)Java实现了自动垃圾收集,从而简化了Java编程。在C和C+中,一个复杂的操作是内存管理:内存分配和内存释放。通过自动垃圾收集(周期性的释放没有被引用的内存)不但可以使编程简单化,还可大大地减少程序中的bug;(4)Java程序很小,易于通过网络下载。第第1313章章 移动代码安全移动代码安全 面向对象:和C+一样,Java是一种面向对象的编程语言。适合网络编程:Java拥有广泛的、能轻易处理TCP/IP协议的运行库,因此相比C和C+而言,Java更容易创建网络连接。Java应用程序通过URL打开和访问网络上的对象与编程人
22、员访问本地文件系统一样简单。健壮性:Java能检查程序在编译和运行时的错误。类型检查可以检查出许多开发早期出现的错误;Java没有采用C+中的指针算法而实现了真数组,从而避免了覆盖内存和破坏数据的可能。第第1313章章 移动代码安全移动代码安全 安全:设计Java是为了用于分布式网络环境,因此安全在这里就显得非常重要。本节的后续内容将详细介绍Java的安全实现以及其潜在的安全威胁。与结构无关:Java程序是在网络上传播和应用的,而网络上的不同主机的CPU、操作系统结构等等都不尽相同,为了使Java应用程序能在网络上的任何一台主机上运行,编译器必须产生一个与结构无关的文件格式只要处理器上有Jav
23、a虚拟机系统,此文件格式的代码就可以在此处理器上运行。Java的做法是让编译器生成与特定计算机体系结构无关的字节码指令,这些字节码指令在任何机器上都很容易解释,并能很容易地翻译成本机机器代码。第第1313章章 移动代码安全移动代码安全 可移植:与体系结构无关的特性使得Java应用程序可以在配备了Java解释器和运行环境的任何计算机系统上运行,这为Java应用程序便于移植打下了良好基础。但仅仅如此还不够,不同操作系统基本数据类型的设计实现是不同的,如在Windows 3.1中整数(int)为16位,在Windows 95中为32位,而在DEC Alpha中却为64位。这不利于代码的移植。为此,J
24、ava定义了独立于平台的基本数据类型及其运算,从而使得Java数据在任何硬件平台上都是一致的。其次,Java编译器本身是用Java语言编写的,而运算系统是用ANSI C语言写的。总之,在Java语言规范中没有任何与具体实现相关的内容。第第1313章章 移动代码安全移动代码安全 解释:Java是一种解释性语言,其解释器可以将Java字节码翻译成本地机器指令并运行,而不需要存储字节码。高性能:由于解释字节码的性能一般都是比较高的,从而Java可以在运行时直接将字节码翻译成机器指令。Sun Microsystems的SPARCStation 10在翻译代码时,可以在每秒钟内调用300 000个方法,
25、这和直接生成机器目标代码C/C+的性能不相上下。第第1313章章 移动代码安全移动代码安全 多线程:Java提供了一个内建的机制来提供对多个并发子任务的支持。动态:在C+程序设计过程中,每当在类中增加一个实例变量或一种成员函数后,引用该类的所有子类都必须重新编译,否则将导致程序崩溃,而Java是一种动态语言,它不是把所有的类静态地编译成机器码,而是由程序动态地装入运行过程中所需要的类。第第1313章章 移动代码安全移动代码安全 13.3.2 Java底层安全性实现 1.底层安全 Java解释器通过以下几种方式实现底层安全:1)通过发布源代码获得安全 如果需要,Java解释器和编译器均可获得完整
展开阅读全文