버퍼 오버플로우, 오버플로우 취약점이란 - Whitmem
버퍼 오버플로우, 오버플로우 취약점이란
Other
2024-08-20 20:09 게시 97dcb1dcabad7af21a48

0
0
52
이 페이지는 외부 공간에 무단 복제할 수 없으며 오직 있는 그대로 게시되며 부정확한 내용을 포함할 수 있습니다. 법률이 허용하는 한 가이드 라인에 맞춰 게시 내용을 인용하거나 출처로 표기할 수 있습니다.
This page is not to be distributed to external services; it is provided as is and may contain inaccuracies.
개발 생활을 하다보면 문득 오버플로우라는 이야기를 듣는 경우가 많다. 만약 이런 말을 많이 안들어봤다면 데이터 형을 자동으로 관리해주거나, 알아서 관리해주는 동적형 언어를 사용하고 있을 가능성이 높다. 하지만 진정 개발자라면 오버플로우 개념에 대해서는 반드시 알고 있어야하며, 어떠한 경우에 발생하는지, 왜 발생하는지, 그리고 변수나 데이터 구조도를 짤 때 의식적으로 고민하는 습관을 가져야 진정한 개발자라 할 수 있겠지
Buffer overflow
오버 플로우는 때에 따라서 사소한 문제가 될 수도 있고, 시스템의 존폐를 결정 짓는 취약점이 될 수 있다.
기본적으로 컴퓨터에서 관리되는 모든 데이터는 0, 1 이진수로 구성되기 때문에 어디까지가 어떤 값이고, 어떤 형식인지 구별짓기 위해 데이터 형을 미리 약속 해 두었다.
메모리
컴퓨터 메모리를 시각적으로 나타낸 모습이다. 메모리에 기록되는 0 1 이진수를 1바이트 단위로 묶어서 표기한 것이다. 1바이트는 256 가지의 숫자를 나타낼 수 있는데, 이 1바이트를 여러개 모아서 더 큰 숫자를 나타낼 수 있다. 위 12개(12바이트) 공간안에서 3개 각각 정수를 표현하려면 어떻게 해야할까? 당연히 구획을 쪼개서 각 구획만큼이 해당하는 변수를 나타내도록 해야한다.
기본적으로 4칸 (4바이트)씩 쪼개어 양수를 나타낸다면 (2^8) ^ 4 인 4,294,967,296이라는 범위를 나타낼 수 있게 된다. 이 크기가 바로 unsigned int 이다. 반면 맨 앞 비트를 부호로 하여금 정수 취급하면 (2^8) ^ 4 공간 안에 -2,147,483,648 ~ 2,147,483,647 범위를 나타낼 수 있게 된다. 음수가 한 개더 많은 이유는 양수 비트쪽에 0이 포함되어 있어서 그런다. 근데 이러한 공간에서 이 숫자 범위를 벗어나는 값을 넣게 되거나, 증감식에 고려를 하지 않으면 당연히 메모리는 초과하여 표현할 수 없으므로 의도치 않은 값이 되거나, 모든 비트가 0 또는 역전되어 최솟, 최댓값으로 대체되는 상황이 발생할 수 있다.
발생할 수 있는 문제점
생각보다 사소한 문제부터 개인정보 탈취 등 각종 다양한 문제가 발생할 수 있는데, 케이스 바이 케이스인지라 확답할 수는 없다. 단순히 게임 체력바, 아이템 세기 등에서 오버 플로우가 발생해 해당 데이터 형의 최댓값으로 할당이 되거나, 최소로 할당되는 경우가 발생할 수도 있다. 이는 오버플로우가 해당 데이터 영역에만 영향을 끼친 경우다. 하지만 사용자 입력에 의해 오버플로 등이 발생하는 경우, 메모리 영역을 벗어나 쓰게되거나, 다른 영역에 접근할 수 있는 문제가 발생하는 경우, 사용자 의도치 않게 시스템 엑세스 권한을 얻을 수 있게 될 수 있다. 컴퓨터 메모리에는 각종 다양한 데이터가 담겨있는 공간이다. 단순히 수치상 게임 체력 등이 들어가 있는 것이 아니라, 특정 함수의 방향을 가르키는 주소가 저장되어 있을 수도 있고, 동작 등이 메모리에 같이 보관되어 있을 수 있는데, 영역을 벗어나 쓸 수 있다는 것은 실행되는 코드 영역 또는 바로가기 주소 영역을 원하는 영역으로 교체하여 악성 명령을 수행할 수도 있게 된다.
특히 이러한 문제는 네트워크를 기반으로한 소프트웨어에서 치명적인 문제를 발생할 수 있다. 적어도 일반적인 취약점은 사용자가 해당 파일을 열거나, 이미지, 사진, 영상 등을 열 때 유도할 수 있겠지만 네트워크 스트림 기반의 취약점은 항상 대기중이고 어떤 처리를 수행할 수 있기 때문에, 연결된 클라이언트나 서버 스트림에 특정 명령을 보내 사용자 몰래 어떤 작업을 유도할 수 있게 된다. 이는 추후 개인정보 탈취나 해킹 등으로 보안 사고로 이어질 수 있다.
댓글 0개
댓글은 일회용 패스워드가 발급되며 사이트 이용 약관에 동의로 간주됩니다.
확인
Whitmemit 개인 일지 블로그는 개인이 운영하는 정보 공유 공간으로 사용자의 민감한 개인 정보를 직접 요구하거나 요청하지 않습니다. 기본적인 사이트 방문시 처리되는 처리 정보에 대해서는 '사이트 처리 방침'을 참고하십시오. 추가적인 기능의 제공을 위하여 쿠키 정보를 사용하고 있습니다. Whitmemit 에서 처리하는 정보는 식별 용도로 사용되며 기타 글꼴 및 폰트 라이브러리에서 쿠키 정보를 사용할 수 있습니다.
이 자료는 모두 필수 자료로 간주되며, 사이트 이용을 하거나, 탐색하는 경우 동의로 간주합니다.