분류 전체보기 85

Hybrid Fuzzing - 2 ( SymCC + AFL )

https://github.com/eurecom-s3/symcc/blob/master/docs/Fuzzing.txt symcc/docs/Fuzzing.txt at master · eurecom-s3/symccSymCC: efficient compiler-based symbolic execution - eurecom-s3/symccgithub.com 해당 링크의 설치 안내를 보고 한번 환경 구성을 해보겠습니다. 공식 SymCC 저장소 다운로드git clone https://github.com/eurecom-s3/symcc.git FROM ubuntu:22.04 AS builderRUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -..

Hybrid Fuzzing - 1 ( 실패일지 )

안녕하세요.오늘 포스팅 할 주제는 저번에 이은 SymCC Fuzzing입니다.이번에는 AFL++와 결합해서 하이브리드 퍼징을 하는 식으로 진행을 해볼 것이고, 다시 데스크탑 컴퓨터로 왓기 때문에 환경구성부터 다시해주겠습니다.AFL++은 로컬에 깔려있는데 SymCC는 로컬로 설치가 안되어 있어서 SymCC를 먼저 git으로 로컬에 설치해 주었습니다.git clone https://github.com/eurecom-s3/symcc.git 그 다음 다운로드된 dockerfile을 수정하여 안에 AFL++이 추가되게 수정하였습니다.필요하신 분은 다운로드 받아서 이미지 빌드하시면 될 것 같습니다.sudo docker build -t symcc . symcc랑 afl++ --help 명령어가 잘 먹히는지 확인합니..

SymCC Fuzzing - 1 ( Symbolic executor )

오늘 포스팅 주제는 Hybrid Fuzzing에서 SymCC라는 툴입니다.원래는 Driller를 주제로 포스팅하려고 했는데, Driller가 좀 오래된 툴이다 보니 의존성 문제도 좀 있고, 환경 구성하는것도 너무 쉽지 않더라고요. 또 최근에 Driller의 단점들을 보완한 툴들이 있기 때문에 최신 툴인 SymCC를 가져와서 포스팅하게 되었습니다. Driller부터 시작한 hybrid fuzzer의 개발 과정이 있는데 간단하게만 살펴보겠습니다. Driller : 최초의 하이브리드 퍼저로 AFL + Angr의 형태입니다. 구현 원리가 비교적 직관적이지만, 파이썬 기반의 Angr을 구동하는 오버헤드가 크고, 의존성 문제가 발생하여 설치가 어렵습니다. 이러한 오버헤드 문제와 속도 문제를 해결하기 위해 2018년..

Driller : Augmenting Fuzzing Through Selective Symbolic Execution Review

오늘 리뷰할 논문은 NDSS 2016에 발표된 Driller: Augmenting Fuzzing Through Selective Symbolic Execution입니다.N. Stephens et al., "Driller: Augmenting Fuzzing Through Selective Symbolic Execution," in NDSS, 2016. 논문은 아래 링크클릭하시면 PDF로 확인할 수 있습니다.https://www.ndss-symposium.org/wp-content/uploads/2017/09/driller-augmenting-fuzzing-through-selective-symbolic-execution.pdf 약 15페이지 정도의 논문이고 원문을 프린트해서 해석하면서 공부했습니다. 이전..

논문리뷰 2026.01.11

[Fuzzing] Boofuzz Fuzzing

안녕하세요. 오늘 포스팅할 주제는 Boofuzz Fuzzing입니다.Boofuzz는 네트워크 프로토콜 퍼징 프레임워크 입니다.AFL++ 은 소스코드가 있는 바이너리에 대한 퍼징에서 유리하다면 Boofuzz는 네트워크 프로토콜에 대해서 장점을 가집니다.예를들면, IoT/임베디드 기기나, 프로토콜 구조에 맞춰서 퍼징을 할 경우 유리합니다. 간단하게 BooFuzz와 AFL++의 차이에 대해 표로 작성해보겠습니다. BooFuzzAFL++작동 원리프로토콜 구조에 맞춰서 데이터를 생성하여 전송유효한 Seed값의 비트를 이용해 Mutatioon하여 주입사전 지식프로토콜 구조를 알고, 스크립트로 정의가 필요함입력 데이터 샘플 필요피드백 방식Black-Box : 대상의 크래시 여부만 확인Grey-Box : 코드의 어느 ..

