구글의 Project Zero는 자바스크립트 엔진 V8에서 취약점을 찾는 퍼저 Fuzzilli와 AI 기반 분석 시스템 BigSleep을 비교했다. 2026년 4~9월 실제 운영에서는 BigSleep이 45건, Fuzzilli가 37건의 취약점을 보고했고, 두 시스템이 함께 찾은 비율은 약 25%였다. 과거 버그를 대상으로 한 별도 실험에서는 중복 비율이 약 60%로 추정됐지만, 두 방식은 여전히 서로 보완적이라는 게 Project Zero의 결론이다.
Fuzzilli는 여러 인스턴스에서 지속적으로 실행되며, BigSleep은 하루 한 번 새 커밋을 검토하고 버그 재현 테스트를 작성한다. 두 시스템 모두 Clusterfuzz를 거쳐 버그를 보고한다. 비교 대상은 성숙한 테스트·퍼징 체계를 갖춘 V8로 한정됐다. 운영 통계에서 중복·조치 불가능한 보고를 제외하고, 수정 커밋이 연결된 취약점을 기준으로 집계한 결과가 45건 대 37건이다. 두 시스템의 비용이나 취약점당 비용은 아직 비교하기 어렵다고 밝혔다.
중복률이 약 60%라는 실험은 2023년 초부터 2026년 중반까지 Fuzzilli가 찾은 과거 버그 가운데 조건에 맞는 112건을 대상으로 했다. Project Zero는 각 버그를 도입했을 가능성이 있는 커밋을 BigSleep에 검토하게 하고, 버그마다 25회 시도하도록 했다. BigSleep은 원래 버그의 약 62%를 다시 찾았고, 약 12%의 커밋에서는 다른 버그를 찾았다. 다른 시작점과 프롬프트를 적용한 추가 실험까지 합치면 원래 버그를 찾은 비율은 약 70%, 어떤 버그든 찾은 비율은 약 84%로 올라갔다. 다만 과거 버그를 재현할 수 있는 환경과 플래그를 제한했고, 잘못된 커밋을 골랐을 가능성도 있어 BigSleep에 불리한 조건이 있었다. 반대로 퍼저도 설정을 바꾸면 일부 버그를 더 찾을 수 있으므로 추가 실험 결과는 주의해서 해석해야 한다.
두 방식의 강점도 달랐다. BigSleep은 여러 단계의 논리를 조합해야 하거나 특정 값·새로운 언어 기능이 필요한 버그를 찾는 데 강점을 보였다. 퍼저는 소스 코드만 읽어 추론하기 어려운 버그를 찾고, 새 코드가 추가될 때 빠르게 탐색하는 데 유용했다. 퍼저가 찾기 어려운 버그는 AI 에이전트도 찾기 어려운 경향이 있었고, 컴파일러 버그에서는 실험상 중복이 특히 낮았다. Project Zero는 취약점이 사용자에게 영향을 미치기 전에 더 많이 발견하려면 공급업체가 퍼징과 에이전트 기반 코드 분석을 모두 수행해야 한다고 권고했다.
Fuzzilli 저장소 · BigSleep 소개 · Chrome 보안 업데이트 안내
부록: 원문 예시
// Flags: --ignition-elide-redundant-tdz-checks function trigger(cond) { { target: switch(1) { case 1: do { // Labeled break targeting the switch. The do-while LoopBuilder remains unaware. if (cond) break target; } while((x=1) && false); // Condition performs a check/assignment on x. break; default: x=1; // Ensure x is considered initialized across all switch branches for merging. } // Generator incorrectly believes x is checked/initialized. Elides TDZ check. x + 1; let x; } } trigger(true);
[generated bytecode for function: simple] 0x2ad5001000e4 @ 0 : 1b ff f9 Mov <context>, r0 0x2ad5001000e7 @ 3 : 0d 2a LdaSmi [42] 0x2ad5001000e9 @ 5 : b5 Throw 0x2ad5001000ea @ 6 : d1 Star1 0x2ad5001000eb @ 7 : 8d f8 00 CreateCatchContext r1, [0] 0x2ad5001000ee @ 10 : d2 ... ... 0x2ad5001000f7 @ 19 : b7 Return Handler Table (size = 16) from to hdlr (prediction, data) ( 3, 6) -> 6 (prediction=1, data=0)
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요