분류 전체보기 309

[linux kernel] (4) - Slab Allocator(슬랩 할당자)

더보기 20.12.28 슬랩 캐시에 대한 내용 추가 만약 kmalloc을 이용해 커널이 16byte를 할당받으려고 한다고 하자. page의 단위가 4kb이기 때문에, 고작 16바이트를 위해 4k바이트를 할당해야 할까? 그렇다면 나머지 4096 - 16 = 4080byte는 어떻게 될까? 4080byte는 사용되지 못한 채 방치되며 심한 메모리 낭비가 발생한다. 이를 막기 위한 방법이 바로 Slab Allocator(슬랩 할당자)이다. 슬랩 할당자는 미리 할당해 놓은 작은 메모리 조각을 kmalloc의 요청에 따라 요청한 양에 가장 가까운 메모리 조각을 반환해 준다. 예를 들어, 16byte를 요청했을 경우 가장 가까운 slab의 조각 32byte를 사용할 수 있도록 제공(응답)해준다. Slab Alloc..

Master canary (마스터 카나리)

SSP(Stack Smashing Protector) 보호기법은 스택 버퍼오버플로우를 방지하기 위해 개발된 기법이다. SSP는 스택 buffer와 SFP(Stack Frame Pointer) 사이에 랜덤 값인 canary를 넣어서 함수 종료 시점에서 __stack_chk_fail( 함수 호출을 통해 canary 변조 여부를 체크함으로써 스택이 망가졌는지 확인한다. 다시 정리해서, SSP가 적용되어 있으면 함수에서 스택을 사용할 때 canary가 생성된다. 쓰레드를 생성하면 새로운 프로세스가 생긴다. 참고로 쓰레드는 프로세스 내에서 각각 Stack만 따로 할당받고, code, data, heap 영역은 공윻나다. 마스터 카나리는 main 함수가 호출되기 전에 랜덤으로 생성된 카나리를 쓰레드마다 전역 변수로..

System Hacking 2020.12.21

contact

안녕하세요. jiravvit입니다. 현재 비공개 글인 드림핵 write up과 관련해서, 지금 이 글을 보고 계시는 여러분들이 문제 푸실 때 더 도움이 되어드리고 싶어서 오픈채팅방을 만들게 되었습니다. 무작정 flag는 알려드리지 않을 예정이며, 여러분이 문제 푸시는데 막히는 부분이나, 익스 방향의 힌트 등.. 제가 도와드릴 수 있는 부분은 도와드리겠습니다. 읽어주셔서 감사합니다! (참고로 드림핵 닉네임은 JiR4Vvit입니다.) open.kakao.com/o/s5mWdjLc jiravvit🤩님의 오픈프로필 안녕하세요 jiravvit 입니다. open.kakao.com

ABOUT 2020.12.12

[linux kernel] (3) - task

Task 프로세스랑 쓰레드는 테스크로 관리한다. 테스크는 task_struct라는 구조체로 관리 한다. task_struct 구조체엔 테스크에 대한 정보가 들어 있다. 이 구조체에 중요하게 생각할만한 것은 권한 정보 이다. 프로세스를 만들 땐 fork 함수를, 쓰레드를 만들 땐 pthread_create 함수를 쓴다. 이 두 함수 다 task_struct를 생성하는 역할을 하고,각 테스크 마다 커널 스택 및 task_struct가 할당이 된다. 결론은 프로세스나 쓰레드 마다 커널 스택과 task_struct가 할당이 된다. task_struct 구조체 // Permal link: https://github.com/torvalds/linux/blob/219d54332a09e8d8741c1e1982f5eae..

[linux kernel] (2) - kernel land의 메모리 보호기법

KASLR (Kernel Address Space Layout Randomization) -> 커널의 메모리 주소를 랜덤화 시킨다. SMEP (Supervisor Mode Execution Protection) -> 유저 영역의 주소 공간에서 커널의 코드를 실행을 방지한다. SMAP (Supervisor Mode Access Protection) -> 유저 영역의 주소 공간에서 메모리 접근을 비허용한다. KADR (Kernel Address Display Restriction) -> 비 루트 사용자가 커널 주소의 정보를 얻는 것을 제한한다. -> 모든 커널 심볼이 저장된 /proc/kallsyms파일의 심볼 주소가 0으로 표시된다. KPRI (Kernel Page Table Isolation) -> 유저..

[linux kernel] (1) - 커널(kernel)이란?

1. 커널의 특징 및 개념, 이론, 부트로더 등 1-1. 커널이란? 운영체제를 사용자의 관점 혹은 시스템의 관점에서 살펴보자. 사용자의 관점에서 운영체제는, 컴퓨터를 사람이 사용하게 쉽게 여러가지 일들을 수행해주는 역할을 한다. 시스템의 관점에서 운영체제는, 하드웨어와 가장 밀접한 프로그램이라고 볼 수 있다. 컴퓨터 시스템은 특정 문제를 해결하기 위해 필요한 여러가지 자원들을 사용한다.(ex CPU시간, 메모리 공간, 파일 저장 공간, 입출력 장치... ) 운영체제는 이러한 자원의 관리자로써 동작한다. 운영체제는 커널과 시스템 프로그램으로 구분될 수 있다. 커널은 운영체제의 핵심으로 컴퓨터 자원들을 관리하는 역할을 한다. 하지만 커널은 사용자와의 상호작용은 전혀 지원하지 않는다. 그래서 사용자와 직접적인..

[BISC CTF 2020 : pwn] oldschool 풀이

문제 풀이 환경 : ubuntu 16.04.7 처음으로 대회시간 안에 CTF에서 포너블 문제를 풀었다. 쉽고 간단한 문제지만... 기념으로 롸업을 작성해본다 ㅎ 제공된 파일은 두개, libc 파일과 바이너리 문제 파일이다. 먼저 보호기법을 확인해 보았다. 보호기법을 먼저 확인해 보았다. Partial RELRO... GOT overwriting을 하는 문제일까? 이제 IDA로 바이너리를 분석해보자. vuln 함수의 return을 보고 RET를 조작하여 main으로 돌려서 read함수의 got를 system 함수의 주소로 바꾸고 인자를 '/bin/sh'로 주어야겠다고 생각했다. 그 전에 read 함수의 got 주소가 leak되어야 한다. 여기서 주의해야할 게 "Hello BOB" 라는 문자열 뒤에 leak..

CTF/Write UPs 2020.11.30