Поделюсь отличной новостью - наконец-то опубликовали исходный код SQLancer для логического фаззинга в СУБД. Когда я нашел статью о новом подходе, то
поинтересовался у автора планирует ли он выложить исходный код фаззера. И хотя автор заверил, что опубликует код в ближайшее время, я сомневался в этом до последнего момента. Потому что когда я такой же вопрос задал автору фаззера для графических шейдеров с помощью метаморфического тестирования, то мне сначала пообещали, что дадут попробовать, а потом появилась
новость, что компанию
GraphicFuzz купил Гугл, потому что фаззер успешно находил баги в видеодрайверах. Правда потом код фаззера всё-таки
опубликовали. C SQLancer похожая ситуация - есть статья, которая описывает концепт и есть
список багов в популярных СУБД, найденных с помощью такого подхода. Идея достаточно простая — построить какое-нибудь AST-дерево с условиями, задать SQL запросы и проверить, нет ли логического бага. Разработчики
sqlite
пишут, что
sqlancer
это
AFL
нашего времени:
"One fuzzing researcher of particular note is Manuel Rigger, currently (as this paragraph is written on 2019-12-21) at ETH Zurich. Most fuzzers only look for assertion faults, crashes, undefined behavior (UB), or other easily detected anomalies. Dr. Rigger's fuzzers, on the other hand, are able to find cases where SQLite computes an incorrect answer. Rigger has found many such cases. Most of these finds are fairly obscure corner cases involving type conversions and affinity transformations, and a good number of the finds are against unreleased features. Nevertheless, his finds are still important as they are real bugs, and the SQLite developers are grateful to be able to identify and fix the underlying problems. Rigger's work is currently unpublished. When it is released, it could be as influential as Zalewski's invention of AFL and profile-guided fuzzing."
P.S. Есть альтернатива
sqlancer
на Golang от PingCAP -
https://github.com/chaos-mesh/go-sqlancer