목록Security/01 System Hacking (18)
tmxklab
참고 : GNU C Library의 Memory Allocator인 ptmalloc2(glibc 2.23)를 대상으로 설명 이번에는 Free된 Chunk들을 다시 재활용하기 위해서 Free Chunk들을 어떻게 관리하는지 자세하게 다뤄보겠다. 0. Boundary Tag 이전 시간에 Memory Allocator소개 부분 또는 Free Chunk구조에서 잠깐 Boundary Tag가 나온 것을 보았을 것이다. 그리고 여러 개의 청크들이 생성되었을 경우 메모리에 연속적으로 위치하는 것을 보았을 것이다. 이번에는 Boundary Tag를 통해 어떻게 인접한 앞/뒤 Chunk의 주소가 계산 가능한지 알아보도록 하겠다.(fastbin은 예외) 위와 같이 p1, p2, p3에 각각 malloc을 하고 p2를 fr..
참고 : GNU C Library의 Memory Allocator인 ptmalloc2(glibc 2.23)를 대상으로 설명 지금부터는 실제로 메모리 할당 및 해제되는 공간인 청크에 관한 이야기를 시작하도록 하겠다. 중간중간에 bins에 대한 내용이 언급되는데 여기서는 그냥 free된 청크를 관리하는 정도로만 알고 넘어가자 1. Chunk 1.1 Chunk란? malloc()에 의해 메모리 할당 요청이 들어온 경우 실제로 할당받는 영역 실제로 저장되는 data와 메타 데이터가 저장된 header까지 포함 청크의 크기 : 2*sizeof(size_t) 의 배수로 할당 청크의 최소 크기 : 4*sizeof(void*) 32bit system : 8bytes 배수로 할당 64bit system : 16bytes..
이제 본격적으로 메모리 할당 및 해제하는 동작 과정과 할당되었을 때 또는 해제되었을 떄 어떠한 구조를 가지는지 등등 상세히 알아보도록 하겠다. 처음에 전체적인 동작 과정을 먼저 설명하고 싶으나 동작 과정을 이해하기 위해 Arena, bins, Chunk 등등.. 모르는 용어가 많이 나와서 각각에 대한 개념을 먼저 설명한 뒤에 전체적인 동작 과정을 설명하기로 하겠다. 0. Overview 이전에 다양한 종류의 Dynamic Memory Allocator를 잠깐 간략하게 설명하고 넘어갔을 것이다. 이처럼 힙이 작동하는 방식은 플랫폼(Windows, Linux, MacOS.. 등등)과 구현에 따라 다르며 다양한 힙 구현이 존재한다. 따라서, 모든 Memory Allocator를 설명을 할 수는 없으므로 이전에..
워 게임 문제를 풀면서 메모리 힙 관련한 취약점(use-after-free, double-free, heap overflow 등등..)을 이용한 공격에 대한 문제들이 나오면서 힙에 대한 이해의 필요성을 느끼게 되었다. 힙 기반 취약점에 대한 공격 기법은 힙 영역을 할당해주는 Dynamic Memory Allocator의 내부 구현이 어떻게 작동하는지에 대한 이해가 필요하므로 이번에 힙에 대한 전반적인 이해와 관련한 취약점이 무엇인지 공부하고 정리하기로 한다. (스택 기반 취약점보다 힙 기반 취약점을 이해하는데 상당한 시간과 노력이 필요...) 이번에 소개되는 내용은 동적 메모리를 관리하는 Dynamic Allocator에 관해 이론적인 위주로 다룰 것이다. 0. Heap 영역 들어가기전에.. 먼저, 복습..
이번에는 저번에 배웠던 x86환경에서 Universal Shellcode를 작성하는 원리와 실습에서 응용하여 x64환경에서 Universal Shellcode를 작성하여 실행하는데 목표를 두었다. 참고로 저번에는 WinExec함수를 통해 cmd창을 오픈하는 Universal Shellcode를 작성하였지만 응용하여 MessageBoxA함수를 통해 메시지박스를 오픈하도록 작성할 것이다. 0. 목표 x64환경에서 MessageBoxA함수를 통해 메시지 박스를 오픈하는 Universal Shellcode작성 및 실행 1. 실습 환경 OS : Windows 10(x64) Debugging Tool : WinDbg Preview IDE : Visual Studio 2017 PE파일 분석 툴 : CFF Explor..
[윈도우 시스템 해킹 가이드 버그헌팅과 익스플로잇 - 김현민]책을 읽고 실습하면서 몰랐던 내용들이나 실습한 내용들을 나름 정리해보았다. 0. 문제점 쉘 코드에 포함되는 API함수를 사용하기 위해 주소 값을 알아야 하는데 Windows 7이상의 OS부터 부팅할 때마다 kernel32.dll의 상위 2bytes 주소 값이 매번 바뀐다. Example) Python 코드를 이용하여 WinExec함수의 주소 값 확인(환경 : Windows7) [ 재부팅 전] [ 재부팅 후 ] 상위 2bytes의 주소 값이 바뀌는 것을 확인할 수 있다. API란? API(Application Programming Interface)란 OS가 애플리케이션을 위해 제공하는 함수의 집합으로 애플리케이션과 디바이스를 연결해주는 역할을 ..
1. 윈도우 실행파일(PE파일) 개요 1.1 PE파일이란? PE(Portable Executable)파일은 윈도우 실행파일이라고 부르며 윈도우OS에서 사용되는 실행파일형식을 의미하며 UNIX의 COFF(Common Object File Format)을 기반으로 만들어졌다. windows 환경에 따라 다르게 부르는데 32bit환경에서는 PE32, 64bit환경에서는 PE+또는 PE32+라고 불린다. Linux나 Unix와 같은 계열의 환경에서는 PE파일과 비슷한 형식으로 ELF(Executable and Linkable Format)파일이 존재한다. PE파일을 통해서 프로그램이 사용하는 API 또는 DLL 등 다양한 정보와 어느 메모리 주소에 로딩되는지 확인할 수 있다. 1.2 PE파일 종류 1) 실행 계..
1. RTL(Return To Libc) 사용자가 작성한 코드에 없는 함수를 호출하고자 메모리에 이미 적재된 공유 라이브러리의 원하는 함수를 사용할 수 있는 기법이다. 또한, 리눅스의 메모리 보호 기법 중 NX bit나 DEP를 우회하여 공격이 가능하다. 1) DEP(Data Execution Prevention) - 데이터 영역에서 코드가 실행되는 것을 막는 기법 - 공격자가 Heap 또는 Stack영역에 쉘 코드를 저장해서 실행하기 위해서 해당 영역에 실행권한이 있어야 한다. 따라서, DEP가 적용된 경우 실행권한이 없어 쉘 코드가 실행되지 않고 프로그램에 대한 예외처리 후 종료 2) NX bit(Never eXecute Bit) - 메모리에서 데이터 영역을 실행하는 것을 방지해주는 CPU기능 - N..