セキュアプログラミング
担当教員
授業の到達目標及びテーマ
ソフトウェアの脆弱性を生む要因を学ぶとともに、脆弱性を回避するプログラム実装技術や、安全なソフトウェア実装を支える暗号技術について学ぶ。
授業の概要と方法
C/C++言語の実行時のメモリ管理を学び、不注意なメモリ管理が引き起こす脆弱性について様々な実例をもとに説明する。また、脆弱性を回避する技術について学び、実際にプログラムを組むことによって、理解を深める。また、Webサービスにおける脆弱性に関しても説明し、脆弱性を回避するプログラム技術や、暗号・認証技術を理解する。 本講義では、C/C++言語のプログラミング知識を前提とする。
授業計画
| 回 | テーマ | 内容 |
|---|---|---|
| 1 | セキュリティと脆弱性 | セキュリティとは何か、また脆弱性とは何かについて説明する。 |
| 2 | 実習環境の準備 | この後の講義で用いる実習環境の準備を行うとともに、C/C++で作成したプログラムを実習環境上で動作させる。 |
| 3 | C/C++におけるメモリ操作と文字列に関わる問題 | C/C++におけるポインタによるメモリ操作を理解する。また、主に文字列操作で発生する、セキュリティ上の問題を理解する。 |
| 4 | ソフトウェアの実行モデルとメモリ管理 | コンピュータの実行モデルを学び、ウィルス・ウォームなどが動く仕組みを理解する。 |
| 5 | コードインジェクション | メモリ管理に起因する攻撃の例としてコードインジェクションについて学ぶ。 |
| 6 | アークインジェクション | コードインジェクションより洗練された攻撃であるアークインジェクションについて理解する。 |
| 7 | 文字列に関わる脅威の緩和 | 文字列に関するセキュリティ的な問題が発生しにくいプログラミング手法について学ぶ。 |
| 8 | ポインタ偽装 | ポインタ偽装と呼ばれるクラスの攻撃について学ぶ。 |
| 9 | Webにおけるセキュリティ | Webプログラミングにおけるセキュリティ、特にクロスサイトスクリプティングについて学ぶ。 |
| 10 | CGIとセキュリティ | Webによる動的コンテンツ提供の場で欠かせない、CGI(Common Gateway Interface)について理解する。 |
| 11 | 暗号・認証技術 | 暗号や認証と言った、セキュリティ保持のための基礎技術について学ぶ。 |
| 12 | HTTPの認証技術 | HTTPで定義されているベーシック認証・ダイジェスト認証について学ぶ。 |
| 13 | SSLによる認証と暗号化通信 | 認証と暗号化通信を提供するSSL (Secure Socket Layer)の仕組みについて学ぶ。 |
| 14 | OpenSSLによる暗号・認証 | OpenSSLを用いて、暗号や認証技術を理解する。 |
| 15 | 試験 | 試験を実施する |
授業外に行うべき学習活動
講義で出される課題のプログラミングを行う。
テキスト
Webからの配付資料による
参考書
・C/C++セキュアコーディング、R.C.Seacord 著、歌代和正監訳(アスキー)
成績評価基準
試験と課題による。
情報機器使用
貸与ノートPCを持参すること。
前年度の授業改善アンケートからの気づき
特になし。