SECURITY 541

Secure Coding in Java/JEE:
Developing Defensible Applications

日 程 4日間 CPE
ポイント
24 point (6CPE/日)
定 員 50名 (同時通訳、日本語版テキスト使用) 講師 Frank Kim(SANS認定インストラクター)
>> 講師プロフィール
講義時間 9:00 ~ 17:00 (8:30 開場)
受講に必要なPC環境
SEC 541 PC設定詳細

SANSトレーニング Hands-Onセッションを有意義に受講いただくには、以下の環境のノートPCが必要です。
WindowsノートPCを各自ご持参ください。

ノートパソコンのハードウェア要件
  • 管理者権限レベルのアクセス権を利用できる ノートPC
  • DVD-RWドライブ
  • 1GB以上のRAM
  • 5GBのHDD空き容量
Vmware

実習でVMWareを使用します。無償のVMWare Player 2.0以上か、市販のVMWare Workstation 6.0以上を事前にインストールしておいてください。VMWare Playerは無償ダウンロード可能です。
設定変更などが可能で柔軟なツールが良い方は、VMWare Workstationの30日間無償トライアル版をダウンロードすることもできます。Mac OS Xの方はVMWare Fusion をご利用ください。
これらの製品 はwww.vmware.com.から入手してください。このWebサイトでトライアル版の登録を行うと、VMware WorkstationやVMWare Fusion用の期間限定シリアル番号が 送付されます。VMware Playerにはシリアル番号は必要ありません。

Java参考文献

演習中の参考文献として、「Java SE 6 and Java EE 5 Javadoc documentation」のダウンロードを推奨します(Jacadocライセンスは再配布を禁止しています)。同文書はjava.sun.com.からダウンロードできます。
Linuxイメージとコースの全実習内容を納めたDVDを受講時に配布いたします。

開催予定のないコースは、オンサイト(特設開催)により実施可能です。ご相談ください。
 

コース概要

「良い」プログラマと「偉大な」プログラマの差異

従来、偉大なプログラマはそのコードの正確性、有効性、信頼性において際立ってきました。それは現在でも変わりませんが、これらの正確性、有効性、信頼性は、今やセキュリティ上必須となりました。大手金融機関や政府機関などでは、内部の開発チームやアウトソーシング企業のプログラマに対し、信頼できるサードパーティ主催の試験を受験して安全なコーディングスキルと知識に精通し、かつ実践できることを証明しなければ業務を行わさせないものとしています。ソフトウェア購入層の方々の中でも、この動きに同調する方は毎週のように増える一方です。

Javaの安全なアプリケーション開発における主要素を網羅した唯一のコース

購入層や経営層は、こうした動きに対するプログラマの迅速な対処を求めています。「安全なコーディングを学べる場所は?」この独自のSANSコースは、サードパーティからJava/Java EEの安全なコーディングにおける、最低限のスキルとされているテクニックと知識を学習します(これら最低限のスキルに関するドキュメントは、www.sans.org/gssp/で入手できます)。

受講対象者

  • アプリケーション開発経験、またはJava/Java EEに関する十分な知識を持っている学生
  • Java EEプログラマ
  • JEEフレームワークを利用しているソフトウェア開発者
  • テスタ/QA対応スタッフ
  • ソフトウェアエンジニア
  • 安全なアプリケーションを構築する必要があり、本コースで自らのスキルを大幅に拡充させたいと考えているソフトウェア設計者
  • アプリケーションセキュリティ監査人
  • ソフトウェア開発プロジェクトマネージャ

受講前提知識

少なくとも1年のJEEフレームワークを用いた業務経験があり、Java言語とWeb技術に精通している方に適したコースです。

受講内容

基本スキルに関するドキュメント内容の3分の2の量にあたる、膨大なスキルと知識を網羅した総合コースです。高度な理論を学ぶのではなく、プログラミングについて実践的な内容を学習します。Javaアプリケーションのセキュリティ向上のために、実際に利用されるコードを分析し、その際に利用されるツールを用い、アプリケーションの構築を通じて実践的なスキルを身に付けます。

