お問い合わせ

コース概要

1日目

ITセキュリティとセキュアコーディング

  • セキュリティの本質
  • ITセキュリティ関連用語
  • リスクの定義
  • ITセキュリティの異なる側面
  • 異なるアプリケーション領域の要件
  • ITセキュリティとセキュアコーディングの違い
  • 脆弱性からボットネット、サイバー犯罪へ
    • セキュリティ欠陥の本質
    • 困難な理由
    • 感染したコンピュータから標的型攻撃へ
  • セキュリティ欠陥の分類
    • Landwehrの分類学
    • Seven Pernicious Kingdoms(7つの悪の王国)
    • OWASP Top Ten 2013
    • OWASP Top Ten 比較 2003 – 2013

Microsoft® Security Development Lifecycle (SDL) の概要

  • アジェンダ
  • 攻撃下のアプリケーション...
    • サイバー犯罪の進化
    • 攻撃はアプリケーションに集中しています
    • 大多数の脆弱性は小型ISVアプリにあります
  • Microsoft SDLの起源...
    • Microsoftにおけるセキュリティのタイムライン...
    • SDLに従うことが求められるアプリは何か?
  • Microsoft Security Development Lifecycle (SDL)
    • Microsoft Security Development Lifecycle (SDL)
    • SDL前要件:セキュリティトレーニング
    • フェーズ1:要件定義
    • フェーズ2:設計
    • フェーズ3:実装
    • フェーズ4:検証
    • フェーズ5:リリース – 対応計画
    • フェーズ5:リリース – 最終セキュリティレビュー
    • フェーズ5:リリース – アーカイブ
    • SDL後要件:対応
    • LOBアプリ向けのSDLプロセスガイドライン
    • アジャイルメソッド論向けのSDLガイドライン
    • 安全なソフトウェア開発にはプロセスの改善が必要です

安全な設計の原則

  • 攻撃面(Attack Surface)
    • 攻撃面の削減
    • 攻撃面 – 例
    • 攻撃面分析
    • 攻撃面の削減 – 例
  • プライバシー
    • プライバシー
    • アプリケーションの動作と懸念事項の理解
  • 多層防御(Defense in Depth)
    • SDLのコア原則:多層防御
    • 多層防御 – 例
  • 最小権限の原則
    • 最小権限 – 例
  • 安全なデフォルト設定
    • 安全なデフォルト設定 – 例

安全な実装の原則

  • アジェンダ
  • Microsoft Security Development Lifecycle (SDL)
  • バッファオーバーフローの基礎
    • Intel 80x86 プロセッサ – メインレジスタ
    • メモリアドレスのレイアウト
    • x86環境におけるC/C++の関数呼び出しメカニズム
    • ローカル変数とスタックフレーム
    • スタックオーバーフロー
      • スタック上のバッファオーバーフロー
      • 演習 – 導入
      • 演習 BOFIntro
      • 演習 BOFIntro – スタックレイアウトの決定
      • 演習 BOFIntro – シンプルなエクスプロイト
  • 入力検証
    • 入力検証の概念
    • 整数の問題
      • 負の整数の表現
      • 整数オーバーフロー
      • 算術オーバーフロー – 出力を当ててみましょう!
      • 演習 IntOverflow
      • Math.Abs(int.MinValue) の値は?
    • 整数問題の緩和
      • 整数問題の緩和
      • 算術オーバーフローの回避 – 加算
      • 算術オーバーフローの回避 – 乗算
      • C#におけるcheckedキーワードによるオーバーフロー検出
      • 演習 – C#でのcheckedキーワードの使用
      • C#でオーバーフローによってトリガーされる例外
    • ケーススタディ – .NETにおける整数オーバーフロー
      • リアルワールドの整数オーバーフロー脆弱性
      • 整数オーバーフロー脆弱性の悪用
    • パストラバーサル脆弱性
      • パストラバーサルの緩和

2日目

安全な実装の原則

  • インジェクション
    • 典型的なSQLインジェクション攻撃手法
    • ブラインドSQLインジェクションとタイムベースSQLインジェクション
    • SQLインジェクション対策手法
    • コマンドインジェクション
  • 認証の破損 - パスワード管理
    • 演習 – ハッシュ化されたパスワードの弱さ
    • パスワードの管理と保存
    • パスワード保存のための専用ハッシュアルゴリズム
  • クロスサイトスクリプティング (XSS)
    • クロスサイトスクリプティング (XSS)
    • CSSインジェクション
    • 悪用:他のHTMLタグを通じたインジェクション
    • XSSの防止
  • 関数レベルのアクセス制御の欠如
    • ファイルアップロードのフィルタリング
  • 実用的な暗号技術
    • 対称暗号による機密性の提供
    • 対称暗号化アルゴリズム
    • ブロック暗号 – 動作モード
    • ハッシュまたはメッセージダイジェスト
    • ハッシュアルゴリズム
    • メッセージ認証コード (MAC)
    • 対称キーによる完全性と真正性の提供
    • 公開鍵暗号による機密性の提供
    • 経験則 – 秘密鍵の所持
    • パスワード管理における典型的な誤り
    • 演習 – ハードコードされたパスワード
    • 結論

安全な検証の原則

  • 機能テストとセキュリティテスト
  • セキュリティ脆弱性
  • 優先順位付け
  • SDLCにおけるセキュリティテスト
  • テスト計画の手順(リスク分析)
  • スコーピングと情報収集
    • ステークホルダー
    • アセット
    • 攻撃面
    • テストのためのセキュリティ目標
  • 脅威モデリング
    • 脅威モデリング
    • 攻撃者プロファイル
    • 攻撃ツリーに基づく脅威モデリング
    • Misuse/Abuseケースに基づく脅威モデリング
    • Misuse/Abuseケース – シンプルなWebショップの例
    • 要素ごとのSTRIDEアプローチによる脅威モデリング – MS SDL
    • セキュリティ目標の特定
    • ダイアグラミング – DFD要素の例
    • データフローダイアグラム – 例
    • 脅威列挙 – MS SDLのSTRIDEとDFD要素
    • リスク分析 – 脅威の分類
    • DREAD脅威/リスクランキングモデル
  • セキュリティテスト技術とツール
    • 一般的なテストアプローチ
    • SDLCの各種ステップのための技術
  • コードレビュー
    • ソフトウェアセキュリティのためのコードレビュー
    • Taint分析
    • 経験則(ヒューリスティクス)
  • 静的コード分析
    • 静的コード分析
    • 演習 – 静的コード分析ツールの使用
  • 実装のテスト
    • 手動ランタイム検証
    • 手動テストと自動化セキュリティテスト
    • ペネトレーションテスト
    • ストレステスト
  • Fuzzing
    • 自動化セキュリティテスト - Fuzzing
    • Fuzzingの課題
  • Web脆弱性スキャナ
    • 演習 – 脆弱性スキャナの使用
  • 環境の確認とハードニング
    • 共通脆弱性評価システム – CVSS
    • 脆弱性スキャナ
    • 公開データベース
  • ケーススタディ – フォーム認証バイパス
    • NULLバイト終了脆弱性
    • コード内のフォーム認証バイパス脆弱性
    • フォーム認証バイパスの悪用

知識の源泉

  • セキュアコーディングの情報源 – スターターキット
  • 脆弱性データベース
  • MSDNにある.NETセキュアコーディングガイドライン
  • .NETセキュアコーディングチートシート
  • 推奨書籍 – .NET および ASP.NET
 14 時間

参加者の人数


参加者1人あたりの価格

お客様の声 (3)

今後のコース

関連カテゴリー