Out of Bounds
배열은 같은 자료형의 요소들로 이루어져 있으며, 각 요소의 위치를 인덱스라고 함
Out of Bounds
배열은 연속된 메모리 공간을 점유, 배열이 점유하는 공간의 크기는 요소의 개수와 요소 자료형의 크기를 곱한 값이 됨
배열이 포함하는 요소의 개수를 배열의 길이라고 부름
배열 각 요소의 주소는 배열의 주소, 요소의 인덱스, 요소 자료형의 크기를 이용하여 계산됨

OOB : 요소를 참조할 때 인덱스 값이 음수거나 배열의 길이를 벗어날 때 발생, why? 프로세스는 앞서 배운 식을 따라 요소의 주소를 계산할 뿐 계산한 주소가 배열의 범위 안에 있는지 검사하지 않기 때문
사용자가 배열 참조에 사용되는 인덱스를 임의 값으로 설정할 수 있다면 배열의 주소로부터 특정 오프셋에 있는 메모리의 값을 참조할 수 있음
OOB로 임의 주소의 값을 읽으려면 읽으려는 변수와 배열의 오프셋을 알아야 함, 배열과 변수가 같은 세그먼트에 할당되어 있다면 둘 사이의 오프셋은 항상 일정하므로 디버깅을 통해 쉽게 알아낼 수 있음, 만약 같은 세그먼트가 아니라면 다른 취약점을 통해 두 변수의 주소를 구하고 차이 계산 가능
마치며
배열의 길이: 배열이 포함하는 요소의 개수
배열의 크기: 배열의 길이 X 요소의 크기
배열의 참조: 배열의 주소, 요소의 크기, 인덱스를 활용하여 참조할 요소의 주소를 계산함. 이 과정에서, 계산된 주소가 배열의 범위를 벗어나는지 검사하지 않으므로 out of bounds 취약점이 발생할 수 있음.
Out of Bounds(OOB): 배열의 범위를 벗어난 메모리에 접근할 수 있는 취약점. 개발자가 인덱스에 대한 검사를 제대로 하지 않으면 발생함. 임의 주소 읽기, 임의 주소 쓰기로 이어질 수 있음.
Last updated