各インタフェースから入力値を読み取り、適切に検証および処理するプログラムの作成

  • 各インタフェースからの入力の信頼性確保:HTTPリクエスト、アプレットソケット、直列化ストリーム、設定ファイル、バックエンドのデータストア
  • 正規表現、doValidate()、その他のJavaおよびJ2EEのツールを用いた入力値検証:Stringなどの一般的なデータ型、および一般的でない入力構造の検証
  • ホワイトリストとブラックリストのアプローチとトレードオフ

認証とセッション管理の理解および認証原理の確認

  • エンドユーザ向け、およびサードパーティによるサービス、バックエンドシステム等での認証の必要性
  • 機能的強度、認証情報の期限、回復/リセット、再認証を含む、暗号化と証明書を使用した、各種認証プロセスの保護
  • セッショントークンの保護
  • JavaとJ2EEで可能な、一般的な認証テクニックとAPI
  • API利用時のサービスと保護機能に関する利用の可否

ユーザデータの機密性を保証するアクセスコントロールの積極的な実施

  • リソースや機能へのアクセス制限、宣言型アクセスコントロール、カスタムコードのコントロールチェック、およびJava認証承認サービスのアクセスコントロール実装方法

組み込みデータ型およびJava特有のメモリ管理とセキュリティとの関連

  • Stringクラスの不変性とStringオブジェクトの比較方法の完全理解
  • Javaの数値データ型の制約事項とセキュリティへの影響
  • Javaガベージコレクタの実装とセキュリティへの影響
  • ArrayListとVectorの相違点およびセキュリティ上の考慮事項
  • アクセス修飾子、final修飾子、クラス比較、直列化、クローン機能、内部クラス
  • セキュリティマネージャおよびそのポリシーファイルを含む、コードの権限の管理方法および保護ドメインの管理

アプリケーションエラーの適切な対処

  • Javaのtry/catch/finally構造、Javaのロギング機能、404および他のエラー時にデフォルトエラーページを戻す設定

マルチスレッドプログラムの安全な構築

  • レースコンディションの排除
  • マルチスレッドアクセスによるシングルトンパターンの実装と、複数スレッドからアクセスされる、その他リソースの保護

外部アプリケーションへの安全な接続の確立

  • 動的クエリの使用に伴うセキュリティリスク
  • ユーザ指定入力に基づくデータベースアクセスの際にPreparedStatementの安全な使用によって、SQLインジェクションに対抗する方法
  • クロスサイトスクリプティングからの防護としてのユーザインターフェイスにデータを表示するための、出力エンコーディング使用方法
  • フェイルセーフな接続パターンの実装

JARシーリングとJ2EEフィルタの効果的な使用

  • JARシーリングの使用法
  • 安全なコーディングの各技術の実装において、JARシーリングとJ2EEフィルタが使用される場面
  • JARシーリングとJ2EEフィルタ使用時の回避点
コース開発者より

何百もの開発者にアプリケーションセキュリティについて指導を重ねてきた後、私達はこの重要な課題について教えることの有効性を悟りました。開発者は、実践を通じてその知識レベルを試される必要があります。ある問題が異なるシナリオで展開された場合でも対応できるよう、様々なソリューションを持ち合わせていなければならないからです。受講生は、各職場に持ち帰ることができるようなアプリケーションの具体例を提示されることによって、現在および将来のプロジェクトに適用できる強固な入力値チェックのテクニックを身につけます。不正な入力を用いた攻撃方法、そしてそれらに対抗する方法を知ることで、Webアプリケーションへの攻撃の75%以上を回避するのに不可欠なツールを入手したも同然です。この画期的なコースに参加してJavaアプリケーションを保護する知識を身につけてください。

  • Day 1
  • Day 2
  • Day 3
  • Day 4
Day 1

Data Validation

