聯繫我們

課程簡介

第一天

IT 資安與安全編碼

  • 安全的本質
  • 與 IT 資安相關的術語
  • 風險的定義
  • 不同層面的 IT 資安
  • 不同應用領域的需求
  • IT 資安 vs. 安全編碼
  • 從脆弱性到病毒體和網路犯罪
    • 安全缺失的本質
    • 困難的原因
    • 從受感染的電腦到定向攻擊
  • 安全缺失的分類
    • Landwehr 的分類法
    • 七大惡劣王國 (The Seven Pernicious Kingdoms)
    • OWASP Top Ten 2013
    • OWASP Top Ten 2003 與 2013 比較

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

  • 議程
  • 遭受攻擊的應用程式...
    • 網路犯罪的演變
    • 攻擊聚焦於應用程式
    • 大多數脆弱性存在於較小的獨立軟體供應商 (ISV) 應用程式中
  • 微軟 SDL 的起源...
    • 微軟的安全時間軸...
    • 哪些應用程式需要遵循 SDL?
  • 微軟安全開發生命週期 (SDL)
    • 微軟安全開發生命週期 (SDL)
    • SDL 前期要求:安全教育
    • 第一階段:需求
    • 第二階段:設計
    • 第三階段:實作
    • 第四階段:驗證
    • 第五階段:發佈 - 應變計畫
    • 第五階段:發佈 - 最終安全審查
    • 第五階段:發佈 - 封存
    • SDL 後期要求:回應
    • 內部業務應用程式 (LOB Apps) 的 SDL 流程指引
    • 敏捷方法的 SDL 指引
    • 安全軟體開發需要流程改進

安全設計原則

  • 攻擊面
    • 攻擊面縮減
    • 攻擊面 - 範例
    • 攻擊面分析
    • 攻擊面縮減 - 範例
  • 隱私
    • 隱私
    • 理解應用程式行為與關注點
  • 深度防禦
    • SDL 核心原則:深度防禦
    • 深度防禦 - 範例
  • 最低權限原則
    • 最低權限 - 範例
  • 安全預設值
    • 安全預設值 - 範例

安全實作原則

  • 議程
  • 微軟安全開發生命週期 (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) 中的安全測試
  • 測試計畫步驟 (風險分析)
  • 範圍界定與資訊收集
    • 利害關係人
    • 資產
    • 攻擊面
    • 測試的安全目標
  • 威脅建模
    • 威脅建模
    • 攻擊者畫像
    • 基於攻擊樹的威脅建模
    • 基於誤用/濫用案例的威脅建模
    • 誤用/濫用案例 - 簡單的網路商店範例
    • 每個元素的 STRIDE 威脅建模方法 - MS SDL
    • 識別安全目標
    • 繪圖 - DFD 元素範例
    • 資料流圖 - 範例
    • 威脅列舉 - MS SDL 的 STRIDE 和 DFD 元素
    • 風險分析 - 威脅分類
    • DREAD 威脅/風險排名模型
  • 安全測試技術與工具
    • 一般測試方法
    • SDLC 各階段的技術
  • 程式碼審查
    • 軟體安全程式碼審查
    • 污點分析 (Taint analysis)
    • 啟發式方法
  • 靜態程式碼分析
    • 靜態程式碼分析
    • 練習 - 使用靜態程式碼分析工具
  • 測試實作
    • 手動執行時驗證
    • 手動 vs. 自動化安全測試
    • 滲透測試
    • 壓力測試
  • 模糊測試 (Fuzzing)
    • 自動化安全測試 - 模糊測試
    • 模糊測試的挑戰
  • 網路脆弱性掃描器
    • 練習 - 使用脆弱性掃描器
  • 檢查與強化環境
    • 常見脆弱性評分系統 - CVSS
    • 脆弱性掃描器
    • 公開資料庫
  • 案例研究 - 表單驗證繞過
    • NULL 字元終止脆弱性
    • 程式碼中的表單驗證繞過脆弱性
    • 利用表單驗證繞過

知識來源

  • 安全編碼來源 - 入門套件
  • 脆弱性資料庫
  • MSDN 上的 .NET 安全編碼指南
  • .NET 安全編碼秘訣表 (Cheat Sheets)
  • 推薦書籍 - .NET 和 ASP.NET
 14 小時

人數


每位參與者的報價

客戶評論 (3)

即將到來的課程

課程分類