「Use After Free」の版間の差分
提供: セキュリティ
(ページの作成:「Use After Free (use-after-free, 解放済みメモリ使用) とは、メモリを解放した後で、開放した領域を使用してしまうことをいい...」) |
|||
行7: | 行7: | ||
== 概要 == | == 概要 == | ||
− | |||
[[Use After Free]] は、 すでに解放(free)したポインタを使用することです。 | [[Use After Free]] は、 すでに解放(free)したポインタを使用することです。 | ||
行13: | 行12: | ||
== 例 1 == | == 例 1 == | ||
− | |||
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
#include <stdio.h> | #include <stdio.h> | ||
行51: | 行49: | ||
== 関連項目 == | == 関連項目 == | ||
+ | * [[Heap Spray]] | ||
* [[脆弱性]] | * [[脆弱性]] | ||
* [[バッファオーバーフロー]](Buffer Overflow) | * [[バッファオーバーフロー]](Buffer Overflow) |
2014年12月20日 (土) 02:36時点における最新版
Use After Free (use-after-free, 解放済みメモリ使用) とは、メモリを解放した後で、開放した領域を使用してしまうことをいいます。解放済のメモリを参照するとプログラムがクラッシュする可能性があります。
読み方
- Use After Free
- ゆーず あふたー ふりー
- 解放済みメモリ使用
- かいほうずみ めもり しよう
概要
Use After Free は、 すでに解放(free)したポインタを使用することです。
解放した、もしくは削除したあとでヒープに確保したメモリを使うと、システムは未定義の振る舞いをします。
例 1
#include <stdio.h> #include <stdlib.h> #include <string.h> #define BUF1 512 #define BUF2 ((BUF1/2) - 8) int main (int argc, char *argv[]) { char *b1 = (char *) malloc(BUF1); char *b2 = (char *) malloc(BUF1); free (b2); char *b3 = (char *) malloc(BUF2); char *b4 = (char *) malloc(BUF2); strncpy (b2, argv[1], BUF1-1); free (b1); free (b2); free (b3); return 0; }
例 1
int abrt = 0; char *ptr = (char *) malloc (SIZE); if (err) { abrt = 1; free(ptr); } ... if (abrt) { logError ("abort", ptr); }
関連項目
- Heap Spray
- 脆弱性
- バッファオーバーフロー(Buffer Overflow)