ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ Google ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ ClusterFuzzLite, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° fuzzing-ΡΠ΅ΡΡΠΎΠ²Π΅ Π½Π° ΠΊΠΎΠ΄Π° Π·Π° ΡΠ°Π½Π½ΠΎ ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»Π½ΠΈ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈ Π·Π° Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ. Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° ClusterFuzz ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ Π½Π° fuzzing-ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ Π½Π° pull-Π·Π°ΡΠ²ΠΊΠΈ Π² GitHub Actions, Google Cloud Build ΠΈ Prow, Π½ΠΎ Π² Π±ΡΠ΄Π΅ΡΠ΅ ΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠΆΠ΄Π° Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° ΠΈ Π·Π° Π΄ΡΡΠ³ΠΈΡΠ΅ CI-ΡΠΈΡΡΠ΅ΠΌΠΈ. ΠΡΠΎΠ΅ΠΊΡΡΡ ΡΠ΅ Π±Π°Π·ΠΈΡΠ° Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° ClusterFuzz, ΡΡΠ·Π΄Π°Π΄Π΅Π½Π° Π·Π° ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΈΡ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠΈ Π·Π° fuzzing-ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΈ ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΡ Apache 2.0.
ΠΡΠ±Π΅Π»ΡΠ·Π²Π° ΡΠ΅, ΡΠ΅ ΡΠ»Π΅Π΄ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ ΠΏΡΠ΅Π· 2016 Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° OSS-Fuzz ΠΎΡ Google Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Π·Π° Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠΎ fuzzing-ΡΠ΅ΡΡΠΈΡΠ°Π½Π΅, ΡΠ° ΠΏΡΠΈΠ΅ΡΠΈ Π½Π°Π΄ 500 Π²Π°ΠΆΠ½ΠΈ ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠ° Π±Π°Π·Π°ΡΠ° Π½Π° ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π±ΡΡ Π° ΠΎΡΡΡΡΠ°Π½Π΅Π½ΠΈ Π½Π°Π΄ 6500 ΠΏΠΎΡΠ²ΡΡΠ΄Π΅Π½ΠΈ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ ΠΈ ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°Π½ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ 21 Ρ ΠΈΠ»ΡΠ΄ΠΈ Π³ΡΠ΅ΡΠΊΠΈ. ClusterFuzzLite ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π° Π΄Π° ΡΠ°Π·Π²ΠΈΠ²Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΈ Π·Π° fuzzing-ΡΠ΅ΡΡΠΈΡΠ°Π½Π΅ Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΠΏΠΎ-ΡΠΊΠΎΡΠΎΡΠ½ΠΎ ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π½Π° Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ. ClusterFuzzLite Π²Π΅ΡΠ΅ Π΅ Π²Π½Π΅Π΄ΡΠ΅Π½ Π² ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ Π½Π° ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ΅ systemd ΠΈ curl ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ, ΠΏΡΠΎΠΏΡΡΠ½Π°ΡΠΈ ΠΎΡ ΡΡΠ°ΡΠΈΡΠ½ΠΈΡΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΈ ΠΈ Π»ΠΈΠ½ΡΠ΅ΡΠΈΡΠ΅, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈ Π½Π° Π½Π°ΡΠ°Π»Π½ΠΈΡ Π΅ΡΠ°ΠΏ Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π½ΠΎΠ²ΠΈΡ ΠΊΠΎΠ΄.
ClusterFuzzLite ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈ Π½Π° Π΅Π·ΠΈΡΠΈ C, C++, Java (ΠΈ Π΄ΡΡΠ³ΠΈ Π΅Π·ΠΈΡΠΈ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° JVM), Go, Python, Rust ΠΈ Swift. Fuzzing-ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΠΆΠ΄Π°Ρ Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π΄Π²ΠΈΠΆΠΊΠ° LibFuzzer. ΠΠ° ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π² ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΈ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ ΡΡΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ AddressSanitizer, MemorySanitizer ΠΈ UBSan (UndefinedBehaviorSanitizer).
ΠΡΠ½ΠΎΠ²Π½ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π½Π° ClusterFuzzLite: Π±ΡΡΠ·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π·Π° Π½Π°ΠΌΠΈΡΠ°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π½Π° Π΅ΡΠ°ΠΏΠ° ΠΏΡΠ΅Π΄ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄Π°; ΠΊΠ°ΡΠ²Π°Π½Π΅ Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄ΠΈ Π·Π° ΡΡΠ»ΠΎΠ²ΠΈΡΡΠ° Π½Π° Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΡΡΠΈΠ²ΠΎΠ²Π΅; Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ ΠΊΡΠΌ ΠΏΠΎ-ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΎ fuzzing-ΡΠ΅ΡΡΠΈΡΠ°Π½Π΅ Π·Π° ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎ-Π΄ΡΠ»Π±ΠΎΠΊΠΈ Π³ΡΠ΅ΡΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° ΠΈΠ·ΠΏΠ»ΡΠ²Π°Π»ΠΈ ΡΠ»Π΅Π΄ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΡΠΎΠΌΡΠ½Π°ΡΠ° Π½Π° ΠΊΠΎΠ΄Π°; Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° coverage-Π΄ΠΎΠΊΠ»Π°Π΄ΠΈ Π·Π° ΠΎΡΠ΅Π½ΠΊΠ° Π½Π° ΠΏΠΎΠΊΡΠΈΡΠΎΡΡΡΠ° Π½Π° ΠΊΠΎΠ΄Π° ΠΏΡΠΈ ΡΠ΅ΡΡΠ²Π°Π½Π΅; ΠΌΠΎΠ΄ΡΠ»Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠ° ΠΈΠ·Π±ΠΎΡ Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ.
ΠΠ°ΠΏΠΎΠΌΠ½ΡΠΌΠ΅, ΡΠ΅ ΠΏΡΠΈ fuzzing-ΡΠ΅ΡΡΠΎΠ²Π΅ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ°Ρ ΠΏΠΎΡΠΎΡΠΈ ΠΎΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ Π½Π° Π²Ρ
ΠΎΠ΄Π½ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ°Π²Π°ΡΠΈ ΡΠ΅ Π΄ΠΎ ΡΠ΅Π°Π»Π½ΠΈ Π΄Π°Π½Π½ΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, html-ΡΡΡΠ°Π½ΠΈΡΠΈ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΡΠ°Π³ΠΎΠ²Π΅ΡΠ΅, Π°ΡΡ
ΠΈΠ²ΠΈ ΠΈΠ»ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ Π°Π½ΠΎΠΌΠ°Π»Π½ΠΈ Π·Π°Π³Π»Π°Π²ΠΈΡ ΠΈ Ρ.Π½.), ΠΈ ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈ ΡΡΠΈΠ²ΠΎΠ²Π΅ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΡΡ
Π½Π°ΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°. ΠΠΊΠΎ Π½ΡΠΊΠΎΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΡΡΠΈΠ² ΠΈΠ»ΠΈ Π½Π΅ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π° Π½Π° ΠΎΡΠ°ΠΊΠ²Π°Π½Π°ΡΠ° ΡΠ΅Π°ΠΊΡΠΈΡ, ΡΠ°ΠΊΠΎΠ²Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ Π²ΠΈΡΠΎΠΊΠ° Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡ ΠΏΠΎΠΊΠ°Π·Π²Π° Π³ΡΠ΅ΡΠΊΠ° ΠΈΠ»ΠΈ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
