책 내용 질문하기
초기화되지 않은 변수 사용에 관한 질문입니다.
도서
2020 시나공 정보처리기사 필기 : NCS 기반 전면 개편 [기본서]
페이지
786
조회수
350
작성일
2020-03-30
작성자
탈퇴*원
첨부파일
안녕하세요.

786쪽에 초기화되지 않은 변수 사용이라는 항목에 관한 질문입니다. 웹프로그래밍만 하다가 이제서 C프로그래밍을 배우고 있는 단계라 메모리 등에 대한 지식이 많이 부족하여 질문을 드리게 됩니다.
1. "초기화되지 않은 변수 사용은 선언 후 값이 부여되지 않은 변수를 사용 할 때 발생한다" 고 하셨는데, 이것은 예를들면 "int a;"이렇게 declare만 한 후에 a를 사용하는 경우를 의미하는 것인가요?
2. "변수가 선언되어 메모리가 할당되면 해당 메모리에 이전에 사용하던 내용이 계속 남아있어 변수가 외부에 노출되는 경우 중요한정보가 노출될 수 있다" 라는 말은, 예를들어 "int a;"이렇게 선언만 된 변수에 할당된 메모리에, 이전에 저장되어 있던 그대로 남아있을 수 있다는 말씀이신가요? 즉 현재 프로그램은 'int a;'만 했을 뿐인데 우연히 a가 값을 갖게 될 수도 있다는 말씀이신가요?

답변 부탁드리겠습니다.

늘 친절한 답변 감사드리며, 건강 유의하시기를 바라겠습니다.
답변
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 데이터만 존재할 수도 있죠. 원래 일반적인 해킹은 낚시질입니다. 아무나 걸려라 하는 식의...)

 

행복한 하루되세요 :)

  • 관리자
    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 데이터만 존재할 수도 있죠. 원래 일반적인 해킹은 낚시질입니다. 아무나 걸려라 하는 식의...)

     

    행복한 하루되세요 :)

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.