Найти в Дзене
Закреплено автором
Протестировал
Выступил на студенческой конференции по информационной безопасности ISCRA Talks. Рассказал о поддержке фаззинга со стороны языков программирования: какого рода поддержка в языках программирования нужна для эффективной работы фаззинга, а так же как и в каком объеме эта поддержка реализована в самых популярных ЯП. Доклад будет интересен, всем кто занимается фаззингом, чтобы понимать, что происходит после старта функции LLVMFuzzerTestOneInput(), а также тем, кто, возможно, захочет реализовать поддержку фаззинга для ЯП. Слайды: bronevichok.ru/...pdf
8 месяцев назад
Протестировал
Вдогонку к предыдущем посту. Расскажите, оптимизируете ли вы время сборки проекта и время запуска тестов. Измеряете время запуска тестов? Выявляете и регулярно чините флакающие тесты? Используете ли шардирование для запуска тестов? Источник диаграммы - ежегодный опрос JetBrains.
11 месяцев назад
Протестировал
Фаззинг-тесты, которые мы изначально делали для нашего форка 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). Такие дела.
10 месяцев назад
Вот и новогодние подарки от авторов 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...
2 дня назад
Статистика по фаззингу 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
". Покрывает большой круг тем и конечно там есть глава про тестирование. Если вы читали другие книги по тестированию, то здесь вряд ли что-то новое узнаете. А вот история в начале главы занимательная. Помню, у нас в проекте...
3 недели назад
Из нерассказанного в докладе
Например о том, что нельзя вот так взять и использовать фаззинг для языкового рантайма, в нашем случае Tarantool. Некоторые символы покрытия кода, экспортируемые libFuzzer, также экспортируются ASan и UBSan. Обычно это не является проблемой, потому что ASan/UBSan экспортируют их как слабые символы - символы libFuzzer имеют приоритет. Однако, когда ASan/UBSan предварительно загружены, а libFuzzer загружен как часть разделяемой библиотеки (в составе luzer), слабые символы загружаются первыми. Это приводит к тому, что информация о покрытии кода отправляется в ASan/UBSan, а не в libFuzzer. Благодаря...
3 недели назад
NATS is a popular distributed streaming system
NATS is a popular distributed streaming system. Jepsen tested NATS 2.12.1, focusing on its durable JetStream subsystem, and found that it could lose data or get stuck in persistent split-brain in response to simulated node failures. This data loss was caused in part by a default fsync policy which flushed data to disk once every two minutes, rather than before acknowledgement. Even a single kernel crash or power failure, combined with process pauses or network partitions, could cause NATS replicas to lose acknowledged messages...
1 месяц назад
Понял, что после доклада про фаззинг скриптов Lua и программ с Lua-интерфейсом я больше ничего и не писал
Понял, что после доклада про фаззинг скриптов Lua и программ с Lua-интерфейсом я больше ничего и не писал. А с момента выступления на Heisenbug мы много что успели сделать: исправили много багов, добавили поддержку санитайзеров, планируем поддержать AFL, написали тесты, которые используют luzer для фаззинга стандартной библиотеки Lua для LuaJIT и PUC Rio Lua и много чего ещё. Знаю, что luzer используем не только мы для тестирования Tarantool и LuaJIT, его используют и в других компаниях. Было очень приятно на PHDays на одном из стендов услышать от человека, что он пользуется моей библиотекой (Алекс, привет!)...
1 месяц назад
The Fuzzing Book на русском
The Fuzzing Book на русском! Хороших книг и курсов про рандомизированное тестирование не так уж и много. Есть тренинги и воркшопы по фаззингу от практиков в инфобезе, но часто они сфокусированы на конкретных инструментах, есть видеолекции про безопасную разработку от ФСТЭК, но они сфокусированы на стат. анализе и фаззинге для покрытия нефункциональных требований. Я писал про электронную книгу Fuzzing Book, это набор Jupyter-блокнотов, в которых авторы последовательно объясняют общие концепции рандомизированных тестов и параллельно с объяснением разрабатывают фаззинг-движок. Электронная книга...
1 месяц назад
Любопытная история из статьи про Льва Королёва, советского и российского системного программиста и математика
Любопытная история из статьи про Льва Королёва, советского и российского системного программиста и математика: «Все знали про программистскую деятельность Сергея Алексеевича [а он был руководителем проекта], а [Лев Николаевич] Королёв все время спрашивал: «Сергей Алексеевич, когда же вы сделаете ошибку в программе?» На что Лебедев отвечал: «Это вы, программисты, делаете ошибки, а потом до ушей радуетесь, что их находите, а я пишу программы тщательно, и ошибок не будет». Лев Николаевич заметил: «Сергей Алексеевич, этого не может быть, потому что не может быть никогда». И наконец, это случилось...
2 месяца назад