如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
Java安全编程(BadExamplesfoundinJDK)MarcSchönefeld,UniversityofBambergIllegalaccess.org关于演讲者MarcSchönefeld,Diplom-WirtschaftsinformatikerForScience:Externaldoctoralstudent@LehrstuhlfürpraktischeInformatikatUniversityofBamberg,Bavaria,Germany课题项目:REFACTORINGOFSECURITYANTIPATTERNSINDISTRIBUTEDJAVACOMPONENTSForLiving:DepartmentforOperationalSecurityManagementatcomputingsiteforlargefinancialgroupinGermanyJava,J2EE,CORBA[CSMR2002]设计和开发安全加固(代码审核)情形Java(我们这里讨论适用于J2SE,一些方面也适用于J2EE)被设计成一种具有与生俱来安全特性的编程语言[Gong,Oaks]JVM级:类型安全(TypeSafety),字节码完整性检测(Bytecodeintegritychecks)API级:SecurityManager,ClassLoader,CertPath,JAAS加密支持:JCA/JCE,JSSE所以,什么会是问题呢?一些2003/2004年的Java安全警告FL2Java运行时环境(RuntimeEnvironment)可能允许非受信FL3Applets提升权限JavaMediaFramework(JMF)中的一个漏洞,可能导致Java虚拟机(JVM)崩溃…JavaRuntimeEnvironment远程拒绝服务攻击漏洞(DoS)…尽管存在JAVA安全体系的先天防护,还是有许多潜在的攻击可能性…是什么原因导致的呢?幻灯片4FL2警告FlierLu,2005-8-16FL3不被信任FlierLu,2005-8-16问题一个平台(象Javaruntimeenvironment)只能提供对程序员意图的支持什么是程序员的意图?表现出不同的观点…功能[应用程序员]Java有一套很强大的预定义的API函数(sockets,files,…)质量和重用[中间件程序员]Java在不同的语义级别提供通讯和编组(marshalling)能力(Sockets,RMI,CORBA,Raw-Serialisation,XML-Serialisation,…)安全性[安全架构师]Java在沙箱(sandbox)外提供隔离、加密和安全Sockets等支持恶意的意图[敌人]通过找到弱点来破坏安全JavaVM和核心的lib库有(许多?)漏洞Classloaders和保护域为什么在JAVA代码中找安全漏洞?基于组件的软件开发第三方的中间件组件(web服务器,图像库,PDF生成,…)随处可见我们在受信任的地方(根类型加载器bootclassloader)重用它们但是我们真的能信任它们吗?疑问:我的第三方图像库中是否存在可能被攻击者利用的存在漏洞的对象实现?JDK是否把我隔离存放的机密XML数据,与其他存在恶意代码的applets加载到同一个JVM中?对象序列化(serialisation)真的安全么?J2EE多层应用类型J2EE多层攻击类型数据注入攻击(SQL,遗留格式)EvilTwin拒绝服务攻击,Attack恶意序列化数据Java安全模式Sun的安全编码指导方针(最后更新于2000年2月2日!):1.小心使用特权代码2.小心处理静态字段3.最小化作用域(scope)4.小心选择公共(public)方法和字段5.适当的包(package)保护性6.尽可能使用不可变(immutable)对象7.永远不要返回对包含敏感数据的内部数组的引用8.永远不要直接存储用户提供(user-supplied)的数组9.小心使用序列化(Serialization)10.小心使用本地方法(nativemethods)11.清除敏感信息http://java.sun.com/security/seccodeguide.htmlJava安全反模式忽略那些安全模式的代码不经意间就会造成漏洞典型的Java安全编码反模式(Antipatterns):忽略语言特性(例如整数溢出(IntegerOverflow))不注意使用序列化,不注意使用特权代码