高效的静态分析-符号执行与缺陷模式

上传人:陈** 文档编号:182614182 上传时间:2023-01-26 格式:PPTX 页数:56 大小:527.92KB
收藏 版权申诉 举报 下载
高效的静态分析-符号执行与缺陷模式_第1页
第1页 / 共56页
高效的静态分析-符号执行与缺陷模式_第2页
第2页 / 共56页
高效的静态分析-符号执行与缺陷模式_第3页
第3页 / 共56页
资源描述:

《高效的静态分析-符号执行与缺陷模式》由会员分享,可在线阅读,更多相关《高效的静态分析-符号执行与缺陷模式(56页珍藏版)》请在装配图网上搜索。

1、高级软件工程高级软件工程1第十一讲第十一讲 高效的静态分析高效的静态分析 2/55高级软件工程高级软件工程一、符号执行一、符号执行1、符号执行简介、符号执行简介2、代表工具:、代表工具:PREfix二、缺陷模式二、缺陷模式1、缺陷模式简介、缺陷模式简介2、安全漏洞、安全漏洞2第十一讲第十一讲 高效的静态分析高效的静态分析 3/55高级软件工程高级软件工程 一、符号执行一、符号执行1、符号执行简介、符号执行简介2、代表工具:、代表工具:PREfix3第十一讲第十一讲 高效的静态分析高效的静态分析 4/55高级软件工程高级软件工程 int x,y;1:if(x y)2:x=x+y;3:y=x-y;

2、4:x=x-y;5:if(x y)foo1();6:else foo2();观察下面程序:观察下面程序:有什么问题?有什么问题?4第十一讲第十一讲 高效的静态分析高效的静态分析 5/55高级软件工程高级软件工程lJ.C.King 于 1976 年提出Symbolic Executionl 使用符号值,而不是实际数据,作为输入l将程序变量的值表示为符号表达式l程序计算的输出表达为输入符号值的函数5第十一讲第十一讲 高效的静态分析高效的静态分析 6/55高级软件工程高级软件工程l优点分析是路径敏感的因为没有对路径、状态做近似,结果精确适合做状态检查、时序检查对并发类型的错误十分有效l缺点对所有可能

3、的状态进行穷举搜索,开销大对系统的行为进行近似,可能导致这类结果不精确对于数据密集的系统分析困难在边界处对路径、时序属性近似困难,故复合困难6第十一讲第十一讲 高效的静态分析高效的静态分析 7/55高级软件工程高级软件工程l优点由于对路径、状态进行抽象,扩展性好可以对许多有价值的属性构造格易于组合提供了坚实的数学基础l缺点适合的属性需要是简单的、“状态”“值”型的对时序性质支持弱属性格的定义不容易有时近似过强7第十一讲第十一讲 高效的静态分析高效的静态分析 8/55高级软件工程高级软件工程l优点支持灵活的属性易于扩展l缺点开发人员需要提供额外的信息自动化程度不高路径不敏感,对并发系统不适合8第

4、十一讲第十一讲 高效的静态分析高效的静态分析 9/55高级软件工程高级软件工程l记录执行的状态,包括:程序变量的符号值路径条件(PC:Path Condition)程序标记(后面执行什么)l路径条件非常重要积累了路径的约束条件l符号执行树刻画程序符号执行过程中的执行路径符号执行符号执行9第十一讲第十一讲 高效的静态分析高效的静态分析 10/55高级软件工程高级软件工程l最初,最初,x 与与 y 分别具有符号值分别具有符号值X、Yl在每个分支点,在每个分支点,PC 根据输入的假定确定不同的值根据输入的假定确定不同的值l如果如果PC不成立,该路径不可达不成立,该路径不可达l可以大大减少路径组合可以

5、大大减少路径组合 int x,y;1:if(x y)2:x=x+y;3:y=x-y;4:x=x-y;5:if(x y)foo1();6:else foo2();x:X,y:Y (xy?)x:X,y:Y(XY)x:X,y:Y(XY)x:X+Y,y:X(XY)x:Y,y:X(XY)x:Y,y:X (XY)&(YX)x:Y,y:X (XY)&(Y=X)例子:例子:10第十一讲第十一讲 高效的静态分析高效的静态分析 11/55高级软件工程高级软件工程l 符号执行可以被看作是路径敏感分析、演绎方法及抽象解释的组合l对路径条件进行近似使得抽象解释的属性区间值收缩,因此更加灵活l约束近似了许多状态,降低了分

