Идея заключается в том, чтобы протестировать максимально возможное количество вариантов. Естественно, для этого нужны серьёзные ресурсы. Для тестирования Chrome создан целый кластер серверов ClusterFuzz, состоящий из нескольких сотен виртуальных машин.
В кластере одновременно работают около 6000 инстансов Chrome. Кластер автоматически берёт последнюю сборку Chrome LKGR (Last Known Good Revision) и прогоняет её примерно через 50 млн тестовых случаев в сутки.
Google не жалеет ресурсов на ClusterFuzz: с момента запуска системы в конце 2011 года её мощность нарастили в четыре раза и планируют в ближайшие недели увеличить ещё вчетверо.
В системе автоматизирована не только генерация тестов и регистрация сбоев, но и ряд задач более высокого уровня:
- Генерация ровного потока тестовых случаев, распределение их по тысячам инстансов Chrome, обработка результатов.
- Анализ сбоев: важными являются только сбои, которые с точки зрения информационной безопасности могут привести к созданию эксплойтов, так что здесь используется быстрый детектор ошибок в памяти Address Sanitizer, чтобы обработать исходный код, получить специальную версию бинарника и выдать подробные отчёты по случаям, которые потенциально подходят для эксплойтов.
- Минимизация тестов: тесты для фаззинга зачастую представляют собой весьма громоздкие файлы, обычно в несколько сотен килобайт каждый, так что после генератора эти файлы дробят на более мелкие, значимые фрагменты.
- Идентификация регрессий: поиск изменений в исходном коде, которые привели к появлению сбоя.
- Верификация патчей: проверка ранее выявленных сбоев на новой сборке LKGR.
С момента запуска кластера ClusterFuzz в конце прошлого года он обнаружил 95 уникальных уязвимостей в тестовых сборках Chrome. Из них 44 были идентифицированы и закрыты ещё до того, как этот код дошёл до стабильного релиза. После апгрейда системы компания Google надеется, что до выхода в стабильный релиз она будет исправлять ещё больше ошибок и у себя, и в open source проектах, на которых основан Chrome. Это, в том числе, WebKit и FFmpeg.

