电子书 计算机安全

安全驱动的软件开发:学习分析和缓解软件项目中的风险(英文电子

¥1.00 已售 0
✓ 自动发货 ✓ 永久有效 ✓ 售后保障

资源介绍

书) 本书围绕安全驱动的软件开发展开,从建模安全应用、实施风险缓解措施到安全验证,系统阐述了如何在软件项目中分析和缓解风险,旨在帮助开发者构建更安全、更稳健的软件。 第一部分:建模安全应用 该部分聚焦于在实施前识别应用程序的风险,通过迭代过程不断完善模型。 安全原则 介绍了软件开发生命周期中可能出现的安全问题,如恶意攻击(Target 客户数据攻击、Facebook - Cambridge Analytica 丑闻等)和意外错误(NASA 火星气候轨道器故障、Ariane 5 火箭事故等)。 阐述了软件安全基本原则,包括最小权限、防御纵深、故障安全默认值等。 介绍了 OWASP、NIST 的安全软件开发框架、MITRE 框架等相关组织和框架,以及不同的软件开发生命周期模型(瀑布模型、敏捷模型等)和微软的安全开发生命周期(SDL),还讲解了信息安全的核心原则 CIA 三元组(机密性、完整性、可用性)。 设计安全功能模型 软件需求分为功能需求、非功能需求和约束,其中非功能需求对软件系统的安全性有重要影响,如认证与授权、数据安全等。 软件的使用场景和误用场景有助于识别软件的预期使用方式和潜在安全威胁与漏洞,并可通过文本用例和误用用例以及 UML 图形化用例和误用例图来结构化描述。 以事件票务系统为例,展示了企业安全功能模型的构建,包括需求列表、使用场景和误用场景等。 设计安全对象模型 从场景和用例中识别对象和关系是软件系统分析和设计的重要步骤,需读取场景和用例、识别名词和动词、分组相关名词等。 UML 类图是描述系统类结构和关系的重要工具,包含类、属性、方法、关联、聚合、组合、继承等元素。 UML stereotypes 可用于扩展和自定义 UML 标准符号和语义,在表示安全需求时很有用;OCL 不变式则用于指定 UML 模型上的约束、条件和表达式,确保模型的正确性和完整性。 以事件票务系统为例,展示了企业安全对象模型的类、关系、属性、 stereotypes 和 OCL 不变式等。 设计安全动态模型 设计对象行为需考虑识别对象和类、定义对象职责、指定对象接口等因素,UML 状态图可用于观察对象基于方法调用的状态变化。 建模对象间交互可使用用例图、序列图、协作图、活动图、状态图等技术,其中序列图和活动图在动态建模中应用广泛。 OCL 的前置条件和后置条件用于定义操作执行前后必须满足的条件,确保操作行为明确且符合约束。 以事件票务系统为例,展示了序列图、活动图以及更新后的类图等企业安全动态模型。 设计安全系统模型 系统模型中的分区(系统分区或系统分解)是将复杂系统分解为更小、更易管理的组件或子系统,有助于理解、设计和组织系统架构。 建模分区间交互需进行系统分解、创建用例图、序列图等,定义清晰的接口契约,考虑消息格式、错误处理等。 UML 组件图提供系统或应用程序的组件、关系和组织的高层概述,包含组件、接口、依赖关系等元素。 系统建模中的模式是解决常见架构和结构挑战的既定设计模式,如分层架构模式、客户端 - 服务器模式等。 以事件票务系统为例,展示了添加泳道的活动图、组件模型和包含代理模式的序列图等企业安全系统模型。 威胁建模 软件威胁建模是识别和缓解软件应用中潜在安全威胁的系统方法,包括定义范围、创建系统概述、识别威胁等步骤。 STRIDE 模型是识别和分类系统安全威胁的框架,包含欺骗、篡改、否认、信息泄露、拒绝服务和权限提升六种威胁类型。 DREAD 模型用于评估和优先排序软件应用的安全风险,从损害、可重现性、可利用性、受影响用户和可发现性五个方面进行评估。 攻击树是表示针对系统的潜在威胁和攻击的图形化方法,由根节点、节点和叶子组成,可用于分析攻击者可能利用漏洞实现特定目标的各种方式。 缓解措施是降低软件威胁模型中安全威胁和漏洞风险的策略或措施,如认证与授权、输入验证与净化等。 微软威胁建模工具结合数据流图(DFD)进行威胁建模,包括定义系统、识别资产、创建 DFD 等步骤。 以事件票务系统为例,展示了 STRIDE 模型、DREAD 模型和攻击树等企业威胁模型。 第二部分:实施中的风险缓解 该部分介绍了减少前期模型中识别的安全风险的工具和策略。 认证与授权 认证是验证用户、进程或系统身份的过程,常见方法包括用户名和密码、生物识别认证、令牌认证等。 授权是授予或拒绝访问系统中特定资源或功能的过程,关键组件包括访问控制、授权策略、角色和权限等。 软件系统中的安全模型提供了实施安全措施和控制的结构化方法,如 Bell - LaPadula 模型、Biba 完整性模型等。 单点登录(SSO)和开放授权(OAuth)是现代认证和授权的标准,SSO 允许用户一次登录即可访问多个系统或应用,OAuth 则实现了第三方应用的安全授权。 以事件票务系统为例,展示了使用 Google 实现 SSO 和 OAuth 的企业级实施。 输入验证与净化 输入验证是确保应用程序接收的数据安全、可靠且无漏洞的关键措施,需考虑数据类型验证、长度和大小检查等因素。 输入净化旨在清理和验证用户输入,防止各种攻击,基本原则和技术包括过滤与验证、字符转义、参数化查询等。 不同编程语言在处理输入验证和净化时有特定的功能和函数,如 Java 的 Apache Commons Validator、Python 的 re 库和 validator 库等。 缓冲区溢出是常见的软件漏洞,防御措施包括使用安全字符串函数、进行边界检查、选择内存安全语言等。 以事件票务系统为例,展示了使用 PHP 的 filter_var 函数和 FILTER_VALIDATE_ * 常量进行输入验证和净化的企业级示例。 标准 Web 应用程序漏洞 注入攻击是攻击者将未授权代码或命令注入应用程序数据的恶意尝试,常见类型包括 SQL 注入、跨站脚本(XSS)、命令注入等,可通过参数化语句、输入验证与净化等措施缓解风险。 身份验证和会话管理漏洞会导致未授权访问等安全漏洞,常见问题包括弱密码策略、会话固定等,可通过实施强密码策略、多因素认证等措施预防。 跨站请求伪造(CSRF)是攻击者欺骗浏览器在第三方可信站点执行不希望的操作的漏洞,可通过反 CSRF 令牌、SameSite Cookie 属性等措施预防。 不同编程语言有特定的防御措施来应对常见 Web 攻击,如 PHP 的 filter_input 和 mysqli_real_escape_string 函数等。 以事件票务系统为例,展示了防御 CSRF 攻击和实现安全会话管理的企业级 Web 防御示例。 数据库安全 SQL 是管理和操作关系数据库的编程语言,关键概念包括数据库、表、列、行、主键、外键等,以及 SELECT、INSERT、UPDATE、DELETE 等查询语句。 SQL 注入是攻击者将恶意 SQL 代码插入查询的网络攻击,可通过参数化语句、输入验证与净化等措施预防。 确保数据库正确性需进行数据验证、保证数据准确性、维护引用完整性、应用规范化等。 数据库并发是数据库管理系统同时处理多个事务或操作的能力,关键概念包括隔离级别、锁定、并发控制技术等。 不同编程语言在确保数据库安全方面有特定措施,如 SQL 的参数化语句、PHP 的 PDO 和 MySQLi 扩展等。 基于角色的访问控制(RBAC)是数据库系统中广泛使用的访问控制机制,关键概念包括角色、用户、权限、角色层次结构等。 数据库加密是保护敏感数据免受未授权访问或泄露的关键方面,包括静态数据加密、传输中数据加密和使用中数据加密等类型。 以事件票务系统为例,展示了使用预处理语句的企业级数据库安全示例。 第三部分:安全验证 该部分介绍验证所交付软件是否满足前期指定的功能和非功能需求的方法。 单元测试 单元测试是在隔离环境中测试软件应用的单个单元或组件的技术,遵循隔离、独立、快速执行等原则。 单元测试具有早期检测错误、促进代码重构、作为文档、支持持续集成等优势。 单元测试框架帮助开发者创建、组织和运行单元测试,不同编程语言有不同的流行框架,如 Java 的 JUnit 和 TestNG、.NET 的 NUnit 和xUnit.net等。 以事件票务系统中 Person 类的 create_login 方法为例,展示了 PHP 的 PHPUnit、Java 的 JUnit 和 Python 的 PyUnit 三种语言的企业级安全单元测试示例。 回归测试 回归测试是验证应用程序的变更(如错误修复、新功能等)未引入新缺陷或导致现有功能失效的软件测试技术,关键概念包括测试套件、自动化、持续集成和部署等,过程包括代码变更、测试选择、测试执行等,具有早期检测缺陷、保证稳定性等好处。 机器人流程自动化(RPA)和回归测试虽不同,但在特定场景下可交叉使用,如使用 RPA 工具自动化回归测试的某些方面。 回归测试工具有多种,如 Selenium、JUnit、TestNG 等,选择时需考虑应用类型、技术栈等因素。 负载测试评估应用程序在预期和峰值负载条件下的性能,与回归测试不同但可互补,共同确保应用程序的质量和性能。 UI.Vision RPA 是开源浏览器扩展,可用于回归测试,通过录制和重放用户与 Web 应用的交互创建测试脚本。 以事件票务系统为例,展示了使用 UI.Vision RPA 和 Postman 进行回归测试的企业级示例。 集成、系统和验收测试 集成测试聚焦于验证软件应用不同组件或模块之间的交互和接口,常见类型包括 Big Bang 集成测试、增量集成测试等。 在软件集成测试中,模拟对象(mocks)和存根(stubs)用于隔离被测试组件与其依赖项,创建受控的测试环境。 系统测试是软件测试过程中的关键阶段,测试环境设置、测试计划、功能测试、性能测试等都是其重要方面。 验收测试是软件测试过程中由最终用户或利益相关者评估软件是否满足指定要求并准备部署的阶段,主要有用户验收测试(UAT)和操作验收测试(OAT)两种类型,过程包括测试计划、测试用例设计等步骤。 以事件票务系统为例,展示了企业级集成测试中存根和模拟的使用示例。 软件渗透测试 渗透测试是模拟现实世界网络攻击以识别软件系统、网络和应用程序中的漏洞和弱点的网络安全实践,常见类型包括黑盒测试、白盒测试、灰盒测试等。 软件渗透测试通常包括参与前、信息收集(侦察)、威胁建模、漏洞分析、利用、后利用、报告、汇报、修复验证、持续监控和改进等阶段。 渗透测试工具对安全专业人员识别漏洞和评估软件、网络和系统的安全性至关重要,包括信息收集和侦察工具、漏洞分析和利用工具等。 以事件票务系统为例,展示了企业级渗透测试报告的高级摘要和主机分析等内容。 适用人群 本书面向任何会使用任何编程语言编程并希望构建更安全、更稳健软件的人,无需特定的安全背景,但具备基本的编程知识会有助于更好地理解书中内容。