Go 퍼징은 툴킷의 절반이 누락되었습니다. 저희는 이를... 노트

Go 퍼징은 툴킷의 절반이 누락되었습니다. 저희는 이를 수정하기 위해 툴체인을 포크했습니다.

Go의 네이티브 퍼징은 Rust, C, C++ 생태계에서 발견되는 고급 기능이 부족하여 정수 오버플로우 및 고루틴 누수와 같은 일반적인 버그를 탐지하지 못합니다. 이러한 한계를 해결하기 위해 gosentry는 Go 툴체인의 퍼징 중심 포크로 개발되었습니다. Gosentry는 LibAFL을 통합하여 네이티브 구조체 퍼징, Nautilus를 사용한 문법 기반 퍼징, 이전에 놓쳤던 버그 클래스 탐지를 가능하게 합니다. 표준 testing.F 워크플로우를 유지하여 기존 Go 퍼즈 하네스를 새로운 명령줄 플래그와 함께 사용할 수 있습니다. Gosentry는 구조체, 슬라이스, 포인터와 같은 복합 유형을 처리하는 구조체 인식 퍼징을 통해 입력 품질을 향상시킵니다. 또한 Nautilus가 JSON과 같은 복잡한 구조체에 대한 문법 유효한 입력을 생성하고 변형하는 문법 기반 퍼징도 지원합니다. 이 도구는 Go의 기본 퍼저가 놓칠 수 있는 정수 오버플로우, 데이터 경쟁, 고루틴 누수, 실행 시간 초과를 포함한 다양한 잘못된 동작을 식별합니다. 퍼즈 콜백을 캡처하고 Rust 기반 LibAFL 러너를 통해 실행함으로써 gosentry는 퍼징 엔진, 스케줄링 및 탐지기를 개선합니다. 이미 Optimism 및 Revm과 같은 프로젝트에서 네이티브 Go 퍼징으로는 찾기 어려운 상당한 버그를 발견했습니다. 이 프로젝트는 GitHub에서 오픈 소스로 제공되며 모든 기능에 대한 포괄적인 문서를 제공합니다.