[포너블] Logical Bug: Type Error

Chris Kim·2024년 10월 26일

시스템해킹

목록 보기
30/33

출처 드림핵 강의

1. 자료형

같은 자료형이라도 운영체제에 따라 크기가 달라질 수 있다. 이 문서의 자료형 챕터를 참고하라.

2. Out of Range: 데이터 유실

변수에 어떤 값을 대입할 때, 그 값이 변수에 저장될 수 있는 범위를 벗어나면, 저장할 수 있는 만큼만 저장하고 나머지는 모두 유실된다.

3. Out of Range: 부호 반전과 값의 왜곡

만약 unsigned int 자료형에 음수를 전달하는 경우 2의 보수 법칙에 따라 값이 왜곡되어 전달된다. 따라서 양수로만 쓰일 값에는 반드시 unsigned를 붙여야 한다.

4. Out of Range와 버퍼 오버 플로우

만약 int 변수의 값을 무부호 변수에 전달하는 경우 어떤 문제가 있을까?, int 변수로 입력 길이 검사를 수행하는 경우, -1을 대입하면 검사를 우회할 수 있다. 그리고 read 함수의 경우 size_t는 무부호 변수이므로, 음수를 전달 받는 경우 매우 큰 수로 해석되어, 매우 긴 길이를 입력받을 수 있다.

5. 타입 오버플로우 & 언더플로우


우리 주변에서 이로인한 버그를 많이 찾을 수 있다.

6. Integer Overflow와 버퍼 오버플로우

예를 들어 size에 가장 큰 수를 입력한다고 가정하자. size+1만큼 청크를 할당하고, size만큼 read함수로 입력을 받는 경우, size+1은 오버플로우로 0이 되어 최소 32바이트의 청크를 할당받는다. 하지만 입력은 size 크기 그대로 받는다.

profile
회계+IT=???

0개의 댓글