본문 바로가기

SEGMENT

(5)
Linux 환경에서의 메모리 보호기법 이번 글에서는 리눅스 환경에서 사용되는 메모리 보호기법들에 대하여 요약해보도록 하자! 기법들에 대하여 알아보기 전 , 메모리 보호 의 정의에 대하여 알아둘 필요가 있다. 메모리 보호란 ? 말 그대로 , 컴퓨터에서 사용하는 메모리의 사용을 제어하는 방법을 칭한다. 컴퓨터의 운영체제에서 실행 되어지는 프로세스가 자신에게 할당되지 않은 영역의 메모리에 접근하는 것을 막는 것이 메모리의 주된 목적이며 , 이를 통하여 프로세스 내의 버그가 다른 프로세스의 동작에 영향을 미치는 것을 예방하고 멀웨어가 시스템에서 허가되지 않은 접근권한을 갖고 시스템에 영향을 끼치는것을 막는다. 이제 실제 리눅스 환경에서 사용되어지는 메모리 보호기법들에 대하여 알아보자. 1) ASLR : Address Space Layout Rand..
리눅스 프로세스 메모리 구조 및 여러 기초정보 (ORANG 참조 ) env , etc , argv , argc 또한 stack의 일부분임. kernel : 커널영역은 사용자의 접근을 못하도록 할당해 놓았다.OS의 시스템 코드가 로드되는 부분으로 우리가 건들 수 없다. Stack : 프로그램에서 사용되는 각종 환경변수 , 파라미터 , 리턴값 , 지역변수 등의 정보를 담고 있다. user space ( libc ) : 프로그램이 내부에서 사용하는 라이브러리 함수들과 관련된 공유라이브러리 파일이 적재되는 영역 Heap : 동적 할당되는 변수의 데이터가 위치하는 영역 Bss , Data : 프로그램에서 사용하는 전역변수 , 정적변수 등 각종 변수들이 실제로 위치하는 메모리 영역. 변수가 초기화되면 데이터 영역 , 초기화되지 않으면 bss 영역에 있다. 그리..
Buffer Overflow Basic 3 Buffer Overflow의 이해 버퍼란 , 시스템이 연산을 하는데 있어 필요한 데이터를 일시적으로 저장하는 저장공간을 말한다. 문자열을 처리하게 되면 문자열 버퍼가 되고 , 수열이라면 수열 버퍼가 되겠다.대부분의 프로그램에서는 이러한 버퍼를 스택에다 생성한다. 스택은 함수 내에서 선언한 지역 변수가 저장되고 함수가 끝나고나면 반환한다. BOF는 미리준비된 버퍼의 크기보다 큰 데이터를 쓸 때 발생하게 된다.만약 40byte 크기의 버퍼가 준비되어있는데 41~44byte를 사용하면 이전 함수의 bp를 수정하게 될 것이다. 더 나아가 45~48byte를 쓴다면 return address가 저장되어 있는 공간을 침범하게 될 것이다.따라서 BOF공격은 공격자가 메모리상의 임의의 위치에다 원하는 코드를 저장시켜..
Buffer Overflow Basic 2 이번엔 프로그램이 실행되면 프로세스가 메모리에 적재되고 메모리와 레지스터의 동작을 간단한 프로그램을 통해 확인해보자. 위와같은 간단한 소스를 짜고 컴파일 ( gcc -s )까지 하자.그 후 simple.c 프로그램이 컴파일 되어 실제 메모리상 어느위치에 존재하는지 확인해보기 위해 gdb를 이용하여 어셈블리 코드와 메모리에 적재될 logical address를 살펴보자. ( 각자 실행 ) 살펴보면 function()함수가 아래에 자리잡고 main()함수는 위에 자리잡음을 확인할 수 있다.따라서 메모리 주소를 바탕으로 생성될 이 프로그램의 segment 모양은 다음과 같다.이 소스에는 전역변수를 지정하지 않았기 때문에 data segment에는 링크된 라이브러리의 전역변수값만 들어있을 것이다. 이제 프로그램..
Buffer Overflow Basic 1 기초관련 내용은 달고나 문서를 참조했습니다. 1. 8086 Memory Architecture 위 사진은 8086 시스템의 기본적인 메모리구조다. 시스템이 초기화되기 시작하면 시스템은 커널을 메모리에 적재시키고 가용 메모리 영역(Available Space)을 확인하게 된다. ( 커널 : 컴퓨터 운영체계의 가장 중요한 핵심으로써 운영체계의 다른 모든 부분에 여러가지 기본적인 서비스를 제공.메모리나 저장장치 내에서 운영체계의 주소공간 관리 , 메모리 관리 역할 ) 요즘 사용되는 시스템의 CPU는 64bit이므로 메모리 영역은 0 ~ 2^64 -1 범위를 갖는다. 프로세스 : 하나의 프로그램이 실행되기 위한 메모리 구조.운영체제는 하나의 프로세스를 실행시키면 이 프로세스를 segment라는 단위로 묶어서 가..