聯繫我們
 課程時長 14 時間:

課程簡介

第一天

IT 安全與安全編碼

  • 安全的性質
  • IT 安全相關術語
  • 風險的定義
  • IT 安全的不同面向
  • 不同應用領域的要求
  • IT 安全 vs. 安全編碼
  • 從漏洞到殭屍網路和網路犯罪
    • 安全缺陷的性質
    • 困難的原因
    • 從受感染的電腦到目標攻擊
  • 安全缺陷的分類
    • Landwehr 分類法
    • 七大惡性領域 (The Seven Pernicious Kingdoms)
    • OWASP Top Ten 2013
    • OWASP Top Ten 比較 2003 – 2013

簡介 Microsoft® 安全開發生命週期 (SDL)

  • 議程
  • 遭受攻擊的應用...
    • 網路犯罪的演變
    • 攻擊聚焦於應用程序
    • 大多數漏洞存在於較小的 ISV 應用中
  • Microsoft SDL 的起源...
    • Microsoft 安全時間軸...
    • 哪些應用需要遵循 SDL?
  • Microsoft 安全開發生命週期 (SDL)
    • Microsoft 安全開發生命週期 (SDL)
    • SDL 前置要求:安全培訓
    • 第一階段:需求
    • 第二階段:設計
    • 第三階段:實現
    • 第四階段:驗證
    • 第五階段:發布 – 回應計劃
    • 第五階段:發布 – 最終安全審查
    • 第五階段:發布 – 存檔
    • SDL 後續要求:回應
    • LOB 應用的 SDL 流程指導
    • 敏捷方法學的 SDL 指導
    • 安全軟體開發需要流程改進

安全設計原則

  • 攻擊面
    • 攻擊面減少
    • 攻擊面 – 範例
    • 攻擊面分析
    • 攻擊面減少 – 範例
  • 隱私
    • 隱私
    • 理解應用行為與顧慮
  • 縱深防禦
    • SDL 核心原則:縱深防禦
    • 縱深防禦 – 範例
  • 最小權限原則
    • 最小權限 – 範例
  • 安全預設值
    • 安全預設值 – 範例

安全實現原則

  • 議程
  • Microsoft 安全開發生命週期 (SDL)
  • 緩衝區溢出基礎
    • Intel 80x86 處理器 – 主要暫存器
    • 記憶體位址佈局
    • x86 上 C/C++ 中的函式呼叫機制
    • 局部變數和堆疊幀
    • 堆疊溢出
      • 堆疊上的緩衝區溢出
      • 練習 – 簡介
      • 練習 BOFIntro
      • 練習 BOFIntro – 確定堆疊佈局
      • 練習 BOFIntro – 簡單的利用
  • 輸入驗證
    • 輸入驗證概念
    • 整數問題
      • 負整數的表示
      • 整數溢出
      • 算術溢出 – 猜測輸出!
      • 練習 IntOverflow
      • Math.Abs(int.MinValue) 的值是多少?
    • 整數問題緩解
      • 整數問題緩解
      • 避免算術溢出 – 加法
      • 避免算術溢出 – 乘法
      • 使用 C# 中的 checked 關鍵字偵測溢出
      • 練習 – 在 C# 中使用 checked 關鍵字
      • C# 中由溢出引發的例外
    • 案例研究 – .NET 中的整數溢出
      • 真實世界的整數溢出漏洞
      • 利用整數溢出漏洞
    • 路徑遍歷漏洞
      • 路徑遍歷緩解

第二天

安全實現原則

  • 注入
    • 典型的 SQL 注入攻擊方法
    • 盲注和基於時間的 SQL 注入
    • SQL 注入保護方法
    • 命令注入
  • 認證破壞 - 密碼管理
    • 練習 – 雜湊密碼的弱點
    • 密碼管理和儲存
    • 用於密碼儲存的特殊用途雜湊演算法
  • 跨站腳本攻擊 (XSS)
    • 跨站腳本攻擊 (XSS)
    • CSS 注入
    • 利用:透過其他 HTML 標籤進行注入
    • XSS 預防
  • 缺乏功能級別訪問控制
    • 過濾檔案上傳
  • 實務密碼學
    • 使用對稱加密提供機密性
    • 對稱加密演算法
    • 區塊密碼 – 運作模式
    • 雜湊或訊息摘要
    • 雜湊演算法
    • 訊息驗證碼 (MAC)
    • 使用對稱金鑰提供完整性和真实性
    • 使用公鑰加密提供機密性
    • 經驗法則 – 私有金鑰的持有
    • 密碼管理中的典型錯誤
    • 練習 – 硬編碼密碼
    • 結論

安全驗證原則

  • 功能測試 vs. 安全測試
  • 安全漏洞
  • 優先級排序
  • SDLC 中的安全測試
  • 測試規劃步驟(風險分析)
  • 範圍界定和資訊收集
    • 利害關係人
    • 資產
    • 攻擊面
    • 測試的安全目標
  • 威脅建模
    • 威脅建模
    • 攻擊者檔案
    • 基於攻擊樹的威脅建模
    • 基於濫用/誤用案例的威脅建模
    • 濫用/誤用案例 – 簡單 Web 商店範例
    • 基於元素的 STRIDE 威脅建模方法 – MS SDL
    • 識別安全目標
    • 圖表 – DFD 元素範例
    • 資料流圖 – 範例
    • 威脅枚舉 – MS SDL 的 STRIDE 和 DFD 元素
    • 風險分析 – 威脅分類
    • DREAD 威脅/風險排名模型
  • 安全測試技術和工具
    • 一般測試方法
    • SDLC 各步驟的技術
  • 程式碼審查
    • 針對軟體安全的程式碼審查
    • 污點分析
    • 啟發式方法
  • 靜態程式碼分析
    • 靜態程式碼分析
    • 練習 – 使用靜態程式碼分析工具
  • 測試實現
    • 手動執行時驗證
    • 手動 vs. 自動安全測試
    • 滲透測試
    • 壓力測試
  • 模糊測試 (Fuzzing)
    • 自動安全測試 - 模糊測試
    • 模糊測試的挑戰
  • Web 漏洞掃描器
    • 練習 – 使用漏洞掃描器
  • 檢查和加固環境
    • 常見漏洞評分系統 – CVSS
    • 漏洞掃描器
    • 公開資料庫
  • 案例研究 – Forms 認證繞過
    • NULL 字元終止漏洞
    • 程式碼中的 Forms 認證繞過漏洞
    • 利用 Forms 認證繞過

知識來源

  • 安全編碼來源 – 入門套件
  • 漏洞資料庫
  • MSDN 上的 .NET 安全編碼指南
  • .NET 安全編碼速查表
  • 推薦書籍 – .NET 和 ASP.NET

客戶評論 (3)

即將到來的課程

課程分類