함수 호출 규약: 함수 호출 및 반환에 대한 약속
한 함수에서 다른 함수를 호출할 때, 프로그램의 실행흐름은 다른 함수로 이동한다. 그리고 호출한 함수가 반환하면, 다시 원래의 함수로 돌아와서 기존의 실행 흐름을 이어나간다. 그러므로 함수를 호출할 때는 반환된 이후를 위해 호출자의 상태(stack frame) 및 반환 주소(return address)를 저장해야 함. 또한, 호출자는 피호출자가 요구하는 인자를 전달해줘야하며, 피호출자의 실행이 종료될 때는 반환 값을 전달받아야함. 함수 호출 규약을 적용하는 것은 일반적으로 컴파일러의 몫. 프로그래머가 고수준 언어로 코드를 작성하면, 컴파일러가 호출 규약에 맞게 코드를 컴파일 함.
스택 버퍼 오버플로우: 스택의 버퍼에서 발생하는 오버플로우
버퍼는 일상에서 완충장치라는 뜻으로 사용되며, 데이터가 목적지로 이동되기 전에 보관되는 임시 저장소의 의미로 쓰인다. 데이터의 처리속도가 다른 두 장치가 있을 때. 이 둘 사이에 오가는 데이터를 임시로 저장해 두는 것은 일종의 완충 작용을 한다 수신측과 송신측 사이에 버퍼라는 임시 저장소를 두고, 이를 통해 간접적으로 데이터를 전달. 송신 측은 버퍼로 데이터를 전송하고, 수신 측은 버퍼에서 데이터를 꺼내 사용함. 이렇게 하면 버퍼가 가득 찰 때까지 유실괴는 데이터가 없이 통신할 수 있음
스택에 있는 지역 변수를 스택 변수, 힙에 할당된 메모리 영역은 힙 버퍼라고 불림
버퍼오버플로우, 버퍼는 제각기 크기를 가지고 있는데 int로 선언한 지역 변수는 4바이트의 크기를 갖고, 10개의 원소를 갖는 char 배열은 10바이트의 크기를 갖음. 만약 10바이트 크기에 버퍼에 20바이트 크기의 데이터가 들어가려 하면 오버플로우가 발생한다
일반적으로 버퍼는 메모리상에 연속해서 할당되어 있으므로, 어떤 버퍼에서 오버플로우가 발생하면, 뒤에 있는 버퍼들의 값이 조작될 위험이 있음. 버퍼 오버플로우는 일반적으로 어떤 메모리 영역에도 큰 보안 위협으로 이어짐
중요 데이터 변조
버퍼 오버플로우가 발생하는 버퍼 뒤에 중요한 데이터가 있다면, 해당 데이터가 변조됨으로써 문제가 발생할 수 있음
데이터 유출
c언어에서 정상적인 문자열은 널바이트로 종결되며, 표준 문자열 출력 함수들은 널바이트를 문자열의 끝으로 인식한다. 만약 어떤 버퍼에 오버플로우를 발생시켜서 다른 버퍼와의 사이에 있는 널바이트를 모두 제거하면, 해당 버퍼를 출력시켜서 다른 버퍼의 데이처를 읽을 수 있다. 획득한 데이터는 각종 보호기법을 우회하는데 사용될 수도 있으며, 해당 데이터 자체가 중요한 정보일 수도 있음
실햄 흐름 조작
함수를 호출할 때 반환 주소를 스택에 쌓고, 함수에 반환될 때 이를 꺼내어 원래의 실행 흐름으로 돌아감. 함수의 반환주소를 조작하면 프로세스의 흐름을 바꿀 수 있음
C의 표준 함수 중, 버퍼를 다루면서 길이를 입력하지 않는 함수들은 대부분 위험하다고 생각. 대표적으로 strcpy, strcat,, sprinft가 있음 버퍼의 크기를 같이 입력하는 strncpy, strncat, snprintf, fgets, memcpy등을 사용하는 것이 바람직하며, 프로그램의 취약점을 찾을 때는 취약한 함수들이 사용되지 않았는지 살펴봐야함
스택 프레임 구조 파악
스택 버퍼에 오버플로우를 발생시켜서 반환주소를 덮으려면, 우선 해당 버퍼가 스택 프레임의 어디에 위치하는지 조사해야 함
엔디언 적용
엔디언은 메모리에서 데이터가 정렬되는 방식으로 빅 엔디언, 리틀 엔디언이 사용
리틀 엔디언에서는 데이터의 Most Significant Byte(가장 왼쪽의 바이트)가 가장 높은 주소에 저장되고, 빅엔디언에서는 데이터의 MSB가 가장 낮은 주소에 저장
셸코드(shellcode)는 익스플로잇을 위해 제작된 어셈블리 코드 조각을 일컫는다. 일반적으로 셸을 획득하기 위한 목적으로 셸코드를 사용함 셸코드는 어셈블리어로 구성되므로 공격을 수행할 대상 아키텍처와 운영체제에 따라, 그리고 셸코드의 목적에 따라 다르게 적용
'전공 > 정보시스템보안' 카테고리의 다른 글
[정보시스템보안] authentication, password (0) | 2022.10.20 |
---|---|
[정보시스템보안] Access control 접근 통제 모델(DAC, MAC, RBAC, ABAC) (0) | 2022.10.19 |