6、析量l经常被应用于测试输入的生成l传统上,符号执行对有限个整数变量进行符号化,后来扩展到了处理复杂的输入数据结构和并发例如,扩展 JPF 工具以进行符号执行Java 程序11第十一讲第十一讲 高效的静态分析高效的静态分析 12/55高级软件工程高级软件工程1)基本特点2)主要思路3)主要步骤12第十一讲第十一讲 高效的静态分析高效的静态分析 13/55高级软件工程高级软件工程模拟执行单个的函数!l模拟过程顺序地跟踪不同的执行路径,模拟每个操作符的动作。在路径执行过程中,通过跟踪内存的状态,应用各种一致性规则,查找不一致性。l在对条件选择后,通过检查内存的当前状态,分析器可以限制可达的路径。由于

7、对路径、值的跟踪都很仔细,可以获得精确的信息。l函数的行为被描述为:条件、一致性规则及表达式值的集合。行为的这种描述被称为函数的一个模型。在路径执行过程中,不论何时进入一个函数,该模型被使用,以决定应用哪个操作1)基本特点)基本特点13第十一讲第十一讲 高效的静态分析高效的静态分析 14/55高级软件工程高级软件工程l在模拟过程中产生的信息足够自动地产生该函数的一个模型l为在整个程序中应用这些技术,分析起始于调用图的叶节点,自底向上地向根处理。随着函数被逐层模拟,缺陷被不断发现,函数模型被高层的后续模拟所使用l这种自底向上的方法使用一个函数的实现来产生函数的约束,供上层使用。这对于程序不完整时

8、(程序还没有开发完,或者被分析的代码需要适合多个不同的程序)尤其有效14第十一讲第十一讲 高效的静态分析高效的静态分析 15/55高级软件工程高级软件工程1#include 2#include 34 char*f(int size)5 6 char*result;78 if(size 0)9 result=(char*)malloc(size);10 if(size=1)11 return NULL;12 result0=0;13 return result;14 观察右边代码观察右边代码有什么问题?有什么问题?15第十一讲第十一讲 高效的静态分析高效的静态分析 16/55高级软件工程高级软件

9、工程1#include 2#include 34 char*f(int size)5 6 char*result;78 if(size 0)9 result=(char*)malloc(size);10 if(size=1)11 return NULL;12 result0=0;13 return result;14 example1.c(11):warning 14:leaking memoryproblem occurs in function fThe call stack when memory is allocated is:example1.c(9):fProblem occurs

10、 when the following conditions are true:example1.c(8):when size 0 here example1.c(10):when size=1 herePath includes 4 statements on the following lines:8 9 10 11example1.c(9):used system model malloc for function call:malloc(size)function returns a new memory block memory allocated错误消息1:当当 size=1 时,

11、直接返回时,直接返回 NULL,被分配的内存未被释放,也未被返回。被分配的内存未被释放,也未被返回。16第十一讲第十一讲 高效的静态分析高效的静态分析 17/55高级软件工程高级软件工程1#include 2#include 34 char*f(int size)5 6 char*result;78 if(size 0)9 result=(char*)malloc(size);10 if(size=1)11 return NULL;12 result0=0;13 return result;14 example1.c(12):warning 10:dereferencing uninitial

12、ized pointer resultproblem occurs in function fexample1.c(6):variable declared hereProblem occurs when the following conditions are true:example1.c(8):when size=0 herePath includes 3 statements on the following lines:8 10 12错误消息错误消息2:当当 size=0 时,函数试图解析一时,函数试图解析一个未被初始化的指针个未被初始化的指针(malloc in line 9 wi

13、ll not be executed).17第十一讲第十一讲 高效的静态分析高效的静态分析 18/55高级软件工程高级软件工程1#include 2#include 34 char*f(int size)5 6 char*result;78 if(size 0)9 result=(char*)malloc(size);10 if(size=1)11 return NULL;12 result0=0;13 return result;14 example1.c(12):warning 11:dereferencing NULL pointer resultproblem occurs in fu

14、nction fexample1.c(9):value comes from return value of malloc hereProblem occurs when the following conditions are true:example1.c(8):when size 0 here example1.c(10):when size!=1 hereproblem occurs when memory exhaustedPath includes 4 statements on the following lines:8 9 10 12example1.c(9):used sys

15、tem model malloc for function call:malloc(size)function returns 0memory exhausted错误消息错误消息3:当当size 0,但但malloc失败,失败,result 返回返回 NULL 指针时,对其赋值出现错误指针时,对其赋值出现错误18第十一讲第十一讲 高效的静态分析高效的静态分析 19/55高级软件工程高级软件工程while(there are more paths to simulate)initialize memory state simulate the path,identifying inconsist

16、encies and updating the memory state perform end-of-path analysis using the final memory state,identifying inconsistencies and creating per-path summary combine per-path summaries into a model for the function算法伪代码:算法伪代码:19第十一讲第十一讲 高效的静态分析高效的静态分析 20/55高级软件工程高级软件工程l模拟单个函数需要模拟可达的路径。可达路径的集合包含模拟单个函数需要模拟

