background

    Linux Kernel Debugging (with QEMU)

    Linux Kernel Debugging (with QEMU)

    이 글 읽어보고 따라 실습해보면서 정리하는 글 https://jeongzero.oopy.io/73084e52-54fa-43e2-986b-072ee2a4f80d 리눅스 커널 디버깅하기 1. 환경 jeongzero.oopy.io 기본 환경 세팅 ubuntu 18.04에서 진행한다. 사용하는 리눅스 커널의 버전은 4.7이다. sudo apt-get install qemu qemu-system git clone https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux cd linux git checkout v4.7 필요한 패키지 설치 sudo apt-get install build-essential libncurses5 libncurses5..

    [fuzzing101] Exercise 2 - libexif (CVE-2009-3895 & CVE-2012-2836) (2)

    [fuzzing101] Exercise 2 - libexif (CVE-2009-3895 & CVE-2012-2836) (2)

    개요 fuzzing101에서 소개한 취약점은 2가지이다. 1. CVE-2009-3895 exif-entry.c의 exif_entry_fix 함수에서 발생하는 힙 오버플로우 취약점 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3895 2. CVE-2012-2836 exif-data.c의 exif_data_load_data 함수에서 발생하는 OOB Read 취약점 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-2836 열심히 퍼징을 돌렸지만 아쉽게도 CVE-2009-3895는 발견하지 못했다. 따라서 CVE-2012-2836만 찾아보겠다. EXIF EXIF 파일 파싱 과정에서 발생하는 취약점이라고 했..

    [fuzzing101] Exercise 2 - libexif (CVE-2009-3895 & CVE-2012-2836) (1)

    [fuzzing101] Exercise 2 - libexif (CVE-2009-3895 & CVE-2012-2836) (1)

    개요 두 번째 예제는 libexif EXIF ​​구문 분석 라이브러리 퍼징이다. 목표는 libexif 0.6.14에서 CVE-2009-3895 에 대한 크래시/PoC와 CVE-2012-2836 에 대한 또 다른 크래시을 찾는 것이다. CVE-2009-3895는 잘못된 EXIF ​​이미지로 인해 발생할 수 있는 힙 기반 버퍼 오버플로우이다. 원격 공격자는 이 문제를 악용하여 영향을 받는 라이브러리를 사용하는 응용 프로그램의 컨텍스트 내에서 임의의 코드를 실행할 수 있다. CVE-2012-2836은 조작된 EXIF ​​태그가 있는 이미지를 통해 트리거될 수 있는 Out-of-bounds Read 취약점이다. 원격 공격자는 DoS를 유발하거나 프로세스 메모리에서 잠재적으로 민감한 정보를 얻을 수 있다. 환경 ..

    [Lazenca][Development of Kernel Module] 04.Creating a kernel module to privilege escalation

    [Lazenca][Development of Kernel Module] 04.Creating a kernel module to privilege escalation

    Creating a kernel module to privilege escalation Kernel Exploit시 반드시 알아야 하는 기본적인 함수는 prepare_kernel_cred(), commit_creds() 함수이다. 이번 예제는 해당 함수에 대한 이해와 해당 함수를 활용하여 권한상승을 일으키는 모듈을 만드는 것이다. cred structuer cred 구조체는 이렇게 생겼다. 가볍게 읽어보고 뒤에서 각 필드들이 뒤에 함수들에서 어떻게 사용되는지 살펴보자. https://elixir.bootlin.com/linux/v4.18/source/include/linux/cred.h#L111 struct cred { atomic_tusage; #ifdef CONFIG_DEBUG_CREDENTIALS ..

    [Lazenca][Development of Kernel Module] 03.ioctl(Input/Output control)

    [Lazenca][Development of Kernel Module] 03.ioctl(Input/Output control)

    ioctl(Input/Output control) ioctl은 하드웨어의 제어와 상태 정보를 얻기 위해 제공되는 오퍼레이션이다. read(), write()는 데이터의 읽고, 쓰기는 가능하지만 하드웨어의 제어 및 상태 정보까지는 확인할 수 없다. SPI 통신 속도 설정를 하거나, I2C 슬레이브 어드레스 설정,등의 작업은 read, write만으로는 할 수 없다. CD-ROM 디바이스 드라이버는 실제 장치에서 디스크를 꺼내도록 지시할 수 있는 ioctl 요청 코드를 제공한다. 위키피디아의 내용을 좀 더 읽어보면 이렇다. 시스템 호출은 표준 커널 기능에 접근하기 위한 편리한 설계이지만, 비표준 하드웨어 주변 장치에 접근하기에는 적합하지 않을 때가 있습니다. 대부분의 하드웨어 주변 장치(또는 장치)는 커널 ..