[ DreamHack ] Stack Buffer Overflow

2022. 11. 8. 15:57·INTERLUDE ✦/2022 SYSTEM STUDY

https://dreamhack.io/lecture/courses/60

 

Memory Corruption: Stack Buffer Overflow

스택 버퍼 오버플로우의 개념을 살펴보고, 이로 인해 발생할 수 있는 보안 위협을 인터렉티브 모듈을 이용하여 학습합니다.

dreamhack.io

 

스택 오버플로우 : 스택 영역이 너무 많이 확장되어서 발생하는 버그

스택 버퍼 오버플로우 : 스택에 위치한 버퍼에 버퍼의 크기보다 많은 데이터가 입력되어 발생하는 버그를 뜻함


버퍼 오버플로우

버퍼 : 데이터가 목적지로 이동되기 전에 보관되는 임시 저장소

데이터의 처리속도가 다른 두 장치가 있을 때, 둘 사이에 오가는 데이터를 임시로 저장해 두는 장소 (완충 역할)

 

버퍼 오버플로우 : 버퍼가 넘치는 것을 의미

int로 선언한 지역 변수는 4바이트의 크기를 갖고, 10개의 원소를 갖는 char배열은 10바이트의 크기를 가짐

ex) 10바이트 크기의 버퍼에 20바이트 크기의 데이터가 들어가게 되면 오버플로우가 발생함

 

버퍼 오버플로우가 위험한 이유 : 일반적으로 버퍼는 메모리 상에 연속해서 할당되어 있으므로,

버퍼에서 오버플로우가 발생하면 뒤에 있는 버퍼들의 값이 조작될 위험이 있음

 


중요 데이터 변조 예시

// 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()에서는 16바이트 크기의 temp 버퍼에 입력받은 패스워드를 복사한 후,

SECRET_PASSWORD 문자열과 비교하여 문자열이 같다면 auth를 1로 설정하고 반환함

 

check_auth()에서 strncpy함수를 통해 temp 버퍼를 복사할 때,

temp의 크기인 16바이트가 아닌 인자로 전달된 password의 크기만큼 복사하여 전달함

= argv[1]에 16바이트가 넘는 문자열을 전달하면 넘치는 길이 만큼까지 복사되어서 스택 오버플로우 발생

 

auth는 temp 버퍼의 뒤에 존재하므로 temp에 오버플로우 발생하면 auth값도 임의로 변경 가능해짐

 

C언어는 오직 0만 false로 인식하기 때문에 0xf 이후에 무슨 값이 들어가더라도 true로 인식함

C언어에서 정상적인 문자열은 NULL Byte(\x00)으로 끝나고,

표준 문자열 출력 함수들은 널바이트를 문자열의 끝으로 인식함

 

어떤 버퍼에 오버플로우를 발생시켜서 다른 버퍼와의 사이에 있는 널바이트를 모두 제거하면,

해당 버퍼를 출력시켜서 다른 버퍼의 데이터를 읽을 수 있음

= 각종 보호기법을 우회하는데 사용할 수 있음


데이터 유출

name에 오버플로우 일으켜서 barrier 영역까지 침범, secret부분의 숨겨진 메시지를 확인할 수 있음


실행 흐름 조작

buf와 sfp에 스택 버퍼 오버플로우를 일으켜 return address를 0x4141414141414141로 조작함

'INTERLUDE ✦ > 2022 SYSTEM STUDY' 카테고리의 다른 글

[ DreamHack ] Return Address Overwrite-2  (0) 2022.11.15
[ DreamHack ] Return Address Overwrite  (0) 2022.11.08
[ DreamHack ] ShellCode  (0) 2022.11.03
[ DreamHack ] Shell_basic 풀이  (0) 2022.11.01
[ DreamHack ] pwndbg 실습  (0) 2022.10.04
'INTERLUDE ✦/2022 SYSTEM STUDY' 카테고리의 다른 글
  • [ DreamHack ] Return Address Overwrite-2
  • [ DreamHack ] Return Address Overwrite
  • [ DreamHack ] ShellCode
  • [ DreamHack ] Shell_basic 풀이
L_Chae
L_Chae
🎮😻🤓🖥✨
  • L_Chae
    Cherish
    L_Chae
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 🌥️Cloud Study🌥️
        • AWS
        • NHN
        • KT
        • Microsoft (Azure 900)
        • TroubleShooting
        • IaC
        • Etc
      • STUDY
        • English
        • Japanese
        • 개인정보보호 관련
      • 초등학교 AI 교육 진행
        • 2024학년도 1학년-2학년
        • 2025학년도 4학년
      • 2024 KDT 📕
        • Lecture
        • Study 📗
        • Study-JAVA
        • Project
        • etc
      • INTERLUDE ✦
        • 2022 SYSTEM STUDY
        • 2022 Winter Study
        • 2023 AutoMobility STUDY
        • 2023 Summer Study (CPPG)
        • 2023 Reversing STUDY
        • etc
      • Private🔒
        • MacBook 💻
        • Screenshot 🩷
        • Photo 🖼️
        • FFXIV - Backup 🎮
        • Tistory
      • PBL 📗
        • 논문 스터디
        • Backup
      • Project 🖤
        • 2022-2) 개인정보보호 소학회
        • 2022-2) winter GURU2 - iOS
        • 2023-1) PBL 3
        • 2023-2) PBL 4
        • 2024-1) SW-AI교육 실습 일지
      • CTF 🚩
        • 2022
        • 2023
      • News scrap 📰
        • 2022
        • 2023
      • 2022 공부 로그 🐯
      • 2023 공부 로그🐰
  • 블로그 메뉴

    • 글쓰기
    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    JLPT N1
    ansible
    jlpt n1 도전기
    N1
    멱등성
    ansible galaxy
    deprecation warning
    content collection
    JLPT
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
L_Chae
[ DreamHack ] Stack Buffer Overflow
상단으로

티스토리툴바