buffer overflow


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

目的

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 ヒープの下へのアクセス不許可
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。