background

    [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 요청 코드를 제공한다. 위키피디아의 내용을 좀 더 읽어보면 이렇다. 시스템 호출은 표준 커널 기능에 접근하기 위한 편리한 설계이지만, 비표준 하드웨어 주변 장치에 접근하기에는 적합하지 않을 때가 있습니다. 대부분의 하드웨어 주변 장치(또는 장치)는 커널 ..

    [Lazenca][Development of Kernel Module] 02.Character Device Drivers

    [Lazenca][Development of Kernel Module] 02.Character Device Drivers

    Character Device Drivers 버퍼 캐시(Buffer cache)를 사용하지 않고 데이터를 한번에 하나의 문자를 읽고 쓰는 드라이버이다. 예) Keyboad, Sound card, Printer 드라이버 이외에도 Block Device, Network Device 드라이버가 있다. 블록 디바이스 드라이버는 버퍼 캐시를 통한 임의 접근과 블록단위로 입출력이 가능하다. 예) 하드디스크 네트워크 디바이스 드라이버는 네트워크 스택과 네트워크 하드웨어 사이에 위치해 데이터의 송수신을 담당한다. 예) Ethernet, Network interface card struct file_operations file_operations 구조체는 Character Device, Block Device Drive..

    [Linux Kernel] Device Driver

    [Linux Kernel] Device Driver

    리눅스 커널 익스플로잇을 공부하기 위해 나름대로 정리한 글입니다. 틀린 내용이 있을 수 있습니다. 리눅스는 모놀리딕 아키텍처가 아닌 모듈로 구성되어 있기 때문에 성능은 낮은 대신, 유지 보수가 용이하다. 이 말인 즉슨 무언가를 추가하고 제거하는 것이 USB를 꽂았다 제거하듯이 간편하다는 의미이다. 리눅스 커널 아키텍처는 다음과 같다. 유저는 시스템 콜로 커널에게 작업을 요청하게 된다. (인터럽트 발생) 그럼 커널은 요청 받은 작업을 수행하고 유저에게 결과를 리턴해준다. 리눅스 커널은 모든 것들을 파일로 인식하고 처리한다고 했다. 이는 장치(device)도 예외는 아니다. 장치 제어를 위해 필요한 것이 바로 장치 드라이버(device driver)이다. 장치 드라이버는 하드웨어의 모든 기능들을 수행할 수 ..