17、可达的路径。可达路径的集合包含所有可能的控制流路径集合所有可能的控制流路径集合。这个集合的大小往往小于明。这个集合的大小往往小于明显的控制流路径。因为显的控制流路径。因为相同的条件往往控制多个条件模块相同的条件往往控制多个条件模块。通常可以选择有代表性的路径来模拟。具体路径数可以由通常可以选择有代表性的路径来模拟。具体路径数可以由用户进行配置用户进行配置l模拟一条路径涉及遍历函数的抽象语法树,对树上相关的模拟一条路径涉及遍历函数的抽象语法树,对树上相关的语句、表达式求值。被模拟函数的内存状态随着语句的执语句、表达式求值。被模拟函数的内存状态随着语句的执行被不断更新。许多缺陷行被不断更新。许多缺

18、陷(例如例如,未初始化的内存,未初始化的内存,NULL,或者无效的指针解析或者无效的指针解析)可以通过在路径模拟过程中对内存可以通过在路径模拟过程中对内存的状态应用一致性规则发现。其他的状态应用一致性规则发现。其他(例如,内存泄漏,将例如,内存泄漏,将指针返回给一个释放的内存指针返回给一个释放的内存)在到达路径终点时可以被发在到达路径终点时可以被发现现l当路径被模拟时,函数的最终内存状态被综合处理当路径被模拟时,函数的最终内存状态被综合处理(summarized)。当所有的路径被模拟后,。当所有的路径被模拟后,per-path summaries 被组成一个函数的模型被组成一个函数的模型20第

19、十一讲第十一讲 高效的静态分析高效的静态分析 21/55高级软件工程高级软件工程l路径路径路径跟踪很容易发现一些问题路径跟踪很容易发现一些问题路径中包括路径中包括“功能调用、语句、结果功能调用、语句、结果”模拟执行是基于路径进行的模拟执行是基于路径进行的为定位缺陷提供依据为定位缺陷提供依据但不一定是唯一的路径但不一定是唯一的路径l可能是多条路径累积的结果可能是多条路径累积的结果1#include 2#include 34 char*f(int size)5 6 char*result;78 if(size 0)9 result=(char*)malloc(size);10 if(size=1)

20、11 return NULL;12 result0=0;13 return result;14 当当 size 3 三个:三个:a=b+c22第十一讲第十一讲 高效的静态分析高效的静态分析 23/55高级软件工程高级软件工程l内存操作:求值、测试与设置内存操作:求值、测试与设置设置设置(setting)将一个值赋给内存,改变了内存的状态将一个值赋给内存,改变了内存的状态l简单推理:简单推理:(a3&b4)=a+b7测试测试(testing)在一定的上下文中对表达式求值,得到在一定的上下文中对表达式求值,得到一个布尔结果。需要进行测试的三种情形:一个布尔结果。需要进行测试的三种情形:l需要判定表

21、达式,以得到一个布尔结果需要判定表达式,以得到一个布尔结果(例如:条件分支例如:条件分支)l语言语义要求(例如:使用前必须初始化)语言语义要求(例如:使用前必须初始化)l在模型中选择可能的输出在模型中选择可能的输出(例子见后面关于例子见后面关于“模型模型”的内的内容容)23第十一讲第十一讲 高效的静态分析高效的静态分析 24/55高级软件工程高级软件工程l条件条件(condition)、假定、假定(assumption)与选择点与选择点条件可以比路径更清晰地描述缺陷条件可以比路径更清晰地描述缺陷在路径模拟执行过程中,条件对应于假定在路径模拟执行过程中,条件对应于假定当变量出现在一个表达式中、且

22、值不确定时,可当变量出现在一个表达式中、且值不确定时,可以进行假定以进行假定l例子中的例子中的“size”:输入参数,模拟是自底向上进行输入参数,模拟是自底向上进行的的l出现两个假定,分别模拟执行,并记忆当前假定出现两个假定,分别模拟执行,并记忆当前假定当作出一个假定时,相关内存的状态被更新当作出一个假定时,相关内存的状态被更新l这个假定可能提高其它断言的准确性这个假定可能提高其它断言的准确性 对于对于 a=b+5,当假定条件表达式当假定条件表达式 a=2 为真时,为真时,a 对应的内存对应的内存状态更新为状态更新为2,b 对应的内存状态可以更新为对应的内存状态可以更新为-3。此时,控制流没有

