Chromium Chronicle #9: ClusterFuzz

에피소드 9: 마운틴뷰의 에이드리언 테일러 (2019년 12월)
이전 에피소드

ClusterFuzz에서 발견한 우선순위가 높은 보안 버그를 수정하라는 요청을 받을 수도 있습니다. 기본 설명 이 버그를 심각하게 고려해야 하나요? 어떻게 도와드릴까요?

퍼징 흐름 차트

ClusterFuzz는 Chrome에 입력을 제공하고 비정상 종료를 감시합니다. 이러한 Chrome 빌드 중 일부에는 메모리 안전 오류를 찾는 AddressSanitizer와 같은 추가 검사가 사용 설정되어 있습니다.

ClusterFuzz는 비정상 종료 위치를 기반으로 구성요소를 할당하고 비정상 종료 유형 및 샌드박스 처리된 프로세스에서 발생하는지 여부에 따라 심각도를 할당합니다. 예를 들어 힙 use-after-free는 브라우저 프로세스에 있지 않고 심각도가 높습니다. 브라우저 프로세스에 있는 경우 매우 중요합니다 (영향을 제한하는 샌드박스가 없음).

class Foo {
  Widget* widget;
};

void Foo::Bar() {
  delete widget;
  ...
  widget->Activate();  // Bad in the renderer process, worse in the
                       // browser process. Obviously, real bugs are
                       // more subtle. Usually.

ClusterFuzz는 fuzzer 또는 외부에 제출된 버그에서 입력을 생성합니다. 일부 fuzzer는 코드 적용 범위를 확대하도록 입력을 발전시키는 libFuzzer를 제공합니다. protobufs로 변환된 입력 언어의 문법을 이해하는 경우가 있습니다. ClusterFuzz는 비정상 종료를 발견하면 입력 테스트 사례를 최소화하고 심지어 이등분하여 문제가 되는 커밋을 찾습니다. 많은 것을 발견합니다...

다음을 도울 수 있습니다.

  • 객체 전체 기간과 정수 오버플로에 대해 편집증을 갖지 마세요.
  • 특히 신뢰할 수 없는 데이터나 IPC를 처리할 때 새 fuzzer를 추가합니다 (아래 링크 참고, 대개 20줄 미만의 코드임).
  • ClusterFuzz에서 보고된 버그를 수정합니다. 심각도 휴리스틱은 실제 악용 가능성을 기반으로 하므로 신뢰할 수 있습니다. 단일 바이트 오버플로로 인해 공격자가 임의의 코드를 실행할 수도 있습니다.

자료

  • Chromium의 퍼징 테스트: 새로운 데이터 형식을 사용하기 위해 ClusterFuzz에 새 fuzzer를 추가하는 방법 또는 멋진 vul을 찾는 데 도움을 받고 싶기 때문입니다.
  • Chrome Fuzzer 프로그램 업데이트 및 방법: Fuzzer는 외부 참여자가 작성한 것입니다. 이용 경험에 대해 들어보고 시작하는 것이 얼마나 쉬운지 들어보세요