들어가며 AFL Qemu를 Ubuntu 20.04 환경에 설치한다. AFL만 설치하면 구동되는 것이 아닌, 별도 작업이 필요하기 때문에 정리한다. 아무것도 설치되지 않은 Ubuntu 20.04 VM 이미지에 설치를 진행한다. [환경(VM)] Ubuntu 20.04 LTS 순서 1. pip 설치 2. 의존성 패키지 설치 3. AFL++ 설치 4. AFL-Qemu 설치 1. pip 설치 sudo apt install python3-pip 2. 의존성 패키지 설치 sudo apt-get update sudo apt-get install -y build-essential python3-dev automake git flex bison libglib2.0-dev libpixman-1-dev python3-setu..
들어가며 7-zip를 퍼징한다. 7-zip에서 발생하는 CVE-2016-2334을 분석한다. 그리고 발견한 크래시에서 코드 커버리지를 분석한다. CVE-2016-2334은 heap-based buffer overflow 취약점이다. 범위 밖의 데이터를 읽을 수 있다. 7-zip에서는 조작된 HFS+ 이미지 파일에서 발생한다. 준비 1-day 실습이므로 취약점이 발생했던 같은 환경을 준비한다. 또는 다음의 내용을 학습할 수 있다. Windows x64 1809 WinAFL(Fuzzer) Download and Build Windows 환경에서 AFL 퍼저의 실행은 WinAFL을 사용한다. 사전 설치 1. Visual Studio compiler 가 필요로하며 2019 버전의 설치를 권장한다. “Deskto..
들어가며 GIMP라는 이미지에디터를 퍼징한다. GIMP 2.8.16에서 발생하는 CVE-2016-4994을 분석한다. 그리고 발견한 크래시에서 코드 커버리지를 분석한다. CVE-2017-9048은 Use-After-Free 취약점이다. 동적할당된 heap을 free하고 다시 재사용할 때 취약점이 발생한다. GIMP에서는 조작된 XCF 파일에서 발생한다. 공격자는 유효한 데이터의 손상에서 임의 코드 실행까지 다양한 악의적인 행위를 할 수 있다. 준비 1-day 실습이므로 취약점이 발생했던 같은 환경을 준비한다. 또는 다음의 내용을 학습할 수 있다. Ubuntu 20.04(https://releases.ubuntu.com/20.04/) afl-fuzz(Fuzzer) GDB(크래시 분석 디버깅 도구) 다음의 ..
들어가며 LibXML2라는 XML파싱 라이브러리를 퍼징한다. LibXML2 2.9.4에서 발생하는 CVE-2017-9048을 분석한다. 그리고 발견한 크래시에서 코드 커버리지를 분석한다. CVE-2017-9048은 스택버퍼오버플로우 취약점이다. 실행중인 스택영역의 값을 덮어씌울 수 있으며, DTD 유효성 검사 함수에서 발생한다. 공격자는 바이너리의 컨텍스트 내에서 임의 코드를 실행할 수 있다. 준비 1-day 실습이므로 취약점이 발생했던 같은 환경을 준비한다. 또는 다음의 내용을 학습할 수 있다. Ubuntu 20.04(https://releases.ubuntu.com/20.04/) afl-fuzz(Fuzzer) GDB(크래시 분석 디버깅 도구) 다음의 내용을 학습한다. 새로운 실행 경로 탐색을 위한 커..
들어가며 LibTIFF라는 이미지 라이브러리를 퍼징한다. LiBTIFF 4.0.4에서 발생하는 CVE-2016-9297을 분석한다. 그리고 발견한 크래시에서 코드 커버리지를 분석한다. CVE-2016-9297는 OOB(Out-of-bounds) 취약점이다. 버퍼 범위 바깥의 인덱스에 접근할 때 발생하며, 조작된 TIFF_SETGET_C16ASCII 와 TIFF_SETGET_C32_ASCII 태그 값에서 발생한다. 공격자는 서비스 거부를 발생시키거나 프로세스 메모리에서 의도하지 않은 중요 정보를 탈취할 수 있다. 준비 1-day 실습이므로 취약점이 발생했던 같은 환경을 준비한다. 또는 다음의 내용을 학습할 수 있다. Ubuntu 20.04(https://releases.ubuntu.com/20.04/) a..
들어가며 TCPdump는 패킷 분석 도구이다. TCPdump 4.9.2에서 발생하는 CVE-2017-13028을 분석한다. CVE-2017-13028는 OOB(Out-of-bounds) 취약점이다. 버퍼 범위 바깥의 인덱스에 접근할 때 발생하며, BOOTP 패킷(Bootstrap Protocol)에서 발생한다. 공격자는 서비스 거부를 발생시키거나 프로세스 메모리에서 의도하지 않은 중요 정보를 탈취할 수 있다. 준비 1-day 실습이므로 취약점이 발생했던 같은 환경을 준비한다. 또는 다음의 내용을 학습할 수 있다. Ubuntu 20.04(https://releases.ubuntu.com/20.04/) afl-fuzz(Fuzzer) GDB(크래시 분석 디버깅 도구) 다음의 내용을 학습한다. ASAN(Addr..
들어가며 libexif는 exif을 파싱하는 라이브러리이다. libexif 0.6.14 에서 발생하는 CVE-2009-3895, CVE-2012-2836을 분석한다. CVE-2009-3895는 올바르지 않은 EXIF 이미지에서 발생하는 힙 버퍼 오버플로우 취약점이다. 힙 데이터 영역에서 발생하는 버퍼 오버플로우의 한 종류이며, 동적 메모리 할당(alloc)과 해제(free)와 관련있다. 공격자는 공격 포인트를 이용하여 응용프로그램이 실행될 때 임의 코드를 삽입하여 실행시킬 수 있다. CVE-2012-2836는 조작된 EXIF 태그가 있는 이미지를 통해 발생할 수 있는 OOB(Out of Bounds Read) 취약점이다. OOB는 프로그램이 의도한 버퍼의 끝을 지나거나 시작 전의 데이터를 읽을 때 발생하..
코드 커버리지(code coverage) 코드 커버리지는 개발 단계에서 테스트 코드나 도구를 이용해서 실행 가능한 모든 코드를 테스트하는 지표 중 하나이다. ‘코드가 얼마나 실행되었는지’ 살펴볼 수 있고 수치를 통해서 확인할 수 있다. 개발 환경에서는 코드를 볼 수 있기 때문에 ‘화이트 박스 테스트’가 가능하지만, 이미 컴파일된 바이너리를 분석할 때는 코드를 직접 살펴보는 것이 아니기 때문에 ‘블랙박스 테스트’로 진행해야 한다. 코드의 구조는 구문(Statement), 조건(Condition), 결정(Decision)의 구조로 되어 있다. 코드 커버리지는 이 요소들을 얼마나 넓게 커버하고 있느냐에 따라 측정한다. 구문(Statement) : 모든 라인이 한 번 이상 실행 조건(Condition) : 조건..
GDB? gdb는 디버깅과 프로그램 실행을 위한 유틸리티 왜 printf()가 아닌 gdb를 사용해서 디버깅하나요? printf 디버깅은 프로그램의 실행 흐름을 살피고 따라가는 데 많은 도움을 준다. Debug() 함수를 사용해서 코딩하는 것보다 많이 사용되기도 한다. 하지만, 좀더 세밀한 프로그램 분석과 변수 변화를 보는 데에는 적합하지 않다. 전문적인 개발자들은 디버거를 이용한다. 흐름을 추적하고, 변수를 검사하고, 실행시점의 실패 지점을 정확하게 분석할 수 있기 때문이다. 시나리오 Segmentation Fault 가장 많이 발생하는 오류이다. 이 오류는 프로그램을 종료시킨다. 할당된 주소 공간 외부의 주소에 액세스할 때 발생한다. 그러나 실질적으로 말하면, 널포인터가 있는 메모리 참조에 의해 발생..
들어가며 1-day 익스플로잇 실습을 진행한다. CVE-2019-13288 취약점이며 Xpdf라는 pdf 뷰어에서 발생한 Dos 취약점이다. 자세한 취약점 정보는 https://www.cvedetails.com/cve/CVE-2019-13288/에서 볼 수 있으며, 관련된 취약점 설명은 https://cwe.mitre.org/data/definitions/674.html 에서 확인할 수 있다. 정리하면, 프로그램에서 호출된 각 함수가 스택에 스택 프레임을 할당하기 때문에, 함수를 너무 많이 재귀적으로 호출하면 스택 메모리 부족과 충돌로 이어질 수 있는 취약점이다. 준비 1-day 실습이므로 취약점이 발생했던 같은 환경을 준비한다. 또는 다음의 내용을 학습할 수 있다. Ubuntu 20.04(https:/..