23、由已知的值完全确定下来,被此时,控制流没有由已知的值完全确定下来,被称为选择点称为选择点24第十一讲第十一讲 高效的静态分析高效的静态分析 25/55高级软件工程高级软件工程l路径结尾分析路径结尾分析当一条路径中的所有语句被模拟执行后,可当一条路径中的所有语句被模拟执行后,可以进行一些附加分析以进行一些附加分析发现一些缺陷。例如:内存没有释放等等发现一些缺陷。例如:内存没有释放等等l多路径分析多路径分析一条长的路径可能因为调用而包含多条子路径一条长的路径可能因为调用而包含多条子路径需要分别分析需要分别分析为控制总体数目,可以设置上限为控制总体数目,可以设置上限路径选择是一个问题路径选择是一个问

24、题25第十一讲第十一讲 高效的静态分析高效的静态分析 26/55高级软件工程高级软件工程l模型模型模型模拟了函数的行为模型模拟了函数的行为模拟器遇到一个函数调用时,它通过函数的模型模拟器遇到一个函数调用时,它通过函数的模型来模拟被调用的函数来模拟被调用的函数函数的模型主要是一组输出集合,这些输出代表函数的模型主要是一组输出集合,这些输出代表了函数计算时对内存状态的可能改变了函数计算时对内存状态的可能改变每个输出由每个输出由 Guards,Constraints,Results构成构成l约束(约束(Constraint)是前置条件:)是前置条件:fopen 的参数必须有效的参数必须有效l结果(结

25、果(Result)是后置条件:)是后置条件:fopen 执行后返回值有效执行后返回值有效l防卫(防卫(Guards)是测试:某个特定的输出可能依赖某个输入)是测试:某个特定的输出可能依赖某个输入int knot(int j)if(j=0)return 1;return 0;例子:返回值只有在例子:返回值只有在“j=0”时为时为“1”只有在只有在“j!=0”时为时为“0”26第十一讲第十一讲 高效的静态分析高效的静态分析 27/55高级软件工程高级软件工程(deref(param p)(alternate return_0(guard peq p NULL)(constraint memory_

26、initialized p)(result peq return NULL)(alternate return_X(guard pne p NULL)(constraint memory_initialized p)(constraint memory_valid_pointer p)(constraint memory_initialized*p)(result peq return*p)1 int deref(int*p)2 3 if(p=NULL)4 return NULL;5 return*p;6 一个模型的例子:一个模型的例子:27第十一讲第十一讲 高效的静态分析高效的静态分析 28

27、/55高级软件工程高级软件工程Warning Mozilla Apache GDIUsing uninitialized memory 26.14%45%69%Dereferencing uninitialized pointer1.73%0 0Dereferencing NULL pointer 58.93%50%15%Dereferencing invalid pointer 0 5%0Dereferencing pointer to freed memory 1.98%0 0Leaking memory 9.75%0 0Leaking a resource(such as a file)

28、0.09%0 8%Returning pointer to local stack variable 0.52%0 0Returning pointer to freed memory 0.09%0 0Resource in invalid state 0 0 8%Illegal value passed to function 0.43%0 0Divide by zero 0.35%0 0Total number of warnings 1159 20 13效果效果(1998):Mozilla 1.0,Apache 1.3beta 528第十一讲第十一讲 高效的静态分析高效的静态分析 29/

29、55高级软件工程高级软件工程1、缺陷模式简介、缺陷模式简介2、安全漏洞、安全漏洞29第十一讲第十一讲 高效的静态分析高效的静态分析 30/55高级软件工程高级软件工程1)缺陷模式概述2)Library Interface(库接口)30第十一讲第十一讲 高效的静态分析高效的静态分析 31/55高级软件工程高级软件工程显式的与隐式的独立的与嵌入式的(annotatioin)私有的与共性的模式:设计模式分析模式过程模式31第十一讲第十一讲 高效的静态分析高效的静态分析 32/55高级软件工程高级软件工程分析算法从事的是举重的工作分析算法从事的是举重的工作模式辨识从事的是射击的事情模式辨识从事的是射击

30、的事情待查代码待查代码代码模型分析算法分析算法缺陷知识缺陷知识缺陷报告缺陷报告32第十一讲第十一讲 高效的静态分析高效的静态分析 33/55高级软件工程高级软件工程l与具体应用“无关”的知识词法或者语法共性特性(死锁、空指针、内存泄露、数组越界)共性特性(死锁、空指针、内存泄露、数组越界)公共库用法(顺序、参数、接口实现,容错,安全)公共库用法(顺序、参数、接口实现,容错,安全)l与具体应用“相关”的知识类型定义(操作格式,不含其它信息(信息隐藏)类型约束(调用的顺序、参数值,接口实现)类型约束(调用的顺序、参数值,接口实现)需求相关(正确)定理证明定理证明符号执行符号执行模型检查模型检查模型

31、检查模型检查抽象解释抽象解释侧重点在技术(算法)方面!侧重点在技术(算法)方面!33第十一讲第十一讲 高效的静态分析高效的静态分析 34/55高级软件工程高级软件工程能侧重在知识上吗?能侧重在知识上吗?Google 翻译的启示!翻译的启示!34第十一讲第十一讲 高效的静态分析高效的静态分析 35/55高级软件工程高级软件工程l代码必须遵守各类约束代码必须遵守各类约束如果违反,就是缺陷如果违反,就是缺陷对不同约束的违反,构成了不同的缺陷模式对不同约束的违反,构成了不同的缺陷模式l约束分类约束分类BNF:宪法:宪法共性约束(库接口):国家法律、条例等共性约束(库接口):国家法律、条例等特定软件的约

32、束(类型):地方法律、条例特定软件的约束(类型):地方法律、条例35第十一讲第十一讲 高效的静态分析高效的静态分析 36/55高级软件工程高级软件工程1.错误代码错误代码1.1.操作操作1.2.方法调用方法调用1.2.1.单一方法调用单一方法调用1.2.2.同一个类的多方法调用同一个类的多方法调用1.2.3.不同类的多方法调用不同类的多方法调用1.3.类定义类定义1.3.1.单一接口关联单一接口关联1.3.2.单继承关联单继承关联1.3.3.其它其它1.4.线程线程1.5.引用引用2.不安全代码不安全代码3.脆弱代码脆弱代码3.1.需求检查需求检查3.2.异常相关异常相关3.3.线程线程3.4

33、.其他其他4.低效率代码低效率代码4.1.线程线程4.2.String和和StringBuffer4.3.Number 和和 Wrapper4.4.其它其它5.冗余代码冗余代码5.1.无用代码无用代码5.2.不必要代码不必要代码5.2.1.不必要的不必要的Null检查检查5.2.2.不必要的代码不必要的代码5.3.复制代码复制代码5.4.空集问题空集问题36第十一讲第十一讲 高效的静态分析高效的静态分析 37/55高级软件工程高级软件工程a)调用调用SimpleDateFormat的构造函数时没有传递的构造函数时没有传递Local参数。参数。b)调用调用Calendar.set方法设置月份时使

