福建师范大学数学与计算机科学学院网络安全原理与技术课件第9讲 程序安全(一).pptVIP

  • 2
  • 0
  • 约1.39万字
  • 约 85页
  • 2019-05-06 发布于广东
  • 举报

福建师范大学数学与计算机科学学院网络安全原理与技术课件第9讲 程序安全(一).ppt

网络信息安全 程序安全(一) 回顾 计算机安全目标(主要): 保密性 Confidentiality 信息的机密性,对于未授权的个体而言,信息不可用 完整性 Integrity 信息的完整性、一致性,分为: 数据完整性,未被未授权者篡改或者损坏 系统完整性,系统未被非法操纵,按既定的目标运行 可用性 Availability 服务连续性 程序安全 现状: 所有软件都是有错的 通常情况下99.99%无错的程序很少会出问题 同安全相关的99.99%无错的程序可以确信会被人利用那0.01%的错误 程序安全现状 0.01%安全问题等于100%的失败 程序安全质量评估 方法一:修改错误: 查找错误并打补丁 方法二:意外行为: 程序安全缺陷 程序安全缺陷 程序安全缺陷:由于程序的脆弱点而引起的不恰当的程序行为。 程序安全缺陷分类: (1) 由开发者的疏忽所引起的错误 (2) 恶意设计的缺陷 非恶意的程序漏洞 缓冲区溢出 不完全验证 “检查时刻到使用时刻”错误 非恶意程序漏洞的结合使用 缓冲区溢出 缓冲区溢出 缓冲区溢出攻击 缓冲区溢出攻击举例 缓冲区溢出攻击的防范 缓冲区溢出 缓冲区是程序运行时计算机内存中的一个连续的块,它保存了给定类型的数据。 由于内存是有限的,所以缓冲区容量也是有限的。 在程序试图将数据放到计算机内存中的某一位置,但没有足够空间时会发生缓冲区溢出。 缓冲区溢出 缓冲区溢出问题随着动态分配变量而出现。 为了不占用太多的内存,一个有动态分配变量的程序在运行时才决定给他们分配多少内存。 如果程序在动态分配缓冲区放入太多的数据会有什么现象?它溢出了,溢出到了别的地方。 缓冲区溢出 例如下面程序: example0.c : void function(char *str) { char buffer[16]; strcpy(buffer,str); } 上面的strcpy()将直接把str中的内容copy到buffer中。 只要str的长度大于16,就会造成buffer的溢出,使程序运行出错。 存在象strcpy这样的问题的标准函数还有strcat(),sprintf(),,vsprintf(),,gets(), scanf(), 以及在循环内的getc(),fgetc(),getchar()等。 当一个超长的数据进入到缓冲区时,超出部分就会被写入其他缓冲区。 其他缓冲区存放的可能是数据、下一条指令的指针,或者是其他程序的输出内容,这些内容都被覆盖或者破坏掉。 可见一小部分数据或者一套指令的溢出就可能导致一个程序或者操作系统崩溃。 溢出情况具体地如下: 缓冲区溢出 超出部分溢出到: (1)用户数据空间: 会覆盖一个已存在的变量值(也可能会写到一个还未使用的位置) ,可能会影响程序的运行结果,但不会影响其他程序或数据。 缓冲区溢出 超出部分溢出到: (2)用户程序区域: ① 覆盖一条已执行的指令(该指令以后都不会再执行),用户将不会察觉到影响。 ② 覆盖的是一条还未执行的指令,系统将会尝试执行操作码为溢出数据的指令。若该指令不存在,系统将会由于一个非法指令异常而停机;若该指令存在,机器会把后续字节当作这条指令的剩余部分来使用,运行结果成功与否取决于上下文的含义。 缓冲区溢出 超出部分溢出到: (3)系统数据区:用错误的数值进行计算。 超出部分溢出到: (4)系统程序代码区域:尝试执行不适当的操作。 一般情况下,溢出部分覆盖其他数据区的数据是没有意义的,最多造成应用程序错误。 危险情况: 举例: (1)溢出部分覆盖了堆栈中一个非常重要的东西----函数的返回地址。 (2)溢出部分的内容是经过“黑客”或者病毒精心设计的输入数据。 如果(1)(2)同时发生,这时,覆盖缓冲区的数据恰恰是“黑客”或者病毒的入侵程序代码,一旦多余字节被编译执行,“黑客”或者病毒就有可能为所欲为,获取系统的控制权。 补充: 在进行函数调用的时候,函数的返回地址将被保存到堆栈里面,以便函数结束之后继续运行。 缓冲区溢出攻击 一个缓冲区溢出攻击的应用程序使用溢出的数据将机器语言代码放至计算机内存中—通常是产生root权限的地方。 单单的缓冲区溢出,并不会产生安全问题。 只有将溢出送到能够以root

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档