导图社区 CISSP-AIO-软件安全开发
CISSP已过学员笔记,想通过考试必须记住这些,但不必太深入。 对开发安全感兴趣的朋友可以拿来熟悉概念。也可深入了解,不过需要开发方面的书籍,记住这里只是知识框架。
编辑于2021-05-25 20:52:07软件安全开发
构建良好代码
概念
如何处置软件安全问题
过去在软件开发阶段安全并非是必须的,因此今天许多程序员缺乏执行这些安全程序的时间经验.
许多安全专家并非软件开发人员,缺乏对软件漏洞的全面了解.
许多软件开发者不是安全专家,也并未将安全视为软件开发的重点;他们通常认为功能性的优先级高于安全性.
软件供应商以最快占领市场为首要目标,因此可能疏于在适当的软件安全架构设计及测试步骤上花时间.
计算机社区已习惯先收到带有瑕疵的软件产品再打补丁。同时成为一项约定俗成的流程。
消费者在购买软件产品时物理控制软件中的瑕疵,所以必须依赖外部软件加固这样的安全措施。
处理安全的一般趋势
1、为在竞争中占据上风,包含缺陷的软件流向市场。
2、黑客发现新软件中的新漏洞和弱点。
3、在网站上公布这些漏洞和利用他们的方法。
4、供应商开发并发布补丁以修复漏洞。
5、所有网络管理员需要测试并安装所有新发布的补丁。
不同环境需要不同安全。
环境与应用程序。
功能与安全性。
实施与默认配置问题。
当今许多操作系统软件自带了一系列默认的安全设置,但用户可以手动覆盖大部分配置。这离“默认禁止访问”的理念更进一步,但仍有相当长的路要走。
软件开发生命周期
软件开发模型
每个模型的各阶段工作
需求收集阶段:
决定了为什么要开发该款软件,该软件做什么,该软件为谁开发。
安全阶段
安全风险评估
隐私风险评估
风险承受度
P1,最高隐私风险
P2,中级隐私风险
P3,低级隐私风险
设计阶段:
处理如何实现已识别的目标,将其进一步封装到功能性设计中。
信息模型:阐述待处理信息的种类和处理方法
功能模型:列出应用待实现的任务和功能
行为模型:阐释软件产品在发生特定转变过程中和之后的状态
安全角度
攻击面分析
安全建模
开发阶段:
编写软件代码实现在设计阶段中列出的需求,并把代码和先哟系统.或库集成
程序开发人员深度参与的阶段
TOP25
TOP10
静态分析
是一种有助于发现软件缺点Defect或安全策略违规的技术。该技术在不执行程序的情况下,在编程编译前通过检查代码进行。静态分析通常用于自动化工具来帮助分析人员,而人工检查通常称为代码审查。
测试阶段:
确认和验证软件,保证软件能按计划运行并满足既定目标
测试类型
单元测试Unit Testing
单元测试通常在一个受控环境中测试单独的组件,且在这个环境中软件开发人员通常会验证数据结构,逻辑和边界条件
集成测试Integration Testing
集成测试验证所有组件能按设计文档描述共同工作
验收测试Acceptance Testing
验收测试保证软件代码符合客户的需求
回归测试Regression Testing
若对系统进行改动,回归测试对软件进行再测试以保证其功能性,性能和保护机制。
模糊测试
通过向 目标程序发送大量格式错误,预料之外的或随机的数据触发程序错误从而发现软件缺陷和漏洞的方法。模糊测试工具通常可以成功识别缓冲区溢出,拒绝服务,注入缺陷,确认缺陷和其他一些可引起软件假死,崩溃和抛出异常的漏洞。
手动测试
手动测试可模拟现实时间发生的真实场景。包括社交工程攻击,分析一些可能导致系统被攻陷的任性弱点。
动态分析
Dynamic Analysis通常只在程序运行时实时评估。动态分析同时对兼容性测试、内容溢出检测、依赖性检测及不接触代码情形下分析软件等情况非常有效。
后门程序/维护钩子
有时开发人员会在软件产品中插入一些代码,允许开发人员通过一些快捷模式进入应用中。这些操作能使软件开发人员越过已部署的安全和访问控制机制快速访问软件应用的核心组件。通常被称为后门程序Back Door,维护钩子Maintenance Hook.这些代码必须在软件应用上线之前删除。
运营维护阶段:
部署软件且保证其已被妥善配置、应用补丁和监测
运维阶段Operation and Maintenance,O&M
需要运维团队和开发团队紧密合作
验证和确认
确认Verification
Verification,过程用来决定软件产品是否准备表达并符合需求规范。毕竟,一个开发出来的软件产品有肯呢个不符合最初的需求规范,所以这个步骤保证适当满足需求规范。“确认”回答的是这个软件产品是否正确开发这个问题。
验证Validantion
验证过程决定软件是否为真实世界待解决的问题提供了必要的解决办法。在大型项目中很容易失去大局观。这个过程保证达成项目核心目标。验证同时回答了这个产品是否正确的问题。
软件开发生命周期和安全
需求收集阶段
安全风险评估
隐私风险评估
风险级别容忍度
信息的、功能的和行为的需求
设计阶段
攻击全面分析
威胁建模
开发阶段
自动化计算辅助软件工程工具
静态分析
测试阶段
动态分析
模糊测试
手动测试
单元测试,集成测试,验收测试,回归测试
运营维护阶段
最终安全评测
软件开发方法论
开发方法
瀑布模式Waterfall Methodology
采用一种线性生命周期方法,每个阶段完整执行后才开始下个阶段。在每个阶段结束后,评估判断项目是否在正确的轨道上行及是否继续。
可行性
分析
设计
实施
测试
维护
V型模式V-shaped Methodology
软件开发过程,扁平化方法。强调在软件产品开发的各阶段都进行验证和确认,并提供了一种随着每个编码阶段的执行开发测试计划的正式方法。
需求
系统测试计划
系统测试
概要设计
集成测试计划
集成测试
底层设计
单元测试计划
单元测试
实施
原型模型Prototype
快速原型设计Rapid Prototype
特点:让开发团队快速设计原型,进而验证当前对项目需求理解的正确性。
进化式原型设计Evolutionary Prototype
和在快速原型设计中使用之后就抛弃的形式不同,在进化式原型模式中,原型将一直改善直至产品最终阶段。在每个开发阶段获得的反馈将用于改善原型并逐步贴近用户需求。
运营式原型设计Operational Prototype
是进化式原型设计方法的延伸。这两种原型设计方法都能随着数据增多而改善原型的质量,但运营式原型设计常用于生产环境中的逐步微调。运营式原型设计随着用户反馈而更新,且对软件的修改也发生在工作站中。
增量模式Incremental Methodology
软件开发团队使用增量模式(Incremental Methodology)在软件开发阶段执行多个开发周期。
螺旋模式Spiral Methodology
在软件开发中使用迭代方法,将重点放在风险分析上。
目标设定
风险分析阶段
开发和测试阶段
计划瑕疵迭代阶段
快速应用程序开发Rarpid Application Development,RAD
更依赖于快速原型设计而不是完备的事先计划。在这种模式中,如何提升软件质量和软件的开发过程交织在一起,可快速开发软件。与瀑布模式相比,采用该方法软件交付时间减少一半。
敏捷模式Agile Methodology
是许多开发模型的总括,不关注那些按部就班的、线性的和分步的流程,而将重点放在彰显跨部门团队协作和持续反馈等机制的增量和交互开发方法上。
Scrum
极限编程
看板
其他模式
探索模式Exploratory Methodology
联合应用开发模式Joint Application Development,JAD
重用模式Reuse Methodology
净室Clean Room
开发模式回顾
瀑布模式
一种严格按顺序的方法,要求前一阶段结束之后第二阶段才能开始。这种方法是一种非常难以集成变更,缺乏灵活性的方法。
V型模式
这种方法强调项目每个阶段的确认和验证,测试贯彻整个项目过程而非仅在系统的最后阶段
原型模式
出于概念验证目的创建一个代码示例或模型
增量模式
在软件开发的各阶段进行多种开发周期。每种开发周期都提供该软件的一个可用版本。
螺旋模式
这是一种在每次迭代中注重风险分析的方法。这种方法通过灵活演进的方式集成用户反馈。
快速应用程序开发
这种方法结合了原型开发和迭代发过程,目的在于加速软件开发过程
敏捷模式
这是一种鼓励团队协作的迭代和增量开发过程。这种方法提供灵活性和适应性而非严格的流程结构。
集成产品团队Integrated Product Team,IPT
DevOps
处于软件开发,IT和质量保证团队之间
能力成熟度集成模型Capability Maturity Model Integration,CMMI
五个成熟度级别
初始
可重复性
定义
管理
优化
其它成熟度模型
DevOps(DevOps Maturity Model)成熟度模型
另一种(至少是在软件开发相关方面)企业成熟度考虑开发和运营团队集成的有效性。这个模拟的亮点在于除了考虑开发和业务问题外,也着重关注企业的文化和人员。
开发成熟度模型(Open Soure Maturity Model,OSMM)
对于青睐开源软件的组织来说,开源成熟度模型使得企业能量度和改善流程的有效性。这里的重点不只是开发或使用开源软件,而是在于组织发展、使用和积极融入社区。
软件产品管理成熟度模型(Software Product Management Maturity Model)
这个模型重点关注软件产品开发的相关业务问题。例如,软件产品管理成熟度模型考虑了市场情况、产品线和产品组合以及合作协议等问题。
安全管理
变更管理
变更控制步骤
提出正式的变更请求
分析变更请求
制定实施策略
计算实施成本
检查安全影响
记录变更请求
提请批准变更请求
开发变更
将产品的不同模块重新编码组合,增加或删除功能特性
将代码变更与正式的变更控制请求关联
将软件提交测试和质量控制
重复以上过程直至质量合格
进行版本变更
向管理层汇报变更结果
开发环境的安全性
开发平台的安全性
代码库的安全性
软件配置管理
软件托管
安全编码
源代码漏洞
开放网络应用程序安全项目(Open Web Application Security Project,OWASP)
专门处理网络安全问题的机构。
2017十大威胁
A1:注入
A2:失效的身份验证
A3:敏感数据泄露
A4:XML外部实体引用XEE
A5:破坏访问控制
A6:安全性配置错误
A7:跨站脚本XSS
A8:不安全的反序列化
A9:使用含有已知漏洞的控件
A10:不完善的日志记录和持续监测
安全编码实践
卡内基梅隆大学的软件工程学院Software Engineering Institute,SEI
输入验证
关注编译器警告
根据安全策略进行架构和设计
保持简单
默认拒绝
遵循最小特权原则
对发送至其他系统的数据进行清理
纵深防御实践
使用有效的质量保证技术
采用安全编码标准
编程语言与概念
编程
汇编器,编译器和解释器
面向对象的概念
OOP优点
模块化
延迟实现
重用性
自然
开发对象包括
对象名
属性描述
属性名
属性内容
属性数据类型
来自对象外部的输入
从对象向外部的输出
操作描述
操作名
操作接口描述
操作处理描述
性能问题
限制和局限
实例连接
消息连接
多态Ploymorphism
其他软件开发概念
数据建模
数据结构
内聚和耦合
应用程序接口
分布式计算
分布式计算环境
CORBA和ORB
公共对象请求代理架构Common Object Request Broker Architecture,CORBA
COM和DCOM
组件对象模型Component Object Model,COM 分布式组件对象模型Distributed Component Object Model,DCOM
对象连接与嵌入Object Linking and Embedding,OLE
统一资源定位符Uniform Resource Locator,URL
Java平台企业版
面对服务的架构
面向服务的架构Service-Oriented Architecture
移动代码
java applet
程序员开发一个java applet并通过编译器运行
java 编译器把源代码转换成字节码(不指定处理器)
用户下载java applet
JVM把字节码转换成机器级别的代码(指定处理器)
applet在调用时运行
ActiveX控件
Web安全
Web环境的具体威胁
管理接口
身份验证和访问控制
输入验证
路径或目录遍历
Unicode编码
URL编码
漏洞
非持久化XSS漏洞
持久化XSS漏洞
文档对象模型Document Object Model,DOM
参数验证
预验证
后验证
会话管理
数据库管理与恶意软件
数据库管理
数据库管理系统Database Management System,DBMS
确保整个网络中几个不同服务器上保存的数据一致
备份过程更简洁
提交交易事务的持久性Transaction Persistence
提供恢复和容错功能
允许多个用户共享数据
提供多种安全控制措施,实现完整性检查、访问控制和必要的保密级别
数据库模型
关系型数据库
层次型数据库
网络型数据库
面向对象型数据库
对象关系型数据库
数据库术语
记录:相关数据项的集合
文件:相同类型的记录的集合
数据库:相互引用的数据集合
DBMS:管理和控制数据库
属性:二维数据库中的一个列
主键:使每行唯一的列(表的每一行都必须包括主键)
视图:由数据库管理员定义的虚拟关系,以防主体查看某些数据
外键:与另一个表的主键相关的一个属性
单元格:行和列的交集
模式:定义数据库的结构
数据字典:数据元素及其关系的中行存储库
数据库编程接口
开放数据库互联标准Open Database Connectivity ,ODBC
对象链接和嵌入数据库Object Linking and Embedding Database,OLEDB
ODBC代替品,扩展了ODBC的特性集,支持更广泛的非关系型数据库,比如不一定定需要实施SQL的对象数据库和电子表格
一组基于COM的接口,为应用程序提供了对存储在不同数据源中数据的统一访问
由于OLE DB是基于COM的,因此仅限在微软客户端工具产品上使用
开发人员通过ActiveX数据对(ActiveX Data Object,ADO)访问OLE DB服务。
允许不同的应用程序访问不同类型和来源的数据
Activex数据对象(ActiveX Data Object,ADO)
java数据库连接(java Database Connectivity,JDBC)
是一个专门为java数据库应用程序设计,提供与ODBC相同功能的API
在java平台和广泛的数据库之间提供独立于数据库的连接
是使java程序能执行SQL语句的java API
关系型数据库组件
DDL
定义数据库的结构和模式,这个结构可能意味着表大小,键位置,视图和数据元素关系,数据模式描述了将要保存和操作的数据类型及其属性。DDL定义了数据库的结构、访问操作和完整性过程。
DML
包含使用户能够查看、操作和使用数据库的所有命令(查看、添加、修改、排序和删除命令)
QL
允许用户对数据库发出请求。
报告生产器
以用户定义的方式生产数据的输出
组成
数据字典
主键与外键Primary Key
完整性
语义完整性(Semantic Integrity)机制确保结构和语义规则得到强制执行。这些规则适用于可能对数据库结构产生不利影响的数据类型,逻辑值,唯一性约束和操作
如果所有外键都引用现在的主键,则数据库具有参照完整性Referential Integrity。应该有一种机制确保没有外键引用空值或不存在的记录的主键。
实体完整性(Entity Integrity)保证元祖由主键值唯一表示。
数据库安全问题
攻击方式
聚合
将来自不同来源的信息组合在一起的行为。数据的组合形成新的,主体原本无权获知的信息。组合信息的敏感度大于单个部分的敏感度
聚合攻击
推理攻击
是获得不明确可用信息的能力
方法
数据库视图Database View
数据库运行一个组或特定用户查看某些信息,同事限制另一个组完全查看这些信息。
自主访问控制Discretionary Access Control,DAC
强制访问控制Mandatory Access Control,MAC
多实例化Polyinstantiation
启用一个表,该表包含具有相同主键的多个元组,每个实例通过安全级别区分。将信息插入数据库中时,必须对较低级别的主体进行限制。
联机事务处理Online Transaction Processing,OLTP
OLTP提供了监测问题并在问题确实发生时执行适当处理的机制。
OLTP主要目标是确保实物要么正确执行,要么全部不执行。实物处理通常意味着独立执行一个不可分割的操作整体(其中包含多个子操作)。如果其中任何一个子操作失败,则需要回滚所有已执行的子操作,以确保只有准确的数据输入数据库中。
原子性Atomictity
将交易分为工作单元,并确保所有修改生效或不生效。要么提交更改,要么回滚数据库。
一致性Consistency
交易必须遵循为该特定数据库制定的完整性政策,并确保不同数据库中所有数据的一致性。
隔离Isolation
事务在完成之前独立执行,不与其他事务交互。在事务完成前,修改的结果不可用。
持久性Durability
一旦事务在所有系统是哪个被验证准确无误就被提交,数据库不能回滚。
数据仓库与数据挖掘
管理层:做出决策
数据分析员:
数据呈现:可视化技术
数据挖掘:发现知识Knowledge Discovery in Database,KDD
分组Classification:根据共有的相似性将数据分组
概率Probabilistic:识别数据的相互依赖并用概率分析其关系
统计Statistical:识别数据元素之间的关系并使用规则发现
数据利用:统计分析,数据分析,报告
子主题
编程人员,数据库管理员
数据仓库,数据集市
数据源:文件,记录,数据库,信息提供商等
基于能力的各类系统
基于数据的系统
基于规则的系统
基于知识的系统
考试提示:“大数据”存储在“数据仓库”等专用系统中,并使用“数据挖掘”等方法进行开发,这三个术语相关但又不同
恶意软件
通过恶意软件赚钱的方法
僵尸网络攻陷目标系统后用于分布式拒绝服务DDOS攻击,发送垃圾邮件或用做僵尸网络命令与控制体系的一部分。
勒索软件用密钥加密部分或全部用户文件,只有用户文件,只有用户支付赎金才给用户提供密钥。通常要求用户使用加密货币支付赎金。
间谍软件通过恶意软件开发者收集个人数据并转卖给他人
恶意软件将网络流量重定向到其它链接,引导用户购买特定产品
恶意软件安装击键记录器,收集敏感的财务信息供恶意软件开发者使用。
用户恶意软件进行钓鱼攻击,欺诈活动,身份盗窃和信息战活动
恶意软件越来越多越来越有效
许多环境具有同质性,这意味着一个恶意软件可以在许多(大多数)设备上工作
一切设备(手机,电视机,游戏机,电网,医疗设备等)都正在被电脑化,因此都能被攻陷
越来越多的个人和企业以某种数字格式存储数据
越来越多的人和设备通过不同的接口连接(手机应用程序、Facebook、网络、电子邮件、短信、电子商务等)
许多帐户配置太多特权(管理或根访问)
越来越多对技术缺乏了解得用户正将科技用于敏感目的(网上银行,电子商务等)
数字世界提供了许多方法进行犯罪活动,而被抓的风险缺较低。
病毒Viruses
是一个可感染软件的小型应用程序或字符串代码。 主要功能:复制和传播有效载荷。
宏病毒:使用Visual Basic或VBScript编写的程序,通常用于微软OFFICE产品。
引导扇区病毒Boot Sector Virus
隐形病毒Stealth Virus
多态病毒Polymorphic Virus:能产生版本不同但功能相同的副本,为了欺骗病毒扫描器。
多部病毒Multipart Virus:由几个组件组成,这些组件可分布在系统的不通部分。通过使用多种感染没接可更快传播病毒。
Meme病毒:并不是实际的计算机病毒,它在Internet上不断转发电子邮件。
隧道病毒Tunneling Virus:通过回复错误的系统指令,或伪造系统健康状态来达到隐藏自己的踪迹和活动。
恶意软件组件
插入:在受害者的系统上安装病毒副本
避免:使用各种方法逃避检测,隐匿踪迹。
根除:攻击载荷执行后,删除病毒副本。
复制:复制副本并传播给其他受害者。
触发:通过事件初始化攻击载荷的执行。
载荷:执行相关攻击功能(即删除文件、安装后门或利用脆弱性等)
病毒之外
蠕虫Worms:是独立程序,即便没有宿主应用程序也可以复制。例:震网病毒(Stuxnet)
Rootkit工具包
功能
捕获凭据
嗅探
攻击其它系统
隐匿攻击者踪迹
工具
木马程序Trojaned Program
ipconfig程序
日志清理器Log Scrubber
间谍软件和广告软件
间谍软件Spyware
广告软件Adware
僵尸网络Botnet
僵尸牧人Bot Herder
1、僵尸牧人以僵尸软件为攻击载荷发送恶意代码
2、一旦恶意代码安装完毕,僵尸登录内置的IRC或Web服务器。然后,服务器充当僵尸网络的控制服务器。
3、垃圾信息发送者向僵尸牧人支付使用系统的费用,向控制服务器发送指定,促使所有受感染的系统向邮件服务器发送垃圾信息。
逻辑炸弹Logic Bomb:在满足特定条件时执行一个程序或字符串代码
特洛伊木马Trojan Horse:伪装成另一个程序的程序。
防护
反恶意软件Anti-malware Software
使用签名检测恶意代码
基于特征码的检测方法Signature-Based Detection,指纹检测Fingerprint Detection
反恶意软件密切关注的行为类型
向启动文件或注册表汇总的run键写入信息
打开、删除或修改文件
用脚本通过邮件发送可执行代码
连接到网络共享或资源
修改可执行的逻辑
创建或修改宏和脚本
格式化硬盘或写入引导区
垃圾邮件检测
贝叶斯过滤Bayesian Filtering
对每个单词进行频率分析,然后对邮件进行整体评估,确定邮件是不是垃圾游邮件
反恶意软件程序
每台工作站,服务器和移动设备都应该安装反恶意软件。
每台设备应该以自动化方式更新恶意软件签名(特征码)
用户无法禁用反恶意软件
应该开发预先规划好的清楚恶意软件的过程,并任命恶意软件感染时的联系人。
所有外部磁盘或USB驱动器等都应该进行自动扫描
扫描备份文件
每年审查反恶意软件策略和程序
反恶意软件应提供恶意软件开机保护
在每台设备和网关进行反恶意软件扫描
自动化定期扫描病毒。不要依赖手动扫描
关键系统应该进行物理保护,避免在恩地安装恶意软件
评估获取软件的安全性
软件开发周期
软件开发
重要性
功能优先
安全优先
存在的问题
需要注意的问题
不同的环境需要不同安全
环境与应用
功能的安全
实施和默认的问题
软件越来越复杂对安全形成挑战
软件开发生命周期
SDLC系统开发生命周期,简化软件从功能需求到实施的软件开发各个阶段
想法、目标、愿景
解决业务要求和相应的解决方案
安全活动贯穿并行整个项目
SDLC三个阶段
项目初始化和计划
功能需求定义
系统技术规格说明
开发和实施
文档和通用项目控制
测试和控制评估
生产上线
System life cycle,SLC系统生命周期多两个阶段
运行和维护支持
修订和系统更换
阶段
启动(Initiation)阶段
需求评估
初步风险评估(Preliminary risk assessment)
需要什么,为什么需要
风险类型(Risk Types)
软件本身的风险
软件以后面临的风险
项目管理和需求收集阶段
项目管理
项目活动管理,保证项目目标实现
SOW定义项目任务
范围蔓延(Scope Creeps):
WBS(Work breakdown Structure)
需求收集阶段
需求分析
要实现的功能
安全需求
定义完整性,可用性,保密性。需要达到的安全级别
需求方的要求
风险评估
隐私风险评估
风险可接受水平
设计阶段
安全需求来自于三模型
信息模型
功能模型
行为模型
安全角度分析
攻击面分析(Attack surface analysis):减少攻击界面,识别和减小被不可信用户的代码量和功能。
威胁建模(Threat modeling):通过系统化方法来表明不同的威胁如何被实现以及如何成功发生攻击
开发阶段
计算机辅助软件开发工具(computer-aided software engineering,CASE)
参考
OWASP
DHS
MITRE
2011 CWE/SANS TOP25 MOST DANGEROUS Softeare Error
TOP10
静态分析:分析代码,发现错误
测试/验证阶段
单元测试,一致在进行
自责人分离
开发,测试、运维职责分离
常规测试
单元测试,集成测试,可接受性测试,回归测试
安全测试
模糊测试,脆弱性扫描,手工渗透测试,动态分析
测试评估指南
数据验证
边界检查
脱敏测试
变更控制
验收阶段
认证certification
认可Accreditation
确认符合认证标准交任何
迁移和修正/实施
迁移到生存
修正和系统替代
运维/和废弃
软件开发模型
模型
瀑布模型
Waterfall Model
瀑布模型使用的线性序列,生命周期的方式进行开发
每个阶段必须完成之后下个阶段才能开始
每个阶段结束后会对前各个阶段进行回顾
所有的需求必须在早期收集完毕
优点
适用于完全知道需求的小型项目
缺点
依赖于早期需求调查,不适应变化
很难适应复杂的项目
开发中的经验教训不能反馈应用于本产品的过程
V型模型
V-model
优点
整个开发过程都有测试直到项目结束
相比瀑布模型有很高的成功概率
缺点
仍然缺乏灵活性
原型法(Prototyping)
Protoyping
开发团队使用原型法可以识别使用和设计问题并且必要时做出相应的调整
主要有三种原型法。
快速原型法:
快速原型方法
开发不是基于快速原型,而是在原型满足其目的的之后迅速丢弃
进化型原型法:
不会想快速原型一样开发完之后丢弃,原型会持续改进指导达到产品最后阶段
每个开发阶段都会收集反馈意见并不断改进以不断满足用户的需求
操作原型法:
两种模型都是通过手机数据改进原型的质量,但是操作原型被设计为在生存环境中进行调整
增量模型
迭代的
优点
时间短,解决接续功能
用户适应性强
系统由构件集成,变更灵活。
缺点
开放式的提携结构
模型会进行修改,软件控制失去整体性
增量包存在相交情况,需要全盘分析
螺旋模型
一种迭代的软件开发方法,着重于风险分析
四个阶段
制定计划
快速应用开发
快速应用开发方法使用的是快速原型法而不是大量前期规划
RAD的优势
开发效率高,与用户交流直观
能调动用户参与的积极性
能及早暴露系统实施后潜在一些问题
RAD存在的问题
决定过快
不适合大型系统和批处理系统的开发
不适合大量运算及逻辑性强的模块
对源系统基础管理工作要求较高,否则任意走上机械模拟原手工系统的轨道
敏捷模型(Agile Model)
以人为核心,迭代,循序渐进的开发方法
几个开发方法的总称,关注可对同块职能团队以及持续反馈几进制的增量和迭代开发方法
和其他传统模型属于轻量级,足够应付每个项目需求
敏捷模型的优势
关注人员交流而不是流程和工具
侧重于开发正确的软件而不是复杂繁琐的文档
鼓励客户参与和协作不是合同协商
鼓励应对变化的能力而不是严格遵守计划
敏捷模型不使用原型标识完整的产品,而是将产品分解为不同的特征。
其他模型
探索型模型
联合分析开发(JAD)
复用模型
净室模型
它是一种方法,试图通过结构化和形式化方法的开发和测试,以防止错误或失误。这种方法通过严格认证过程的高质量和关键应用程序。 形式化方法=使用数学模型(formal) 美国软件设计报告:学CS的博士可以使用
DevOps
DevOps起源与亚马逊和google这样的大型互联网公司,这些公司需要员工紧密谢祖,同时又不希望出现部门割据
目标流程的自动化
提供你在客户影响力,处理网站宕机等情况,发现问题的速度变快,成本更低
团队特点是让你为客户提供更多功能,而且不把网站搞垮
原则
对类似成产系统进行开发和测试
可以重复,可靠流程进行部署
监控和验证运营质量
扩大反馈回路
CMMI软件成熟度模型集成
初始化阶段
已管理级
已定义级
已量化管理级
优化级
变更管理
软件配置管理
产品提供软件配置管理可以及时的识别在不同点上软件的属性,并在整个软件生命周期过程中以维护软件的完整性和可追溯性为目的而实施的程序化的变更控制
并发管理
控制
状态记录
审计
配置管理过程
识别(Identification)
控制(Control)
状态记录(Status Accounting)
审计
编程语言与分布式计算
概念
发展历史
机器语言
汇编语言
高级语言
过程语言
Generation four,very high-level language
非过程语言
generation five:natural language:
组成
汇编程序
编译器
翻译器
碎片回收器(garbage collector):指内存回收
面向对象的概念(Object-Oriented Programming,OOP),使用类(Class)和对象(Object)工作。
传统开发方法
OOP通过类生产对象,每个对象都属于这个类并继承这个类的属性
编程人员会开发出类以及类的所有特性和属性,但是不需要开发每个或者所有的对象
OOP的特点
OOP和非OOP方法之间的差异
OPP的优点
模块化:自主对象,通过信息的交换进行协议
延迟承诺:
可重用性
自然性
概念
方法
封装
继承
继承性
数据隐藏(Data hiding)
对象举例
多态(Polymorphism)
数据建模(Data Modeling)
内敛和耦合
分布式计算
架构
C/S架构
客户端调用服务端的网络位置
组件之间的协助必须被监控和监视,请求和结果必须在正确组件间来回传递
环境
OCE有OSF开发。
表明各种不同能力可在不同类别的系统间继承和共享。
DCE提供远程调用RPC服务,安全服务,目录服务,时间服务,以及分布式文件支持等
DCE是行业内第一次尝试分布式计算的框架
DCE是一套基于RPC通信层的管理服务
CORBA and ORBs
COM and DCOM
Object Linking and Embedding
面向服务架构(Service-Oriented Architecture,SOA)
SOA是基于WEB的方法
SOA就是应用访问他们所需功能的集中的地方
REST安全使用建议
REST API三种安全路径
Basic Authentication w/TLS
Oauth 1.0a
三种协议中安全功能最多
使用加密签名,HMAC-SHA1:
绝不通过有线传递令牌秘密
Oauth 2.0:
Oauth2现有鬼U个移除签名,不需要再使用加密算法来建立,生成和验证签名
所有的加密由TLS来处理
现在的库不像1.0那么多,所以使用是个挑战
SOAP简单对象访问协议
移动计算与web安全
典型应用
移动代码
Mobile code 是能够从主机传输到客户端计算机上并执行的代码
攻击者可能会综合使用多种攻击手段
传输:计算机系统的漏洞,电子邮件,文件共享,web浏览器
社会工程(Social engineering)
典型的移动代码
Apples(java小程序,web插件):
java Applets
独立平台,可以在JVM(Java Virtual Machine)sanbox来约束java代码特权
ActiveX Controls
微软技术,至运行在微软系统,没有sanbox约束。
Java安全
当字节被解释时,JAVA检查应用和所使用的变量和内存
优点:软件可以适当的使用内存而不会超过设置界限
缺点:过度依赖该功能可能导致草率的做法,可能导致其他安全问题。
JAVA善于碎片回收以及内存的自动检查,所以不再需要内存区域重新分配
Java安全方法:
验证器或翻译器
类加载器
安全管理器
web安全
信息收集Information gathering
攻击第一步
攻击者收集公开的信息
管理人员不小心泄露信息
允许开发者使用DSN(Data Source Name,数据源名)来避免暴露位置或用于连接到的数据信息。
应对手段:
应限制给予工总的最小量的可用信息
开发者应意识到其所编写的代码会被组织机构以外的人看到,应定期检查搜索引擎,看看是否存在web站点,电子邮件地址,文件类型和数据等。
管理接口Administrative interfaces
身份验证和访问控制Authentication and access control
输入验证Input validation
攻击手段
路径/目录遍历
统一代码编码
网址编码
缓冲区溢出(Buffer overflow)
客户端验证
SQL注入、XSS跨站脚本攻击
XSS的三种类型
非持久性XSS
持久性XSS
基于文档对象模型(DOM,Document Object Model-based XSS)
参数验证Parameter validation
会话管理(Session management)
数据库管理(Database Management)
专家系统/基于知识的系统/Expert Systems/Knowledge-Based Systems
神经网络(Artificial Neural Networks)
恶意软件
数据库管理与恶意软件
数据库管理
概念
数据库用于保存公司重要的知识产权和极具价值的信息,已经很长一段历史。
数据库管理系统(database management system(DBMS))
数据库管理软件
Database
DBMS
特点
数据一致性Data consistency
数据共享Data sharing
数据恢复Data recovery
安全控制Security control
模型
关系模型Relational Model:数据存储在包含行(tuple,record,代表数据的实例)和列(fiel或attribute,代表数据变量)的表(table,也称做relation)中。表与表间的关系是基于所选的主键(primary key)而形成的。目前最普片采用。DB2,Oracle,SQL Server.
主键(Primary key):唯一标识表中的没一行(row),每个表只允许唯一的主键。RDBMS不允许以相同的主键插入多个记录,保证了主键的唯一性。
外键Foreign key:一个表中的一个属性或者组合,其值必须与另一个表中的主键想匹配。是表之间连接的关系。
核心组件
数据定义语言Data Definition Language,DLL
数据操作语言Data Manipulation Language,DML
数据控制语言Data Control Language,DCL
查询语言Query Language,QL
层次模型Hierarchical Model:现在叫做目录服务,由记录(Record)和字段(Field)构成,其间的逻辑和树形关系。
网络模式Network Model:网状数据,数据块或记录类型来表述。块包含数据领域,块与块间的行可以表述数据间的关系。
网络数据库模型允许每个数据原始拥有多个父节点和主记录
形成网络冗余结构
检索速度比层次模型快。
面向对象模型(Object-Oriented Model):将面向对象编程中的对象数据模型与DBMS,结合在一起,可存储图像、语音、视频等数据。
对象关系模型(Object-relational Moder Object-rela)tional Database Managementsystem,ORDBMS:一种关系数据库,但是使用面向对象变成语言编写的软件前端。
数据库编程接口
开放数据库连接(ODBC,Open Database Connectivity)
对象连接与嵌入数据库
ActiveX数据对象(ADO,Active Data Objects)
Java数据库连接(JDBC,JaveDatabase Connectivity)
可扩展标记语言(XML)
数据字典(Data Dictionary)
数据库的完整性(Integrity)
语义完整性(Semantic integrity)
参照完整性(Referential integrity)
实体完整性(Entity integrity)
操作
回滚
提交
检查点
两阶段提交(two-phase commit)
安全问题
聚合(Aggregation)
推理(Inference)
推理的防范
单元抑制(cell suppression)
数据库分隔(Database partition)
噪音与扰动(noise and perturbation)
基于上下文的访问控制(Context-dependent access control)
基于内容的访问控制(Content-dependent access control)
访问控制
多实例(Polyinstantiation):
数据仓库和数据挖掘
数据仓库
数据挖掘(Data Mining):属于人工智能(Artificial Intelligence,AI)范畴
数据挖掘是从数据中自动地抽取模式,关联,变化,异常和有意义的结构
数据挖掘大部分的价值在于利用数据挖掘技术改善语言模型
数据仓库中搜索数据间的相互关系(Orrelation)
数据挖掘工具用于识别数据仓库中数据特征和相互关系
恶意软件(Malicious Code/Malwate)
恶意软件赚钱的途径
间谍软件收集个人数据,供恶意软件开发商转售给他人
恶意软件会重定向网络流量,使人们倾向于购买特定的产品
恶意软件在系统上安全后门,它们被用作传播垃圾邮件或色情材料的代理
系统被机器人程序感染,随后被用于分布式拒绝服务攻击
恶意软件会安装密钥记录器,用于收集敏感的财务信息,供恶意软件作者使用。
恶意软件用于执行网络钓鱼攻击和欺诈
各种恶意软件
病毒(Virus)
引导区病毒
压缩病毒
文件感染性病毒
隐形病毒
宏病毒
多态病毒
自篡改病毒
基因病毒
脚本病毒
隧道病毒
特洛伊木马(Trojan Horses)
Rootkit(Root提权)
逻辑炸弹Logic Bombs
蠕虫(Worm):
僵尸网络(Botnets)
黑客发送装有僵尸病毒的恶意代码
间谍软件(Spyware)
广告软件(Adware)
防病毒软件(Antivirus Software)
防病毒软件的主要功能
特征型检测
启发式检测
沙盒或虚拟机
下一代病毒软件发展为行为阻止器
写入启动文件或注册表中的Run键
打开、删除或修改文件
在电子邮件中插入脚本,并发送可执行代码
连接到网络共享文件或资源
修改一个可执行文件的逻辑等
解决方案
特征型
启发型
完整性检查器
行为阻止器
免疫程序
防病毒策略作为为组织的安全计划之一
应该在每一个工作站,服务器和PDA上安防防病毒软件
每一台设备都应配置为自动更新病毒特征
不允许用户禁用防病毒软件
应预先制定一个病毒清除流程,并指定出现病毒感染时的联系人
应自动扫描所有外部磁盘(USB驱动器等)
应扫描备份文件,
应每年审查防病毒策略和措施
防病毒软件应当提供引导区病毒防护
应对网关和每一台设备进行病毒扫描
应当定期进行自动病毒扫描,不能依赖于手动扫描
应从物理上对关键系统加以保护,从而使恶意软件无法从本地安装
响应机制
评估软件的安全性
认证和认可
认证认可流程和作用
RMF风险管理框架
变更和审计日志
信息审计作用
系统网络设备报告对于整个系统的健康和安全很重要
日志的审计能力让相关方理解和日志
信息完整性
信息准确度
风险分析和缓解
风险管理
风险记录过程包括风险缓解和持续计划
风险分析和降低策略
纠正性行为
使用变更控制流程
阅读所有相关文档
测试
有效备份并安排生产停机时间
长期保留回退计划
预先告知服务台和关键用户组
首先针对非关键服务
补丁管理中并不是所有的风险发现需要消减