Google прСдставил систСму fuzzing-тСстирования ClusterFuzzLite

Компания Google прСдставила ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ClusterFuzzLite, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ fuzzing-тСстированиС ΠΊΠΎΠ΄Π° для Ρ€Π°Π½Π½Π΅Π³ΠΎ выявлСния ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… уязвимостСй Π½Π° этапС Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСм Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ. Π’ настоящСС врСмя ClusterFuzz ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ fuzzing-тСстирования pull-запросов Π² GitHub Actions, Π² Google Cloud Build ΠΈ Π² Prow, Π½ΠΎ Π² дальнСйшСм оТидаСтся появлСниС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… CI-систСм. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ базируСтся Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ ClusterFuzz, созданной для ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ кластСров fuzzing-тСстирования, ΠΈ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ Apache 2.0.

ΠžΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ послС внСдрСния Π² 2016 Π³ΠΎΠ΄Ρƒ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Google сСрвиса OSS-Fuzz Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ³ΠΎ fuzzing-тСстирования Π±Ρ‹Π»ΠΎ принято Π±ΠΎΠ»Π΅Π΅ 500 Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². На основС ΠΏΡ€ΠΎΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ Π±Ρ‹Π»ΠΎ устранСно Π±ΠΎΠ»Π΅Π΅ 6500 ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Ρ‘Π½Π½Ρ‹Ρ… уязвимостСй ΠΈ исправлСно Π±ΠΎΠ»Π΅Π΅ 21 тысячи ошибок. ClusterFuzzLite ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² fuzzing-тСстирования Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½Π΅Π³ΠΎ выявлСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π½Π° стадии рСцСнзирования ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ClusterFuzzLite ΡƒΠΆΠ΅ Π²Π½Π΅Π΄Ρ€Ρ‘Π½ Π² процСссы рСцСнзирования ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… systemd ΠΈ curl, ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ ошибки, ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ статичСскими Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΈ linter-Π°ΠΌΠΈ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ²ΡˆΠΈΠΌΠΈΡΡ Π½Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ этапС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

ClusterFuzzLite ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° языках C, C++, Java (ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… языков Π½Π° Π±Π°Π·Π΅ JVM), Go, Python, Rust ΠΈ Swift. Fuzzing-тСстированиС проводится с использованиСм Π΄Π²ΠΈΠΆΠΊΠ° LibFuzzer. Для выявлСния ошибок Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ инструмСнты AddressSanitizer, MemorySanitizer ΠΈ UBSan (UndefinedBehaviorSanitizer).

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ возмоТности ClusterFuzzLite: быстрая ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ для нахоТдСния ошибок Π½Π° этапС Π΄ΠΎ принятия ΠΊΠΎΠ΄Π°; Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ² ΠΎΠ± условиях возникновСния ΠΊΡ€Π°Ρ…ΠΎΠ²; Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΊ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΌΡƒ fuzzing-Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ для выявлСния Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΈΡ… ошибок, Π½Π΅ Π²ΡΠΏΠ»Ρ‹Π²ΡˆΠΈΡ… послС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ измСнСния ΠΊΠΎΠ΄Π°; гСнСрация coverage-ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ² для ΠΎΡ†Π΅Π½ΠΊΠΈ ΠΎΡ…Π²Π°Ρ‚Π° ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈ тСстировании; ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Π°Ρ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Напомним, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ fuzzing-тСстировании осущСствляСтся гСнСрация ΠΏΠΎΡ‚ΠΎΠΊΠ° всСвозмоТных случайных ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, html-страницы с случайными ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Ρ‚Π΅Π³ΠΎΠ², Π°Ρ€Ρ…ΠΈΠ²Ρ‹ ΠΈΠ»ΠΈ изобраТСния с Π°Π½ΠΎΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ ΠΈ Ρ‚.ΠΏ.), ΠΈ фиксация Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… сбоСв Π² процСссС ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Если какая-Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΊΡ€Π°Ρ…Ρƒ ΠΈΠ»ΠΈ Π½Π΅ соотвСтствуСт ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠΉ Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ с высокой Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΎΠ± ошибкС ΠΈΠ»ΠΈ уязвимости.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru