《软件安全》课件第3章-典型的软件漏洞.pptx

上传人(卖家):momomo 文档编号:5934429 上传时间:2023-05-16 格式:PPTX 页数:106 大小:1.92MB
下载 相关 举报
《软件安全》课件第3章-典型的软件漏洞.pptx_第1页
第1页 / 共106页
《软件安全》课件第3章-典型的软件漏洞.pptx_第2页
第2页 / 共106页
《软件安全》课件第3章-典型的软件漏洞.pptx_第3页
第3页 / 共106页
《软件安全》课件第3章-典型的软件漏洞.pptx_第4页
第4页 / 共106页
《软件安全》课件第3章-典型的软件漏洞.pptx_第5页
第5页 / 共106页
点击查看更多>>
资源描述

1、典型的软件漏洞1234目 录CONTENTS缓冲区溢出漏洞Web应用程序漏洞竞争条件数据安全漏洞Part章 节01缓冲区溢出漏洞l 函数栈帧结构l 堆和栈l 函数调用原理l 缓冲区溢出漏洞原理l 栈溢出漏洞l 堆溢出漏洞l 格式化串漏洞l 弥补及防御l 著名漏洞3.1 缓冲区溢出漏洞 一个PE文件(可执行文件)运行过程中,通过层层调用相关函数实现特定功能。C语言中,每个栈帧对应着一个未运行完的函数。栈帧中保存了该函数的返回地址和局部变量。栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。同一个进程中的函数栈帧连续存放,这就为缓冲区溢出攻击提供了可能。3.1.1 函数栈帧结构3

2、.1.1 函数栈帧结构函数栈帧分布图ESP:栈指针寄存器(extended stack pointer),其存放的是当前栈帧的栈顶指针。EBP:基址指针寄存器(exteded base pointer),其存放的是当前栈帧的栈底指针。堆在内存中由下向上增长,而栈是向下增长。程序调用过程中,函数的栈帧就存放在栈中,因此函数栈帧是向下增长的。内存中,函数的数据存放在缓冲区中,缓冲区是函数栈帧中的一部分。3.1.2 堆和栈3.1.2 堆和栈堆和栈在进程内存中的分布 进程执行过程中,为主函数分配栈帧,主函数调用其他函数,为它们申请栈帧并存放在主函数栈帧之后,函数再调用其他函数时,就作为母函数为子函数申

3、请栈帧,子函数执行完后按照栈帧中保存的返回地址返回母函数,层层递进之后完成进程功能。3.1.3 函数调用原理进程中的函数调用主要通过以下几个步骤实现:a)参数入栈:将被调用函数的参数按照从右向左的顺序依次入栈。b)返回地址入栈:将call指令的下一条指令的地址入栈。c)代码区跳转:处理器从代码区的当前位置跳到被调用函数的入口处。d)栈帧调整:这主要包括保存当前栈帧状态、切换栈帧和给新栈帧分配空间。3.1.3 函数调用原理3.1.3 函数调用原理函数调用原理 在栈帧中分配有固定的缓冲区空间,当用户输入的数据长度超出缓冲区范围,就有可能覆盖其他有用的数据,从而导致不可预测的情况发生。如果输入的数据

4、经过精心的设计,就可以达到特定的目的,比如植入恶意代码,将函数返回到特定的节点执行,或者执行其他的操作。3.1.4 缓冲区溢出的原理3.1.4 缓冲区溢出的原理 函数栈中存放的一般是函数定义的变量等数据,通过对变量赋值可以实现栈溢出,通过栈溢出覆盖返回函数可使函数返回到特定节点。上述过程虽然理论上能完成栈溢出攻击行为,但是实际上很难实现。操作系统每次加载可执行文件到进程空间的位置都是无法预测的,因此栈的位置实际是不固定的,通过硬编码覆盖新返回地址的方式并不可靠。更普遍的做法是使用跳板。3.1.5 栈溢出漏洞 3.1.5 栈溢出漏洞 和栈不同,堆的数据结构并不是由系统(无论是机器系统还是操作系统

5、)支持的,而是由函数库提供的。基本的malloc/realloc/free函数维护了一套内部的堆数据结构。当调用malloc等函数分配内存空间时,这部分空间就在堆上,对所分配的空间输入数据就可能造成堆溢出,同样的,堆溢出也可以覆盖关键数据。3.1.6 堆溢出漏洞3.1.6 堆溢出漏洞这是一个简单的堆溢出例子,在程序第二次分配内存的时候发生堆溢出(验证环境为Windows 2000)。和栈溢出一样,在精心构造溢出内容后可实现简单的攻击。格式化输出函数是由一个格式字符串和可变数目的参数构成的。在效果上,格式化字符串提供了一组可以由格式化输出函数解释执行的指令。因此,用户可以通过控制格式字符串的内容

6、来控制格式化输出函数的执行。格式化输出函数是一个变参函数,也就是说它接受的参数个数是可变的。变参函数在C语言中实现的局限性导致格式化输出函数的使用中容易产生漏洞。一个转换规范是由可选域(标志、宽度、精度以及长度修饰符)和必需域(转换指示符)按照下面的格式组成的:%标志宽度.精度长度修饰符 转换指示符。3.1.7 格式化串漏洞#include stdio.hmain()int a=44,b=77;printf(a=%d b=%dn,a,b);printf(a=%d b=%dn);3.1.7 格式化串漏洞 第一个 printf调用是正确的,第二个调用中则缺少了输出数据的变量列表。程序输出结果为:a

7、=44,b=77a=4218928,b=44为什么?3.1.7 格式化串漏洞Printf(a=%d,b=%dn);Printf(a=%d,b=%dn,a,b);预防:预防策略可以根据其如何分配空间,进一步分为静态预防策略和动态预防策略。一致的内存管理约定:最有效地防止出现内存问题的方法是在编写内存管理代码时严守纪律。开发团队应该采用个标准的途径并始终如一地应用它。空指针:一个可以减少C和C+程序中漏洞数量的明显技术就是在完成对free)的调用后,将指针置为NULL。3.1.8 弥补及防御检测和恢复:检测和恢复的缓解策略通常要求对运行时环境做出一定的改变,以便可以在缓冲区溢出发生时对其进行检测,

8、从而应用程序或操作系统可以从错误中恢复(或者至少“安全地”失效)。Stackgap:很多基于栈的缓冲区溢出的利用都依赖于一个内存中已知位置的缓冲区。运行时边界检查器:如果不能使用一种类似于Java的类型安全语言,我们还是有可能使用编译器对C程序执行数组边界检查。3.1.8 弥补及防御canaries:canaries是另一种用来检测和阻止栈粉碎攻击的机制。栈粉碎保护器(Propolice):从 Stack guard发展而来的一个流行缓解方法是GCC的栈粉碎保护器(Stack smashing Protector,SSP,也称为 Propolice)Etoh 00。SSP是GCC的一个扩展,可

9、以保护C应用免遭大多数常见形式的栈缓冲区溢出利用,它是作为GCC的中间语言翻译器的形式实现的。3.1.8 弥补及防御莫里斯蠕虫漏洞:它的编写者是美国康乃尔大学一年级研究生罗特莫里斯。这个程序只有99行,利用了Unix系统中的缺点,用Finger命令查联机用户名单,然后破译用户口令,用Mail系统复制、传播本身的源程序,再编译生成代码。最初的网络蠕虫设计目的是当网络空闲时,程序就在计算机间“游荡”而不带来任何损害。当有机器负荷过重时,该程序可以从空闲计算机“借取资源”而达到网络的负载平衡。而莫里斯蠕虫不是“借取资源”,而是“耗尽所有资源”。3.1.9 著名漏洞“云出血”(cloudbleed):

10、据谷歌安全工程师Tavis Ormandy披露,他在做一个业余项目时无意中发现,CloudFlare把大量用户数据泄露在谷歌搜索引擎的缓存页面中,包括完整的https请求、客户端IP地址、完整的响应、cookie、密码、密钥以及各种数据。经过分析,CloudFlare漏洞是一个HTML解析器惹的祸。由于程序员把=错误地写成了=,导致出现内存泄露的情况。就像OpenSSL心脏出血一样,CloudFlare的网站客户也大面积遭殃,包括优步(Uber)、密码管理软件1password、运动手环公司FitBit等多家企业用户隐私信息在网上泄露。3.1.9 著名漏洞Part章 节02Web应用程序漏洞

11、随着传统互联网的普及,云服务和新型移动互联网的兴起,基于Web的应用已成为个人工作、生活和企业业务管理中重要的一部分。Web应用程序的目的是执行可以在线完成的任何有用功能 功能:网上购物、社交网络、银行服务、web搜索、网络存储 安全问题:私密信息被泄露、经济损失、企业失去信誉、服务异常3.2.1 概述 OWASP:open web application security project,开放式Web应用程序安全项目 2017年公布的WEB TOP10安全漏洞:3.2.1 概述安全漏洞安全漏洞A1注入A2失效的身份认证和会话管理 A3XSS A4失效的访问控制 A5安全配置错误A6敏感信息泄

12、露A7攻击检测与防护不足A8CSRFA9使用含有已知漏洞的组件A10未受有效保护的APIWeb应用程序是用不同的编程语言编写的,其面临的威胁也有所不同。按编程语言分类:解释型语言 操作系统命令 本地编译型应用程序按源码类型分类:Java ASP.NET PHP JavaScript3.2.2 受影响的编程语言u 解释型语言 运行时由一个运行时组件解释语言代码并执行其中包含的指令。任何有实际用途的应用程序都会收到用户提交的数据,对其进行处理并执行相应的操作。代码注入漏洞解释器处理的数据:程序员编写的代码+用户提交的数据恶意输入:符合应用程序所使用的解释型语言语法的具有特殊意义的语句原理:攻击者提

13、交精心设计的输入,使得该输入被解释成计划外的程序指令执行3.2.2 受影响的编程语言u操作系统命令 开发者选择使用更高级的技术直接向服务器发送操作系统命令 优势:功能强大、操作简单,并且通常能够立即解决特定的问题 安全缺陷:如果应用程序向操作系统命令传送用户提交的输入,那么就很可能会受到命令注入攻击,由此攻击者能够提交专门设计的输入,修改开发者想要执行的命令。案例:PHP中的exec和ASP中的wscript.shell函数 3.2.2 受影响的编程语言u本地编译型应用程序 许多主要使用托管代码编写的应用程序同样包含本地代码或调用在非托管环境中运行的外部组件 打印机与交换机等硬件设备上运行的W

14、eb应用程序常常使用某种本地代码 其他可能的目标包含:任何其名称(如dll或exe)表示它使用了本地代码的页面或脚本,以及任何已知调用遗留外部组件的功能(如日志机制)。如果认为所攻击的应用程序包含大量的本地代码,那么就有必要对应用程序处理的每个用户提交的数据进行测试包括每个参数的名称与参数值、cookie、请求消息头及其他数据。3.2.2 受影响的编程语言uJava:文件访问 文件与目录的访问p java.io.Filep 构造函数:通过接受一个父目录和文件名,或者一个路径名来获得File实例 路径遍历漏洞:特殊的构造函数参数String userinput=.boot.ini;FileInp

15、utStream fis=new FileInoutSteam(C:temp+userinput);3.2.2 受影响的编程语言2按源码类型分类(1)Java:数据库访问下面这些是常用于以SQL查询任何一个字符串的API:java.sql.Connection.createStatementjava.sql.Statemen.executejava.sql.Statemen.executeQuery 如果用户提交的数据属于以查询执行的字符串的一部分,那么它可能易于受到SQL注人攻击。3.2.2 受影响的编程语言2按源码类型分类(1)Java:数据库访问例如:String username=ad

16、min or 1=1-;String password=foo;Statement s=connection.createStatement();s.executeQuery(SELECT*FROM users WHERE username=+username+AND password=+password+);3.2.2 受影响的编程语言2按源码类型分类(1)Java:数据库访问 它执行不良查询:SELECT*FROM users WHERE username=adminorl=1-AND password=foo3.2.2 受影响的编程语言2按源码类型分类(1)Java:动态代码执行 Jav

17、a语言本身并不包含任何动态评估Java源代码的机制,尽管一些应用(主要在数据库产品中)提供了评估方法。如果所审查的应用程序动态构建任何Java代码,就应该了解应用程序如何构建这些代码,并决定用户可控制的数据是否以危险的方式使用。3.2.2 受影响的编程语言2按源码类型分类(1)Java:OS命令执行执行外部操作系统命令的API:java.lang.runtime.Runtime.getRuntime、java.lang.runtime.Runtime.exec例如,下面的代码将运行Windows calc程序:String userinput=calc;Runtime.getRuntime.e

18、xec(userinput)3.2.2 受影响的编程语言2按源码类型分类(1)Java:URL重定向 下面的API用于在Java中发布HTTP重定向:javax.servlet.http.HttpservletResponse.sendRedireotjavax.servlet.http.HttpServ1etResponse.setStatus javax.servlet.http.HttpServ1etResponse.addHeader 通常,使用sendRedirect方法可以引起一个重定向响应,该方法接受一个包含相对或绝对URL的字符串。如果这个字符串的值由用户控制,那么应用程序可能

19、易于收到钓鱼攻击3.2.2 受影响的编程语言2按源码类型分类(1)Java:套接字 .socket类从它的构造函数中提取与目标主机和端口有关的各种信息,如果用户能够以某种方式控制这些信息,攻击者就可以利用应用程序与任意主机建立网络连接,无论主机位于因特网上、私有DMZ中还是在应用程序上运行的内部网络内。3.2.2 受影响的编程语言2按源码类型分类(2)ASP.NET:文件访问 System.IO.File是用于访问ASP.NET文件最主要的类。它的所有方法都是静态的,并且没有公共构造函数。这个类的37个方法全都接受一个文件名作为参数。如果未检查其中是否包含点-点-斜线序,就提交用户可控制的数据

20、,就会造成路径遍历漏洞。例如,下面的代码将打开Windows C:驱动器根目录下的一个文件:string userinput=.boot.ini;FileStream fs=File.Open(C:temp+userinput,FileMode.OpenOrCreate);3.2.2 受影响的编程语言2按源码类型分类(2)ASP.NET:数据库访问 ASP.NET有许多用于访问数据库的API,下面的类主要用于建立并执行SQL语句:System.Data.SqlClient.Sq1CommandSystem.Data.SqlClient.Sq1DataAdapter.System.Data.Od

21、bc.OdbcCommandSystem.Data.01edb.OleDbCommandSystem.Data.Sq1ServerCe.SqlCeCommand3.2.2 受影响的编程语言2按源码类型分类(2)ASP.NET:数据库访问 其中每个类都有一个构造函数,它接受一个包含SQL语句的字符串;而且每个类都有一个commandText属性,可用于获取并设定SQL语句的当前值。如果适当地配置一个命令对象,通过调用Execute方法即可执行SQL语句。它生成的查询等同于:SELECT*FROM users WHERE username=adminor 1=1-3.2.2 受影响的编程语言2按源

22、码类型分类(2)ASP.NET:动态代码执行 VBScript函数Eval接受一个包含VBScript表达式的字符串自变量。该函数求出这个表达式的值,并返回结果。如果用户可控制的数据被合并到要计算值的表达式中,那么用户就可以执行任意命令或修改应用程序的逻辑。函数Execute和ExecuteGlobal接受一个包含ASP代码的字符串,这个ASP代码与直接出现在脚本的代码的执行方式完全相同。冒号分隔符将用于将几个语句连接在一起。如果向Execute函数提交用户可控制的数据,那么攻击者就可以在应用程序中执行任意命令。3.2.2 受影响的编程语言2按源码类型分类(2)ASP.NET:OS命令执行 下

23、面的API可以各种方式在ASP.NET应用程序中运行外部进程:System.Diagnostics.Start.ProcessSystem.Diagnostics.Start.ProcessStartInfo 在对对象调用start之前,可以向静态Process.Star方法提交一个文件名字符串,或者用一个文件名配置Process对象的StartInfo属性。如果文件名字符串可完全由用户控制,那么应用程序几乎可以肯定易于受到任意命令执行攻击。3.2.2 受影响的编程语言2按源码类型分类(2)ASP.NET:URL重定向 下面的API用于在ASP.NET中发布一个HITP重定向:System.W

24、eb.HttpResponse.RedirectSystem.Web.HttpResponse.StatusSystem.Web.HttpResponse.StatusCodeSystem.Web.HttpResponse.AddHeaderSystem.Web.HttpResponse.AppendHeaderSystem.Transfer3.2.2 受影响的编程语言2按源码类型分类(2)ASP.NET:URL重定向常见方法3.2.2 受影响的编程语言2按源码类型分类(2)ASP.NET:套接字 System.Net.Sockets.Socket类用于创建网络套接字。创建一个Socket对象

25、后,再通过调用Connect方法连接这个对象;该方法接受目标主机的IP与端口信息为参数。如果用户能够以某种方式控制这些主机信息,攻击者就可以利用应用程序与任意主机建立网络连接,无论这些主机位于因特网上、私有DMZ中还是在应用程序上运行的内部网络内。3.2.2 受影响的编程语言2按源码类型分类(3)PHP 文件访问 PHP中包含大量用于访问文件的函数,如fopen、readfile、file、fpassthru等。其中许多接受可用于访问远程文件的URL和其他结构。如果向这些API提交用户可控制的数据,攻击者就可以利用这些API访问服务器文件系统上的任意文件。而include、include_on

26、ce、require、require_once、virtual、等函数用于包含并执行一个指定的PHP脚本。如果攻击者能够使应用程序执行受控的文件,他就可以在服务器上执行任意命令。即使无法包含远程文件,但如果攻击者可向服务器上传任意文件,他仍然能够执行任意命令。3.2.2 受影响的编程语言2按源码类型分类(3)PHP 数据库访问 下面的函数用于向数据库发送一个查询并检查查询结果:mysql_querymssql_querypg_query SQL语句以一个简单的字符串提交。如果用户可控制的数据属于字符串参数的一部分,那么应用程序就可能容易受到SQL注人攻击。3.2.2 受影响的编程语言2按源码类

27、型分类(3)PHP URL重定向下面API用于在PHP中发布一个HTTP重定向:http_redirectHeaderHttpMessage:setResponseCodeHttpMessage:setHeaders例如:header(Location:/target.php);3.2.2 受影响的编程语言2按源码类型分类(3)PHP 套接字下面API用于在PHP中建立和使用网络套接字:socket_createsocket_connectsocket_writesocket_sendsocket_recv如果用户能够以某种方式控制这些主机信息,攻击者就可以利用应用程序与任意主机建立网络连接3

28、.2.2 受影响的编程语言2按源码类型分类(4)JavaScript 代码审查 当审查JavaScript代码时,必须确保检查.js文件和在HTML内容中嵌入的脚本。需要重点审查的是那些读取基于DOM的数据以及写入或以写入或以其他方式修改当前文档的API,如表 3所示。3.2.2 受影响的编程语言2按源码类型分类(4)JavaScript 表 3 读取基于DOM数据的JavaScript API3.2.2 受影响的编程语言API描述描述document.locationdocument.urldocument.urlunencodeddocument.refererwindow.locatio

29、n这些API可用于访问通过专门设计的URL控制的DOM数据,因而攻击者可向它们提交专门设计的数据,攻击其他应用程序用户document.write()document.writeln()document.body.innerhtmleval()window.execscript()window.setinterval()window.settimeout()这些API可用于更新文档的内容并动态执行JavaScript代码。如果向这些API提交攻击者可控制的数据,他就可以在受害着的浏览器中执行任意JavaScript代码基本步骤枚举内容和功能 枚举应用程序的内容与功能,从而了解应用程序的实际功能

30、与运行机制。应用程序的大部分功能可以通过技巧来确定,对其中一些并不明显的功能,需要进行猜测和凭借一定的经验才能查明。分析应用程序 仔细分析应用程序运行机制的每一个方面、核心安全机制及其(在客户端和服务器上)使用的技术,以此来确定应用程序暴露的主要受攻击面,并因此确定随后探查过程的主要目标,进而发现可供利用的漏洞。3.2.3 漏洞发掘技巧1枚举内容和功能 基本方法:从主初始页面开始,其次是每一个链接和所有多阶段功能 技巧u Web抓取u 用户的指定抓取u 发现隐藏的内容u 应用程序页面与功能路径3.2.3 漏洞发掘技巧1枚举内容和功能:Web抓取 基本功能1.请求初始页面2.解析页面内容,提取新

31、链接3.请求新链接,进行操作2,直到无法获取新内容 Web应用程序爬虫(spider)扩大搜索范围 浏览多阶段功能 进行基于表单的导航 使用免费工具详细枚举应用程序的内容与功能 u Burpsuite、WebScarab、Zed Attack Proxy和CAT3.2.3 漏洞发掘技巧2分析应用程序 基本方法:分析应用程序的功能、行为及使用的技术,确定它暴露的关键受攻击面,并探查可供利用的漏洞。突破点 核心功能:用于特定目的时可利用它执行的操作 外围行为:站外链接、错误消息、管理与日志功能、重定向使用 等 核心安全机制:会话状态、访问控制以及验证机制与支持逻辑 输入验证:URL、查询字符串参数

32、、POST数据、cookie以及类似内容 客户端使用的技术:表单、客户端脚本、厚客户端组件和cookie 服务器端使用的技术:静态与动态页面、使用的请求参数类型、SSL使用、web服务器软件、数据库交互、电子邮件系统和其他后端组件3.2.3 漏洞发掘技巧2分析应用程序 技巧u 确定用户输入入口点 URL字符串中的查询字符串标记、参数;POST请求主体中提交的参数;cookie;其他HTTP消息头 u 确定服务器端技术 提取版本信息、HTTP指纹识别、第三方代码组件u 确定服务器端功能 检查提交到应用程序的全部参数的名称和参数值,了解它们支持的功能 从程序员的角度考虑,想象应用程序可能使用了哪些

33、服务器端机制和技术来执行能够观察到的行为 u 解析受攻击面 确定应用程序可能的各种受攻击面,以及与每个受攻击面有关的潜在漏洞 3.2.3 漏洞发掘技巧 背景:几乎每一个Web应用程序都使用数据库来保存操作所需的各种信息 SQL:用于读取、更新、增加或删除数据库中保存的信息 攻击面:Web应用程序经常建立合并用户提交的数据的SQL语句 如果建立语句的方法不安全,那么应用程序可能易于受到SQL注入攻击 3.2.4 SQL注入漏洞案例及分析2.案例分析 分析对象:书籍零售商使用的Web应用程序 程序功能:允许用户根据作者、书名、出版商等信息搜索产品 数据存储:完整的书籍目录保存在数据库中 攻击面:应

34、用程序使用SQL查询、根据用户提交的搜索项获取各种书籍的信息 当一名用户搜索由Wiley出版的所有书籍时,其在搜索项输入Wiley,其后应用程序执行以下查询:SELECT author,title,year FROM books WHERE publisher=Wiley and published=13.2.4 SQL注入漏洞案例及分析2.案例分析 如果应用程序直接将用户输入作为参数输入,那么它非常容易遭到SQL注人。攻击者可提交包含引号的输人终止他控制的字符串,然后编写任意的SQL修改开发者想要应用程序执行的查询。例如,在这个示例中,攻击者可以对查询进行修改,通过输入以下搜索项,返回零售商

35、目录中的每一本书籍:Wiley 0R 1=13.2.4 SQL注入漏洞案例及分析2.案例分析应用程序将执行以下查询:SELECT author,title,year FROM books WHERE publisher=Wiley OR 1=1-and published=1 这个查询对开发者查询中的WHERE子句进行修改,增加了另外一个条件。数据库将检查书籍表的每一行,提取publisher列值为Wiley或其中1等于1的每条记录。因为1总是等于l,所以数据库将返回书籍表中的所有记录。3.2.4 SQL注入漏洞案例及分析 XSS漏洞表现为各种形式,并且可分为3种类型:反射型、保存型和基于以D

36、OM的XSS漏洞。虽然这些漏洞具有一些相同的特点,但在如何确定及利用这些漏洞方面,仍然存在一些重要的差异。下面我们将分别介绍每一类XSS漏洞。3.2.5 跨站脚本漏洞案例及分析1.反射型XSS漏洞 如果一个应用程序使用动态页面向用户显示错误消息,就会造成一种常见的XSS漏洞。通常,该页面会使用一个包含消息文本的参数,并在响应中将这个文本返回给用户。最简单的一种攻击如下:3.2.5 跨站脚本漏洞案例及分析图 3-2 反射型xss攻击的步骤2.保存型XSS漏洞 另一种常见的XSS漏洞叫做保存型跨站点脚本。如果一名用户提交的数据被保存在应用程序中(通常保存在一个后端数据库中),然后不经适当过滤或净化

37、就显示给其他用户此时就会出现这种漏洞。其攻击步骤如下:3.2.5 跨站脚本漏洞案例及分析图 3-3 保存型xss攻击的步骤3基于DOM的XSS漏洞 基于DOM的XSS漏洞与反射型XSS漏洞有更大的相似性。利用它们通常需要诱使一名用户访问一个包含恶意代码的专门设计的URL,并且服务器响应那个确保得恶意代码得以执行得特殊请求。其攻击步骤如下:3.2.5 跨站脚本漏洞案例及分析图 3-4 基于DOM的xss攻击的步骤1定义 跨站请求伪造是一种对网站的恶意利用。攻击者利用目标站点对用户的信任,诱使或强迫用户传输一些未授权的命令到该站点,从而达到攻击目的。网站是通过cookie来识别用户的,用户登陆后只