34、用了超出方法设置月份时使用了超出0到到11的参数。的参数。c)调用调用BigDecimal的构造函数时使用的构造函数时使用decimal数值。数值。d)调用调用substring时使用时使用0作为参数。作为参数。e)调用调用ObjectOutPut.writeObject时使用不可序列化的对象。时使用不可序列化的对象。f)调用调用Double.longBitsToDouble时使用整型参数。时使用整型参数。g)调用调用PreparedStatement的的setXXX时使用时使用0作为参数索引值。作为参数索引值。h)调用调用ResultSet的的setXXX/updateXXX方法时使用方法时

35、使用0作为参数索引作为参数索引值。值。i)调用调用Pattern的的compile时使用了无效句法的正则表达式。时使用了无效句法的正则表达式。j)调用调用System.runFinalizersOnExit或者或者Runtime.runFinalizersOnExitk)显示的调用显示的调用finalize。l)在比较数组和非数组、不相关的类和接口、不同类型以及不同在比较数组和非数组、不相关的类和接口、不同类型以及不同接口时调用接口时调用equalsa)“/“或者或者“/=“跟随着跟随着0(除数为(除数为0)b)在比较两个实体时使用了在比较两个实体时使用了“=“或者或者”!=“,例如字符,例如

36、字符串、引用、浮点型以及双精度型。串、引用、浮点型以及双精度型。c)在比较在比较Doube和和Double.NAN以及以及Integer和和Integer.MAX_VALUE时使用时使用“=“或者或者”和和“”。e)在例如在例如if和和while的逻辑表达式中误用了操作符的逻辑表达式中误用了操作符“=”、“&”和和“|”。正确的的应该是。正确的的应该是“=”、“&”和和“|”。f)当某个实例不属于某个类型时使用了当某个实例不属于某个类型时使用了instanceof操作:操作:单一方法调用:单一方法调用:37第十一讲第十一讲 高效的静态分析高效的静态分析 38/55高级软件工程高级软件工程a)某

37、些类中必须成对使用的方法(必须有严格的顺序):例如某些类中必须成对使用的方法(必须有严格的顺序):例如I/O对象中的对象中的open和和close。b)时序方法的约束。时序方法的约束。c)初始化错误。初始化错误。d)使用负数索引或者超过数组长度的索引值引发了数组溢出。使用负数索引或者超过数组长度的索引值引发了数组溢出。更多缺陷模式,请访问:更多缺陷模式,请访问:同一个类的多方法调用同一个类的多方法调用:38第十一讲第十一讲 高效的静态分析高效的静态分析 39/55高级软件工程高级软件工程DBMS接口约束接口约束操作系统接口约束操作系统接口约束中间件接口约束中间件接口约束应用软件应用软件语言约束

