Out of Bounds#
Out of Bounds(OOB)는 배열이나 버퍼의 정상적인 범위를 벗어난 위치에 접근하는 취약점이에요.
int arr[5];
arr[0] = 1;
arr[4] = 5;c위 배열에서 사용할 수 있는 인덱스는 0부터 4까지예요.
arr[-1];
arr[5];
arr[100];c이처럼 범위를 벗어난 인덱스를 사용하면 배열 주변의 다른 메모리에 접근하게 돼요.
C에서는 배열의 범위를 자동으로 검사하지 않기 때문에 프로그램이 직접 인덱스를 검증해야 해요.
OOB Read#
배열의 범위를 벗어난 위치에서 값을 읽는 것을 OOB Read라고 해요.
int data[5];
printf("%d\n", data[idx]);c만약 idx의 범위를 제대로 검사하지 않는다면 배열 주변에 존재하는 다른 데이터가 출력될 수 있어요.
예를 들어 다음과 같이 최댓값만 검사하면 문제가 생길 수 있어요.
if (idx >= 5)
return;c-1과 같은 음수는 이 검사를 통과하기 때문에 배열보다 앞쪽의 메모리에 접근할 수 있어요.
data[-1]
data[-2]text이러한 취약점을 이용하면 프로그램 내부의 중요한 값이나 주소가 유출될 수 있어요.
OOB Write#
배열의 범위를 벗어난 위치에 값을 저장하는 것을 OOB Write라고 해요.
int data[5];
data[idx] = 1;cidx가 정상적인 범위를 벗어난다면 배열 주변의 다른 메모리가 수정될 수 있어요.
예를 들어 배열 근처에 권한을 확인하는 값이 존재한다면 OOB Write를 통해 해당 값을 변경할 수도 있어요.
int admin = 0;
int data[5];c메모리 배치에 따라 data의 범위를 벗어나 쓰면서 admin과 같은 다른 변수에 영향을 줄 수 있어요.
따라서 OOB Write는 프로그램의 동작을 변경하거나 공격자가 원하는 값을 메모리에 기록하는 데 사용될 수 있어요.
-----BEGIN SSH SIGNATURE-----
U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAg4c/dn4BitGH1/xNjKoKEp97I2b
eU57QXvkDBEdNNrEMAAAATYmxvZy5pbW55YS5uZy9wb3N0cwAAAAAAAAAGc2hhNTEyAAAA
UwAAAAtzc2gtZWQyNTUxOQAAAEC5uzIsaUx4PM94sz8KiGG1KQUzn9cAFtbvuzLWlqjESF
f3XrM5iAsy9cC3DrsNeLKDauA2pnkI3QUixcyFf3AL
-----END SSH SIGNATURE-----