38、要不关闭浏览器或者退出登录,其访问这个网站就会带上标识其身份的cookie,如果这期间浏览器被攻击者控制,可能就会执行一些用户不想做的功能。因为这个不是用户真正想发出的请求,这就是所渭的请求伪造;又因为这些请求也是可以从第三方网站提交的,所以使用前缀跨站二字。3.2.6 跨站请求伪造漏洞案例及分析2案例 假如应用程序允许用户提交不包含任何保密字段的状态改变请求,如:http:/ 跨站请求伪造漏洞案例及分析核心因素:处理用户访问应用程序的数据与功能,防止用户获得未授权访问。处理用户对应用程序功能的输人,防止错误输人造成不良行为。防范攻击者,确保应用程序在成为直接攻击目标时能够正常运转,并采取适当

39、的防御与攻击措施挫败攻击者。管理应用程序本身,帮助管理员监控其行为,配置其功能。3.2.7 弥补及防御措施1.处理用户访问 三层相互关联的安全机制:身份验证;会话管理;访问控制。3.2.7 弥补及防御措施2.处理用户输入原因、方法3.2.7 弥补及防御措施3.处理攻击者措施:处理错误;维护审计日志;向管理员发出警报;应对攻击。3.2.7 弥补及防御措施4.管理应用程序应用程序管理的作用受攻击原因3.2.7 弥补及防御措施Part章 节03竞争条件漏洞l 竞争条件的概念l 受影响的编程语言l 漏洞发掘技巧l 弥补及防御措施3.3 竞争条件 不受控制的并发会导致不确定的行为(也就是说,在给定相同的

40、输入集的情况下,程序会表现出各异的行为)。并发流的非预期执行顺序会导致不受欢迎的行为,我们称之为竞争条件,它是一种软件缺陷,井且通常是漏洞的来源。3.3.1 竞争条件的概念竟争条件的存在,有三个必不可少的属性:1.并发属性:必须存在至少两个并发执行的控制流。2.共事对象属性:两个并发流必须访问一个共享的竞争对象(race object)。3.改变状态属性:必须至少有一个控制流会改变竞争对象的状态。3.3.1 竞争条件的概念 C/C+java php3.3.2 受影响的编程语言 可以利用研究中所发现的漏洞模式,采用静态和动态分析技术对程序中可能存在的竞争条件漏洞进行分析。静态分析工具通过检查程序

41、源代码来寻找可能出现竞争条件漏洞的地方。动态分析工具在程序的执行过程中分析程序中竞争条件漏洞的出现。3.3.3 漏洞发掘技巧1.关闭竞争窗口2.消除竞争对象3.控制对竞争对象的访问4.侦测工具 静态分析 动态分析 混合分析3.3.4 弥补及防御措施1.关闭竞争窗口 由于竞争条件漏洞只存在于竟争窗口期间,因此,最显而易见的缓解方案就是尽可能地消除竞争窗口。这一节提出若干种用于消除竞争窗口的技术。用于消除竞争窗口的技术有很多,例如互斥缓解方案,线程安全的函数,原子操作的使用,安全地检查文件属性等。3.3.4 弥补及防御措施2.消除竞争对象 竟争条件的存在,部分原因是某个对象(竞争对象)被并行的执行

42、流所共享。如果可以消除共享对象或移除对共享对象的访问,那么就不可能存在竞争漏洞了。这一节将基于通过移除竞争对象来缓解竞争条件漏洞的概念,介绍常用的安全实践。3.3.4 弥补及防御措施3.控制对竞争对象的访问 竞争对象的改变状态属性规定,“必须至少有一个(并发的)控制流会改变竞争对象的状态(有多个流可以对其进行访问)”。这表明,如果很多进程只是对共享对象进行并发的读取,那么对象将保持不变的状态,且不存在竞争条件(尽管可能会有机密性方面的考量,不过已经与竞争无关了)。在本节中我们将考察其他一些减少改变状态属性之暴露的技术。3.3.4 弥补及防御措施4.侦测工具 静态分析 动态分析 混合分析3.3.