38、约束(语言约束约束(BNF、基本函数)、基本函数)39第十一讲第十一讲 高效的静态分析高效的静态分析 40/55高级软件工程高级软件工程如何在目标代码中查找已知的模式?如何在目标代码中查找已知的模式?先做基本扫描:有相近的代码?先做基本扫描:有相近的代码?再努力提高准确度再努力提高准确度如何描述缺陷模式?如何描述缺陷模式?自然语言自然语言形式化:时序逻辑等形式化:时序逻辑等半形式化半形式化/图形化图形化40第十一讲第十一讲 高效的静态分析高效的静态分析 41/55高级软件工程高级软件工程DEFECT PATTERN INPUTExtensibilityYes NoRepresentationD

39、escription fileEmbedded code涉及的主要技术涉及的主要技术TARGET PROGRAM INPUTJavaP r o g r a m m i n g LanguageRepresentationC/C+Source codeCompiled fileProperty ConcernedUnused codeCode styleTemporal propertyConcurrencyOtherSEMANTIC ANALYSISControl Flow AnalysisData Flow AnalysisStructure AnalysisCall Graph Analy

40、sisOUTPUTRepresentationText reportXML/HTML reportInteractive GUIEvaluation for ResultSoundnessCompletenessOtherPoint-to Analysis41第十一讲第十一讲 高效的静态分析高效的静态分析 42/55高级软件工程高级软件工程l缺陷定位准确l查找效率较高l可以针对“常见”的缺陷42第十一讲第十一讲 高效的静态分析高效的静态分析 43/55高级软件工程高级软件工程l模型检查侧重状态状态是否满足性质?l抽象解释侧重循环不动点是什么?l符号执行侧重分支状态有冲突吗?l定理证明侧重 不变

41、量破坏了不变量?l模式缺陷侧重 共性约束状态与共性缺陷模式匹配?结合结合!43第十一讲第十一讲 高效的静态分析高效的静态分析 44/55高级软件工程高级软件工程1)SQL注入注入 2)脚本注入脚本注入 3)跨站点攻击跨站点攻击 4)代码分析让正确的人得到正确的服务!让正确的人得到正确的服务!44第十一讲第十一讲 高效的静态分析高效的静态分析 45/55高级软件工程高级软件工程lSQL 注入的成因主要是因为向数据库提供的SQL 查询语句是用字符串拼装的方式生成的l最经常遭受SQL注入的页面通常是管理员/用户登陆点。不论是asp 或是jsp,如果不正确的编码,都会出现这个漏洞45第十一讲第十一讲

42、高效的静态分析高效的静态分析 46/55高级软件工程高级软件工程假设我们有一个假设我们有一个JSP 页面页面login.jsp,它会把用户名与密码提交到指定的模块,它会把用户名与密码提交到指定的模块Controller调用调用chekAdminLogin(String userName,String passWord)进行登陆验证进行登陆验证如果从表中找到匹配的记录,则表示验证成功。如果从表中找到匹配的记录,则表示验证成功。否则返回否则返回Null 表示登陆验证失败。表示登陆验证失败。checkAdminLogin 将收集到的用户将收集到的用户名和密码信息拼装出名和密码信息拼装出SQL 字符串

43、,字符串,供供DAO 下层使用,以从数据库中的下层使用,以从数据库中的管理员记录表中读取数据管理员记录表中读取数据46第十一讲第十一讲 高效的静态分析高效的静态分析 47/55高级软件工程高级软件工程如果有人试图在这里如果有人试图在这里进行恶意攻击:进行恶意攻击:在登陆名输入框中输入在登陆名输入框中输入 123(任意值任意值)而在密码输入框中输入而在密码输入框中输入 OR 1=1那么由于我们的那么由于我们的SQL是靠拼出来的,所以最终提交给数据库的将是是靠拼出来的,所以最终提交给数据库的将是:SELECT*FROM TD_ADMIN AS A WHERE A.USERNAME=123 AND

44、A.PASSWORD=OR 1=1很显然,这句很显然,这句SQL 由于后面被加上了永真条件,登陆是一定成功的。那么由于后面被加上了永真条件,登陆是一定成功的。那么不论登陆者是否是管理员,输入不论登陆者是否是管理员,输入 OR 1=1,他都将能够登陆系,他都将能够登陆系统。统。public Admin checkAdminLogin(String userName,String password)String strSQL=”SELECT*FROM TD_ADMIN AS A WHERE A.USERNAME=”+userName+”AND A.PASSWORD=”+password+”;对策之

