.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

詳細

データ実行防止機能(DEP)

コンパイラに依る対策

開発環境やコンパイラによってはサポートされないことがある。

SSP(Stack Smashing Protection)

ASLR(Address Space Layout Randomization)

PIE(Position Independent Executable)

ASLRに加え、text領域のランダム化も行う(Full-ASLRとも言う)。

AF(Automatic Fortification)

脆弱性の原因となるような関数をコンパイル時に
別の安全性の高い同じ機能を持つ関数へと置換する。

BOFを起こす関数

以下の様に、BOFを引き起こす可能性がある引数チェックされない関数が多い。

関数一覧

#関数代替案/対策用法備考
1char *gets(char *s)
標準入力から一行を取り込む。
char *fgets(char *s, int n, FILE *stream);fgets(dst , sizeof(dst) , stdin);gets と異なり
・引数に最大読み込み文字数を指定する。
・改行文字も 1文字として数える。
・実際読むのはn-1で最後は終端ナル(NULL)文字になる。
 ・終端記号は、末尾の改行を置換ではなく改行の後ろに付与
 ・最大文字数を超えた場合でも終端ナル(NULL)文字を保証
2char *strcpy(char *dst, const char *src);
src文字列をdst文字列バッファに'\0' までコピー
void *memset(void *buf, int ch, size_t n);
char *strncpy(char *dst, const char *src, size_t n);
memset(dst, 0 , sizeof(dst));
-> strncpy(dst, src, sizeof(dst) - 1);
・コピーされる文字の長さは、src長とnのいずれか小さい方。
・src長がnより短い場合、終端ナル(NULL)文字を保証
3char *strcat(char *dst, const char *src);
src文字列をdst文字列バッファに'\0' まで連結
char *strncat(char *dst, const char *src, size_t n);strncat(dst, src, sizeof(dst) - strlen(dst) - 1)・文字列連結される文字の長さは、src長とnのいずれか小さい方。
・src長がnより短い場合、終端ナル(NULL)文字を保証
4int sprintf(char *dst, const char *format, ...);
可変個引数をstring.Format()的に処理しdst文字列バッファに格納。
sprintf(dst, ”%.{B}s”, data){B} = 書式指定子の精度(最大文字数)
= dstの要素数 - 書式指定子以外の文字数 - 1(終端ナル(NULL)文字)
5int snprintf(char *dst, size_t n, const char *format, ...);snprintf(dst, sizeof(dst), ”%s”, data)動作としては、fgets()に近く、実際読むのはn-1で最後は終端ナル(NULL)文字になる。
6int scanf(const char *format, ...);
標準入力から空白、タブ、改行で分割された文字列を読みstring.Format()的に処理し格納可変個引数に格納。
scanf(”%.{B}s”, dst){B} = 書式指定子の精度(最大文字数)
= dstの要素数 - 書式指定子以外の文字数 - 1(終端ナル(NULL)文字)
7int sscanf(char *src, const char *format, ...);
src文字列をstring.Format()的に処理し格納可変個引数に格納。
sscanf(src, ”%.{B}s”, dst){B} = 書式指定子の精度(最大文字数)
= dstの要素数 - 書式指定子以外の文字数 - 1(終端ナル(NULL)文字)
8int fscanf(FILE *fp, const char *format, ...);
ストリームをstring.Format()的に処理し格納可変個引数に格納。
fscanf(fp, ”%.{B}s”, dst){B} = 書式指定子の精度(最大文字数)
= dstの要素数 - 書式指定子以外の文字数 - 1(終端ナル(NULL)文字)
9getchar();, fgetc(fp);, getc(fp);
入力から一文字を取り込む。
使用する際にバッファ境界チェックを行う。

パターン

CRTセキュリティ強化

個別にセキュリティ対策がされているケースもある。

その他

Libsafe

まとめ

OS

データ実行防止機能(DEP)

コンパイラに依る対策

プログラミング

参考

各種領域

スタック領域

ヒープ領域

プログラム領域

となる。

その他

Wikipedia


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS