C++
2021-11-14 (日) 12:01:51
C++ †
セキュリティ関連 †
BOF攻撃の対策(引数にサイズを指定しない関数) †
- 引数にサイズを指定できる関数を使う
- gets() => fgets()
- strcpy() => strncpy()
- strcat() => strncat()
- sprintf() =>snprintf()
- vsprintf() => vsnprintf()
- 引数のformatで精度を指定する
- scanf()
- sscanf()
- fscanf()
- vfscanf()
- vscanf()
- vsscanf()
- バッファ境界をチェックする
- getchar()
- fgetc()
- getc()
- 取り扱いに注意が必要な文字
- NULL文字(0x00)
- 空白(0x20)
- タブ(0x09)
- 改行(0x0a)
BOF攻撃の対策(system関数) †
- 引数にファイル名として使えない文字(メタ文字)が含まれていないかチェックする
- 注意が必要な文字
- ;
- /
- |
BOF攻撃の対策() †
- StackGuard
- サブルーチンを呼び出す際にスタック中にカナリア値を埋め込み、サブルーチンの実行後にカナリア値が変わっていないか確認することで、BOF攻撃が行われていないか検知する仕組み(GNU Cコンパイラの拡張版)
- SSP
- Stack Smashing Protection
- コンパイラにより生成された中間言語にカナリア値を埋め込む技術。
- Libsafe
- BOFが発生する関数の呼び出しを検知し、その関数を実行する前にBOFを検知する関数を実行させてBOF攻撃を防止するライブラリ
- Automatic Fortification
- コンパイル時に、BOFが発生する関数を別の安全な関数に置き換える技術(GCC 4.0以降)
関連サイト †
- バッファオーバーラン ~その2・「危険な関数たち」~ (IPA)
https://www.ipa.go.jp/security/awareness/vendor/programmingv1/b06_02.html