๐ŸŒ‡โ”‚System_Study/๐Ÿ“•โ”‚Dreamhack_Hacking

Memory Corruption: Stack Buffer Overflow

Jastes 2022. 4. 21. 11:15


์Šคํƒ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ(Stack Buffer Overflow)

์„ธ๊ณ„ ์ตœ์ดˆ์˜ ์›œ์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๋ชจ๋ฆฌ์Šค ์œ”๋„ ์ด ๊ณต๊ฒฉ์„ ํ†ตํ•ด ์ „ํŒŒ๋จ

 

๋ณด์•ˆ ๊ณต๋ถ€๋ฅผ ๋ชจ๋ฅด๋Š” ๊ฐœ๋ฐœ์ž๋„ ์•Œ๋งŒํผ ์œ ๋ช…ํ•˜๊ณ  ์—ญ์‚ฌ๊ฐ€ ์˜ค๋ž˜๋œ ์ทจ์•ฝ์ ์ž…๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ์˜ค๋žœ ์—ญ์‚ฌ๋ฅผ ์ž๋ž‘ํ•˜๋Š” ์ด ์ทจ์•ฝ์ ์€ ์•„์ง๋„ ๋งŽ์€ SW์—์„œ ๋ฐœ๊ฒฌ๋ฉ๋‹ˆ๋‹ค.
CVE details์— ๋”ฐ๋ฅด๋ฉด ์Šคํƒ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ํฌํ•จํ•œ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ์ทจ์•ฝ์ ์€ ๋งŽ์ด ๋†’์•„์š”(4์œ„)

๊ทธ๋Ÿผ ์Šคํƒ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์›์ธ์ด ๋ฌด์—‡์ธ์ง€, ๊ทธ๋ฆฌ๊ณ  ์ด ์ทจ์•ฝ์ ์ด ์–ด๋–ค ๋ฌธ์ œ๋กœ ์ด์–ด์งˆ์ง€ ๊ณต๋ถ€ ใ„ฑ


BOF์— ํ•„์š”ํ•œ ์šฉ์–ด ๊ฐ„๋‹จ ์ •๋ฆฌ

  1. ๋ฒ„ํผ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„
  2. sfp๋Š” ์Šคํƒ ๋ฒ ์ด์Šค ๊ฐ’์„ ์˜๋ฏธ
    - sfp๋Š” ์Šคํƒ ์ฃผ์†Œ๊ฐ’์„ ๊ณ„์‚ฐํ•  ๋•Œ ํ˜„์žฌ ์Šคํƒ๊ฐ’์˜ ๊ธฐ์ค€ ํ•„์š”ํ•œ
    ํ”„๋ ˆ์ž„ ํฌ์ธํ„ฐ ๊ฐ’ ์ง€์ •(4 or 8byte) rbp(or ebp)๋Š” ํ•œ ๊ฐœ๋ผ ํ•จ์ˆ˜ ์‹œ์ž‘๋•Œ๋งˆ๋‹ค ๋ฐ”๋€Œ๋Š”๋ฐ
    ๊ทธ ์ „์˜ ebp๊ฐ’์„ ์Šคํƒ์— ์ €์žฅ ๋•Œ๋ฌธ์— ํ•„์š”
  3. ret๋Š” return address ์•ฝ์–ด
    - ํ•จ์ˆ˜ ๋ฐ˜ํ™˜ ์‹œ ์›๋ž˜ ํ๋ฆ„๋Œ€๋กœ ๊ฐ€๊ธฐ ์œ„ํ•ด ํ•„์š” ์—ฌ๊ธฐ๋ฅผ ๋ฎ์–ด๋ฒ„๋ฆฌ๋ฉด ์ž์‹ ์ด ์›ํ•˜๋Š”๋ฐ๋กœ ๊ฐ€๋Šฅํ•ด์ง
    ๊ทธ๋Ÿฌ๊ธฐ์— ๋งค์šฐ ์ค‘์š”ํ•˜์ฃ 

 


์Šคํƒ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ

์Šคํƒ์˜ ๋ฒ„ํผ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฒ„ ํ”Œ๋กœ์šฐ๋ฅผ ๋œปํ•จ


๋ฒ„ํผ(Buffer)

์ผ์ƒ์—์„  '์™„์ถฉ ์žฅ์น˜'๋ผ๋Š” ๋œป
CS(Computer Science)์—์„  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชฉ์ ์ง€๋กœ ์ด๋™ํ•˜๊ธฐ ์ „์— ๋ณด๊ด€๋˜๋Š” ์ž„์‹œ ์ €์žฅ์†Œ

์ˆ˜์‹ ์ธก๊ณผ ์†ก์‹ ์ธก ์‚ฌ์ด์— ๋ฒ„ํผ๋ผ๋Š” ์ž„์‹œ ์ €์žฅ์†Œ๋ฅผ ๋‘๊ณ , ์ด๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•จ
์†ก์‹ ์ธก์€ ๋ฒ„ํผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ณ , ์ˆ˜์‹ ์ธก์€ ๋ฒ„ํผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด ์‚ฌ์šฉํ•จ 
์ด๋ ‡๊ฒŒํ•˜๋ฉด ๋ฒ„ํผ๊ฐ€ ๊ฐ€๋“ ์ฐฐ ๋•Œ๊นŒ์ง„ ์œ ์‹ค๋˜๋Š” ๋ฐ์ดํ„ฐ ์—†์ด ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. 

 

๋น ๋ฅธ ์†๋„๋กœ ์ด๋™ํ•˜๋˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์•ˆ์ •์ ์œผ๋กœ ๋ชฉ์ ์ง€์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์™„์ถฉ ์ž‘์šฉ์„ ํ•˜๋Š” ๊ฒƒ์ด ๋ฒ„ํผ์˜ ์—ญํ• !
์Šคํƒ์— ์žˆ๋Š” ์ง€์—ญ ๋ณ€์ˆ˜๋Š” '์Šคํƒ ๋ฒ„ํผ' / ํž™์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์€ 'ํž™ ๋ฒ„ํผ'๋ผ๊ณ  ๋ถˆ๋ฆผ

๐Ÿฆœ๋ฒ„ํผ๋ง

 ์ด๋Š” ๋ฒ„ํผ์—์„œ ์œ ๋ž˜๋œ ๋‹จ์–ด๋กœ, ์†ก์‹  ์ธก์˜ ์ „์†ก ์†๋„๊ฐ€ ๋Š๋ ค์„œ ์ˆ˜์‹  ์ธก์˜ ๋ฒ„ํผ๊ฐ€
์ฑ„์›Œ์งˆ ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค

๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ(Buffer Overflow)

๋ฌธ์ž ๊ทธ๋Œ€๋กœ ๋ฒ„ํผ๊ฐ€ ๋„˜์น˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ, ๋ฒ„ํผ๋Š” ์ œ๊ฐ๊ธฐ ํฌ๊ธฐ๋ฅผ ์ง€๋‹˜
 ๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ํฌ๊ธฐ๋ฅผ ์ง€๋‹ˆ๋ฉฐ, ๊ทธ ํฌ๊ธฐ๋ฅผ ๋„˜๋Š” ๋ฐ์ดํ„ฐ ๊ฐ’์ด ์˜ฌ๋•Œ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๋ฐœ์ƒ

๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋กœ ์ธํ•ด ๋ฉ”๋ชจ๋ฆฌ ์˜ค์—ผ

์ผ๋ฐ˜์ ์œผ๋กœ ๋ฒ„ํผ๋Š” ๋ฉ”๋ชจ๋ฆฌ์ƒ์— ์—ฐ์†ํ•ด ํ• ๋‹น๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ์–ด๋–ค ๋ฒ„ํผ์—์„œ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๋ฐœ์ƒํ•˜๋ฉด,
๋’ค์— ์žˆ๋Š” ๋ฒ„ํผ๋“ค์˜ ๊ฐ’์ด ์กฐ์ž‘๋  ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋Š” ๋ณดํ†ต์˜ ๊ฒฝ์šฐ ๋งค์šฐ ์‹ฌ๊ฐํ•œ ๋ณด์•ˆ ๋ฌธ์ œ๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํžˆ ์•Œ์•„๋ณด์ฃ 


