imnyang's workspace

뒤로

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;
c

idx가 정상적인 범위를 벗어난다면 배열 주변의 다른 메모리가 수정될 수 있어요.

예를 들어 배열 근처에 권한을 확인하는 값이 존재한다면 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-----
[Layer7] 2026년 8월 5일 시스템 해킹 6차시 과제
http://blog.imnya.ng/layer7/18
저자 imnyang
게시일 2026년 08월 09일