System Hacking 23

ptmalloc2 allocator | Heap Allocator Exploit

ptmalloc2의 구현 목표  1. 메모리 낭지 방지-  메모리 할당 요청이 발생하면, 먼저 해제된 메모리 공간 중에서 재사용할 수 있는 공간이 있는지 탐색한다.- 해제된 메모리 공간들 중 동일한 사이즈의 메모리가 요청되면 재사용하며, 작은 크기의 할당이 요청되면 해제된 메모리 공간을 나누어 주기도 한다. 2. 빠른 메모리 재사용-  특 정 메모리 공간을 해제한 이후에 이를 빠르게 재사용하려면 해제된 메모리 공간의 주소를 기억하고 있어야 한다.이를 위해 ptmalloc은 메모리 공간 해제 시, tcache 또는  bin이라는 연결 리스트에 해제된 공간의 정보를 저장한다. 3. 메모리 단편화 방지- 내부/외부 단편화를 줄이기 위해 정렬, 병합, 분할을 사용한다.- ptmalloc은 64bit 환경 기준,..

System Hacking 2024.05.11

_IO_FILE

(+ubuntu 18.04 환경 구축) _IO_FILE 리눅스 시스템의 표준 라이브러리에 속하는 내부 구조체이며 파일 스트림을 나타내기 위한 구조체 : fopen 함수 사용 시, _IO_FILE은 heap 영역에 할당 : fopen >> 파일 포인터 반환 >> 인자로 사용 struct _IO_FILE_plus { FILE file; const struct _IO_jump_t *vtable; }; struct _IO_FILE { int _flags;/* High-order word is _IO_MAGIC; rest is flags. */ /* The following pointers correspond to the C++ streambuf protocol. */ char *_IO_read_ptr;/* Cu..

System Hacking 2024.03.30

SigReturn-Oriented Programming

Signal 시그널 프로세스에 특정 정보를 전달하는 매개체 : signal 발생 >> 해당 코드가 커널 모드에서 실행 >> 유저 모드 복귀 (운영체제 :: 커널 / 유저 모드가 상호작용하며 프로세스 생성 및 실행) *+--------------------+------------------+ *| POSIX signal | default action | *+--------------------+------------------+ *| SIGHUP | terminate| *| SIGINT |terminate| *| SIGQUIT |coredump | *| SIGILL |coredump | *| SIGTRAP |coredump | *| SIGABRT/SIGIOT |coredump | *| SIGBUS |cor..

System Hacking 2024.03.30

linux library exploit :: __environ

환경변수 : 시스템의 정보를 가지고 있는 동적인 값, 사용자가 추가 및 수정, 삭제 가능 : 환경변수에 대한 정보는 스택 영역에 존재 : 명령어 > 환경변수에 명시된 "/bin", "/usr/bin" 등의 디렉터리를 통해 명령어 접근 및 실행 라이브러리 실행 시에도 환경변수를 참조 (== 포인터 선언 존재) >> 스택 주소 획득 ! (바이너리 내에서 스택 주소를 찾는 것은 거의 불가능) 전역 변수 __environ : execve 계열 함수와 getenv 등 혼경변수와 관련된 함수에서 참조하는 변수 __environ - amd64-64 - full RELRO, canary, nx, pie 싹 다 적용 코드 #include #include #include #include #include void sig_h..

System Hacking 2024.03.29

linux library exploit :: _rtld_global

+ Glibc 2.34 이전 버전에서 수행 가능한 공격 기법이므로 Glibc 2.27버전을 내장하는 Ubuntu 18.04 64-bit환경에서 실행됨 기본적으로 종료를 하는 프로그램 내에서 로더를 통하여 다양한 함수들이 호출된다. 이 과정에서 호출되는 함수를 순서대로 알아보자. __Gl_exit >> _run_exit_handlers >> _dl_final >> _rtld_global __Gl_exit main 함수 내에서 리턴 명령어 실행 시, 스택 최상단에 있는 __libc_start_main+231 의 코드가 진행되고, 내부에서 __GL_exit 함수를 호출한다. => 0x7ffff7a25240 :lea rsi,[rip+0x3a84d1] # 0x7ffff7dcd718 0x7ffff7a25247 :s..

System Hacking 2024.03.28

Master Canary

Background : Master Canary TLS (Thread Local Storage) 스레드의 전역변수를 저장하기 위한 공간으로 loader에 의해서 할당 init_tls() : 로더에서 TLS 영역을 할당하고 초기화 하는 함수 static void * init_tls (void) { /* Construct the static TLS block and the dtv for the initial thread. For some platforms this will include allocating memory for the thread descriptor. The memory for the TLS block will never be freed. It should be allocated accordi..

System Hacking 2024.03.24

SECCOMP

Sandbox 외부의 공격으로부터 시스템을 보호하기위해 설계된 기법 : allow list/ deny list 둘 중 선택하여 적용 가능 -> sandbox 메커니즘 중 하나 : SECCOMP seccomp (secure computing mode) 리눅스 커널에서 sandboxing 매커니즘을 제공하는 컴퓨터 보안 기능 -> 어플리케이션에서 불필요한 시스템 콜의 호출을 방지할 수 있다! STRICT_MODE read, write, exit, sigreturn 시스템 콜의 호출만을 허용 -> 이외의 것은 sigkill 시그널로 프로그램 종료 #include #include #include #include // prctl함수를 통해 STRICT_MODE설정 void init_filter() { prctl(..

System Hacking 2024.03.23

Path Traversal

리눅스 경로 절대경로 루트 디렉토리 ("/")부터 파일에 이를 때까지 거쳐야하는 디렉토리 명을 모두 연결하여 구성 상대경로 현대 디렉토리를 기준으로 다른 파일에 이르는 경로를 상대적으로 표현하는 것 이전 dir (..) / 현재 dir (.) 를 이용하여 구성 Path Traversal 권한 없는 경로에 프로세스가 접근할 수 있는 취약점 : 권한 - 서비스 로직 관점에서의 권한을 의미 : 서버의 중요한 데이터를 공격자에게 노출시킬 수 있고, 데이터를 w할수 있다면 /etc/passwd를 조작하여 root의 비밀번호를 제거하거나, ssh의 설정을 변경하는 등 위협이 되는 행위를 할 수 있음

System Hacking 2024.03.23

command injection

Command Injection : 명령어를 실행하는 함수에 사용자가 임의의 인자를 전달할 수 있을 때 발생하는 취약점 Meta 문자 description example $ 셸 환경변수 $echo $PWD && 이전 명령어 실행 후 다음 명령어 실행 $echo hello && echo theori ; 명령어 구분자 $echo hello; echo theori * 와일드 카드 $echo .* ' 명령어 치환 $echo 'echo hellotheori' 예시로 ping [userinput]의 경우 userinput = 'a; /bin/sh' 입력 시에 ping실행 후에 셸 획득가능 + system함수 명령어 실행과정 library내부의 do_system함수 호출 - do_system함수는 "sh-c"와 sy..

System Hacking 2024.03.23