零日漏洞是指未被公开披露的软件漏洞,没有给软件的作者或厂商以时间去为漏洞打补丁或是给出建议解决方案,从而攻击者能够利用这种漏洞破坏计算机程序、数据及设备。
利用零日漏洞开发攻击工具进行的攻击称为零日攻击。
背景:软件无处不在。信息化时代软件涉及即时通信、电子邮件、移动商务、智能家居等各方面。软件规模日益庞大,操作系统从百万行增长至亿行。
问题:软件漏洞普遍存在,零日漏洞成为主要威胁。在软件开发设计过程中,软件漏洞和不安全的软件配置这些软件安全问题时有发生。
结论:软件安全应当引起重视,成为当务之急。改善软件安全问题有利于社会、经济和国防建设,软件安全关乎国家竞争力。
定义:零日漏洞不是公开披露的漏洞,软件作者/厂商没有发现或是尚未提供补丁。因此,零日攻击成功率高,造成后果严重。
结论:零日漏洞反映了软件系统的脆弱性,存在漏洞的隐秘性、修复的滞后性。
软件自身的安全(软件漏洞)、恶意代码、软件侵权
软件漏洞通常被认为是软件生命周期中与安全相关的设计错误、编码缺陷及运行故障等。
一方面,软件漏洞可能会造成软件在运行过程中出现错误结果或运行不稳定、崩溃等现象,甚至引起死机等情况。举例如下。
· 操作系统启动时发现未能驱动的硬件而导致蓝屏。
· 应用软件由于存在内存泄露,运行时系统内存消耗越来越大,直至最后崩溃。
· 网络软件由于对用户并发数考虑不周,导致用户数超出预计,程序运行错误。
· 多线程软件对线程同步考虑不周,导致系统因资源死锁而死机。
另一方面,软件漏洞会被黑客发现和利用,进而实施窃取隐私信息、甚至破坏系统等攻击行为,举例如下。
· 软件使用明文存储用户口令,黑客通过数据库漏洞直接获取口令明文。
· 软件存在缓冲区溢出漏洞,黑客利用溢出攻击而获得远程用户权限。
· 软件对用户登录的安全验证强度太低,黑客假冒合法用户登录。
· 软件对用户的输入没有严限制,被黑客利用后执行系统删除命令,从而导致系统被破坏。
震网病毒便是利用软件漏洞实施的攻击,通过U盘和局域网进行传播,震网病毒对伊朗等国家的核设施造成的危害不亚于1986年发生的切尔诺贝利核电站事故,最终造成伊朗核计划拖后了2年,我国近500万网民及多个行业的领军企业也遭受了此病毒的攻击。
恶意代码是在未被授权情况下,以破坏硬件、窃取信息、干扰正常使用、扰乱用户心理为目的的软件或代码片段。
举例:蠕虫、特洛伊木马、后门、恶意广告、流氓软件、逻辑炸弹、僵尸网络、勒索软件等。
未经软件著作权人许可,发表、登记、修改或翻译其软件。
复制、部分复制软件著作权人软件。
未经合作人许可,将合作完成的软件作为单独完成的软件发表、登记。
向公众发行、出租、传播著作权人的软件。
转让他人软件著作权或许可他人行使。
是软件工程和软件保障的一个方面,提供了一种系统的方法来标识、分析和追踪对危害及具有危害性功能的软件缓解措施和控制。
软件安全具有信息安全三大基本属性CIA: 保密性、完整性、可用性。
其他属性:可认证性、授权、可审计性、抗抵赖性、可控性、可存活性等。
软件:计算机程序、数据和可能相关的文档。
软件工程:采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,从而经济地开发出高质量的软件并有效地进行维护。是指导计算机软件开发和维护的一门工程学科,是技术与管理紧密结合形成的工程学科。
软件工程方法学:软件生命周期中所使用到的技术方法,包括方法、工具、过程。
1.开发安全的代码:将安全性考虑到设计、编码和测试的整个过程中;
2.构建安全环境:根据需求进行环境的管理,提供良好的安全策略;
3.安全测试:对软件进行漏洞检测、安全测试以及安全评估;
4.网络安全:针对网络攻击和漏洞进行检测和处理;
5.安全维护:根据系统参数和安全需要定期审查,并找出潜在的安全风险;
6.维护安全标准:根据现行安全规范构建企业安全体系,确保软件通过安全标准测试;
7.进行安全审计:对软件的安全特性进行评估,以加强安全并及早发现和处理安全问题。
软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题:
对软件开发成本和进度的估计不准确
用户对开发完成的软件系统不满意
软件产品的质量不可靠
软件不能适应新的硬件环境,软件中的错误难以改正
等等
软件质量是“软件与明确的和隐含的定义需求相一致的程度”。软件质量是软件符合明确叙述的功能和性能需求、文档中明确描述的开发标准,以及所有专业开发的软件都应具有的和隐含特征相一致的程度。
软件质量保证是建立一套有计划、有系统的方法,向管理层保证拟定出的标准,步骤,实践和方法能够正确地被所有项目所采用。
软件保障是指提供一种合理的确信级别,确信根据软件需求,软件执行了正确的、可预期的功能,同时保证软件不被直接攻击或植入恶意代码。包括软件质量、软件安全性、软件可靠性、软件验证与确认等学科领域
软件可靠性,在规定条件下,在规定的时间内软件不引起系统失效的概率。该概率是系统输入和系统使用的函数,也是软件中存在的缺陷的函数。系统输入将确定是否会遇到已存在的缺陷;在规定的时间周期内所述条件下程序执行所要求的功能和能力。
应用软件系统安全,应用软件系统位于信息系统上层,是在信息系统的硬件系统、操作系统、网络系统和数据库管理系统的支持下运行的,是构成信息系统的最重要部分,是信息系统中直接为用户提供的部分。为了实现应用软件系统的安全,需要其余部分的安全。
可信软件,具有可信性的软件,可信指一个实体在实现既定目标的过程中,行为及结果可以预期,它强调目标与实现相符,强调行为和结果的可预测性和可控制性。软件可信是指软件系统的动态行为以及其结果总是符合人们的预期,在收到干扰时仍能提供连续的服务。
软件定义安全,其基本思想是把当前IP网络互连结点中决定报文如何转发的复杂控制逻辑从交换机/路由器等设备中分离出来,以便通过软件编程实现硬件对数据转发规则的控制,最终达到对流量进行自由操控的目的。
联系:
它们都是为了确保软件具有可靠性和可信度,保证软件系统运行可靠。
思路1: 挖掘安全漏洞,分析后给出安全措施进行修复。例如补丁、防火墙等。这一方式被广泛采用,事实证明这种方式性价比低,很难从根本改善软件安全问题。
思路2: 事先分析软件安全错误的可能发生原因,在软件开发的过程中规避。该方法发生在软件生命周期较早的阶段,因而所需成本较小。
软件安全技术涉及的方面非常广泛,主要包括以下几个方面:
加密和解密技术:包括对数据进行加密、解密、数字签名和身份认证等技术,保障数据的机密性和完整性。
访问控制技术:采用身份验证、访问权限管理、审计等技术,对软件系统中的资源和功能进行访问控制,避免未授权的访问和操作。
安全漏洞扫描和修复技术:利用自动化的工具对软件系统进行扫描和检测,及时发现和修复安全漏洞。
入侵检测和防御技术:采用入侵检测和防御系统,对软件系统进行实时监控和防御,发现并阻止恶意攻击。
安全审计技术:对软件系统的操作日志进行审计和分析,发现和定位安全问题,及时采取相应措施。
概念:
漏洞是存在于信息系统、系统安全过程、内部控制或实现过程中的、可被威胁源攻击或触发的弱点。软件漏洞通常被认为是软件生命周期中与安全相关的设计错误、编码缺陷及运行故障等。
区别:
软件错误发生在软件开发的生命周期中,是人为的差错导致的。包括需求说明错误、设计错误、编码错误、测试错误、配置错误、文档错误。
软件缺陷/Bug存在于软件产品中,由于人为差错或其他客观原因造成。是一种静态形式,一旦激活会影响用户的正常功能需求。相较而言,软件漏洞的存在更加隐蔽,关乎软件的安全问题。软件漏洞的存在体现了软件的脆弱性。
联系:
这些概念都描述了软件在功能、行为上的异常和错误,对软件的可用性造成了损害。
举例:一般Web应用不使用HTTPS协议不算Bug,但电子商务或者网上银行不加密传输则会严重影响安全。
安全性功能实际为软件系统的一种需求,所以也被称为安全性需求。是否将安全性功能加人到项目需求中,还需要根据项目的具体情况考虑,如项目经费等。
计算机系统结构决定了漏洞的必然性。例如,数据和指令可能发生混淆,人为因素导致编码错误等。
软件趋向大型化,第三方扩展增多。软件漏洞的增长和软件复杂度、代码行数的增长呈正比。
新技术、新应用的设计缺乏安全性考虑。
使用场景更具威胁。网络技术的引入使得软件的使用环境变得更加复杂多变。
缺乏对软件安全的重视,开发者缺乏相关知识。
分类
基于漏洞成因的分类。内存破坏类、逻辑错误类、输入验证类、设计错误类、配置错误类。
基于漏洞利用位置的分类。本地漏洞、远程漏洞。
基于威胁类型的分类。获取控制、获取信息、拒绝服务。
分级
按照漏洞严重级别。严重、重要、中等、低。
利用通用漏洞评分系统(CVSS)分级。依照基本度量、时间度量、环境度量三个标准对漏洞打分。
国际标准主要包括6大漏洞分级规范以及一系列安全漏洞管理规范,分级规范包括:
CVE(通用漏洞和披露)
CVSS(通用漏洞评分系统)
CWE(通用缺陷枚举)
CWSS(通用缺陷评分系统)
CPE(通用平台枚举)
OVAL(开放漏洞评估语言)
国内标准主要包括《信息安全技术安全漏洞标识与描述规范》、《信息安全技术安全漏洞等级划分指南》、《信息安全技术安全漏洞分类》、《信息安全技术信息安全漏洞管理规范》。
是否合法:不合法。
案例1:漏洞平台陷入“暂停”风波。
案例2:阿里巴巴员工利用漏洞刷月饼获利。
如何管控:
认清“漏洞是一种武器”。漏洞交易市场日趋成熟,大量流动的高危漏洞造成危害。这种问题逐渐形成规模,必须加以重视。
通过限制“白帽”行为的尺度和规范,使软件厂家与“白帽”获得双赢。
加强法律建设,完善漏洞管控规范。企业和国家都应建立专门的部门来系统的收集、分析、修复软件安全漏洞。
1. 识别漏洞:发布漏洞前,厂商需要识别发行的产品中是否有漏洞。厂商可以使用安全审查、公开的漏洞库、厂商集成的专家审核或第三方安全公司的安全测试方法来识别可能存在的漏洞。
2. 评估漏洞:厂商通过对漏洞的深入分析,评估漏洞的重要性,比如可能触及的用户数量、可能受影响的系统级别、漏洞公开的危害性及复杂度,等等。
3. 选择漏洞补救措施:在评估漏洞之后,厂商需要根据漏洞的重要性以及对用户和系统的安全程度,选择有效的补救措施,比如:客户端热更新、软件补丁、本地防火墙配置或者禁用恶意软件。
4. 发布漏洞信息:随后厂商需要发布漏洞信息,推送相应的补丁或者更新,同时公布有关的安全提示或者工作,以使用户能够及时的采取正确的措施对付漏洞。尽可能的减少漏洞对用户系统和安全的影响。
堆区
缓冲区溢出漏洞就是在向缓冲区写入数据时,由于没有做边界检查,导致写入缓冲区的数据超过预先分配的边界,从而使溢出数据覆盖在合法数据上而引起系统异常的一种现象。
栈溢出检测选项/GS 问题:1,cookie值可以被猜测 2.Cookie可以被修改 3.覆盖SEH绕过Cookie检查 4.覆盖父函数的栈数据绕过Cookie检查。
数据执行保护DEP(最早出现在win xp sp 2,使可写数据不可执行,使执行数据不可写)问题:可以执行已经加载的模块中的指令或调用系统函数,栈上的数据作为这些函数/指令的参数
地址空间布局随机化ASLR 问题:1.对于本地攻击,DLL的地址不会重新随机化 2.造成内存碎片增多 3.有些DLL模块没有采用/DYNAMICBASE可以从这个模块发起攻击
安全结构化异常处理SafeSEH(生成一张安全的SEH表,保存在数据块里)问题:当进程中存在一个不支持SafeSEH的模块时,整个SafeSEH的机制就可能失效,
增强缓解体验工具包EMET(增强型DEP,SafeSEH升级版SEHOP,强制性ASLR,HeapSpray防护)问题:EMET不是操作系统的一部分,会给操作系统的性能,可靠性以及会给其上运行的应用程序带来严重的副作用,且未跟上windows发展的步伐
没有完美无缺的保护机制,需要加强防范意识,采取多种手段保护。
DNS 域名解析、TCP连接、HTTP请求、处理请求返回HTTP响应、页面渲染和关闭连接。
注入
失效的身份认证与会话管理
跨站脚本
不安全的直接对象引用
错误的安全配置
敏感数据泄漏
缺失功能级访问控制
跨站请求伪造
使用有漏洞的组件
未验证的重定向和转发
Web客户端
XSS(跨站脚本攻击):恶意攻击者在Web页面中插入恶意javascript代码(也可能包含html代码),当用户浏览网页之时,嵌入其中Web里面的javascript代码会被执行,从而达到恶意攻击用户的目的。
CSRF(跨站请求伪造):攻击者获取用户信息后伪造请求(例如Cookie),利用用户身份完成攻击操作,如发布文章、购买商品、转账、修改资料甚至密码等。
Web服务端
Sql注入漏洞:攻击者将恶意的数据插入SQL查询中,提交到后台数据库引擎执行非授权操作。
弱口令漏洞:文件上传漏洞:由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,攻击者可通过Web访问的目录上传任意文件,包括网站后门文件( webshell ),进而远程控制网站服务器。
未加密登录请求:由于Web 配置不安全, 登陆请求把诸如用户名和密码等敏感字段未加密进行传输,攻击者可以窃听网络以劫获这些敏感信息。
原理:SQL 注入漏洞是指,攻击者能够利用现有Web 应用程序,将恶意的数据插入SQL 查询
中,提交到后台数据库引擎执行非授权操作。
危害:
1.SQL 注入攻击具有广泛性,基于SQL语言的标准数据库软件以及与之连接的网络应用程序都面临此类攻击。并且SQL注入攻击原理相对简单,教程很多。
2.相较于其他漏洞,对于SQL 注入漏洞的防范要困难。
1. 采用强类型语言,如Java、 C#等强类型语言几乎可以完全忽略数字型注入。
2. 尽可能避免使用拼接的动态SQL语句,所有的查询语句都使用数据库提供的参数化查询接口。参数化的语句使用参数而不是将用户输入变量嵌人到SQL语句中。
3. 在服务器端验证用户输入的值和类型是否符合程序的预期要求。
4. 在服务器端对用户输入进行过滤。
5. 避免网站显示SQL错误信息 。
6. 加固应用程序服务器和数据库,利用最低权限账户与数据库连接。
盲注就是在sql注入过程中,sql语句执行的选择后,选择的数据不能回显到前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。一般的注入攻击者可以直接从页面上看到注入语句的执行结果,而盲注时攻击者通常是无法从显示页面上获取执行结果, 甚至连注入语句是否执行都无从得知。
恶意攻击者在Web页面中插入恶意javascript代码(也可能包含html代码),当用户浏览网页之 时,嵌入其中Web里面的javascript代码会被执行,从而达到恶意攻击用户的目的。
XSS漏洞是指,应用程序没有对接收到的不可信数据经过适当的验证或转义就直接发给客户端浏览器。Web浏览器执行HTML页面中的脚本时就会执行到注入的恶意脚本代码。
有反射型,存储型,基于DOM
CSRF通过伪装来自受信任用户的请求来执行脚本,CSRF迫使用户的浏览器将伪造的HTTP请求,包括该用户的会话Cookie和其他认证信息,发送到一个存在漏洞的web应用程序,这些请求会被应用程序认为是用户的合法请求。
XSS的目的是在客户端执行脚本,CSRF的目的是在web应用中执行操作。
命令执行漏洞
命令执行漏洞是PHP Web 应用程序中比较常见的一种漏洞类型,攻击者可以将恶意代码提交给有包含漏洞的Web 应用服务器,从而执行一些系统命令
文件包含漏洞
文件包含漏洞实际上是代码注入的一种,其原理就是,注入一段用户能控制的脚本或代码,并让服务器端执行。
文件上传漏洞
文件上传漏洞是指,用户上传一个可执行的脚本文件,并通过此脚本文件获得执行服务器端命令的能力。
软件生命周期是指从软件的设计、开发、实施、维护等一系列过程的总和。通常的生命周期包括软件需求分析、软件设计、软件编码、软件测试、软件部署、维护、改进和升级等几个阶段。
软件过程是一种针对软件开发、验证、维护以及更新的一系列活动收集和文档化的统一方法。它是一套组织动作,其想要达到的目标是在保持质量的同时提高效率。
软件开发模型是一种把软件项目的开发分解为多个独立的阶段的一种方法,其中对每个阶段都进行精确的定义和分类,然后再把每一个阶段的定义作为一种模式使用。
20世纪90年代以后,因为“软件过程”模型能够更快更有效地完成软件产品,人们更多地使用它来代替传统的“软件开发模型”。 它支持灵活的插入及替换,使开发人员可以避免在开发的任何一个阶段中做出决定,并能实现更高的精度,减少了质量问题的风险。 此外,它还可以更好地利用团队的能力,实现分配任务的整个程序和过程。
瀑布模型、螺旋模型、快速原型模型、增量模型、敏捷模型。
以上这些软件开发模型的主要区别在于他们的迭代次数与时机不同,以及对开发时间的要求不同。而联系是:他们都是软件开发的模型,所以它们都会影响软件开发的过程和时间。
安全设计( Security by Design)。 软件的设计和实现需考虑如何保护其本身(和存储的信息)抵御外部攻击。
安全配置( Security by Default)。软件的缺省配置运行环境应考虑如何降低安全风险。重要的一个假设是软件自身代码总存在安全漏洞。那么,如何减少这些安全漏洞的危害?例如,是否可以运行于普通用户权限,而不需要管理员权限?是否可以缺省关闭某些高风险的代码模块?
安全部署( Security by Deployment)。软件需要提供相应的文档和工具,以帮助最终用户或管理员安全地使用。此外,更新应该易于部署。
沟通(Communication)。 软件开发人员应为产品漏洞的发现准备响应方案,并与系统应用的各类人员不断沟通,以帮助他们采取保护措施(如打补丁或部署变通办法)。
SDL模型由瀑布模型发展而来,在瀑布模型的各个阶段添加了安全活动和业务活动目标。
敏捷软件开发生命周期(Agile Software Development Life Cycle,简称Agile SDL)是一种迭代式的软件开发生命周期,是以研发敏捷软件为主要目标的软件开发模式。它强调开发者和客户的密切沟通和连结,采用快速反馈的方法不断优化开发进度,并且以每次迭代的成果检验原型验证的方法获取客户反馈,从而进行产品进步和优化。
与经典SDL不同,敏捷SDL强调与客户的双向沟通,采用灵活的迭代节点来提供给客户定期反馈,以便更快调整软件研发流程。此外,敏捷SDL更多地侧重敏捷软件开发理念,尤其强调研发者和客户之间的即时交流。
为了开发出真正满足用户需求的软件产品,首先必须知道用户的需求。对软件需求的深入理解是软件开发工作获得成功的前提条件。
功能需求、性能需求、可靠性和可用性需求、出错处理需求、接口需求、约束、逆向需求、将来可能提出的要求。
(1) 软件安全需求分析的目的
软件安全需求分析的目的是描述为了实现信息安全目标,软件系统应该做什么.才能有效地提高软件产品的安全质量,减少进而消减软件安全漏洞。
(2) 软件安全需求分析的重要作用
以往软件在开发时只强调业务功能需求,没有考虑安全需求,导致所开发的应用系统存在大量的漏洞。尽管周边安全技术如防火墙、入侵检测系统、防病毒及平台安全可以用来实现系统安全,但由于安全只是在产品环境下被测试和构建,其效果并不理想。
一个缺少安全需求分析的软件开发项目,将威胁到信息的保密性、完整性和可用性,以及其他一些重要安全属性。这个软件产品被攻破可能就只是一个时间早晚的问题,而不是条件的问题,这取决于攻击者对于这个软件系统价值的判断。
1. 外部安全需求
外部安全需求通常主要指法律、法规等遵从性需求,包括相应国家和地区关于安全技术与管理的法规、标准及要求等。这些安全技术和管理的合规性要求往往是已有安全威胁的经验性对策的总结,因而遵循这些要求不仅是法规制度上的要求,也是软件安全性保障的要求。
2. 内部安全需求
内部安全需求通常包括两个部分,一是组织内部需要遵守的政策、标准、指南和实践模式,二是与软件业务功能相关的安全需求。
主要工作:
识别、确定、追踪和协调软件项目中涉及安全相关的功能性需求。
区别:
1、软件安全需求分析需要更多的安全知识,软件需求分析则不需要;
2、软件安全需求分析的过程中要考虑不同的安全攻击和防御,而软件需求分析可以忽略此类要素;
3、软件安全需求分析的核心是安全需求,而软件需求分析的核心是功能性需求。
联系:
1、软件安全需求分析是软件需求分析的一个衍生;
2、软件安全需求分析应以功能性需求分析为基础,以更严格的标准审视安全功能性方面的问题;
3、软件安全需求分析可以帮助从安全角度考虑性地确定系统需求,为软件系统更好地提供保护。
在软件安全性需求分析中,软件用户由于安全知识的缺乏,很难从专业角度提出安全需求。因此,软件安全需求更多地来自于对组织内部和外部的一些安全政策和标准的遵从。
《可信计算机系统评估标准》(TCSEC)大型计算机系统机密文档处理方面的安全要求
《信息技术安全性评估标准》(ITSEC)在TCSEC基础上提出了信息安全的保密性、完整性和可用性的概念。
《信息技术安全评估通用标准》(CCITSE)
《信息技术安全技术信息技术安全性评估准则》
《信息技术安全技术信息技术安全性评估方法》
安全需求分析人员要负责软件安全需求的收集和分析,并帮助软件开发团队将安全需求转化为功能说明。
运维小组和信息安全小组等安全技术支持也是软件安全需求获取相关方,安全需求分析人员、任务负责人、最终用户及客户应当积极与之保持联系和沟通,需求他们的支持与帮助。
一些最常见的安全需求获取方法包括
头脑风暴:是指无限制的自由联想和讨论,其目的在于产生新观念或激发创新设想。头脑风暴应当只是在应用程序需要快速实现的情况下使用,因为它有两个明显的缺点。在需要初步确定安全需求的情况下是可以接受的,但必须有更多系统化、结构化的方法来全面地决定安全需求。
问卷调查和访谈:可以直接用于生成安全需求,有效性取决于如何向被调查对象提出合适的问题。在整个调查过程中,调查人和被调查人之间的协作和沟通是很重要的
策略分解:将组织需要遵守的内部和外部政策,包括外部法律法规、隐私和遵从性命令分解成为详细的安全需求。
数据分类:根据数据的重要性来进行分类,实际上也就是根据数据的敏感级,同时根据对数据泄露、变更或破坏的影响,有意识地为数据资产分配标签,以此来确定保护数据资产的不同安全保护需求和控制方法。
主/客体关系矩阵:主/客体关系矩阵是角色和组件的二维表示,主体(角色)作为列,客体(对象/组件)作为行。当主/客体关系矩阵产生后,与主/客体关系矩阵所允许的对应动作相违背的事件就可以判定为威胁,在此基础之上可以确定安全需求。
使用用例和滥用案例建模:从使用用例出发,可以开发滥用案例。滥用案例可以通过对负面场景进行建模来帮助确定安全需求。
软件安全需求跟踪矩阵:通过数据分类、使用用例和滥用案例建模、主/客体关系矩阵以及其他需求获取过程,可以将软件安全需求编制成一个需求列表或需求跟踪矩阵
策略分解是指将组织需要遵守的内部和外部政策,包括外部法律法规、隐私和遵从性命令分解成详细的安全需求。
根据数据生命周期管理对数据的分阶段划分来决定响应的安全需求;也可以根据数据的重要性对保护级别的划分来决定相应的安全需求。
定义数据结构、算法确定、架构设计、接口设计、模块分解,编写数据库设计文档、构件编写、实现原型设计、测试设计等。
1. 分析安全需求:从客户和市场的角度确定对系统的安全性要求,并根据安全性需求,分析系统的功能和性能等属性;
2.系统功能设计:确定(或者编辑)系统的安全逻辑功能,并根据系统安全性需求确定安全策略;
3.安全架构设计:对系统架构(包括硬件架构和软件架构)进行设计;
4.安全功能实现:编写实现安全功能的代码;
5.系统测试:对系统进行安全性测试,包括安全功能测试和安全弱点检测;
6.安全文档编写:编写安全文档,包括安全规约,安全方案,分析报告等。
因为软件架构设计可以为软件开发和使用提供强制一致的方法,以保证软件性能、可靠性和稳定性,以及因此简化开发、使用和维护的成本和提高质量。(提高性能、简化开发、降低成本)
软件架构设计主要是通过使用特定的策略、方法、技术建立一个软件解决方案,这个解决方案面向未来,可以考网络结构和用户等范畴,并满足能力、可靠性和可维护性等要求,实现灵活性和可扩展性。虑智能产品开发、面向服务、面向
软件架构安全性设计的主要工作是通过构建可实施的安全策略,拓展潜在的安全风险,并识别可能的安全问题,预防潜在的安全威胁,以确保软件系统的安全性和保密性。
软件架构安全性分析是必要的,可以帮助软件系统和架构抵抗潜在的攻击,增强其安全性。
基本过程包括:1)识别可能的攻击面;2)分析软件架构以检测潜在的弱点;3)发展出策略以防御可能的攻击;4)实施安全测试;5)监测系统以检测攻击;6)定期评估安全防护机制的有效性;7)调整软件架构以适应新的任务和攻击面。
软件受攻击面是指用户或其他程序及潜在攻击者能访问到的所有功能和代码的总合。
指的是攻击者有可能攻击软件时受到影响的潜在可以被攻击的部分。举例来说,攻击者可能会尝试绕过登录验证或在客户机传输数据时篡改数据,这些就是软件受攻击面所指的内容。
可以采取以下策略:
1.分离数据和代码:将数据和代码分离,减少攻击者对数据的篡改可能性。
2.监督权限:在软件的权限管理上应实施严格的监督,以防攻击者试图绕过登录验证。
3.事务一致性:实施事务一致性检查,以防止攻击者在客户机传输数据时篡改数据。
4.加密传输:在客户机间传输数据时,加密处理,防止攻击者通过篡改数据造成安全问题。
5.弱点扫描:定期对软件提供弱点扫描,以及及时修补系统漏洞,减少攻击者攻击软件时的可能性。
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
(1)风险确定阶段
—识别和评估风险
(2)系统安全架构阶段
1)浏览模式库
2)选择相应安全模式
3)评估安全模式
4)建立系统高层架构
(3)系统设计细化阶段
—构建类图,实例化安全模式,整合和重构
软件威胁建模是指,通过抽象的概念模型对影响软件系统的威胁进行系统的识别和评价。
an
选择安全的编程语言、版本(配置)管理、代码检测、安全编译
提供类型安全保障机制的语言是类型安全语言,它们能确保操作仅能作用于适当的类型,本质上是对未被授权的内存区域的访问进行禁止。C# Java
采用最新的集成编译环境、编译在安全环境中进行、对应用环境的真实模拟、应用多样化编译技术
C语言中原有的字符串函数由于安全性的问题,有可能破坏接受字符串的缓冲区,导致程序出错或者数据丢失。安全字符串函数就是为了解决这个漏洞而设计的,它们会检查字符串的长度,通过将空格截断字符串,或扩充缓冲区的大小来保护数据的完整性。
本地环境中的代码能够访问系统中的关键资源,而从远程下载的程序则只能访问“沙箱“内的有限资源。
语言层安全(关键字、类型规则)字节码层安全(类加载器,字节码验证器)应用层安全(安全管理器)
进程是操作系统对一个正在运行的程序的一种抽象。它是一个动态的实体,它有生命周期。它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤销。反映了一个程序在一定的数据集上运行的全部动态过程。
线程是系统分配处理器时间资源的基本单元,或者说是进程内独立执行的一个单元执行流。
一个进程至少有一个线程,一个线程只能在一个进程的地址空间内活动。进程为线程提供了生存空间和线程所需要的其他资源
动态链接库DLL是共享函数库的可执行文件,它不能独立运行,只能通过其他运行的程序加载到内存中执行。同一个动态链接库可以同时被多个进程加载到内存中,并且执行DLL中的功能。
服务是windows系统在后台完成系统任务的程序,它与系统的核心相关并拥有各种权限。
注册表是windows中使用的中央分层数据库,用于存储一个或多个用户、应用程序和硬件设备配置系统所必须的信息。
|
病毒 |
蠕虫 |
木马 |
后门 |
Rootkit |
勒索软件 |
危害 |
破坏系统的机密性完整性和可用性 |
造成网络拥塞;降低系统性能;产生安全隐患;反复性;破坏性 |
非法用户进入系统、控制系统甚至破坏系统 |
仅仅是一个访问系统或控制系统的通道,其本身并不具有其他恶意代码的直接攻击行为 |
使攻击者获得访问权限并隐藏在计算机中 |
劫持用户资产或资源并以此为条件向用户勒索钱财 |
传播 |
移动存储设备/网络传播 |
自我复制传播,通过局域网/因特网 |
自我传播,诱骗用户上当 |
|
|
垃圾邮件、漏洞、捆绑、社交网络、可移动存储介质等 |
激活 |
满足特定条件 |
自动化、智能化,利用系统漏洞 |
用户操作 |
开发者调试/攻击者设置 |
|
|
隐藏 |
寄生在别的有用的程序或文档上 |
实体隐藏模块 |
难以确定具体位置 |
|
修改操作系统软件 |
|
具体例子 |
区块链病毒 |
熊猫烧香 |
灰鸽子 |
硅晶后门病毒:A2 |
Stuxnet震网病毒 |
ILOVEYOU爱虫病毒 |
病毒需要人为干预,蠕虫不需要;
传统计算机病毒主要感染计算机的文件系统,而蠕虫影响的主要是计算机系统和网络性能
加强法制宣传,促进行业内人员明确恶意代码相关的法律责任,自觉履行恶意代码防治责任。
健全管理制度,严格执行恶意代码防治规定,对恶意代码违法行为进行法律制裁。
开展面向恶意代码检测的软件可信验证。从软件特征可信、软件身份可信、软件能力可信、软件环境可信四个方面开展验证。
《计算机软件保护条例》《中华人民共和国专利法》《商业秘密所有权保护法》
《中华人民共和国商标法》《互联网著作权行政保护办法》《信息网络传播权保护条例》
《移动互联网应用程序信息服务管理规定》
软件著作权人拥有的权利:
(一)发表权,即决定作品是否公之于众的权利;
(二)署名权,即表明作者身份,在作品上署名的权利;
(三)修改权,即修改或者授权他人修改作品的权利;
(四)保护作品完整权,即保护作品不受歪曲、篡改的权利;
(五)复制权,即以印刷、复印、拓印、录音、录像、翻录、翻拍、数字化等方式将作品制作一份或者多份的权利。
侵权行为:
著作权人发现互联网传播的内容侵犯其著作权,可以向互联网信息服务提供者发出通知;
著作权人享有以有线或无线方式向公众提供作品,使公众可以在其个人选定的时间和地点获得该作品的权利
概念:软件版权是软件知识产权的一部分,指软件著作权
针对软件版权的侵权行为:软件盗版;逆向工程;信息泄露
保护措施:
基于硬件:对发行介质进行保护;软件狗;可信平台模块TPM(受信任的计算芯片,win11需要TPM2.0才能安装)
基于软件:注册验证;软件水印;代码混淆;软件加壳;虚拟机保护
区别:
软件版权保护的目标是软件保护目标的一个子集。软件保护除了确保软件版权不受侵害以外,还要防范针对软件的恶意代码感染、渗透、篡改和执行等侵害。
软件版权保护的许多措施同样可以应用于软件保护。