综合 SDL 核心培训通过 Microsoft 安全开发生命周期 (SDL) 深入探讨安全软件设计、开发和测试。该课程提供 SDL 基础构建的 100 级概述,随后介绍设计技术,以在开发过程的早期阶段检测和修复缺陷。
在处理开发阶段时,课程概述了管理代码和原生代码中典型的安全相关编程错误。针对讨论的漏洞,介绍了攻击方法及相关的缓解技术,并通过一系列实践练习为参与者提供即时黑客攻击的乐趣。在介绍不同的安全测试方法后,演示了各种测试工具的有效性。参与者可以通过一系列实践练习,将这些工具应用于已讨论的易受攻击的代码,从而了解这些工具的操作。
参与本课程的学员将
了解安全、IT 安全和安全编码的基本概念
熟悉 Microsoft 安全开发生命周期的关键步骤
学习安全设计和开发实践
了解安全实施原则
理解安全测试方法
- 获取有关安全编码实践的来源和进一步阅读资料
目标受众
开发人员、经理
第一天
- IT安全与安全编码
- 安全的本质
- 与IT安全相关的术语
- 风险的定义
- IT安全的不同方面
- 不同应用领域的需求
- IT安全与安全编码
- 从漏洞到僵尸网络和网络犯罪
- 安全漏洞的本质
- 困难的原因
- 从受感染的计算机到针对性攻击
- 安全漏洞的分类
- Landwehr的分类法
- 七大致命王国
- OWASP 2013年十大漏洞
- OWASP 2003年至2013年十大漏洞比较
- Microsoft®安全开发生命周期(SDL)简介
- 议程
- 应用程序遭受攻击...
- 网络犯罪的演变
- 攻击集中在应用程序上
- 大多数漏洞存在于较小的ISV应用程序中
- Microsoft SDL的起源...
- Microsoft的安全时间线...
- 哪些应用程序需要遵循SDL?
- Microsoft安全开发生命周期(SDL)
- Microsoft安全开发生命周期(SDL)
- SDL前要求:安全培训
- 第一阶段:需求
- 第二阶段:设计
- 第三阶段:实施
- 第四阶段:验证
- 第五阶段:发布 – 响应计划
- 第五阶段:发布 – 最终安全审查
- 第五阶段:发布 – 归档
- SDL后要求:响应
- LOB应用程序的SDL过程指南
- Agile方法论的SDL指南
- 安全软件开发需要过程改进
- 安全设计原则
- 攻击面
- 攻击面减少
- 攻击面 – 一个例子
- 攻击面分析
- 攻击面减少 – 示例
- 隐私
- 隐私
- 理解应用程序行为和关注点
- 深度防御
- SDL核心原则:深度防御
- 深度防御 – 示例
- 最小权限原则
- 最小权限 – 示例
- 安全默认值
- 安全默认值 – 示例
- 攻击面
- 安全实施原则
- 议程
- Microsoft安全开发生命周期(SDL)
- 缓冲区溢出基础
- Intel 80x86处理器 – 主要寄存器
- 内存地址布局
- C/C++在x86上的函数调用机制
- 局部变量和栈帧
- 栈溢出
- 栈上的缓冲区溢出
- 练习 – 介绍
- 练习BOFIntro
- 练习BOFIntro – 确定栈布局
- 练习BOFIntro – 一个简单的漏洞利用
- 输入验证
- 输入验证概念
- 整数问题
- 负整数的表示
- 整数溢出
- 算术溢出 – 猜猜输出!
- 练习IntOverflow
- Math.Abs(int.MinValue)的值是多少?
- 整数问题缓解
- 整数问题缓解
- 避免算术溢出 – 加法
- 避免算术溢出 – 乘法
- 在C#中使用checked关键字检测溢出
- 练习 – 在C#中使用checked关键字
- C#中溢出触发的异常
- 案例研究 – .NET中的整数溢出
- 一个真实的整数溢出漏洞
- 利用整数溢出漏洞
- 路径遍历漏洞
- 路径遍历缓解
第二天
- 安全实施原则
- 注入
- 典型的SQL注入攻击方法
- 盲注和基于时间的SQL注入
- SQL注入保护方法
- 命令注入
- 认证破坏 – 密码管理
- 练习 – 哈希密码的弱点
- 密码管理和存储
- 用于密码存储的专用哈希算法
- 跨站脚本攻击(XSS)
- 跨站脚本攻击(XSS)
- CSS注入
- 利用:通过其他HTML标签注入
- XSS防护
- 缺少功能级访问控制
- 过滤文件上传
- 实用密码学
- 使用对称加密提供机密性
- 对称加密算法
- 分组密码 – 操作模式
- 哈希或消息摘要
- 哈希算法
- 消息认证码(MAC)
- 使用对称密钥提供完整性和真实性
- 使用公钥加密提供机密性
- 经验法则 – 私钥的持有
- 密码管理中的典型错误
- 练习 – 硬编码密码
- 结论
- 注入
- 安全验证原则
- 功能测试与安全测试
- 安全漏洞
- 优先级排序
- SDLC中的安全测试
- 测试计划的步骤(风险分析)
- 范围确定和信息收集
- 利益相关者
- 资产
- 攻击面
- 测试的安全目标
- 威胁建模
- 威胁建模
- 攻击者画像
- 基于攻击树的威胁建模
- 基于滥用/误用案例的威胁建模
- 滥用/误用案例 – 一个简单的网店示例
- MS SDL的STRIDE元素威胁建模方法
- 识别安全目标
- 图表 – DFD元素示例
- 数据流图 – 示例
- 威胁枚举 – MS SDL的STRIDE和DFD元素
- 风险分析 – 威胁分类
- DREAD威胁/风险排名模型
- 安全测试技术和工具
- 一般测试方法
- SDLC各阶段的技术
- 代码审查
- 软件安全的代码审查
- 污点分析
- 启发式方法
- 静态代码分析
- 静态代码分析
- 静态代码分析
- 练习 – 使用静态代码分析工具
- 测试实施
- 手动运行时验证
- 手动与自动化安全测试
- 渗透测试
- 压力测试
- 模糊测试
- 自动化安全测试 – 模糊测试
- 模糊测试的挑战
- Web漏洞扫描器
- 练习 – 使用漏洞扫描器
- 检查与加固环境
- 通用漏洞评分系统 – CVSS
- 漏洞扫描器
- 公共数据库
- 案例研究 – 表单认证绕过
- NULL字节终止漏洞
- 代码中的表单认证绕过漏洞
- 利用表单认证绕过漏洞
- 知识来源
- 安全编码来源 – 入门指南
- 漏洞数据库
- MSDN上的.NET安全编码指南
- .NET安全编码速查表
- 推荐书籍 – .NET和ASP.NET
United Arab Emirates - Microsoft SDL Core
Saudi Arabia - Microsoft SDL Core
South Africa - Microsoft SDL Core
Österreich - Microsoft SDL Core
Deutschland - Microsoft SDL Core
Czech Republic - Microsoft SDL Core
Magyarország - Microsoft SDL Core
Luxembourg - Microsoft SDL Core
Lithuania - Microsoft SDL Core
Nederland - Microsoft SDL Core
Australia - Microsoft SDL Core
New Zealand - Microsoft SDL Core
Philippines - Microsoft SDL Core
Singapore - Microsoft SDL Core
Argentina - Microsoft SDL Core
Costa Rica - Microsoft SDL Core
Guatemala - Microsoft SDL Core
Venezuela - Microsoft SDL Core
United Kingdom - Microsoft SDL Core
South Korea - Microsoft SDL Core
Sri Lanka - Microsoft SDL Core
Indonesia - Microsoft SDL Core