728x90

System Hacking/Fuzzing 8

fuzzing101 Exercise 1

Xpdf PDF 뷰어를 퍼징하고 cve-2019-13288 에 대한 크래시와 POC을 찾는 것이 목표입니다. CVE-2019-13288xpdf 4.01.01에서 parser.cc의 parset::getObj() 함수가 조작된 파일을 통해서 무한 재귀를 유발한다고 합니다.https://nvd.nist.gov/vuln/detail/CVE-2019-13288딱 봐도 스택 오버플로우 같습니다. 이 문제를 해결하게 되면 배우는 것이- 계측을 통한 대상 애플리케이션 컴파일- 퍼저(afl-fuzz) 실행- 디버거를 사용해 충돌 분류 환경Ubuntu 20.04.02 LTS에서 테스트 되었고, 퍼징 결과의 차이를 피하기 위해 동일한 OS 버전을 추천합니다. xpdf 3.0.2 다운wget https://dl.xpdfre..

CodeQL

이론적인 부분은 구글에서 공부하면 될것같습니다(여러 자료들을 찾아보아도, 잘 안되길래 삽질을 통해서 아래와 같은 방식으로 했다.) CodeQLCodeQL은 Variant Analysis를 수행하는 정적 분석 도구이다.Variant Analysis : 알려진 취약점을 기준 삼아서 비슷한 유형의 취약점을 찾아내는 분석 방법이다.https://github.com/github/codeql/tree/main장점 : 패턴을 모델링하고 코드베이스에서 해당 패턴이 발생하는 부분을 빠르게 스캔할 수 있다는 것이다. 동작 방식CodeQL이 내부적 동작하는 과정대상 code를 데이터화하여 CodeQL Database를 생성CodeQL Database를 대상으로 CodeQL 쿼리로 질의쿼리 결과 분석 CodeQL Path 추..

뮤테이션

입력(input)을 약간씩 변형해서 새로운 입력을 만들어내는 작업hellohello 라고 입력을 했다고 해봅시다afl은 여기에 다음과 같은 작은 변경을 가할 수 있다.어떤 문자를 바꾸기 -> hello -> hezlo문자를 추가하기 -> hello -> helloo문자를 삭제하기 -> hello -> helo비트를 뒤집기 -> hello -> hfllo기존의 입력을 조금씩 변화시켜(mutate) 프로그램에 집어 넣고, 실행 경로(coverage)가 달라지는지 확인하는 방식이걸 반복해서 더 넓은 커버리지를 찾는 것이다.즉 mutation기존 입력을 기반으로 하여 새로운 테스트 케이스를 자동 생성하는 기법이다.

WinAFL Fuzzing

WinAFLAFL(American Fuzzy Lop)은 coverage-guided 퍼징 툴이다. Windows에서 사용할 수 있도록 변경을 한 것이 WinAFL 입니다. 준비물Visual Studio 2022DynamoRIO githubhttps://github.com/DynamoRIO/dynamorio/releases Releases · DynamoRIO/dynamorioDynamic Instrumentation Tool Platform. Contribute to DynamoRIO/dynamorio development by creating an account on GitHub.github.com DynamoRIO는 프로그램이 실행되는 동안 프로그램의 모든 부분에서 실시간으로 가로채서 분석, 수정할..

Fuzzing 하네스 (Harness)

하네스(Harness)퍼저가 잘 조종할 수 있도록 감싸주는 코드 또는 작은 프로그램이다.퍼징 대상이 되는 함수나 모듈만 골라서 호출할 수 있게 만들어주는 인터페이스라고 보면 된다.ex) 어떤 프로그램이 있다. 거기서 parseimage() 함수 하나만 퍼징을 할 생각이다.하네스는 이 함수만 반복해서 호출해주는 역할을 한다. 그렇다면? winafl은 전체 프로그램을 계속재시작하지 않고 하네스를 통해 타깃 함수만 빠르게 퍼징이 가능하다!(아마 dump fuzzing 해보았으면 이 부분에 대해서는 이해하기 쉬울겁니다.) 정리하네스(Harness) : 타깃 함수에 입력을 전달하고, 결과를 받아오는 작은 테스트용 드라이버 프로그램WinAFL이 하네스를 통해서 타깃 함수만 반복적으로 호출하면서 퍼징을 합니다.

#1 퍼징 (Fuzzing)

들어가기전..블랙박스 vs 화이트박스취약점을 찾는 방법으로는 blackbox testing 과 whitebox testing으로 구분이 된다. 블랙박스 테스트는 타겟 프로그램에 대한 정보나 소스 코드 없이 점검하는 것이다.화이트박스 테스트는 프로그램의 소스 코드를 볼 수 있는 상황에서 수행을 하는 것이다.오픈 소스 코드를 제외하면 타겟 프로그램에 대한 소스 코드를 가지고 있는 상황이 거의 없다. 퍼징 소프트웨어 테스트 기법으로서, 컴퓨터 프로그램에 유효한, 예상치 않은 또는 무작위 데이터를 입력하는 것이다.이후 프로그램은 충돌이나 빌트인 코드 검증의 실패, 잠재적인 메모리 누수 발견 등 같은 예외에 대한 감시가 이루어진다.https://ko.wikipedia.org/wiki/%ED%8D%BC%EC%A7%..

728x90