45、一:对策之一:Java 中对该模式的实现有中对该模式的实现有PreparedStatment或者或者NamingQuery一类的技术,一类的技术,实现了参数与逻辑的分离,可以从根本上杜绝实现了参数与逻辑的分离,可以从根本上杜绝SQL注入。注入。47第十一讲第十一讲 高效的静态分析高效的静态分析 48/55高级软件工程高级软件工程l这里所说的脚本,通常指的是这里所说的脚本,通常指的是JavaScript脚本,虽然脚本,虽然JavaScript运行于客户端,并且有安全沙箱的保护,运行于客户端,并且有安全沙箱的保护,但是放任恶意但是放任恶意JavaScript脚本是十分危险的脚本是十分危险的l一个网

46、站,如果对输入未做合理的验证或过滤,在显一个网站,如果对输入未做合理的验证或过滤,在显示输出的时候又未做合适的格式化,那么便存在这种示输出的时候又未做合适的格式化,那么便存在这种漏洞漏洞l与与SQL注入不同,脚本注入没有直接攻击服务端,实注入不同,脚本注入没有直接攻击服务端,实际上是攻击了客户端际上是攻击了客户端 窃取信息!窃取信息!48第十一讲第十一讲 高效的静态分析高效的静态分析 49/55高级软件工程高级软件工程假设我们有一个新闻站点,每个新闻允许浏览者进行评论假设我们有一个新闻站点,每个新闻允许浏览者进行评论浏览者提交的评论将被存储在数据据库专门的表中,并显示在新闻的下边浏览者提交的评

47、论将被存储在数据据库专门的表中,并显示在新闻的下边如果开发者除了字符长度外没有做任何输入合法验证,那么这个站点的评论如果开发者除了字符长度外没有做任何输入合法验证,那么这个站点的评论输入,就存在安全漏洞。输入,就存在安全漏洞。49第十一讲第十一讲 高效的静态分析高效的静态分析 50/55高级软件工程高级软件工程如果输入如果输入:好文好文!顶顶那么在新闻页面上看不到任何异状那么在新闻页面上看不到任何异状但点击该信息的浏览器会悄悄下载病毒但点击该信息的浏览器会悄悄下载病毒WEB2.0的流行使页面效果更加绚丽,同时也使脚本注入的攻击力提高不少的流行使页面效果更加绚丽,同时也使脚本注入的攻击力提高不少

48、 对策之一:对策之一:提供合理的过滤或者转换程序,在输入存放于数据库前,或者是显示在页面提供合理的过滤或者转换程序,在输入存放于数据库前,或者是显示在页面前对数据进行处理。前对数据进行处理。尽一切可能,避免用户的输入有执行的可能。尽一切可能,避免用户的输入有执行的可能。50第十一讲第十一讲 高效的静态分析高效的静态分析 51/55高级软件工程高级软件工程l跨站攻击和脚本注入非常相似,但必须要诱使受害者点击链跨站攻击和脚本注入非常相似,但必须要诱使受害者点击链接才能得以执行接才能得以执行 l与脚本注入的不同与脚本注入的不同用于脚本注入的恶意脚本提交后,将存储在服务器数据库中,导致用于脚本注入的恶

49、意脚本提交后,将存储在服务器数据库中,导致每个访问问题页面的浏览者都将遭到恶意脚本的攻击每个访问问题页面的浏览者都将遭到恶意脚本的攻击而跨站攻击多数情况是将恶意脚本构造于而跨站攻击多数情况是将恶意脚本构造于url参数中,通过欺骗的方参数中,通过欺骗的方式去诱使受害者点击链接,使得恶意脚本执行式去诱使受害者点击链接,使得恶意脚本执行l虽然虽然 Web 站点上存在安全漏洞,但是站点上存在安全漏洞,但是 Web 站点从未受到直站点从未受到直接伤害接伤害 l漏洞难于查找,特别容易被忽略漏洞难于查找,特别容易被忽略cross-site scripting,简称,简称 XSS 51第十一讲第十一讲 高效的

