안녕하세요 길벗수험서 운영팀입니다.
[1]
예, 맞습니다.
int a; 선언 후 printf("%d", a); 를 하면 오류가 발생하는 것과 같이 값이 부여되지 않은 값을 사용하는 경우 발생합니다.
[2]
예, 맞습니다.
변수를 선언시 사용하지 않은 메모리 영역을 변수 메모리 공간으로 잡아주는데, 이 메모리 영역에 중요 데이터가 남아있는 경우 발생할 수 있는 보안약점입니다.
일반적으로 int는 4바이트라 제대로된 데이터를 탐색하기에는 무리고, 리스트나 배열 같은 큰 저장공간을 쓰는 자료형이 초기화 없이 외부에 노출되는 경우 기존에 메모리에 저장된 데이터를 분석해서 중요정보를 빼가게 되죠.
예를 들어, double a[100][100] 을 선언하고 초기화되지 않은 상태에서 외부에 노출되었다고 가정해보죠. (80000Byte = 80KByte 정도의 메모리 공간이 노출되겠네요)
공격자는 배열 a의 데이터를 순서대로 나열한 후, 일정한 규칙을 찾아 저장된 데이터가 무엇을 의미하는지 찾습니다.
해당 메모리 공간에 이전에 사용되고 해제되었던 변수들이 저장하고 있던 데이터들(접속 DB의 주소, ID, 포트, 비밀번호 또는 중요 파일의 경로)이 있다면 이는 바로 해당 서버가 표적이 될 수 있음을 의미합니다.
(물론 아무 의미없는 NULL 데이터만 존재할 수도 있죠. 원래 일반적인 해킹은 낚시질입니다. 아무나 걸려라 하는 식의...)
행복한 하루되세요 :)
-
관리자2020-03-31 10:05:32
안녕하세요 길벗수험서 운영팀입니다.
[1]
예, 맞습니다.
int a; 선언 후 printf("%d", a); 를 하면 오류가 발생하는 것과 같이 값이 부여되지 않은 값을 사용하는 경우 발생합니다.
[2]
예, 맞습니다.
변수를 선언시 사용하지 않은 메모리 영역을 변수 메모리 공간으로 잡아주는데, 이 메모리 영역에 중요 데이터가 남아있는 경우 발생할 수 있는 보안약점입니다.
일반적으로 int는 4바이트라 제대로된 데이터를 탐색하기에는 무리고, 리스트나 배열 같은 큰 저장공간을 쓰는 자료형이 초기화 없이 외부에 노출되는 경우 기존에 메모리에 저장된 데이터를 분석해서 중요정보를 빼가게 되죠.
예를 들어, double a[100][100] 을 선언하고 초기화되지 않은 상태에서 외부에 노출되었다고 가정해보죠. (80000Byte = 80KByte 정도의 메모리 공간이 노출되겠네요)
공격자는 배열 a의 데이터를 순서대로 나열한 후, 일정한 규칙을 찾아 저장된 데이터가 무엇을 의미하는지 찾습니다.
해당 메모리 공간에 이전에 사용되고 해제되었던 변수들이 저장하고 있던 데이터들(접속 DB의 주소, ID, 포트, 비밀번호 또는 중요 파일의 경로)이 있다면 이는 바로 해당 서버가 표적이 될 수 있음을 의미합니다.
(물론 아무 의미없는 NULL 데이터만 존재할 수도 있죠. 원래 일반적인 해킹은 낚시질입니다. 아무나 걸려라 하는 식의...)
행복한 하루되세요 :)