hyelie
hyelie
Hyeil Jeong
       
글쓰기    관리    수식입력
  • 전체보기 (495)
    • PS (283)
      • Algorithm (28)
      • PS Log (244)
      • Contest (6)
      • Tips (5)
    • Development (52)
      • Java (14)
      • Spring (23)
      • SQL (2)
      • Node.js (2)
      • Socket.io (3)
      • Study (4)
      • Utils (4)
    • DevOps (36)
      • Git (5)
      • Docker (4)
      • Kubernetes (2)
      • GCP (3)
      • Environment Set Up (8)
      • Tutorial (12)
      • Figma (2)
    • CS (74)
      • OOP (7)
      • OS (24)
      • DB (2)
      • Network (24)
      • Architecture (0)
      • Security (2)
      • Software Design (0)
      • Parallel Computing (15)
    • Project (15)
      • Project N2T (5)
      • Project ASG (0)
      • Project Meerkat (1)
      • Model Checking (7)
      • Ideas (2)
    • 내가 하고싶은 것! (34)
      • Plan (16)
      • Software Maestro (10)
      • 취준 (8)
hELLO · Designed By 정상우.
hyelie

hyelie

CS/OS

[컴퓨터 SW] Buffer Overflow

이 글은 포스텍 김종 교수님의 컴퓨터SW시스템개론(CSED211) 강의를 기반으로 재구성한 것입니다.

 이 글에서는 buffer overflow에 대해 알아본다.

 

Buffer Overflow

정의

 Calling Convention 게시글에서 어떤 procedure P가 procedure Q를 호출할 때 return address를 stack에 push한다고 했다. 그러나 입력 범위보다 더 큰 값이 입력되는 등 특정한 상황에서 return address가 다른 값으로 변경될 수 있다. return address가 위치해 있는 assembly는 무조건 실행되기 때문에 segmentation fault가 나거나, 또는 사용자가 원하는 instruction을 실행시킬 수도 있다.

 이처럼 데이터의 크기가 할당된 범위보다 더 클 때 원래 입력되어 있던 값들이 오염되는 현상을 buffer overflow라 한다.

 

 

예방법

 buffer overflow는 사용자가 원하는 코드를 실행시킬 수 있기 때문에 매우 치명적이기 때문에 프로그램을 짤 때 유의해야 한다. buffer overflow를 막는 방법은 다음과 같다.

  • stack canari 사용 : 특정 data를 return address 다음 stack에 집어넣어 이 값이 바뀌지 않았을 때만 코드를 계속 실행하는 방법.
  • safe function 사용 : string 입력 시 길이 제한을 두는 방법. gets() 대신 fgets()를 쓰면 된다.
  • non-executable code segment ; 각 memory section에 control bit를 추가해 data section code를 readonly로 바꾸어 코드를 실행 불가능하게 만드는 방법.
  • randomized stack offset : stack의 시작 주소를 randomized해 return address를 바꾸지 못하게 하는 방법.
저작자표시 (새창열림)

'CS > OS' 카테고리의 다른 글

[컴퓨터 SW] Cache와 Locality  (0) 2023.06.15
[컴퓨터 SW] Storage - RAM & Disk  (0) 2023.06.14
[컴퓨터 SW] Array/Structure/Union의 할당과 접근  (0) 2023.06.11
[컴퓨터 SW] Calling Convention  (0) 2023.06.10
[컴퓨터 SW] Byte Ordering  (0) 2023.06.08
    hyelie
    hyelie

    티스토리툴바