์ค‘์š” ๋ฐ์ดํ„ฐ ๋ณ€์กฐ

BOF(Buffer OverFlow)๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ฒ„ํผ ๋’ค์— ์ฃผ์š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด..
ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€์กฐ๋จ์œผ๋กœ์จ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// Name: sbof_auth.c
// Compile: gcc -o sbof_auth sbof_auth.c -fno-stack-protector
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int check_auth(char *password) {
    int auth = 0;
    char temp[16];
    
    strncpy(temp, password, strlen(password));
    
    if(!strcmp(temp, "SECRET_PASSWORD"))
        auth = 1;
    
    return auth;
}
 
int main(int argc, char *argv[]) {
    if (argc != 2) {
        printf("Usage: ./sbof_auth ADMIN_PASSWORD\n");
        exit(-1);
    }
    
    if (check_auth(argv[1]))
        printf("Hello Admin!\n");
    else
        printf("Access Denied!\n");
}
  • main ํ•จ์ˆ˜
    • argv[1]์„ check_auth ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌํ•œ ํ›„, ๋ฐ˜ํ™˜ ๊ฐ’์„ ๋ฐ›์•„์˜ด
      - ๋ฐ˜ํ™˜ ๊ฐ’์ด 0์ด ์•„๋‹ˆ๋ผ๋ฉด "Hello Admin!"์„, 0์ด๋ฉด "Access Denied!"๋ผ๋Š” ๋ฌธ์ž์—ด ์ถœ๋ ฅ
  • check_auth ํ•จ์ˆ˜
    • 16byteํฌ๊ธฐ์˜ temp๋ฒ„ํผ์— ์ž…๋ ฅ๋ฐ›์€ ํŒจ์Šค์›Œ๋“œ ๋ณต์‚ฌ ํ›„, ์ด๋ฅผ "SECRET_PASSWORD" ๋ฌธ์ž์—ด๊ณผ ๋น„๊ต
      - ๋ฌธ์ž์—ด์ด ๊ฐ™๋‹ค๋ฉด auth๋ฅผ 1๋กœ ์„ค์ •ํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•จ
    • ๐Ÿ”‘temp์˜ ํฌ๊ธฐ์ธ 16byte๊ฐ€ ์•„๋‹Œ ์ธ์ž๋กœ ์ „๋‹ฌ ์‹œ ์ธ์ž ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌ
      - argv[1]์— 16byte๊ฐ€ ๋„˜๋Š” ๋ฌธ์ž์—ด์ด ์ „๋‹ฌ ์‹œ ์ด๋“ค ๋ชจ๋‘ ๋ณต์‚ฌํ•ด BOF ๋ฐœ์ƒ
    • auth๋Š” temp๋ฒ„ํผ์˜ ๋’ค์— ์กด์žฌํ•˜๋ฏ€๋กœ temp๋ฒ„ํผ์— BOF ๋ฐœ์ƒ ์‹œ auth์˜ ๊ฐ’์ด ์ž„์˜๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ๋จ
      - ์‹ค์ œ ์ธ์ฆ ์—ฌ๋ถ€์™€๋Š” ์ƒ๊ด€์—†์ด main ํ•จ์ˆ˜์˜ if(check_auth(argv[1]))๋Š” ํ•ญ์ƒ ์ฐธ์ด ๋จ

๋ฐ‘์— ์ด๋ฏธ์ง€๋ฅผ ๋ณด๋ฉฐ ๋‹ค์‹œ ํ™•์ธ ํ•ฉ์‹œ๋‹ค.


