软件安全02典型软件安全问题与威胁分析课件.ppt

上传人:牧羊曲112 文档编号:1788532 上传时间:2022-12-18 格式:PPT 页数:57 大小:148KB
返回 下载 相关 举报
软件安全02典型软件安全问题与威胁分析课件.ppt_第1页
第1页 / 共57页
软件安全02典型软件安全问题与威胁分析课件.ppt_第2页
第2页 / 共57页
软件安全02典型软件安全问题与威胁分析课件.ppt_第3页
第3页 / 共57页
软件安全02典型软件安全问题与威胁分析课件.ppt_第4页
第4页 / 共57页
软件安全02典型软件安全问题与威胁分析课件.ppt_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《软件安全02典型软件安全问题与威胁分析课件.ppt》由会员分享,可在线阅读,更多相关《软件安全02典型软件安全问题与威胁分析课件.ppt(57页珍藏版)》请在三一办公上搜索。

1、软件安全技术,示范性软件学院软件技术系 郭建东,第2部分 典型软件安全问题,2.1 安全问题的来源2.2 常见的设计问题2.3 语言问题2.4 平台问题2.5 OWASP,2.1 安全问题的来源,安全问题的根本来源:,漏洞漏洞是软件的属性攻击者软件存在的攻击路径攻击面问题,产生漏洞的原因,(1) 软件或协议设计时的瑕疵 协议定义了网络上计算机会话和通信的规则,如果在协议设计时存在瑕疵,那么无论实现该协议的方法多么完美,它都存在漏洞。(2) 软件或协议实现中的弱点 即使协议设计得很完美,实现协议的方式仍然可能引入漏洞。,(3) 软件本身的瑕疵 良好的、编写安全程序的的编程习惯。(4) 系统和网络

2、的错误配置 这一类的漏洞并不是由协议或软件本身的问题造成的,而是由服务和软件的不正确部署和配置造成的。,意外行为和缺陷,意外行为(Unexpected Behavior):也称程序安全缺陷,是由于程序脆弱性引起的不适当的程序行为。缺陷(Flaw):缺陷可以是故障(Fault),或者失效(Failure)程序安全缺陷可能来源于任何种类的软件错误:无意或疏忽的故意或有意的,缺陷的类型(Types of Flaws) :,Landwehr et al. 提出了程序缺陷分类方法(taxonomy)有意的缺陷( Intentional,故意的)恶意的(Malicious)非恶意的(Nonmaliciou

3、s),无意中的缺陷( Inadvertent,不注意的;疏忽的)确认错误(Validation(验证;合法性,有效)error) (incomplete / inconsistent)域的错误(Domain error)顺序化和混淆现象(Serialization and aliasing)不完全的身份识别和认证(Inadequate identification and authentication)边界条件违反(Boundary condition violation)其它可利用的逻辑错误(Other exploitable logic errors),漏洞的两种类型:,软件漏洞包括设计漏

4、洞和实现漏洞。漏洞是软件安全威胁的根源.设计漏洞:设计错误,往往发现于软件的安全功能特性中。实现漏洞:来源于软件实际编码中的安全缺陷。,APPLE DEVELOPER常见软件缺陷,buffer overflows 缓冲区溢出unvalidated input 未校验输入race conditions 资源竞争access-control problems 访问控制问题weaknesses in authentication, authorization, or cryptographic practices 认证、授权、加密缺陷,2.2 常见的安全设计问题,创建自己的密码技术选用了不当的密码技

5、术依赖隐蔽式安全编写到程序中的密钥错误地处理私密信息,常见的安全设计问题1: 密码技术使用的败笔,常见的安全设计问题2: 对用户及其许可权限进行跟踪的薄弱或缺失,会话管理薄弱或者缺失身份鉴别薄弱或缺失授权薄弱或缺失,常见的安全设计问题3: 有缺陷的输入验证,没有在安全的上下文环境中执行验证,如在服务器验证而在客户端没有验证验证例程不集中,验证应尽可能靠近用户输入,并应集中以便于核实不安全的组件边界,常见的安全设计问题4:薄弱的结构性安全,过大的攻击面在过高权限级别上运行进程没有纵深防御失效时的处理不安全,常见的安全设计问题5:其他设计缺陷,代码和数据混在一起错将信任寄予外部系统不安全的默认值未

6、做审计日志,2.3 编程语言的问题,问题1:没有安全的本地字符串类型,也没有安全而易用的字符串处理函数。,2.3.1 C/C+的问题,C/C+问题1:,C中以NULL终止符表示一个字符串的末尾。,如:Char buffer=“small string”,没有确切地存储字符串的长度,该字符串的长度要程序员管理。当程序员处理这个长度犯错时,就会导致超过缓冲区结尾部分的内存被覆盖。,缓冲区溢出(Buffer Overflow)一个最典型的例子:,例:char sample10;for (i=0; i10; i+) samplei = A;sample10 =B; /,用于从被调用的函数返回到某个位置