不正なデータ入力値チェックは、現在最も一般的なWebアプリケーション脆弱性の根源です。クロスサイトスクリプティング(XSS)は、最も広く報じられるWebアプリケーションが抱える問題となりました。Webアプリケーションセキュリティに関する団体WASC(Web Application Security Consortium)が、インターネット上の80%以上のWebサイトがこの攻撃に対して脆弱であると評価するに至っています。
初日は、XSS、CSRF、SQLインジェクション、HTTPレスポンス分割やパラメータ操作といった、最も一般的なWebアプリケーション脆弱性について学習します。こういった問題の発見方法と、稼働中のアプリケーションでの再現方法を学習します。そして、Javaコードの中で実際にこうした脆弱性を修正する様々な方法を試行します。
本コースは演習中心です。一般的な攻撃の回避を可能にする、実践的な入力値チェックのテクニックを利用することができます。

  • Webアプリケーションへの攻撃
    • クロスサイトスクリプティング
    • クロスサイトリクエストフォージェリ(CSRF)
    • SQLインジェクション
    • HTTPレスポンス分割
    • パラメータ操作
  • Webアプリケーションプロキシ
    • parosの利用
  • 入力値チェックの考察
    • 文字エンコード
    • 入力値検証
    • 出力エンコード
    • ブラックリストとホワイトリスト
  • 入力値チェックのテクニック
    • 正規表現
    • サーブレットフィルタ
    • HTMLエンコード
    • Strutsを用いた入力値検証
    • CAPTCHA
    • PreparedStatement
    • ストアドプロシージャ
    • アスペクト指向プログラミング(AOP)
Day 2

Authentication & Session Management

十分でない認証やセッション管理は、システムの完全性を侵害する可能性をはらむ日常的な課題 です。そのような脆弱な認証保護は、最も機密性の高い情報、すなわちあなた自身の個人情報をアタッカーの前に晒す可能性があります。こうした脆弱性を作り込まないための、 強固な認証保護の設計および コーディングのためにできることを一から学習します。

JEEコンテナベースの認証の使い方と、ベーシック認証およびフォームベース 認証の設定方法 学習します。Springフレームワークで広く利用される、 評価の高いセキュリティシステムであるAcegiについても学習します。本コースは演習中心です。最後は、適切な認証コントロールによって保護されたアプリケーションに、学習した全てを投入します。

  • 認証攻撃
    • ブルートフォース攻撃
    • 脆弱なパスワード管理
    • パスワードの初期化
    • 秘密の質問
    • 脆弱なセッション管理
  • 保護セッション
    • SSLの使用
    • セッションハイジャック
    • セッションの固定化(Session Fixation)
  • 認証
    • JEEコンテナベース認証
    • ベーシック認証
    • フォームベース認証
    • クライアント証明書
    • アカウントのロックアウト
    • パスワードポリシー
  • Acegi Security System for Spring
    • Acegiの使用
  • 暗号化
    • Jasypt
Day 3

Access Control & Java Security APIs

不正なアクセスコントロールは、承認されていないユーザによる機密情報や機能へのアクセスを促します。本モジュールでは、承認、アクセスコントロールリスト、Java認証承認サービス(JAAS)について学習します。ロギング、およびその重要性に匹敵する、Javaの例外処理を使用したエラーへの対処法やtry/catch/finally構造を含む、その他のセキュリティトピックについても触れます。演習では、Java Secure Socket Extension (JSSE)とJava Cryptography Architecture(JCA)を使用して、通信中および保管されているデータの両方を暗号化するコード記述も実践します。レースコンディション、およびJavaの同期特性を利用し、それらを回避する方法についても学習します。

  • アクセスコントロール/承認
    • ACL
    • JAAS
  • エラー対処
    • 例外処理
    • try/catch/finallyの使用
  • ロギング
    • java.util.logging
  • レースコンディション
    • 同期の利用
  • 暗号化
    • JSSEによる送信中データの暗号化
    • JCAによる保管データの暗号化
Day 4

Java Language & JRE Security Topics

Javaは、多くのミッションクリティカルなアプリケーションの開発に有効な言語です。そのため、セキュリティ特性およびJava言語そのものやJavaランタイム環境(JRE)の実装について理解することが不可欠です。大量の演習を通じて、セキュリティマネージャやコード権限の管理方法、JARファイルのシーリング方法と署名方法について学習します。演習事例から、安全なコードを記述する際に留意すべきStringクラスの不変性、integer型およびdouble型のオーバーフロー、数値に関するJava言語の特性についても学習します。

  • java.lang.Stringクラスの不変性
  • integer型およびdouble型のオーバーフロー
  • ArrayList/Vectorのセキュリティ留意点
  • アクセス修飾子
  • 内部クラス
  • ガベージコレクタ
  • セキュリティマネージャとコード権限
  • JARシーリング
  • JARへの署名
本サイトに記載されている、各会社名、各製品名は、各社の商標または登録商標です。