[Fuzzing] AFL++ Fuzzing

안녕하세요! 오늘 포스팅 할 주제는 Fuzzing입니다.퍼징은 소프트웨어 테스팅 기법으로, 무작위 또는 예상치 못한 데이터를 프로그램에 대량으로 주입하여 충돌, 메모리 누수와 같은 동작이나 보안 취약점, 버그를 찾아내는 자동화된 기법입니다.저도 잘 모르기 때문에 오늘은 이론적인 부분보다는 실습을 한번 해보도록 하겠습니다. 먼저 설치입니다. 다음 명령어로 설치 가능합니다.sudo apt install afl++ 그리고 입력값을 찾아내면 abort가 발생하는 취약한 코드를 만들어보겠습니다.#include #include #include #include int main(int argc, char *argv[]) { char buf[100]; if (read(0, buf, 100) U -> Z ->..

[Reversing] angr CTF 문제 풀이 - 4 (15 ~ 17)

안녕하세요 오늘은 angr CTF 문제 풀이를 마무리 해보도록 하겠습니다. 15_angr_arbitrary_read이번에 문제에 Goodjob이란 문자열을 출력하는 부분이 없네요.Arbitrary Read는 임의 주소 읽기로 공격자가 프로세스 메모리 내의 주소를 지정하여 그 안에 저장된 값을 읽어내는 취약점을 말합니다.그럼 메모리 상에 Good Job.을 출력하는 부분이 있을테니 찾아보겠습니다. if문에서 key값이 일치할 때 키 값을 Good job 문자열을 읽어오거나 s에 넣어야할 것 같은데 s에 값을 쓰는건 read가 아니라 write문제에 들어갈 것 같은 느낌.문제 풀이 코드를 보겠습니다.# Some of the source code for this challenge:## #include # #i..

[Reversing] angr CTF 문제 풀이 - 3 (12 ~ 14 )

오늘은 마찬가지로 angr CTF문제를 이어서 풀어보도록 하겠습니다. 12_angr_veritestingveritesting은 검증적 테스팅으로 angr가 지원하는 강력한 기능 중 하나라고 합니다.문제 보면 scanf에서 인자를 엄청나게 많이 받는데, 저 인자들에 대해 if문과 같은 분기에 들어가면 경로폭발이 발생할 수 있을 것 같습니다.문제 풀이 파일을 봤는데# When you construct a simulation manager, you will want to enable Veritesting:# project.factory.simgr(initial_state, veritesting=True)# Hint: use one of the first few levels' solutions as a refe..

[Reversing] angr CTF 문제 풀이 - 3 (08 ~ 11)

오늘은 angr CTF 문제 풀이 3편으로 돌아왔습니다.바로 문제 풀이 들어가보겠습니다. 08_angr_constraints문제의 의도가 뭔가 했는데, check_equals라는 코드에서 정답을 바로 반환하는게 아니라 다음과 같은 로직을 걸칩니다.angr에서 이런 무의미한 분기에 빠지게 되면 state가 엄청나게 생성이 되고, 속도도 엄청나게 느려지기 때문에 constraints 즉 제약조건을 걸어 무의미한 분기에 빠지지 않게 하는 과정입니다.이런경우엔 check_equals_~~라는 함수에 빠지기 전에 제약을 걸어야합니다. # Angr will not be able to reach the point at which the binary prints out # 'Good Job.'. We cannot u..

[Reversing] angr CTF 문제 풀이 - 2 (04 ~ 07)

안녕하세요 오늘은 angr CTF 문제풀이 2번째 가져왔습니다.4번째 문제부터 바로 들어가겠습니다. 04_angr_symbolic_stackmain은 아주 간단하고, handle_user()함수에서 사용자 입력을 처리하는데, 저희가 입력한 문자가 스택에 쌓이고, 스택에 쌓인 입력값을 비교해가면서 조건을 탐색해야 합니다. scaffold04.py가 넘 길어서 주석을 빼고 확인해보겠습니다.import angrimport claripyimport sysdef main(argv): path_to_binary = argv[1] project = angr.Project(path_to_binary) start_address = ??? initial_state = project.factory.blank_stat..