情報処理安全確保支援士の勉強 セキュアプログラミング

昨日の勉強の記録

午前2の過去問12問
教科書40ページ

教科書では、C/C++言語のプログラミング留意点、Javaの概要、ECMAScriptの概要とプログラミングの留意点を学習した。

C/C++言語のプログラミングの留意点
ここでは、主にBOFの危険性が説明されていた。
BOF攻撃の標的となる文字列操作にて、引数のサイズチェックを行わない関数となっている。
また、問題となる関数は決まっていて、以下が該当し対策も明確である。

・gets関数 → fgets関数を使用して、読み取りサイズを指定する
・strcpy関数 → strncpy関数を使用して、読み取りサイズを指定する
・strcat関数 → strncat関数を使用して、読み取りサイズを指定する
・sprintf関数 → format指定で、文字数を限定する
・scanf関数 → format指定で、文字数を限定する
・sscanf関数 → format指定で、文字数を限定する
・fscan関数 → format指定で、文字数を限定する

また、system関数はC/C++のプログラムからOSのコマンドプロセッサを呼び出して
引数として渡したコマンドを実行する。
そのため、OSの機能を用いて重大な問題を引き起こす事が可能となる。
この問題に対応するため、以下のチェックを行う必要がある。

・コマンドとして特別な意味を持つメタ文字が含まれていないか?
・引数の数が適切か?
・文字列の長さは適切か?


Javaの概要
Javaでは、明確に脆弱性のある関数が存在するわけではなく、プログラミングの品質によって
レースコンディション(同時更新に不整合)や、カプセル化していないことによる意図していない場所で起こる変数値の変更や
不正なクラスの継承などが紹介されていた。これらは言語の脆弱性というよりプログラミングの品質の問題なので
試験では出題されなそう。

また、Javaでは、サンドボックスという機構を用いてセキュアにプログラムを実行できるようになっている。
サンドボックスでは、プログラムをセキュリティが確保された領域で動作する事で、
明確に権限を与えられなければ、重要なシステム資源にアクセスできない仕組みとなっているため
プログラムが不正な操作や動作が出来ないようにする仕組みである。

ECMAScriptの概要とプログラミングの留意点
ECMAScriptとは、Webブラウザで実行されるスクリプト言語Javaスクリプトのようなものらしい。
この言語では、データ型の扱いが柔軟であったり、文末のセミコロンが必須でなかったり、
文の途中で空白、改行、タブを含むことが可能であったりとC/C++Javaに比べて柔軟なプログラミングが可能であるがこの特性が
バグの温床となるため、柔軟性に頼った記法は避けるべきと紹介されていた。

また、ECMAScriptを使用した技術として、Ajaxが紹介されていた。
AjaxはGoogleMapで使われている技術である。
AjaxではXMLHttpRequestというAPIを使用する。
XMLHttpRequestは各種ブラウザに実装されている組み込みオブジェクトであり、
Ajaxで使用している非同期通信をサポートする。

また、AjaxではJsonという技術を用いてサーバーとデータのやり取りを行い、
ドメインを超えてもJsonの仕組みを利用できるJSONPという技術も使用されている。