에피소드 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는 외부 참여자가 작성한 것입니다. 이용 경험에 대해 들어보고 시작하는 것이 얼마나 쉬운지 들어보세요