BOF

세렌디·2023년 6월 21일
0

정보보안

목록 보기
9/11

BOF?

BOF란 Buffer Overflow를 말한다.

데이터를 버퍼에 저장할 때 개발자가 의도한 크기 넘어에 값을 넣는 방식이다.
-> 초과된 데이터는 인접 메모리에 영향 (제어 관련 구문도 포함될 수 있음)

원인 및 해결 방안

  • 입력 값의 길이를 올바르게 검사하지 않아 생기는 취약점
  • 프로그램의 실행 흐름을 바꾸어 특정 코드가 실행되게 하는 기법
  • 입력 값에 대한 길이 및 타입에 대한 체킹은 필수!

사용되는 용어

1. Stack Frame

  • 모든 함수가 호출될 때 할당되는 자신만의 공간

2. SFP

  • 이전 함수의 스택 프레임 포인터를 저장하는 영역
  • 스택 포인터의 기준점이 됨

3. SP

  • SFP를 기준점으로 하여, 상대주소를 저장하여 메모리를 접근

4. RET

  • 이전 함수의 다음 실행 명령어의 주소를 저장하는 영역

취약 함수

1. strcpy(char dst, const char src)

  • src 문자열을 dst버퍼에 저장
  • src 문자열 길이를 체크하지 않아, dst 버퍼를 초과하는 BOF 기능

2. sizeof(피연산자)

  • 피연산자의 크기를 반환

BOF 방지

C언어 Stack BOF 방지를 위해, strcpy 함수를 strncpy로 교체한다
-> strncpy(buffer, argv[1], sizeof(buffer)-1);

형식으로 대입하는 매개변수 len 만큼만, dst 버퍼에 저장하도록 유도할 수 있다
sizeof에 -1을 설정하는 것은 C언어 문자열 끝 부분 null(0x00)까지 고려한 설계
입력 문자열이 버퍼의 크기와 같거나 클 시,
프로그램을 종료하는 방식으로도 BOF를 방지할 수 있다
(C언어 문자열 끝 부분 null(0x00) 고려하여, 버퍼 크기와 같은 문자열도 체크가 필요)

마무리

이렇게 BOF, Buffer Overflow에 대해서 알아보았습니다. 저 또한 전문적으로 잘 아는것이 아니므로 글을 쓴 것이 어색할 수 있다는 점 고려해주면 좋을 것 같습니다.

profile
당당하게 자신을 개발자라고 할 수 있는 사람이 될 때 까지

0개의 댓글