일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Kernel
- 백도어
- xz-utils
- CVE-2024-3094
- kernel build
- cwe-506
- liblzma
- kernel image
- kernel img
- rootfs
- newbie
- Today
- Total
목록전체 글 (79)
ZZoMb1E

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ 유저 영역에서 ROP는 NX-BIT 보호 기법을 우회하기 위해서 사용했었다. 커널 영역에서의 ROP 역시 SMEP라는 보호기법을 우회하기 위해서 사용하는 기법이다. ROP를 수행하기 위해서는 '코드 조각'이라고 불리는 gadget을 찾아야 한다. 이를 위해 ROPgadget 이라는 툴을 사용해왔다. 이 툴의 경우 바이너리를 인자로 필요로 하고 있다. 하지만 지금까지 해온 커널 영역을 다루는 것은 .cgio 파일을 이용해서 실행 및 접속하는 것이다. 때문에 우리는 먼저 커널 바이너리를 추출해야 한다. #!/bin/sh# SPDX-License-Identifier: GPL-2.0-only# ------------------------..

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ https://whrdud727.tistory.com/entry/KERNEL-Holstein-Module [KERNEL] Holstein Module※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ Holsteinhttps://whrdud727.tistory.com/entry/KERNEL-Environment-Setting [KERNEL] Environment Setting※ 잘못된 부분이 있으면 알려주세요.whrdud727.tistory.com이전 게시글에서 Holstein 모듈을 활용하여 코드 분석 및 취약점을 확인했다. 취약점으로 RIP 를 조작할 수 있다는 사실을 활용하여 Exploit을 해보겠다..
보호되어 있는 글입니다.

Use After Free(UAF) 취약점은 메모리 할당 후 해제된 포인터를 여전히 사용할 때 발생하는 보안 취약점이다. 이는 메모리 관리에서 발생하는 오류로, 공격자는 이를 악용하여 프로그램의 비정상적인 동작을 유발하거나 임의의 코드를 실행할 수 있다. 메모리는 malloc 등을 통해 할당되고, free를 통해 해제된다. 해제된 메모리는 다른 용도로 재사용될 수 있다. 하지만 해제된 포인터가 계속 사용된다면, 이를 Dangling Pointer라고 한다. • 1단계: 메모리 할당 (malloc) • 2단계: 메모리 해제 (free) • 3단계: 해제된 포인터가 다시 사용됨 (Dangling Pointer) 할당된 청크의 data영역이 freed된 청크의 헤더 부분에 해당이 된다.즉, freed된 청크..

Memorry Allocator : 한정된 메모리 자원을 각 프로세스에 효율적으로 배분하는 작업을 한다.- 실행중에 메모리를 동적으로 할당 및 해제한다.- 구현에 따라 사용된 알고리즘의 종류가 달라진다 - ptmalloc2은 ubuntu에서 사용한다 ptmalloc2의 특징으로는 해제된 메모리에 대한 데이터를 지우지 않고 가지고 있다가비슷한 요청이 오면 반환해주는 특징이 있다. - 메모리 낭비 방지- 빠른 메모리 재사용 tcache 혹은 bin이라는 리스트를 사용한다.- 메모리 단편화 방식 단편화를 줄이기 위해 정렬, 병합, 분할을 사용한다. chunkptmalloc에 의해 할당된 공간으로 헤더 + 데이터 영역으로 구성되어 있다. 헤더에는 청크의 상태와 크기를 가리키기 때문에 사용중인 청크와 해제된..

FSOPFile Stream Oriented ProgrammingC의 표준 라이브러리인 libc에서 file stream의 내부 필드를 조작하여 악의적인 코드를 수행하는 공격 기법이다. libc에서 파일 스트림은 FILE 구조체로 관리되며, 이 구조체의 필드들은 파일 입출력 작업을 추상화한다.file stream 구조체 이해 : libc의 FILE 구조체를 분석하여 필드를 파악해야 한다. _IO_FILE : 리눅스 시스템의 표준 라이브러리에서 파일 스트림을 나타내기 위한 구조체이다.struct _IO_FILE_plus{FILE file; const struct _IO_jump_t *vtable;};struct _IO_FILE{ int _flags; char *_IO_read_ptr; char *_..

rtld global프로그램이 실행되고 프로세스로 등록될 때, 코드와 변수들을 관리하기 위한 구조체이다.실행이 종료되는 지점에서 참조된다.return에 의해 종료될 때 확인이 가능하다. 간단한 실습 예제이다.#include int main(){ return 0; }바이너리 __stack부터 확인해보면 main함수 호츨을 __libc_start_main에서 하는 것을 알 수 있다.즉, main함수가 종료될 때 복귀도는 주소도 __libc_start_main이다. 여기서 step into로 계속 들어가보겠다.조금 들어가다보면 __GI_exit라는 함수가 호출된다.그리고 __run_exit_handlers를 호출한다. 이제 여기서 함수 종료에 return을 쓰나 안쓰나에 따라 달라지는데,이번 예제는 사용..

__environ을 이용한 스택 주소 leak__environ은 환경 변수 중 하나로 시스템의 정보를 갖고 있는 변수이다.(execve 계열의 함수가 참조한다.)libc파일에서 심볼을 찾을 수 있다. environ에 들어있는 값을 확인한 모습이다. 해당 부분들이 stack 영역에 속하는 것 또한 알 수 있다. 전체적인 내용이다._init()이 실행될 때 호출되어 사용되는 듯 하다. dreamhack - __envirion#include #include #include #include #include void sig_handle() { exit(0);}void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); signal(SIGALRM, si..

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ gadget을 사용하여 쓰기 권한이 있는 영역에 Fake Stack를 구성하는 기법이다.payload가 저장되어 있는 경우, ret까지만 overflow가 발생해야 한다.payload가 저장되어 있지 않은 경우, chain + leave_ret 까지 넣을 있어야 한다.일반적으로 bof취약점을 한번 밖에 사용하지 못하거나 ret까지만 overflow가능한 경우 사용하는 기법이다. 간단한 예제를 통해 살펴보도록 하겠다.// gcc -no-pie -fno-stack-protector -z execstack -o ex ex.c#include #include int cnt = 0;void gift(){ __asm__ ("pop %r9")..

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ Frame Pointer Overflow (간략하게 설명)sfp를 변조하는 것으로, 결과적으로 보았을 때, IP 레지스터를 변조하는 기법이다.sfp 영역에 최소 1바이트 이상의 overflow가 가능해야 한다.main()이외의 함수가 필요하다. 이 기법은 Epilogue 때문에 가능하다. leave - ret는 이전 함수의 sfp를 복구하고, return을 수행한다.각 구성을 제대로 살펴보면 아래와 같다.leave - mov esp, ebp - pop ebpret - pop eip - jmp eip 간단한 그림을 가지고 살펴보겠다.일반적으로 함수가 호출되면 위와 같은 구조를 지니게 된다.이제 여기에 FPO를 시행해보겠다.먼저 mo..