Gleam 컴파일러를 퍼징하다: 무작위 프로그램으로 버그를 찾는 법
Fuzzing the Gleam Compiler

Gleam 컴파일러의 버그를 찾기 위해 구조 인지 퍼징(structure-aware fuzzing)을 적용한 경험을 공유합니다. 파서 단계에서는 libFuzzer로 무작위 입력을 넣어 크래시를 유발했고, 실제로 nightly에서 회귀 버그를 발견했습니다. 이후 타입 안전한 프로그램을 생성하는 'smith'를 만들어 Erlang과 JavaScript 출력을 비교하는 방식으로 코드 생성 버그를 찾는 방법을 소개합니다. LLM 기반 접근의 한계와 구조 인지 퍼징의 장점도 설명합니다.
컴파일러에 버그가 있는지 무작위 프로그램을 생성해서 찾을 수 있을까요?
HN 토론
10- nwellnhof
[1] nwellnhof:
> 우리는 두 타깃에 대해 같은 프로그램의 출력을 비교하고 차이점을 표시할 수 있습니다.
이것을 차등 퍼징(differential fuzzing)이라고 하며, 모든 종류의 소프트웨어에서 버그를 찾는 가장 강력한 방법 중 하나입니다.
- goranmoomin
[2] goranmoomin:
저는 작은 LLM을 활용하여 취약할 가능성이 있는 부분을 찾아내고, 이를 전통적인 생성/변이 기반 퍼징과 결합하여 엣지 케이스를 더 잘 유발할 수 있는 퍼징 타깃을 생성할 수 있을 것이라는 직감이 있습니다.
llvm-hackme[0]을 보기 전까지는 퍼징에 LLM을 적용하는 것을 전혀 생각하지 못했습니다. 이 프로젝트는 전통적인 변이 퍼징과 LLM이 생성한 타깃 회귀 테스트 케이스를 모두 수행하는데, LLM이 PR을 이해하고 엣지 케이스를 타깃하는 데 꽤 효과적이었습니다! 정말 인상적이었고, LLM을 결합하여 퍼징을 훨씬 더 효율적이고 효과적으로 만들 수 있는 방법에 대해 계속 생각하게 됩니다.
// 또 다른 LLM 댓글이라 죄송합니다. 저는 프로그래밍 언어를 정말 좋아하고, 더 흥미로운 내용 대신 또 LLM 관련 내용을 올리게 되어 정말 죄송합니다!
- stephenlf
[3] stephenlf:
훌륭한 글입니다. 공유해 주셔서 감사합니다. LLM 기반 퍼징에 대한 솔직한 견해가 마음에 듭니다. 저도 비슷한 문제가 있다면 정확히 그렇게 했을 것입니다.