네른

1. BOF - Buffer OverFlow / OOB - Out Of Boundary / Off-by-one 본문

강의 정리/드림핵 정리

1. BOF - Buffer OverFlow / OOB - Out Of Boundary / Off-by-one

네른 2021. 2. 23. 16:10

초심으로 돌아가서 처음부터 다시 공부하자.

 

1. BOF, 버퍼 오버플로우 라고 불리우는 메모리 관련 취약점.

 - 일반적으로 스택, 힙에 발생하는 취약점으로, 버퍼가 허용할 수 있는 양을 초과할 때 발생하는 취약점

 - 각각을 스택 오버플로우, 힙 오버플로우 라고 부름

 - 버퍼에 입력제한이나 검증등의 방지책이 없을 때 ret 영역을 덮어씌우는 공격이 가능

 - *sfp는 스택 프레임 포인터로 쉽게 ebp 값이 저장되는 영역을 의미

 

스택 오버플로우는 주로 입력 길이에 대한 검증을 정확히 수행하지 않을 때 발생.

길이를 명시하는 함수를 쓰더라도, 버퍼와 길이간 검증은 필수.

 

 

2. OOB, 아웃 오브 바운더리 라고 불리우는 메모리 관련 취약점.

 - 버퍼 범위 바깥의 인덱스에 접근할 때 발생

 - 에러로도 있다. 동일한 이유이며 이를 이용하여 공격할 수 있는 상황이 있기에 취약점이 된 것.

 - 대표적으로, 버퍼에 입력할 때 index 값을 지정하는 경우 발생 가능

    : 사용자에게 index값을 입력하도록 한 후 해당 index에 값을 입력할 때

    : %로 해결이 안된다. (buffer length가 10이라고 입력받은 index%10을 해도, 음수를 쓰면 된다)

 

 - dreamhack OOB ex3의 경우 다음과 같이 풀이가 된다.

  1. 4byte int의 표현 범위는 -2147483648 ~ 2147483647(-2^31~2^31-1)이다.

  2. 즉 2147483648과 -2147483648은 동일 (1000 0000 0000 0000)

  3. -2147483648 값을 입력하고, 해당 값에 -를 붙이더라도 결국 다시 -2147483648이 되는 것. (2147483648이라는 값은 표현 불가능)

  4. 해당 값 %10을 하면 결국 -8이 된다. 

 

3. Off-by-one

 - 경계 검사에서 발생하는 취약점. 버퍼에 for문 돌릴 때, 인덱스 한개 잘못 넘어가거나 하는 경우. - for문에서 실수하는 경우가 대표적인데, 해당 버퍼 이후에 중요한 변수값이 있으면 위험할 수 있다.

'강의 정리 > 드림핵 정리' 카테고리의 다른 글

Stack Buffer Overflow  (0) 2022.02.15
Calling Convention  (0) 2022.02.15
pwntools API 정리  (0) 2022.02.11
orw shellcode  (0) 2022.02.11
2. FSB - Format String Bug / Double Free / Use After Free  (0) 2021.02.24
Comments