๋ฐ์ดํ„ฐ ์œ ์ถœ

 C์–ธ์–ด์—์„œ ์ •์ƒ์ ์ธ ๋ฌธ์ž์—ด์€ null๋กœ ์ข…๊ฒฐ๋˜๋ฉฐ, ํ‘œ์ค€ ๋ฌธ์ž์—ด ์ถœ๋ ฅ ํ•จ์ˆ˜๋“ค์€ ๋„๋ฐ”์ดํŠธ๋ฅผ ๋ฌธ์ž์—ด ๋์œผ๋กœ ์ธ์‹ํ•จ
๋งŒ์•ฝ ์–ด๋–ค ๋ฒ„ํผ์— ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ๋‹ค๋ฅธ ๋ฒ„ํผ์™€์˜ ์‚ฌ์ด์— ์žˆ๋Š” ๋„๋ฐ”์ดํŠธ๋ฅผ ๋ชจ๋‘ ์ œ๊ฑฐํ•˜๋ฉด, ํ•ด๋‹น ๋ฒ„ํผ๋ฅผ ์ถœ๋ ฅ์‹œ์ผœ ๋‹ค๋ฅธ ๋ฒ„ํผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š”๊ฒŒ ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

ํš๋“ํ•œ ๋ฐ์ดํ„ฐ๋Š” ๊ฐ์ข… ๋ณดํ˜ธ๊ธฐ๋ฒ•์„ ์šฐํšŒํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•ด๋‹น ๋ฐ์ดํ„ฐ ์ž์ฒด๊ฐ€ ์ค‘์š”ํ•œ ์ •๋ณด!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Name: sbof_leak.c
// Compile: gcc -o sbof_leak sbof_leak.c -fno-stack-protector
 
#include <stdio.h>
#include <string.h>
#include <unistd.h>
 
int main(void) {
  char secret[16= "secret message";
  char barrier[4= {};
  char name[8= {};
 
  memset(barrier, 04);
 
  printf("Your name: ");
  read(0, name, 12);
  printf("Your name is %s.", name);
}
cs

 8byte ํฌ๊ธฐ์˜ name ๋ฒ„ํผ์—์„œ 12๋ฐ”์ดํŠธ์˜ ์ž…๋ ฅ์„ ๋ฐ›๊ณ , ์ฝ๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ์ธ secret๋ฒ„ํผ์™€์˜ ์‚ฌ์ด์— barrier๋ผ๋Š” 4byte์˜ ๋„ ๋ฐฐ์—ด์ด ์กด์žฌํ•˜๋Š”๋ฐ, ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ์ด์šฉํ•˜์—ฌ ๋„ ๋ฐ”์ดํŠธ๋ฅผ ๋ชจ๋‘ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด secret์„ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์‹คํ–‰ ํ๋ฆ„ ์กฐ์ž‘

Background: Calling Convention ์˜ ๋‚ด์šฉ์„ ๋˜์งš์–ด ๋ณด๋ฉด,
ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ๋ฐ˜ํ™˜ ์ฃผ์†Œ๋ฅผ ์Šคํƒ์— ์Œ“๊ณ  ํ•จ์ˆ˜์—์„œ ๋ฐ˜ํ™˜ ์‹œ ์ด๋ฅผ ๊บผ๋‚ด์–ด ์›๋ž˜ ์‹คํ–‰ ํ๋ฆ„์œผ๋กœ ๋Œ์•„๊ฐ
์ด๋ฅผ ๋‹ค์‹œ ์ƒ๊ฐํ•˜๋ฉด '์Šคํƒ BOF๋กœ ๋ฐ˜ํ™˜ ์ฃผ์†Œ(RET)๋ฅผ ์กฐ์ž‘ํ•˜๋ฉด ์–ด๋–จ๊นŒ' ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์ ‘๊ทผํ•˜๋ฉด

์‹ค์ œ๋กœ, ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ์ฃผ์†Œ๋ฅผ ์กฐ์ž‘ํ•˜๋ฉด ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰ ํ๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Œ!!

// Name: sbof_ret_overwrite.c
// Compile: gcc -o sbof_ret_overwrite sbof_ret_overwrite.c -fno-stack-protector
 
#include <stdio.h>
#include <stdlib.h>
 
int main(void) {
    char buf[8];
    printf("Overwrite return address with 0x4141414141414141: ");
 
    gets(buf);
    return 0;
}

 ๊ทธ๋Ÿผ main ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ์ฃผ์†Œ๋ฅผ 0x4141414141414141 ๋กœ ๋ณ€๊ฒฝํ•ด๋ณผ๊นŒ์š”


๋งˆ๋ฌด๋ฆฌ

BOF๋Š” ์ง€์ •๋œ ๋ฒ„ํผ์˜ ํฌ๊ธฐ๋ณด๋‹ค ๋งŽ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋˜์–ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค
๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๋ณ€์กฐ/์œ ์ถœ, ์‹คํ–‰ ํ๋ฆ„ ์กฐ์ž‘ ๋“ฑ์ด ๊ฐ€๋Šฅ!

 

์Šคํƒ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋Š” ์—ญ์‚ฌ๊ฐ€ ๊นŠ์€ ๋งŒํผ ๋‹ค์–‘ํ•œ ๋ณดํ˜ธ ๊ธฐ๋ฒ•์ด ๋‚˜์˜ค๊ณ  ์šฐํšŒํ•˜๋Š” ๊ธฐ๋ฒ•๋„ ๋‚˜์™”์ฃ 
์—ฌ๊ธฐ์„  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ณดํ˜ธ ๊ธฐ๋ฒ•๋งŒ ์ ๊ณ  ์ฐจ์ฐจ ์ž์„ธํžˆ ์•Œ์•„๊ฐ€๋ด…์‹œ๋‹ค. ๋‚˜์ค‘์— ์ž์„ธํžˆ ์ •๋ฆฌํ•ด์•ผํ• ๊นŒ์š”..?


๋ฐฉ์–ด ๋ฐฉ์‹

ํ•ด๋งˆ๋‹ค ์ง„ํ™” ๋˜๋Š”BOF๋ฅผ ์–ต์ œํ•˜๋Š” ๊ณ„ํš์œผ๋กœ ํฌ๊ฒŒ 3๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„๋ฉด

  • ๋ฐœ์ƒํ•œ BOF ํƒ์ง€ ๋ฐ ์•…์„ฑ์ฝ”๋“œ์˜ ๋ช…๋ น์–ด ํฌ์ธํ„ฐ ๋ฆฌ๋‹ค์ด๋ ‰์…˜์„ ๋ฐฉ์ง€
  • ์ง์ ‘์ ์œผ๋กœ BOF ํƒ์ง€ X, ์•…์„ฑ์ฝ”๋“œ๊ฐ€ ์Šคํƒ์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€
  • ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ์ฐพ๋Š” ๊ฒƒ์„ ์‹ ๋ขฐํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๋žœ๋คํ™”

1. ์Šคํƒ ์นด๋‚˜๋ฆฌ(SFP์™€ RET ์‚ฌ์ด์— ๊ฒ€์ฆ๊ฐ’ ์‚ฝ์ž…)

 

๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ ๋ณดํ˜ธ - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „

๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ ๋ณดํ˜ธ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๋™์•ˆ ์Šคํƒ์— ํ• ๋‹น๋œ ๋ณ€์ˆ˜๋“ค์— ๋Œ€ํ•œ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ๋ฅผ ํƒ์ง€ํ•˜๊ณ  ์‹ฌ๊ฐํ•œ ๋ณด์•ˆ ์ทจ์•ฝ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ๋ง‰์Œ์œผ๋กœ์จ ์‹คํ–‰ ํŒŒ์ผ์˜ ๋ณด์•ˆ์„ ๊ฐ•ํ™”์‹œํ‚ค๋Š” ๋‹ค์–‘

ko.wikipedia.org

2. ์‹คํ–‰ ๋ถˆ๊ฐ€๋Šฅ ์Šคํƒ(๊ถŒํ•œ ์ œ์–ด)
3. ๋žœ๋คํ™”(ASLR; Address Space Layout Randomize ์™€ PIE;...)

 

์Šคํƒ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „

์Šคํƒ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ(stack buffer overflow)๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ํ”„๋กœ๊ทธ๋žจ์ด ์˜๋„ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ(์ผ๋ฐ˜์ ์œผ๋กœ ๊ณ ์ •๋œ ๋ฒ„ํผ ๊ธธ์ด๋ฅผ ๊ฐ–๋Š”) ์™ธ๋ถ€์˜ ์ฝœ ์Šคํƒ์— ์“ธ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฒ„๊ทธ์ด๋‹ค.[1][2] ์Šค

ko.wikipedia.org

๊ทธ๋Ÿฌ๊ณ  ๋ณด๋ฉด ์ธํ„ฐ๋„ท์—์„œ ์ฐฝ๊ณผ ๋ฐฉํŒจ ๋ชจ๋‘ ์ƒ์„ธํ•˜๊ฒŒ ๋‚˜์™€์žˆ๋”๋ผ๊ณ ์š” ใ…Žใ…Ž
์œ„ ๋‚ด์šฉ์€ ๋‚˜์ค‘์— ์ƒ์„ธํ•˜๊ฒŒ ๋‹ค์‹œ ์ •๋ฆฌํ•  ์ˆœ๊ฐ„์ด ์˜ค๊ฒ ์ฃ 


์ฐธ๊ณ  ์ž๋ฃŒ

 

Memory Corruption: Stack Buffer Overflow

์Šคํƒ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ์˜ ๊ฐœ๋…์„ ์‚ดํŽด๋ณด๊ณ , ์ด๋กœ ์ธํ•ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ณด์•ˆ ์œ„ํ˜‘์„ ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ๋ชจ๋“ˆ์„ ์ด์šฉํ•˜์—ฌ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.

dreamhack.io

๋”๋ณด๊ธฐ

 

 

 

CVE security vulnerability database. Security vulnerabilities, exploits, references and more

www.cvedetails.com provides an easy to use web interface to CVE vulnerability data. You can browse for vendors, products and versions and view cve entries, vulnerabilities, related to them. You can view statistics about vendors, products and versions of pr

www.cvedetails.com

 

 

Morris worm - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Late 1980s computer worm noted for being the first to gain wider media attention The Morris worm or Internet worm of November 2, 1988, was one of the oldest computer worms distributed

en.wikipedia.org

 

 

์Šคํƒ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „

์Šคํƒ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ(stack buffer overflow)๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ํ”„๋กœ๊ทธ๋žจ์ด ์˜๋„ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ(์ผ๋ฐ˜์ ์œผ๋กœ ๊ณ ์ •๋œ ๋ฒ„ํผ ๊ธธ์ด๋ฅผ ๊ฐ–๋Š”) ์™ธ๋ถ€์˜ ์ฝœ ์Šคํƒ์— ์“ธ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฒ„๊ทธ์ด๋‹ค.[1][2] ์Šค

ko.wikipedia.org

 

 

๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ ๋ณดํ˜ธ - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „

๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ ๋ณดํ˜ธ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๋™์•ˆ ์Šคํƒ์— ํ• ๋‹น๋œ ๋ณ€์ˆ˜๋“ค์— ๋Œ€ํ•œ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ๋ฅผ ํƒ์ง€ํ•˜๊ณ  ์‹ฌ๊ฐํ•œ ๋ณด์•ˆ ์ทจ์•ฝ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ๋ง‰์Œ์œผ๋กœ์จ ์‹คํ–‰ ํŒŒ์ผ์˜ ๋ณด์•ˆ์„ ๊ฐ•ํ™”์‹œํ‚ค๋Š” ๋‹ค์–‘

ko.wikipedia.org

 

์ฐธ๊ณ  ์ด๋ฏธ์ง€

 

Memory Corruption: Stack Buffer Overflow

์Šคํƒ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ์˜ ๊ฐœ๋…์„ ์‚ดํŽด๋ณด๊ณ , ์ด๋กœ ์ธํ•ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ณด์•ˆ ์œ„ํ˜‘์„ ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ๋ชจ๋“ˆ์„ ์ด์šฉํ•˜์—ฌ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.

dreamhack.io

๋”๋ณด๊ธฐ