background/linux
Double Free Bug & Tcache Poisoning
Double Free Bug Double Free Bug (DFB)는 같은 청크를 두 번 해제할 수 있는 버그를 말합니다. ptmalloc2에서 발생하는 버그 중 하나이며 공격자에게 임의 주소 쓰기, 임의 주소 읽기, 임의 코드 실행, 서비스 거부 등의 수단으로 활용될 수 있습니다. 지난 코스에서 배운 Dangling Pointer는 Double Free Bug를 유발하는 대표적인 원인입니다. 코드 상에서 Dangling Pointer가 생성되는지, 그리고 이를 대상으로 free를 호출하는 것이 가능한지 살피면 Double Free Bug가 존재하는지 가늠할 수 있습니다. Double Free Bug를 이용하면 duplicated free list를 만드는 것이 가능한데 이는 청크와 연결리스트의 구조때문..
ptmalloc2
ptmalloc2 ptmalloc2(pthread malloc 2)는 Wolfram Gloger가 개발한 Memory Allocator로 (이하 ptmalloc이라 함) Doug Lea의 dlmalloc을 개선한 ptmalloc의 두 번째 버전이다. ptmalloc은 리눅스에서 사용하고 있으며 GLibc에 구현되어 있다. ptmalloc의 목표는 "메모리의 효율적인 관리"이다. 이는 아래와 같은 목표를 가지고 있다. 1. 메모리 낭비 방지 컴퓨터의 전체 메모리는 한정적이므로 새로운 메모리 공간을 무한히 할당할 수는 없다. 그래서 ptmalloc은 메모리 할당 요청이 발생하면 먼저 해제된 메모리 공간 중에서 재사용할 수 있는 공간이 있는지 탐색한다. 해제된 메모리 공간 중에서 요청된 크기와 같은 크기의 메..
함수의 프롤로그와 에필로그
콜 스택 구조에서 함수는 자신만의 스택 프레임을 가지게 된다. 서로의 스택 프레임을 구분하기 위해 함수는 프롤로그와 에필로그 과정을 가진다. (이 글에선 인텔 아키텍쳐 32비트의 어셈블리어를 기준으로 설명한다) 함수의 프롤로그(prolog) 함수의 첫 부분엔 아래와 같은 코드가 있다. push ebp; mov ebp, esp; ebp 레지스터는 보통 스택 프레임의 맨 밑바닥을 가리킨다. esp 레지스터는 스택 프레임의 최상단을 가리킨다. 스택에서 esp 보다 위에 있는 값들은 사용하지 않는다. 함수가 호출될 때 ebp와 esp는 새로운 스택 프레임의 빌드를 위해 움직이는데 push ebp를 통해 호출 함수(caller)의 ebp가 저장(백업)된다. 이 값은 호출된 함수(callee)가 실행을 마치고 re..
환경 변수(environ)
환경 변수(Environment Variable)는 운영 체제에서 사용하는 매번 변할 수 있는 동적인 값들의 모임이다. 시스템의 정보를 갖고 있는 변수를 뜻하며 사용자가 직접 추가 및 수정하거나 삭제할 수 있는 값이다. 리눅스에서 제공하는 명령어들은 "/bin", "/usr/bin" 등의 디렉터리에 위치하는데 우리가 명령어를 입력하면 환경 변수에 명시된 디렉터리에서 명령어를 탐색하고 실행하기 때문에 명령어의 경로를 입력하지 않아도 된다. 환경 변수는 터미널 뿐만 아니라 프로그램에서도 참조한다. 프로그램에서도 명령어를 실행해야 하는 경우에 절대 경로를 입력하지 않아도 명령어를 실행할 수 있다. 이 또한 프로세스를 로드하면서 환경 변수를 초기화하기 때문이다. 환경 변수에 대한 정보는 스택 영역에 존재하며 라..
ELF 파일 보호 기법
ASLR Address Space Layout Randomization(ASLR)은 바이너리가 실행될 때마다 스택, 힙, 공유 라이브러리 등을 임의의 주소에 할당하는 보호 기법이다. (커널에서 지원하는 보호 기법) https://learn.dreamhack.io/85#4 로그인 | Dreamhack dreamhack.io stack canary 스택 카나리는 함수의 프롤로그에서 스택 버퍼와 반환 주소 사이에 임의의 값을 삽입하고 함수의 에필로그에서 해당 값의 변조를 확인하는 보호 기법이다. 카나리 값의 변조가 확인되면 프로세스는 강제로 종료된다. 공격자는 카나리 값을 정확히 알아야 버퍼 오버플로우 공격이 가능하다. https://learn.dreamhack.io/112#2 로그인 | Dreamhack d..