7、的返回地址驻留在栈中,紧接在本地变量之后;返回地址是驻留在栈中的一段隐蔽的数据,栈中其余部分是传递给该函数的变量;编译后的程序在调用这个函数之前会将这个地址数据放在栈中,以使程序获知当这个函数执行完后转到哪里;通过把栈中某个变量产生缓冲区溢出,就可以覆盖栈中的这个返回地址。,C/C+问题2:缓冲区超限覆盖栈中的函数返回地址,典型例子栈溢出(Stack Smashing),Void createFullName (char* firstName, Char* lastName)Char fullName1024;Strcpy(fullName, firstName);Strcat(fullNam

8、e, “ “)Strcat(fullName, lastName);,该函数存在的问题:,接受参数名字和姓氏,放到一起,中间用空格分隔;变量fullName的声明方式,使其在堆栈中驻留;如果firstName和lastName太长,可能会使fullName超出1024;调用strcpy 和strcat函数破坏内存栈,会导致程序崩溃;如果控制参数使得fullName发生缓冲区溢出,就可以造成程序的恶意攻击。,预防栈溢出的方法:,精确控制输入变量的长度(如上述firstName和lastName的长度限制为511个字节);建议使用strncpy和strncat替代strcpy和strcat;避免使

9、用无界字符串;创建一个新的或使用已有的字符串缓冲区模块。,例子: sprintf(target, “Name:%s, count:%d”, person, num);该例子获取字符串Name和整型数count,放入target(目标缓冲区)如果: sprintf(target,“Name: %s%s%s%s, count:%d”,num);此时该函数将从栈中读取四个字符串,但事实上栈中不存在这四个字符串,程序读取栈中原本用于其他目的的值。,C/C+问题3:printf类型的格式化函数格式化字符串攻击,在C语言中,整数的正负标识是默认的;当一个整数值增长从而超过了其最大可能的值并循环到成为一个负

