これまでにC/C++ セキュアコーディングセミナーで使用した講義資料を公開しています。2010年度にセミナを実施した、文字列、整数、動的メモリ管理、書式指定文字列、CERT C セキュアコーディングスタンダード、ROSE については、それぞれ最新版の資料を掲載しています。
文字列
ユーザとソフトウエア間に発生するデータのやりとりの大部分は文字列によって行われます。
また、プログラム間でのデータ交換も文字列形式で行われるようになり、その結果、文字列表現や文字列管理、文字列操作における弱点がソフトウエア脆弱性を生み出しています。
文字列では、C/C++ 言語における文字列操作、一般的なセキュリティ上の欠陥と、その結果発生する脆弱性と対処方法について解説します。
- C/C++ における文字列の特性
- 犯しやすい文字列操作の間違い
- 文字列の脆弱性
- プロセスのメモリ構成
- スタック破壊の仕組み
- コードインジェクション、アークインジェクションの仕組み
- 脅威の緩和方法 など
公開日 | タイトル | PGP署名 | |
---|---|---|---|
2011-03-31 | 文字列 | 3.57MB デジタル 署名付 |
PGP 署名 |
整数
C/C++ 言語において整数型の取扱いに起因する脆弱性はこれまであまり重要視されていませんでしたが、その数は確実に増加しています。
攻撃者は、プログラムが本来想定する入力範囲に関わらず、異常動作を引き起こす入力値を見つけ出すことで脆弱性を利用しようとします。C/C++ 言語における整数型の取扱 いに関する仕様と、そこから引き起こされるセキュリティ上の問題について体系的に解説します。
- 整数型の取り扱いについて
- 整数型の変換について (格上げ、整数変換順位、通常の算術型変換)
- 整数のエラー条件
- 脆弱性につながる整数演算
- 脆弱性 (整数オーバーフロー、符号エラー、切り捨てエラー) など
公開日 | タイトル | PGP署名 | |
---|---|---|---|
2011-03-31 | 整数 | 3.12MB デジタル 署名付 |
PGP 署名 |
動的メモリ管理
C/C++ ではプログラムが必要とするメモリを動的に取得・使用することが可能です。大量のデータを扱うアプリケーションやリソースが限られている組み込み機器など、動的メモリ管理機能を使いこなさなければならない場面は多くあります。動的メモリ管理に関する脆弱性が存在する場合、DoS 攻撃や任意のコード実行に使われる危険があります。 C/C++ が提供している動的メモリ管理の仕組みを正しく理解し、異常な状態に正しく 対処できるようなコードを作ることが求められているのです。
動的メモリ管理では、 C/C++ における動的メモリ管理の仕組みとすでに知られている脆弱性の例、また安全なコードを書くための手法について解説します。
- C/C++ における動的メモリ管理
- 動的メモリ管理に関する脆弱性
- Doug Lea メモリアロケータ
- 動的メモリ管理とバッファオーバフロー
- 動的メモリ管理に関する脆弱性を防ぐ など
公開日 | タイトル | PGP署名 | |
---|---|---|---|
2011-03-31 | 動的メモリ管理 | 2.28MB デジタル 署名付 |
PGP 署名 |
書式指定文字列
C99 標準では書式指定文字列と printf() や sprintf() に代表される可変個の引数を受け付ける書式指定出力関数を定義しています。これら書式指定の仕組みは UNIX のコマンド行プログラムなどによく見られますが、任意のコードを実行するために悪用される危険性を持っています。書式指定出力関数に対する攻撃の手法を解説し、その脅威を緩和する方法を紹介します。
- 書式指定出力
- 可変引数関数
- 書式指定出力関数
- 書式指定出力関数に対する攻撃
- スタックのランダム化
- 脅威の緩和方法
- 代表的な脆弱性 など
公開日 | タイトル | PGP署名 | |
---|---|---|---|
2011-03-31 | 書式指定文字列 | 1.78MB デジタル 署名付 |
PGP 署名 |
CERT C セキュアコーディングスタンダード
セキュアコーディングを実践するためには、どのようなコーディングが良くてどのようなコーディングがいけないのか、分かりやすく明確に判断できることが望まれます。そのようなガイドラインをまとめたものが「CERT C セキュアコーディングスタンダード」です。これは、信頼性の高い安全なプログラムをつくるために、全てのC言語プログラマが知っておくべきガイドライン集です。
本セミナでは CERT C セキュアコーディングスタンダードをめぐる状況を説明するとともに、個々のルール等の解説、セキュアコーディングスタンダードの活用方法などをご紹介します。
- CERT C セキュアコーディングスタンダード概論 - 目的、開発体制、言語規格との関係
- CERT C セキュアコーディングスタンダード各論 - スタンダードの構成、各ガイドラインの読みかた
- 活用方法の提案
公開日 | タイトル | PGP署名 | |
---|---|---|---|
2011-03-31 | CERT C セキュアコーディングスタンダード | 1.78MB デジタル 署名付 |
PGP 署名 |
ROSE
オープンソースのソースコード解析プラットフォームであるROSEを使って開発された CERT C セキュアコーディングルールのチェッカーを紹介し、簡単なデモンストレーションを交えながらツールの使い方を解説します。
また、必要なツールをインストールした Linux イメージを使い、実際にチェッカの使用やチェッカルールの開発を体験していただきます。
公開日 | タイトル | PGP署名 | |
---|---|---|---|
2011-03-31 | ROSE | 2.29MB デジタル 署名付 |
PGP 署名 |
File I/O part1: UNIXの権限とパーミッション
File I/O part1 では Linux や UNIX など POSIX システムにおけるファイルシステムの仕組み、C/C++ におけるファイル入出力、プロセスの権限とその管理の方法について解説します。setuid() などを使用したプロセス権限管理は、適切かつ十分に行われないと様々な脆弱性を作り込むことにつながる危険性があります。また、プロセス権限の管理を行うだけでは十分とは言えず、ファイル許可の管理を適切に行う必要があり、そのなかでプログラマが気をつけねばならないポイントについて解説します。
- ファイルシステム
- C/C++ の入出力
- 識別、所有者、権限、パーミッション
- プロセス権限
- 権限の変更、管理
- パーミッションの管理 など
公開日 | タイトル | PGP署名 | |
---|---|---|---|
2010-03-24 | File I/O part1: UNIXの権限とパーミッション | 1.05MB デジタル 署名付 |
PGP 署名 |
File I/O part2: ファイルシステムの脆弱性
File I/O part2 では主にパス名の解決にまつわる以下の問題について取り上げます。
- ディレクトリトラバーサル
- 等値エラー
- シンボリックリンク、ハードリンク
- 正規化
- 特殊ファイル
- サンドボックス など
公開日 | タイトル | PGP署名 | |
---|---|---|---|
2010-03-24 | File I/O part2: ファイルシステムの脆弱性 | 1.37MB デジタル 署名付 |
PGP 署名 |
File I/O part3: ファイル入出力と競合状態
プログラムは、スレッドやプロセス、タスクなどの単位で 2つ以上の独立した処理を同時に実行する並列処理を行うことがあります。この並列処理が不適切に管理された場合、競合状態が発生し、ソフトウェアの脆弱性につながることがあります。
File I/O part3 では競合状態に関する脆弱性のメカニズムとその脅威の緩和方法について解説します。
- 並列処理
- 検査・使用のタイミング
- ロックファイルとファイルロック
- ファイルシステムへの攻撃
- 脅威の緩和方法 など
公開日 | タイトル | PGP署名 | |
---|---|---|---|
2010-03-24 | File I/O part3: ファイル入出力と競合状態 | 1.47MB デジタル 署名付 |
PGP 署名 |