50、静态分析高效的静态分析 52/55高级软件工程高级软件工程l恶意攻击者(这里使用恶意攻击者(这里使用 Evil.org 表示)通过表示)通过 E-mail 或或 HTTP 将某银行的网址将某银行的网址链接发给用户(银行用链接发给用户(银行用 表示),该链接中附加了恶意的脚本(上表示),该链接中附加了恶意的脚本(上图步骤图步骤1)l用户访问发来的链接,进入银行网站,同时,嵌在链接中的脚本被用户的浏用户访问发来的链接,进入银行网站,同时,嵌在链接中的脚本被用户的浏览器执行(上图步骤览器执行(上图步骤2、3)l用户在银行网站的所有操作,包括用户的用户在银行网站的所有操作,包括用户的 cookie 和

51、和 session 信息,都被脚本信息,都被脚本收集到,并且在用户毫不知情的情况下发送给恶意攻击者(上图步骤收集到,并且在用户毫不知情的情况下发送给恶意攻击者(上图步骤4)l恶意攻击者使用偷来的恶意攻击者使用偷来的 session 信息,伪装成该用户,进入银行网站,进行非信息,伪装成该用户,进入银行网站,进行非法活动(上图步骤法活动(上图步骤5)52第十一讲第十一讲 高效的静态分析高效的静态分析 53/55高级软件工程高级软件工程4)代码分析)代码分析找出所有的系统输入位置,确定可能的攻击界面 用户输入 数据库 配置文件 网络服务 命令行 注册表 .目标系统目标系统53第十一讲第十一讲 高效的

52、静态分析高效的静态分析 54/55高级软件工程高级软件工程对所有的输入进行验证 语法检查:格式是否正确,特殊字符过滤 白名单、黑名单 语义检查:输入是否恰当分析污染传播 使用数据流分析判断攻击者能控制的值 污染传播模式 源:read(),getenv();getpass()等 接收器:Statement.executeQuery(),strcpy();传递:trim();54第十一讲第十一讲 高效的静态分析高效的静态分析 55/55高级软件工程高级软件工程National Vulnerability Database(国家漏洞数据库)55第十一讲第十一讲 高效的静态分析高效的静态分析 56/5

53、5高级软件工程高级软件工程9、静夜四无邻,荒居旧业贫。23.1.2623.1.26Thursday,January 26,202310、雨中黄叶树,灯下白头人。14:13:0114:13:0114:131/26/2023 2:13:01 PM11、以我独沈久,愧君相见频。23.1.2614:13:0114:13Jan-2326-Jan-2312、故人江海别,几度隔山川。14:13:0114:13:0114:13Thursday,January 26,202313、乍见翻疑梦,相悲各问年。23.1.2623.1.2614:13:0114:13:01January 26,202314、他乡生白发,

54、旧国见青山。2023年1月26日星期四下午2时13分1秒14:13:0123.1.2615、比不了得就不比,得不到的就不要。2023年1月下午2时13分23.1.2614:13January 26,202316、行动出成果,工作出财富。2023年1月26日星期四14时13分1秒14:13:0126 January 202317、做前,能够环视四周;做时,你只能或者最好沿着以脚为起点的射线向前。下午2时13分1秒下午2时13分14:13:0123.1.269、没有失败,只有暂时停止成功!。23.1.2623.1.26Thursday,January 26,202310、很多事情努力了未必有结果,

55、但是不努力却什么改变也没有。14:13:0114:13:0114:131/26/2023 2:13:01 PM11、成功就是日复一日那一点点小小努力的积累。23.1.2614:13:0114:13Jan-2326-Jan-2312、世间成事,不求其绝对圆满,留一份不足,可得无限完美。14:13:0114:13:0114:13Thursday,January 26,202313、不知香积寺,数里入云峰。23.1.2623.1.2614:13:0114:13:01January 26,202314、意志坚强的人能把世界放在手中像泥块一样任意揉捏。2023年1月26日星期四下午2时13分1秒14:1

56、3:0123.1.2615、楚塞三湘接,荆门九派通。2023年1月下午2时13分23.1.2614:13January 26,202316、少年十五二十时,步行夺得胡马骑。2023年1月26日星期四14时13分1秒14:13:0126 January 202317、空山新雨后,天气晚来秋。下午2时13分1秒下午2时13分14:13:0123.1.269、杨柳散和风,青山澹吾虑。23.1.2623.1.26Thursday,January 26,202310、阅读一切好书如同和过去最杰出的人谈话。14:13:0114:13:0114:131/26/2023 2:13:01 PM11、越是没有本领

57、的就越加自命不凡。23.1.2614:13:0114:13Jan-2326-Jan-2312、越是无能的人,越喜欢挑剔别人的错儿。14:13:0114:13:0114:13Thursday,January 26,202313、知人者智,自知者明。胜人者有力,自胜者强。23.1.2623.1.2614:13:0114:13:01January 26,202314、意志坚强的人能把世界放在手中像泥块一样任意揉捏。2023年1月26日星期四下午2时13分1秒14:13:0123.1.2615、最具挑战性的挑战莫过于提升自我。2023年1月下午2时13分23.1.2614:13January 26,2

58、02316、业余生活要有意义,不要越轨。2023年1月26日星期四14时13分1秒14:13:0126 January 202317、一个人即使已登上顶峰,也仍要自强不息。下午2时13分1秒下午2时13分14:13:0123.1.26MOMODA POWERPOINTLorem ipsum dolor sit,eleifend nulla ac,fringilla purus.Nulla iaculis tempor felis amet,consectetur adipiscing elit.Fusce id urna blanditut cursus.感 谢 您 的 下 载 观 看感 谢 您 的 下 载 观 看专家告诉

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!