课程大纲

第一天

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 流程指南
    • 敏捷方法的 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 中的安全测试
  • 测试规划的步骤(风险分析)
  • 范围界定和信息收集
    • 利益相关者
    • 资产
    • 攻击面
    • 安全测试目标
  • 威胁建模
    • 威胁建模
    • 攻击者画像
    • 基于攻击树的威胁建模
    • 基于滥用/误用案例的威胁建模
    • 滥用/误用案例 - 一个简单的网店示例
    • STRIDE 按元素威胁建模方法 - MS SDL
    • 识别安全目标
    • 图表 - DFD 元素示例
    • 数据流图 - 示例
    • 威胁枚举 - MS SDL 的 STRIDE 和 DFD 元素
    • 风险分析 - 威胁分类
    • DREAD 威胁/风险排名模型
  • 安全测试技术和工具
    • 通用测试方法
    • SDLC 各阶段的技术
  • 代码审查
    • 软件安全的代码审查
    • 污点分析
    • 启发式方法
  • 静态代码分析
    • 静态代码分析
    • 练习 - 使用静态代码分析工具
  • 测试实施
    • 手动运行时验证
    • 手动与自动化安全测试
    • 渗透测试
    • 压力测试
  • 模糊测试
    • 自动化安全测试 - 模糊测试
    • 模糊测试的挑战
  • Web 漏洞扫描器
    • 练习 - 使用漏洞扫描器
  • 检查和加固环境
    • 通用漏洞评分系统 - CVSS
    • 漏洞扫描器
    • 公共数据库
  • 案例研究 - 表单认证绕过
    • NULL 字节终止漏洞
    • 代码中的表单认证绕过漏洞
    • 利用表单认证绕过漏洞

知识来源

  • 安全编码来源 - 入门套件
  • 漏洞数据库
  • MSDN 上的 .NET 安全编码指南
  • .NET 安全编码速查表
  • 推荐书籍 - .NET 和 ASP.NET
 14 小时

客户评论 (5)

即将举行的公开课程

课程分类