软件安全期末论文.docx
- 文档编号:9386701
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:7
- 大小:21.18KB
软件安全期末论文.docx
《软件安全期末论文.docx》由会员分享,可在线阅读,更多相关《软件安全期末论文.docx(7页珍藏版)》请在冰豆网上搜索。
软件安全期末论文
软件安全期末论文
软件安全开发
一、软件安全发展概述
1.软件安全开发背景
第一次“软件危机”——XXXX时代,根源:
汇编语言无法处理日益庞大和复杂的程序,解决:
高级语言——FORTRAN和C的诞生;
第二次“软件危机”——XXXX时代,根源:
大程序,百万行,百万人同时开发,解决:
1。
面向对象语言——c++/Java/c#;2.软件工程;
第三次“软件危机”——21世纪的第一个十年,根本原因:
软件安全。
软件应用非常广泛:
电脑游戏、火车票售票系统、多媒体教学、手机、航天飞机、人造卫星、、、、
软件安全问题普遍存在:
操作错误、响应缓慢、票务系统断开或崩溃、多媒体教学系统崩溃、黑客窃取用户银行密码、
软件安全问题造成的一般后果:
产品运行不稳定、无法获得正确结果甚至崩溃、恶意攻击、导致信息泄露/数据破坏等。
软件安全问题造成的严重后果:
票务系统故障、美国放射治疗设备的超剂量辐射事件、阿丽亚娜5号火箭发射失败、伊朗布什尔核电厂受斯图克网病毒攻击。
造成软件安全问题的原因有很多:
软件开发周期短,工作量大,没有时间考虑安全问题;软件设计中缺乏安全设计;软件开发人员缺乏安全编程的经验;功能越来越多,情况越来越复杂;软件模块复用,高可扩展性/灵活性要求;互联网环境中的安全挑战。
总结可以归纳为两点:
漏洞和威胁。
漏洞已成为危及软件安全的主要因素,危及用户对软件和业务运营以及一些关键基础设施和应用程序的信任。
漏洞是常见的。
普通软件工程师每千行代码有20个缺陷。
虽然采用了严格的软件开发质量管理机制和多次测试,但软件公司的缺陷率仍然很高。
其中,普通软件开发公司的缺陷密度为4-40,高级软件开发公司的缺陷密度为2-4,美国宇航局的缺陷密度为0.1。
2.软件安全发展简介
所谓的安全软件是指不存在安全漏洞,能够抵御各种攻击威胁并按预期执行。
软件安全开发是指在软件开发生命周期的所有阶段采取必要和适当的安全措施来避免绝大多数安全漏洞。
采取措施防止设计、开发、提交、升级或维护中的缺陷造成系统漏洞。
软件安全开发需要提前进行安全干预,软件发布后的修复成本是软件设计和编码阶段修复成本的30倍。
此外,软件发布后修复对软件用户造成的损失是巨大的,因此存在软件安全开发,即安全的软件开发生命周期:
包括安全设计原则、安全开发方法、最佳实践和安全专家经验。
此外,还提出了一些安全开发模型,包括
微软提出的可信计算安全开发生命周期,加里·麦格劳等人提出的BSI系列模型,SAMM和OWASP提出的CLASP模型。
信任价值计算安全开发生命周期是一个安全保证过程,它在开发过程的所有阶段引入了安全和隐私原则,总共有5+2个阶段和16个必要的安全活动。
建筑安全使安全成为软件开发的重要部分。
它不需要改变现有的软件开发方法,适用于各种软件开发生命周期。
SAMM(软件保证成熟度模型),是一个软件保证成熟度模型,是一个开放的框架,用于帮助制定和实施针对软件安全特定风险的策略。
它定义了软件开发过程中的四个核心业务功能:
治理、构建、验证和部署。
综合轻量级应用程序安全过程,一个综合轻量级应用程序安全过程,选择30个特定的基于角色的活动来增强整个开发团队的安全意识,并为这些活动提供相应的指导方针、指导方针和清单。
二、软件安全开发的关键工作
1.软件安全设计
在这个环节中,我们应该理解软件安全设计的重要性,理解软件安全设计的基本原则,理解攻击面的概念和减少攻击面的常用保护措施,理解威胁建模的概念和目的,理解威胁建模的关键因素和功能。
在传统方法中,软件在发布后进行测试,等待修复错误。
一些研究表明,50%的安全问题是由设计缺陷引起的,因此安全干预是先进的,效益高,成本低。
所谓的设计缺陷,如明文存储密码,甚至将密码交给客户进行对比验证,都会给系统带来严重的威胁。
安全设计的目标是制定项目计划以定义安全行为,制定安全检查点以确保安全控制措施的质量,并确定配置过程和变更控制过程。
安全设计的主要设计内容包括确定访问控制机制、定义主要角色和权限、选择加密方法和算法、解决敏感数据处理问题、评估内部通信机制、确定完整性机制、
安全设计的安全设计原则包括保护最薄弱环节、纵深防御、最小特权、最小共享、权限分离、经济、保护隐私、正确理解“秘密”、安全错误处理、心理接受等原则。
攻击面是指可以对软件系统采取的攻击方法的集合。
可攻击的表面包括函数、API、接口、资源、数据存储等。
软件的攻击面越大,安全风险就越大。
因此,减少攻击面对提高软件安全性非常重要。
为了减少攻击面,第一步是分析产品功能的重要性,即这个功能是否必要;第二步是分析从哪里访问这些功能;第三步是采取合理的措施,比如降低权威。
威胁建模是以结构化的方式识别和评估应用系统面临的威胁。
目的是在设计阶段帮助全面了解各种安全威胁,并指导选择适当的对策。
管理可能的风险;它的架构可以重新验证。
威胁建模过程:
确定建模对象;识别威胁;评估威胁;消除威胁。
建模对象包括应用程序可信边界内和边界外的所有功能组件
应用最实用的部分。
识别威胁包括发现组件或流程中存在的威胁,但威胁不是漏洞。
评估威胁包括判断攻击的概率、攻击的后果和计算风险。
消除威胁包括重新设计和消除这种威胁,使用标准的威胁缓解技术,发明新的缓解方法,根据安全漏洞标准确定风险是否可接受,将威胁记录为漏洞,然后寻找解决方法。
常见威胁的例子包括:
1。
欺骗是指模仿其他人或实体,例如假装成;2.篡改,即修改数据或代码,如修改动态链接库;硬盘、DVD或网络数据包;3.否认,即声称没有采取任何行动;4.信息披露是指向无权知道的人披露信息,如允许他人阅读windows源代码和发布网站用户名单;5.拒绝服务,即拒绝向用户提供服务,例如导致窗口或网站崩溃,发送数据包并耗尽处理器时间,将数据包路由到黑洞;6.权限提升意味着获得XX的访问,例如,允许远程互联网用户执行命令,并允许受限用户获得管理员权限。
威胁缓解的例子包括:
1。
对于假威胁,验证方法,如Cookie验证、KerBeros验证、PKI等。
2.针对篡改威胁,采取了哈希函数、消息认证码、数字签名和防篡改协议等措施来降低篡改威胁。
3.为了应对拒绝的威胁,采取了强认证、安全审计、数字签名、时间戳等措施来减少拒绝。
4.为了应对信息泄露的威胁,采取了加密、秘密保护、访问控制、不保守秘密和隐私保护协议等措施来降低威胁。
5.采取认证、访问控制、过滤、流量控制和授权等措施,减少拒绝服务的威胁;6.针对特权提升的威胁,采取了建立访问控制列表和最小特权操作等措施来减少特权提升。
2.软件安全编码
软件安全编码属于软件安全发展的关键阶段。
在这里,我们首先了解一般的安全编程准则,包括验证输入、避免缓存溢出、程序内部安全、安全调用组件、程序编译等概念。
了解编码时不允许使用的功能,了解相关的安全编码标准和建议。
了解常见的代码安全问题和处理方法。
理解代码审查的目的。
了解常见的源代码静态分析工具。
验证输入是安全程序的第一道防线。
我们需要检查、验证或过滤输入,以防止恶意数据进入程序进行后续处理,类似于网络中的防火墙。
数据检查应在最初接收数据时设置。
最常见的输入,即输入源,包括1。
命令行,检查参数的数量、数据格式和内容;2、环境变量,环境变量可能超出预期,一些环境变量的存储格式可能有危险;3.文件,包括由不受信任的用户控制的临时文件,这些文件可以容纳,但不可信任;4、网络,来自网络的数据是高度不可靠的;5,还包括一些其他来源。
常见数据类型,1。
字符串,确定合法范围,拒绝非法字符(字符串),识别特定字符,使用强类型,过滤单引号、双引号、反斜杠和空字符,过滤字符串,如“选择”、“插入”、“更新”、“关闭”、“删除”和“删除”。
对于数字类型的字段,许多程序员会写“从id=的测试中选择”。
因为变量不是用单引号括起来的,所以会发生sql_inject攻击,所以程序员应该过滤用户提交的所有变量,将其放入sql语句中。
2、数字,确定合法范围,大数溢出为负数;3.文件名。
最好不要让用户自己设置文件名,并避免使用特殊字符,如。
、/、-rf、。
/、com1等。
4.电子邮件地址。
使用正则表达式来限制合法表达式
电子邮件地址;5.网址/URI,检查它是否是非法的地址形式,以防止恶意内容被添加到合法地址之后。
缓冲区溢出是指计算机内存中包含相同数据类型实例的连续块;溢出意味着数据被添加到分配给缓冲区的内存块中。
缓冲区溢出是一个常见且非常严重的问题。
如果发生溢出,攻击者可以使远程服务程序或本地程序崩溃。
攻击者也可以设计在溢出后执行的代码,从而实现他们自己的目标。
溢出是由于C/C++语言的特点造成的。
大量库函数溢出,如strcpy、strcat、get等。
,而其他许多语言都称之为C语言库。
缓冲区溢出的解决方案是什么?
1.填充数据时计算边界,如动态分配内存、控制输入等。
2.使用没有缓冲区溢出问题的函数,如strncpy、strncat等。
3.使用替代库,如Libmib、libsafe等。
4.基于探测方法的防御,例如StackGuard、ProPolice和/GS,在返回地址前插入一个“探测”值;5.非执行堆栈防御,即代码不能在堆栈上执行。
程序内部安全包括程序内部接口安全、安全故障、最小化反馈、避免拒绝服务攻击、避免竞争条件和临时文件的安全使用。
程序内部接口的安全性是指对程序内部接口数据的检查。
安全失败意味着检测异常、安全处理各种可能的操作路径,当检测到某些错误行为/数据时,必须以适当的方式处理,以确保程序的安全运行、必要时立即拒绝服务,甚至不返回详细的错误代码。
尽量减少反馈,也就是说,避免给不可靠的用户提供太多的信息。
认证程序应该在认证之前给出尽可能少的信息。
如果程序接受密码,不要返回。
避免拒绝服务攻击,即尽快返回输入错误、设置超时、延迟服务等。
避免竞争条件,即对共享资源(文件/变量)的访问没有得到适当控制,使用原子操作,使用锁操作-避免死锁;临时文件的安全使用,当访问已知文件名或推测性临时文件时,会出现许多安全漏洞。
其他组件的安全调用意味着应用程序实际上不是独立的,它们通常调用其他组件,如底层操作系统、数据库、可重用库、网络服务等。
其组件的安全调用包括仅以安全的方式使用安全组件,例如检查组件文档、搜索相关说明、使用批准的组件、尽可能不调用外部命令,以及必要时严格检查参数。
为了正确处理返回值,有必要检查返回值并确定调用是否成功。
成功后,检查数据是否按照预期值进行处理。
数据可能包含空字符、无效字符或其他可能导致问题的内容。
失败时,检查错误代码。
保护应用程序和组件之间传递的数据,并考虑传输加密,包括加密算法和安全协议。
在程序的编写和编译阶段,必须遵守以下条约:
使用最新版本的编译器和支持工具;使用编译器内置的防御功能;减少可以利用的潜在编码结构和设计;保护机密,及时清除密码、密钥等敏感数据;该程序只实现您设置的功能。
不要相信用户的输入;必须考虑和处理事故。
使用安全代码检查核对表。
对于WEB应用程序,应特别注意以下安全威胁。
1.SQL注入。
注射问题的解决方案是不信任用户的输入。
所有输入都是危险的。
为了验证用户的输入,转义所有用户输入,参数化查询,使用存储过程,使用视图,以及最小权限原则。
2.跨站点攻击(XSS),即恶意攻击
攻击者将恶意的HTML代码插入网页。
当用户浏览网页时,嵌入的HTML代码将被执行,从而达到恶意攻击的目的。
这些攻击的危害包括:
敏感信息泄露、网络钓鱼攻击、封锁/伪造网页特定信息、Cookie欺骗、拒绝服务攻击等。
跨站点攻击防御方法:
处理传入的网址参数或确保传入的来源是可靠的。
软件安全开发开发阶段的最后一个安全步骤是源代码审查,它关注编码中的实现缺陷。
这可以通过静态分析工具来完成,这些工具扫描源代码,可以发现大约50%的安全问题。
3.软件安全测试
软件安全测试是根据特定的程序发现软件错误,检查软件是否满足规定的要求,或者清楚地了解预期结果和实际结果之间的差异,目的是发现软件中的错误。
软件安全测试是验证软件安全级别和识别潜在安全缺陷的过程。
它不仅搜索软件自身编程中存在的安全风险,还检查应用程序防止非法入侵的能力。
与传统测试相比,传统的软件测试只考虑软件出错时的处理,不考虑对软件的有意攻击。
在软件投入生产之前,一个独立的安全团队应该对应用程序安全性进行全面的评估,评估分为功能性安全测试和对抗性安全测试。
传统的测试方法包括:
白盒测试、黑盒测试和灰盒测试。
具体的安全测试方法包括:
模糊测试和渗透测试。
模糊测试是一种通过提供意外输入和监控异常结果来发现软件故障的方法。
这个测试属于黑盒测试,因为它不关心被测试目标的内部实现,只设计输入、测试结果和发现安全漏洞。
这是一种非常有效的漏洞发现技术。
大多数已知的漏洞都是通过这项技术发现的。
当用这种方法测试时,不够强大的程序会崩溃,而良好编码的程序会正常运行。
模糊测试的特点是:
方法论、随机值、大量测试用例、发现漏洞或可靠性错误。
模糊测试的步骤:
(1)生成大量异常数据作为测试用例;
(2)将这些测试用例作为输入应用和测试对象;(3)监视和记录任何由输入引起的崩溃或异常现象;(4)检查测试日志,深入分析碰撞或异常的原因。
渗透测试是通过模拟恶意黑客的攻击方式来评估系统安全性的一种评估方法。
它从攻击的角度测试软件系统是否安全,使用自动工具或手动方法模拟黑客的输入,并在运行时发现目标系统中存在的安全漏洞。
渗透测试的优点是发现的问题真实而严重。
缺点是只能到达有限数量的测试点,覆盖率低。
渗透试验的过程:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 安全 期末 论文
