Overwrite _rtld_global exploit techmain 함수가 종료되면 __libc_start_main+231 -> __GI_exit() -> __run_exit_handlers() -> _dl_fini()등 여러 함수와 그 안에 있는 구조체의 포인터를 거치는데, _dl_fini에서 불러오는 _dl_rtld_lock_recursive() 함수와 인자를 덮어쓰면 실행흐름 조작이 가능한 exploit tech이다. _dl_rtld_lock_recursive가 없어요.glibc 2.34 이후 버전에서 _rtld_global 구조체의 레이아웃이 변경되어 오프셋을 쉽게 못 가져온다. 최신 버전에서 exploit 하는 방법은 아래 사이트로 들어가서 소스 코드를 분석하거나 직접 디버깅하면서 __rt..
그 충분히 다른 블로그 참고하고 왔을 거 같아서 Binning은 기본적인 요소보다는 중요한 포인트만 갖고 왔습니다. Boundary Tag메모리 청크(블록이라고 표현하는게 맞을 수도) 경계를 식별하고 관리하기 위한 메커니즘이다.-> 청크의 헤더 정보를 다음 청크에 복사하는 식으로 관리한다.그러면 어떤 일이 발생하냐면, 청크의 앞뒤 정보를 빠르게 확인할 수 있다. 그러면 인접한 청크들이 free된다면 병합을 할 수 있다! 그러면 메모리 관리가 효율적이다! Boundary Tag 메커니즘이 heap에서 장점들이 Chaining된다 +--------+--------------------+--------+| Header | Payload | Footer | 사실 dlmalloc에서 Boun..
Heap이 왜 어려울까?1. Stack Memory와 너무 다른 구조Stack 메모리에서는 단순히 push, pop 동작만 하기에 우리가 이해하는데 큰 어려움은 있지 않았다.반면 Heap의 메모리 할당은 비정형적이고 동적이기에 정적으로 할당되는 Stack 메모리보다 배우기 까다롭다. 2. 너무 많은 Memory Allocators Google의 tcmallocGNU의 ptmalloc2FreeBSD/Firefox의 JemallocSolaris의 Libumem등 동적 메모리 할당자는 종류가 많다. 운영체제, 메모리 재사용, 단편화, 낭비등 여러면에서 각각 구현 목표가 다를 수 있다. ptmalloc2.. 빠르고 쉽게 알아보자우선 리눅스 glibc에서는 ptmalloc(pthreads malloc)을 제공한다..
샌드박싱 사이클 예시sandboxing은 시스템 보안 측면에서 보안 위험을 초소화합니다. 핵심만 적고 싶은데 기본 개념을 정리해 버려서.. 어쩔 수 없네요. 궁금하신 분은 아래에 더보기 버튼을 눌러 펼쳐주세요. 더보기Sandbox 기본 개념애플리케이션, 코드, 프로세스 등을 독립된 환경에서 실행하여 시스템 장애 및 소프트웨어 취약점의 확산으로부터 완화하기 위한 격리 매커니즘 이를 통해 악성 코드가 시스템 전체에 피해를 주는 것을 방지하고, 안전하게 의심스러운 코드나 애플리케이션을 실행할 수 있다. 쉽게 설명하기 위해 간단한 예시를 들고 왔다.웹 브라우저 : 한 탭에서 발생한 문제를 전체 브라우저에 영향끼치지 않게 하기 위해 샌드박스 환경에서 실행모바일 앱 : iOS, Android 등 앱이 시스템의 다..
chroot(Change Root Directory)개요chroot는 루트 디렉토리를 변경하며, 변경된 디렉토리에서는 상위 디렉토리에 파일 및 명령 접근이 불가능하다.이는 chroot는 리눅스 위에서 프로세스를 격리시키는 기본적인 방법이다. 이렇게 시스템해킹에서 마주치게 되면 머리가 아프게 되는데, 사실 별 거 없으니 하나 배워가보자chroot 한계chroot는 프로세스를 격리시킬 수 있지만, 다음과 같은 제한사항이 있다.네트워크, 프로세스, 파일시스템 등 자원에 접근이 가능하며 제한이 없다.root 권한으로 동작한다. chroot 탈옥 쉽게 하기 (pwnable 관점)chroot jail break PoC chdir("../../../../../"); chroot("."); execve..