10、数的时候,将发生整数溢出;C语言没有任何措施预防整数溢出。如果攻击者通过用户输入操纵整数长度,就可以让这个值溢出,引起程序的处理发生错误。例:整数2147483647加1,发生溢出,成为 -2147483648,C/C+问题4:整数溢出,整数溢出例子:,Int copy_something(char *buf, int len) char kbuf800; if(lensizeof(kbuf) return -1; /*1*/ return memcpy(kbuf, buf, len); /*2*/,在 1 利用符号整数进行了一次边界检查;如果能够控制程序,传递一个负值给len,则可能通过1的

11、检查;在2中,memcpy接受无符号数作为长度,len被解释为一个大的无符号数,导致超越缓冲区kbuf的末尾;具有讽刺意味的是:1所进行的边界检查是为了预防缓冲区溢出。,2.4 平台的实现问题,平台是指程序在其中所运行的环境,包括操作系统以及与之交互的组件。威胁的来源:软件与用户的交互软件与网络交互软件与文件系统交互软件依赖OS产生新的子进程软件与其他进程通信其他,平台问题1:符号链接,符号链接(Symbolic link, 简写为symlink):文件系统中指向其他文件的文件。符号链接等效于其指向的文件。程序打开的是一个符号链接,实际打开的是该符号链接指向的文件。,符号链接问题:,攻击者可以

12、使用程序预计要操作的文件名创建一个符号链接,使该文件名指向希望的文件;利用符号链接,攻击者事实上可以启动系统中的任何程序。,针对符号链接:,程序员或使用者创建、打开、删除文件,或更改文件权限,必须检查该文件的符号链接,不可以基于文件名做任何安全方面的判定。权限攻击的例子:如果程序以攻击者没有的权限运行,比如作为SUID(系统用户身份),攻击者可以借此发动一次权限提升。,平台问题2:目录遍历,典型例子:CIFS是WINDOWS的文件共享协议,允许计算机通过网络访问彼此的文件系统。利用目录遍历,攻击者可通过使用“.”符号上升到文件系统的上一级目录,从而对文件共享程序进行欺骗,进而获得对不在共享目录

13、下的目录进行访问。,平台问题3:字符转换,平台支持不同类型的字符编码,存在多种不同的表示某个字符的方式。程序接受用户的输入,为了满足安全需求,通常会要求进行安全检查,以确保输入的字符串对该程序设计是有效的。当平台进行升级的时候可能会引入新的字符编码。,字符转换问题例子:,MS IIS5.0的一个有名的漏洞:按照安全设计,只允许执行脚本所在目录下的程序,但攻击者却可以执行服务器上的任何程序。在IIS5中,对用户的请求会进行检查,确保没有“./”这样的字符串。“./”允许攻击者指定位于脚本目录之外的程序。IIS5检查了“./”,但是没有考虑到这个字符串会以其他编码形式存在。,常见的应用程序安全问题

14、,引起原因:应用程序的某个组件的恶意数据引起,这些恶意数据在其另一个组件中被当作了合法代码;对涉密信息的不当处理,应用安全问题1:SQL注入,攻击者通过操纵程序的某种输入,在连接到SQL数据库的应用程序上执行自己所构造的查询。预防SQL攻击方法:过滤所有输入,确保输入字段只包含所需要的字符;尽量避免使用动态生成的SQL。,应用安全问题2:跨站点执行脚本,利用Internet上某些环境(或WEB站点)的受信任级别高于其他环境。来自非受信环境的攻击者可在受信的环境注入数据,使其在受信环境作为脚本予以执行。跨站点执行脚本还可以用来访问数据,如用户cookies。,站点C,站点A,站点B,C信任A,A

15、信任B,跨站点执行脚本例子:,Step1,A使用其信任的金融机构的WEB站点,该站点要求其输入自己的用户名和密码Step2,B编写了一些JavaScript代码,用于检索运行了这些代码的已登录用户的session ID(会话标识符)Step3,B给A发送嵌入了这些代码的消息Step4,A阅读B的消息,其session ID发给了BStep5,B使用A的session ID对A进行会话劫持Step6,B已可以使用A的身份使用该站点,2.6 开发过程问题,安全需求和前提条件的文档记录缺乏交流和文档匮乏缺少安全过程,部署上的薄弱性,部署的执行者一般不属于开发团队软件错误地设置文件或注册表的键值,使系

16、统上的其他用户可以进行更改使软件安装时具有不必要的权限。,部署薄弱性示例:Apache与IIS,早期IIS(4.0和5.0)要求以Local System的身份运行;Apache启动时以root身份运行,随后降低权限,最终以低权限的用户运行,典型UNIX用户是nobody,2.5 OWASP,关于OWASP:,The Open Web Application Security ProjectOWASP Top 10,A1-注入:,注入攻击漏洞,例如SQL,OS 以及LDAP注入这些攻击发生在当不可信的数据作为命令或 者查询语句的一部分,被发送给解释器的时候攻击者发送的恶意数据可以欺骗解释器,以

17、执行计划外的命令或者在未被恰当授权时访问数据。,A2-失效的身份认证:,与身份认证和会话管理相关的应用程序功能往往得不到正确的实现,这就导致了攻击者破 坏密码、密匙、会话令牌或攻击其他的漏洞 以冒充其他用户的身份。,A3-跨站脚本:,当应用程序收到含有不可信的数据,在没有进行适当的验证和转义的情况下,就将它发送给一个网页浏览器,这就会产生跨站脚本攻击(简称XSS)。XSS允许攻击者在受害者的浏览器上执行脚本,从而劫持用户会话、危害网站、或者将用户转向至恶意网站。,A4-不安全的直接对象引用:,当开发人员暴露一个对内部实现对象的引用时,例如,一个文件、目录或者数据库密匙,就会产生一个不安全的直接

18、对象引用。在没有访问控制检测或其他保护时,攻击者会操控这些引用去访问未授权数据。,A5-安全配置错误:,好的安全需要对应用程序、框架、应用程序服务器、web服务器、数据库服务器和平台定义并执行安全配置。由于许多设置的默认值并不是安全的,因此,必须定义、实施和维护这些设置。这包含了对所有的软件保持及时地更新,包括所有应用程序的库文件。,A6-敏感信息泄漏:,许多Web应用程序没有正确保护敏感数据,如信用卡,税务ID和身份验证凭据。攻击者可能会窃取或篡改这些弱保护的数据以进行信用卡诈骗、身份窃取,或其他犯罪。敏感数据值需额外的保护,比如在存放或在传输过程中的加密,以及在与浏览器交换时进行特殊的预防

19、措施。,A7-功能级访问控制缺失:,大多数Web应用程序的功能在UI中可见以前,验证功能级别的访问权限。但是,应用程序需要在每个功能被访问时在服务器端执行相同的访问控制检查。如果请求没有被验证,攻击者能够伪造请求以在未经适当授权时访问功能。,A8-跨站请求伪造(CSRF),一个跨站请求伪造攻击迫使登录用户的浏览器将伪造的HTTP请求,包括该用户的会话cookie和其他认证信息,发送到一个存在漏洞的web应用程序。这就允许了攻击者迫使用户浏览器向存在漏洞的应用程序发送请求,而这些请求会被应用程序认为是用户的合法请求。,A9-使用含有已知漏洞的组件:,组件,比如:库文件、框架和其它软件模块,几乎总是以全部的权限运行。如果一个带有漏洞的组件被利用,这种攻击可以造成更为严重的数据丢失或服务器接管。应用程序使用带有已知漏洞的组件会破坏应用程序防御系统,并使一系列可能的攻击和影响成为可能。,A10-未验证的重定向和转发,Web应用程序经常将用户重定向和转发到其他网页和网站,并且利用不可信的数据去判定目的页面。如果没有得到适当验证,攻击者可以重定向受害用户到钓鱼软件或恶意网站,或者使用转发去访问未授权的页面。,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号