43、4 弥补及防御措施Part章 节04数据安全漏洞 数据对于应用程序越来越重要。口令,文档,邮件,合同,研究报告等数据都和现实工作紧密相连,一旦发生数据泄露或被黑客伪造身份登陆系统,后果将十分严重。使用密码学技术可以很好地满足对相关数据的安全保护需求。而在进行数据保护时,常见地错误包括:错误地使用加密算法 弱随机数和密钥管理不当 哈希算法使用不当 下面将依次对加密算法、随机数、哈希算法进行介绍3.4.1 概述1.DES算法 DES介绍 DES流程:3.4.2 常用密码算法和接口库2.AES算法 AES介绍 AES流程:3.4.2 常用密码算法和接口库3.RSA算法 原理:大数分解 RSA优缺点

44、RSA流程:3.4.2 常用密码算法和接口库4.OpenSSL接口库3.4.2 常用密码算法和接口库1.随机数概念:什么随机数 随机数的特点:p 不可预测性p 不可重复性p 随机性 随机数的种类:p 伪随机数p 真正的随机数3.4.3 随机数生成2.伪随机数生成 为了攻克经典方法的缺陷,几十年来人们专研出了许多产生随机数的方法。下面介绍几种应用较为广泛的伪随机数发生方法:线性同余法 斐波纳契法 冯若伊曼取中法 Tausworthe法(反馈移位寄存器法)3.4.3 随机数生成3.斐波那契法 由来 斐波纳契序列 递推公式 优缺点3.4.3 随机数生成4.反馈移位寄存器法 方法介绍 反馈函数结构 优

45、缺点 线性/非线性反馈移位寄存器3.4.3 随机数生成4.真随机数生成(振荡采样法)相位噪声 利用触发器采样 缺陷及其处理3.4.3 随机数生成3.斐波那契法 机密性 密码算法分类p 加密算法p 非对称加密算法p 哈希算法 国家条例3.4.4 加密算法的选择 对称与非对称算法的比较 密钥管理中的错误p 随意采用一个字符串当成密钥;p 没有使用密钥生成函数,也没有进行弱密钥检测;p 每次加密都使用相同的密钥,不定期更换;p 密钥生成后,没有采用加密和恰当保护手段通过网络传递给接受方。开发者应该遵循的策略3.4.5 密钥生成和使用 开发者应该遵循的策略p 每次加密时,使用临时生成的密钥来加密。该密

46、钥仅在这一次会话中使用,使用后删除,下次会话重新生成新的会话密钥;p 每次生成密钥时,不自己指定密钥。而是使用密钥生成函数来得到密钥;p 密钥传递时使用非对称加密保护,有可能还使用另一条线路来传递;p 除了采取发送方生成密钥的方式,还可以采取双方协商产生密钥的方式,而且使用国内外公认的加密协议来产生会话密钥。3.4.5 密钥生成和使用3.4.6 加盐哈希计算 OpenSSL漏洞普遍存在 心脏滴血漏洞原理 心脏滴血漏洞影响p 获取服务器的密钥,截获账务服务器的流量等信息。p 解密之前的流量日志,使网银、网上支付、网购、邮箱等涉及用户个人财产安全的信息会被窃取,且本地防火墙等安全检测设备完全无法发

47、现该攻击。p 攻击者还可以通过获取密钥来伪造证书,以此来躲避安全软件及浏览器的拦截,从而实现其他目的攻击。其他漏洞3.4.7 著名漏洞 心脏滴血漏洞的利用案例 nmap软件可利用“nmap-sV-script=ssl-heartbleed”命令对目标进行扫描,甚至还可以通过设置目标IP段的特定端口而进行批量扫描,得到活跃主机IP地址,再导入上述扫描器。针对特定的某个攻击目标,可以查看已经读到的内容,利用正则表达式不停拉抓帐号密码。3.4.7 著名漏洞 心脏滴血漏洞的利用案例 可以通过修改testssl.py文件设置不输出偏移地址和非ascii字符,其修改内容如下所示:def hexdump(s);pdat=for b in xrange(0,len(s),16);lin=c for c in sb:b+16 pdat+=.join(c if 32=ord(c)0:print new data,time.asctime()with open(data_1+time.asctime().replace(:,)+.txt,f.write(result)break time.sleep(1.0)3.4.7 著名漏洞PPT模板下载: THANK YOU感谢聆听

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《软件安全》课件第3章-典型的软件漏洞.pptx)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|