全7回終了いたしました。
ご参加いただきました皆様、誠にありがとうございました。
スケジュール | ||
---|---|---|
開催日 | タイトル | |
2008-06-24 | 第1回 <整 数> | |
2008-07-02 | 第2回 <文字列> | |
2008-08-06 | 第3回 <動的メモリ管理> | |
2008-09-03 | 第4回 <ファイル入出力>Part1 | |
2008-10-01 | 第5回 <ファイル入出力>Part2 ディレクトリトラバーサル | |
2008-11-05 | 第6回 <ファイル入出力>Part3 Race Condition | |
2008-12-03 | 第7回 <書式指定文字列> |
プログラム(全回共通) | |
---|---|
15:30 - | 受付開始 |
16:00 - 17:00 | セッション1 |
17:00 - 17:10 | ~~~~ 休 憩 ~~~~ |
17:10 - 18:10 | セッション2 |
第 1 回 <整 数>
C/C++ 言語において整数型の取扱いに起因する脆弱性はこれまであまり重要視されていませんでしたが、その数は確実に増加しています。
攻撃者は、プログラムが本来想定する入力範囲に関わらず、異常動作を引き起こす入力値を見つけ出すことで脆弱性を利用しようとします。
第1回<整数>では、C/C++ 言語における整数型の取扱いに関する仕様と、そこから引き起こされるセキュリティ上の問題について体系的に解説します。
- 整数型の取り扱いについて
- 整数型の変換について(格上げ、整数変換順位、通常の算術型変換)
- 整数のエラー条件
- 脆弱性につながる整数演算
- 脆弱性(整数オーバーフロー、符号エラー、切り捨てエラー) など
第 2 回 <文字列>
ユーザとソフトウエア間に発生するデータのやりとりの大部分は文字列によって行われます。
また、プログラム間でのデータ交換も文字列形式で行われるようになり、その結果、文字列表現や文字列管理、文字列操作における弱点がソフトウエア脆弱性を生み出しています。
第2回<文字列>では、C/C++ 言語における文字列操作、一般的なセキュリティ上の欠陥と、その結果発生する脆弱性と対処方法について解説します。
- C/C++ における文字列の特性
- 犯しやすい文字列操作の間違い
- 文字列の脆弱性
- プロセスのメモリ構成
- スタック破壊の仕組み
- コードインジェクション、アークインジェクションの仕組み
- 脅威の緩和方法 など
第 3 回 <動的メモリ管理>
C/C++ ではプログラムが必要とするメモリを動的に取得・使用することが可能です。大量のデータを扱うアプリケーションやリソースが限られている組み込み機器など、動的メモリ管理機能を使いこなさなければならない場面は多くあります。
動的メモリ管理に関する脆弱性が存在する場合、DoS 攻撃や任意のコード実行に使われる危険があります。
C/C++ が提供している動的メモリ管理の仕組みを正しく理解し、異常な状態に正しく対処できるようなコードを作ることが求められているのです。
第3回動的メモリ管理では, C/C++ における動的メモリ管理の仕組みとすでに知られている脆弱性の例、また安全なコードを書くための手法について解説します。
- C/C++ における動的メモリ管理
- 動的メモリ管理に関する脆弱性
- Doug Lea メモリアロケータ
- 動的メモリ管理とバッファオーバフロー
- 動的メモリ管理に関する脆弱性を防ぐ など
第 4 回 <ファイル入出力> Part1
第4回ファイル入出力 Part1 では Linux や UNIX など POSIX システムにおけるファイルシステムの仕組み、C/C++ におけるファイル入出力、プロセスの権限とその管理の方法について学ぶ。
setuid() などを使用したプロセス権限管理は、適切かつ十分に行われないと様々な脆弱性を作り込むことにつながる危険性がある。また、プロセス権限の管理を行うだけでは十分とは言えず、ファイル許可の管理を適切に行う必要があり、そのなかでプログラマが気をつけねばならないポイントについて解説する。
- ファイルシステム
- C/C++ の入出力
- 識別、所有者、権限、パーミッション
- プロセス権限
- 権限の変更、管理
- パーミッションの管理 など
第 5 回 <ファイル入出力> Part2 ディレクトリ トラバーサル
第5回ファイル入出力 Part2 では 主にパス名の解決にまつわる問題について取り上げる。取り上げるトピックは以下の通り。
- ディレクトリトラバーサル
- 等値エラー
- シンボリックリンク、ハードリンク
- 正規化
- 特殊ファイル
- サンドボックス など
第 6 回 <ファイル入出力> Part3 Race Condition
プログラムは、スレッドやプロセス、タスクなどの単位で 2つ以上の独立した処理を同時に実行する並列処理を行うことがある。この並列処理が不適切に管理された場合、競合状態が発生し、ソフトウェアの脆弱性につながることがある。
第6回ファイル入出力 Part3 では競合状態に関する脆弱性のメカニズムとその脅威の緩和方法について解説する。
- 並列処理
- 検査・使用のタイミング
- ロックファイルとファイルロック
- ファイルシステムへの攻撃
- 脅威の緩和方法 など
第 7 回 <書式指定文字列>
C99 標準では書式指定文字列と printf() や sprintf() に代表される可変個の引数を受け付ける書式指定出力関数を定義している。これら書式指定の仕組みは UNIX のコマンド行プログラムなどによく見られるが、任意のコードを実行するために悪用される危険性を持っている。
第7回書式指定文字列では、書式指定出力関数に対する攻撃の手法を解説し、その脅威を緩和する方法を紹介する。
- 書式指定出力
- 可変引数関数
- 書式指定出力関数
- 書式指定出力関数に対する攻撃
- スタックのランダム化
- 脅威の緩和方法
- 代表的な脆弱性 など