「buffer overflow」の編集履歴(バックアップ)一覧はこちら
「buffer overflow」(2008/04/06 (日) 18:38:19) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*目的
Electric Fenceを使ってheapの不正アクセスを検出する
*コード
このsourceは10文字分しか確保していないのに20文字分使っています
#include <stdio.h>
#include <string.h>
#include <malloc.h>
int
main()
{
char *buf;
int i;
buf = (char*)malloc(10);
for (i = 0; i < 20; i++) {
fprintf(stderr, "%d\n", i);
buf[i]=i;
}
return(0);
}
*実行
$ gcc -o mem mem.c -g
$ ./mem # 不正なメモリアクセスをしているのに正常終了する
$ sudo apt-get install electric-fence # electric fenceをインストール
$ LD_PRELOAD=/usr/lib/libefence.so ./mem # 起動時にshared libraryをloadしmemを実行する
0
1
2
3
4
5
6
7
8
9
10
11
12
Segmentation fault (core dumped) # 10byte確保しても4byte境界によって12byteにalignmentされるため12で落ちる
$ env EF_ALIGNMENT=1 LD_PRELOAD=/usr/lib/libefence.so ./mem # alignmentをoffしmemを実行
0
1
2
3
4
5
6
7
8
9
10
Segmentation fault (core dumped)
*目的
Electric Fenceを使ってheapの不正アクセスを検出する
*コード
このsourceは10文字分しか確保していないのに20文字分使っています
#include <stdio.h>
#include <string.h>
#include <malloc.h>
int
main()
{
char *buf;
int i;
buf = (char*)malloc(10);
for (i = 0; i < 20; i++) {
fprintf(stderr, "%d\n", i);
buf[i]=i;
}
return(0);
}
*実行
$ gcc -o mem mem.c -g
$ ./mem # 不正なメモリアクセスをしているのに正常終了する
$ sudo apt-get install electric-fence # electric fenceをインストール
$ LD_PRELOAD=/usr/lib/libefence.so ./mem # 起動時にshared libraryをloadしmemを実行する
0
1
2
3
4
5
6
7
8
9
10
11
12
Segmentation fault (core dumped) # 10byte確保しても4byte境界によって12byteにalignmentされるため12で落ちる
$ env EF_ALIGNMENT=1 LD_PRELOAD=/usr/lib/libefence.so ./mem # alignmentをoffしmemを実行
0
1
2
3
4
5
6
7
8
9
10
Segmentation fault (core dumped)
buffer underflow
env EF_PROTECT_BELOW=1 LD_PRELOAD=/usr/lib/libefence.so ./mem
| EF_PROTECT_FREE 1 | free() 後のアクセス不許可 |
| EF_ALLOW_MALLOC_0 0 | malloc(0) の不許可 |
| EF_PROTECT_BELOW 0 | ヒープの上へのアクセス不許可 |
| EF_PROTECT_BELOW 1 | ヒープの下へのアクセス不許可 |