목록All (7)
trash houz
빌드를 위한 필수 패키지 설치 Documentation/Changes 문서에 커널 빌드시 사용되는 패키지의 최소 버전이 명시되어 있습니다. sudo apt install build-essential kernel-package libncurses5-dev libssl-dev ccache flex bison libelf-dev bin86 qemu qemu-kvm 커널 소스코드 다운로드 아래 두 링크에서 다운로드 할 수 있습니다. kernel.org tovalds/git 이외에도 토발즈 깃허브에서 받아온뒤 버전을 변경할수 있습니다. git clone https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux git checkout v3.16..
보호되어 있는 글입니다.
보통 커널 익스 문제를 풀게되면 위와같은 파일들을 받게 된다 zerofs.ko 와 같은 .ko 파일은 디바이스 드라이버 파일로 원본 소스코드가 제공되지 않는다면 우리가 직접 분석해야할 파일 run.sh 같은 .sh 스크립트 파일들은 제공 될수도 있고 안될수도 있는데 아마 대부분 qemu 가상머신을 실행시켜주는 스크립트 파일들이다. 꼭 제공되는 스크립트를 사용하지 않아도 qemu 설정을 할수있다면 맘대로 옵션을 바꿔도 된다. bzImage 는 압축된 커널 이미지로 부팅시 사용된다. extract-vmlinux 스크립트를 이용해서 압축을 푼뒤 vmlinux 를 만들어 분석시 활용할수 있다. rootfs.cpio 같은 .cpio 파일들은 대부분 file system 을 압축시켜놓은 파일이다. 이름에 fs 같은..
- 분석 device 파일 open() 시에 실행되는 함수. 전역 변수. bss영역에 babydev_struct라는 구조체가 있고, 구조체 변수중 device_buf에 64바이트만큼 동적 할당해준다. 이후 구조체 변수 device_buf_len에 크기까지 저장. 여기까지 open() 완료 close() 통해 디바이스를 종료하면 실행되는 babyrelease() 함수. babydev_struct 구조체의 device_buf를 참조하여 kfree() 해버린다. 다만 따로 전역변수 .bss 영역을 초기화하지는 않는다. 만약 디바이스를 두개 열게 되면 두 개의 디바이스는 똑같은 babydev_struct 구조체를 가리킨다. 이렇게 된다면 free() 후에도 참조할 수 있는 UAF 취약점이 발생하게 된다. bab..
CSAW CTF 2015에서 출제된 stringIPC라는 Kernel Exploitation 문제이다. 로드되어있는 모듈은 IPC를 통하여 통신할 수 있는 기능을 제공하며 새로운 IPC 채널을 생성, 찾기, 크기 변경 등이 가능하다. 각 채널은 생성 시 채널 ID 와 버퍼가 커널 메모리에 할당되고, 버퍼에 내용을 쓰거나 수정, 버퍼크기 변경 등이 가능하다. 문제 출제시 소스코드를 제공했으므로 IDA로 분석하는 참극은 일어나지 않도록 하자. https://github.com/mncoppola/StringIPC/blob/master/main.c mncoppola/StringIPC CSAW CTF 2015 Linux kernel exploitation challenge. Contribute to mncoppo..
리눅스 커널 소스에는 이런 것이 있다. include/linux/sched.h 를 연 뒤에 task_struct 구조체를 찾아보자. 쭈욱 내리다보면 process credentials 주석 처리된 부분이 보인다. cred 구조체를 가르키는 포인터인 *real_cred와 *cred는 보통은 같은 구조체를 가리키고 있다고 한다. *real_cred는 다른 프로세스가 현재 프로세스에 접근하려고 하면 가져야 하는 권한을 나타내고 있다. *cred 는 현재 프로세스가 다른 task에 접근하는 등 어떠한 동작을 할 때 가지는 권한을 나타낸다. *cred 구조체를 수정하면 현재 프로세스가 행사하는 권한을 root 권한으로 변경할 수 있을 테고, 원하는 동작을 할 수 있게 된다.(쉘 실행 등) 원하는 곳에 쓸 수 있는..
리눅스 커널 익스플로잇 문제입니다. .ko 파일, 이미지 파일등이 제공되는데, ko 파일을 ida 로 분석해보겟습니다. ioctl 을 이용해 0x30000(malloc), 0x30001(read), 0x30002(write), 0x30003(free) 가 구현되어있습니다. 취약점은 write() 와 read() 의 offset 을 체크하는곳에 있습니다. offset 을 내부적으로 unsigned 형을 사용하지 않아 사용자 입력으로 offset 에 음수값을 입력했을때 memory leak 이 가능합니다. read() 에서 음수값을 넣게되면 요청한 fd 기준으로 음수값 만큼의 전까지 메모리를 전부 읽어옵니다. 또 코드를 보면 pool 이라는 배열이 있습니다. kmalloc() 으로 동적할당한 공간의 주소를 ..