Найти в Дзене
Закреплено автором
Протестировал
Выступил на студенческой конференции по информационной безопасности ISCRA Talks. Рассказал о поддержке фаззинга со стороны языков программирования: какого рода поддержка в языках программирования нужна для эффективной работы фаззинга, а так же как и в каком объеме эта поддержка реализована в самых популярных ЯП. Доклад будет интересен, всем кто занимается фаззингом, чтобы понимать, что происходит после старта функции LLVMFuzzerTestOneInput(), а также тем, кто, возможно, захочет реализовать поддержку фаззинга для ЯП. Слайды: bronevichok.ru/...pdf
10 месяцев назад
Протестировал
Вдогонку к предыдущем посту. Расскажите, оптимизируете ли вы время сборки проекта и время запуска тестов. Измеряете время запуска тестов? Выявляете и регулярно чините флакающие тесты? Используете ли шардирование для запуска тестов? Источник диаграммы - ежегодный опрос JetBrains.
1 год назад
Протестировал
Фаззинг-тесты, которые мы изначально делали для нашего форка LuaJIT, так же используются для непрерывного фаззинга оригинального проекта LuaJIT и интерпретатора PUC Rio Lua. Результат двухлетней работы: 6 багов в PUC Rio Lua, превентивно найденные до публичных релизов, и 23 бага в LuaJIT. Всё были исправлены. Использование одних и тех же тестов для разных проектов оказалось возможным благодаря тому, что PUC Rio Lua и LuaJIT предоставляют один и тот же Lua C API. Если в этих проектах получилось успешно использовать фаззинг, то было бы здорово применить их и для другого Lua рантайма, подумал я. Для Go есть популярный среди гоферов проект - GopherLua, это реализация Lua на Go. Для проекта написано много расширений, которые добавляют функциональность со стороны Lua. В Go есть встроенный тулинг для написания фаззинг-тестов: нужно всего лишь написать обёртку для функции, собрать специальной командой и вообщем-то всё. Но я не знаю про аналог libprotobuf-mutator в Go (гоферы, подскажете аналог?). Поэтому сделать фаззеры для GopherLua с неструктурированными данными проще простого, а чтобы фаззинг-тест генерировал структурированные валидные данные я не смог найти решения. Я решил попробовать изобразить из GopherLua библиотеку с Lua C API, чтобы эту библиотеку можно было скомпоновать с моими тестами и переиспользовать фаззинг для Lua применительно к GopherLua. Для интеграции Go с C есть cgo, который предоставляет возможность использования C-библиотек в Go и экспорта Go функций в интерфейс C (генерация заголовочного файла). Если кратко, то LuaJIT C FFI мне показался удобнее, чем использование cgo. Из того, с чем я столкнулся: - В коде Go нельзя указать макросы, чтобы потом эти макросы cgo добавил в сгенерированный заголовочной файл. Поэтому часть макросов из lua.h пришлось принести в сам тест. - в Go нельзя никак указать, что функция не принимает аргументов, чтобы в заголовочном файле у функции в параметрах был void. На эту тему есть тикет и вроде даже патч. - В Lua C API каждая функция первым аргументом принимает указатель на L, структуру, описывающую Lua стек. Я не придумал, как возвращать из Go/cgo эту структуру, поэтому мой модуль может работать с единственной копией стека. Но для моих целей этого достаточно. В результате этой работы можно собрать тест, который по грамматике генерирует программы на Lua и исполняет их в GopherLua. Правда не все программы исполняются одинаково успешно и иногда случаются проблемы работы с памятью (runtime error: invalid memory address or nil pointer dereference). Такие дела.
1 год назад
После анонса задачи про верификацию оптимизаций в LuaJIT в лаборатории Tarantool мне написал студент Физтеха Алексей и сказал, что хочет
взять эту задачу в качестве дипломной работы и с сентября прошлого года мы продолжаем делать верификатор для LuaJIT. Много успели сделать и есть результаты, которыми можно поделиться. Напомню основную идею - научиться моделировать семантику LuaJIT IR с помощью SMT-LIB, декларативного LISP-подобного языка для SMT-солверов, и тем самым получить возможность проверять эквивалентность программы, представленной в виде LuaJIT до и после оптимизаций. В отличие от сравнительного тестирования верификация с помощью SMT-решателя позволяет проверить корректность на всех допустимых входах, а не только на конкретных тестовых данных...
1 день назад
Обычно для оценки степени покрытия кода фаззинг-тестированием используют покрытие по строкам/функциями и редко по ветвлениям
Метрика покрытия MC/DC редко используется для оценка покрытия регресионными тестами вообще и фаззинга в частности, хотя она позволяет получить доказательство того, что логика надежно тестируется в коде. Я сделал патч, чтобы можно было для кода PUC Rio Lua и LuaJIT собирать MC/DC покрытие, мне было интересно узнать значения метрики для этих двух проектов при тестировании нашими фаззинг-тестами. Поддержка покрытия MC/DC уже есть и в GCC и в Clang (18+ и это не возраст, а версия), так как тесты по умолчанию собираются с libFuzzer, то я использовал реализацию из LLVM/Clang. Результаты такие: Общее покрытие MC/DC для кода LuaJIT 23%, некоторые файлы покрыты лучше других, топ-3: lj_parse...
6 дней назад
In this work, we address this issue by proposing an efficient white-box checker, Emme
Our key idea is to use information that is easily provided by database systems to efficiently check the isolation level of a given transaction history. We present version certificate recovery, a method of recovering the version order and each operation’s version from the database system under test. For efficiency, we also propose the concept of an expected serialization order, which obviates the need to define and recover a version certificate for many serializable concurrency control protocols. We have implemented version certificate recovery for three widely used database systems—PostgreSQL, CockroachDB, and TiDB...
1 неделю назад
В инфраструктуру для непрерывного фаззинг-тестирования OSS-Fuzz добавлена возможность тестирования проектов, написанных на языке Lua, в дополнение к ранее поддерживаемым языкам C/C++, Go, Swift, Rust, Python, JavaScript и Java. Интеграция реализована с помощью проекта luzer, развивающего специализированный инструментарий для фаззинг-тестирования кода на языке Lua и расширений для Lua, написанных на C/C++. Проект использует библиотеку libFuzzer и может применяться совместно с инструментами AddressSanitizer, MemorySanitizer, LeakSanitizer, ThreadSanitizer и Undefined Behavior Sanitizer, позволяющих на основе выявленных в процессе фаззинг-тестирования проблем, определять наличие типовых уязвимостей, вызванных переполнениями буфера, целочисленными переполнениями, обращением к неинициализированным и освобождённым областям, утечками памяти, разыменованием указателей и проблемами с установкой блокировок. Код проекта доступен под лицензией ISC. В процессе работы luzer перебирает возможные комбинации входных данных и генерирует отчёт о всех выявленных сбоях и неперехваченных исключениях. Например, при проверке в luzer библиотеки разбора формата MsgPack antirez/lua-cmsgpack было выявлено, что данные с большим количеством массивов могут привести к переполнению стека. В рамках проекта lunapark инструментарий luzer применяется для тестирования PUC Rio Lua, трассирующего компилятора LuaJIT, высокопроизводительной СУБД и сервера приложений Tarantool, а также для тестирования сторонних Lua-модулей. www.opennet.ru/...6688
3 недели назад
Инженер из Mozilla в треде рассказывает, что проблемы в CPU не редкость, не то, что раньше
Мало ли чего в интернетах пишут, но этот инженер разбирает креши от Firefox и заботливо собирает в один тикет - https://bugzilla.mozilla.org/show_bug.cgi?id=1896406. За год их накопилось 31 штука. Тред: https://bsd.network/web/@gabrielesvelto@mas.to/115939583283721936
1 месяц назад
Вот и новогодние подарки от авторов Software Foundations подоспели
We have a new, 7th (sic!) volume of Software Foundations: Security Foundations https://softwarefoundations.cis.upenn.edu/secf-current/index.html Topics include noninterference, security type systems, secure multi-execution, cryptographic constant time, and speculative load hardening. And that's not even all, as the volume is still in progress, and some new chapters are upcoming...
1 месяц назад
Статистика по фаззингу Linux-ядра с помощью syzcaller: медиана выявления бага 51 день, 75-й перцентиль 291 день
С августа 2025 года syzcaller делает шаг влево: серии патчей в рассылке по некоторым подсистемам ядра подвергаются фокусному фаззингу ещё на этапе ревью. Найденные креши, которые воспроизводятся без патчей, не репортятся. Фаззингу подвергаются только функции, у которых поменялся объектный код, и файлы, которые затронули патчи...
2 месяца назад
В прошлый понедельник вышла новая публичная версия PUC Rio Lua и хотя мы не успели сообщить о проблеме до релиза всё равно хотелось
разобраться с целочисленным переполнением. Для репорта проблемы нужен репродьюсер, а у меня никак не получалось воспроизвести проблему на локальной сборке. Я стал минимизировать репро в контейнере OSS Fuzz. Получил репро на Lua и С, но с ними локально всё равно не воспроизводится. Минимизирую набор флагов компилятора, все равно локально не воспроизводится. Начинаю с нуля пошагово воспроизводить в окружении контейнера и не воспроизводится. Потом замечаю, что если путь к Lua-скрипту покороче, то воспроизводится, а если путь указывает на скрипт в отдельной директории, то не воспроизводится. Чудеса какие-то! +++ luaL_loadbuffer_proto_test...
2 месяца назад
Любите ли вы отладку так, как люблю её я
? Время от времени от непрерывного фаззинга появляются срабатывания, которые надо разбирать, многие из них вызваны настоящими багами, но не все. Обычно мы стараемся все срабатывания разобрать как можно скорее и отрепортить их разработчикам LuaJIT и PUC Rio Lua, но иногда бывают "тяжелые" случаи и такой разбор задерживается. В начале декабря было два срабатывания для PUC Rio Lua: утечка памяти и целочисленное переполнение. Обе проблемы не получилось разобрать сразу, а тем временем в PUC Rio Lua один за другим выпускали RC для новой версии 5.5.0 и было желание как можно быстрее разобрать срабатывания...
2 месяца назад
У автора рассылки The Pragmatic Engineer есть книга "The Software Engineer's Guidebook
". Покрывает большой круг тем и конечно там есть глава про тестирование. Если вы читали другие книги по тестированию, то здесь вряд ли что-то новое узнаете. А вот история в начале главы занимательная. Помню, у нас в проекте...
2 месяца назад