혜랑's STORY

Memory Corruption - C (1) : Off-by-one 본문

무지성 공부방/Dreamhack SystemHacking

Memory Corruption - C (1) : Off-by-one

hyerang0125 2021. 1. 19. 14:55
본 포스팅은 DreamHack 사이트의 Memory Corruption - C(1) 강의 내용을 요약한 것이다. 강의의 주소는 다음과 같다.
 

해커들의 놀이터, Dreamhack

해킹과 보안에 대한 공부를 하고 싶은 학생, 안전한 코드를 작성하고 싶은 개발자, 보안 지식과 실력을 업그레이드 시키고 싶은 보안 전문가까지 함께 공부하고 연습하며 지식을 나누고 실력 향

dreamhack.io

 

#Off by one

Off-by-one 취약점은 경계 검사에서 하나의 오차가 있을 때 발생하는 취약점이다. 이는 버퍼의 경계 계산 혹은 반복문의 횟수 계산 시 < 대신 <=을 쓰거나, 0부터 시작하는 인덱스를 고려하지 못할 때 발생한다.

-> 예제(off-by-one.c)

// off-by-one-1.c
#include <stdio.h>
void copy_buf(char *buf, int sz) {
    char temp[16];
    
    for(i = 0; i <= sz; i++)
        temp[i] = buf[i];
}
int main(void) {
    char buf[16];
    
    read(0, buf, 16);
    copy_buf(buf, sizeof(buf));
}

위 코드에서 반복문은 i가 0일 때부터 sz일 때까지 총 sz+1번 반복하게 된다. 따라서 sz+1만큼 데이터가 복사되고, off-by-one 취약점이 발생하게 된다.

-> 실습

드림핵 모듈로 실습을 진행한 결과