Протестировал


Kanal geosi va tili: Rossiya, Ruscha


Рекламу и анонсы не размещаю.
Авторский канал о качественной разработке ПО (процессы, тестирование, формальная верификация и спецификация).
— Дзен https://dzen.ru/sqaunderhood
— VK https://vk.com/sqaunderhood
— Твиттер https://twitter.com/sqaunderhood

Связанные каналы  |  Похожие каналы

Kanal geosi va tili
Rossiya, Ruscha
Statistika
Postlar filtri


GWPSan: Sampling-Based Sanitizer Framework

GWPSan is a framework for low-overhead sampling-based dynamic binary instrumentation, designed for implementing various bug detectors (also called "sanitizers") suitable for production uses. GWPSan does not modify the executed code, but instead performs dynamic analysis from signal handlers.

> Note: GWPSan is inspired by GWP-ASan, but their design and implementation are completely different.

https://github.com/google/gwpsan


Kyle Kingsbury (aphyr) опубликовал отчёт о тестировании БД Datomic Pro. Сам отчёт как всегда интересный, не буду его пересказывать, почитайте сами по ссылке.

Мне показалась забавной одна деталь. Работа над этим отчётом была проспонсирована банком NuBank, очевидно потому что они используют Datomic и заинтересованы в надёжности Datomic. В отчёте Кайл, как обычно, рассказывает какие тесты использовали и для Datomic это были List Append, List Append with CaS, Internal (вариация List Append) и тест Grant. И забавно то, что команда Jepsen тестировала СУБД по запросу банка, но не использовала в тестировании популярный тест bank, в котором создаются счета, в процессе тестирования переводятся деньги между счетами и при успешном исходе общая сумма на счетах не должна измениться.

via




Получилось много слов и наверное надо написать выводы:

- искать цели для фаззинга в незнакомом проекте может быть нетривиальной задачей. Я скорее с ней не справился. Поиск таких целей можно делать вручную, можно использовать эвристики (функции для кодирования и декодирования и т.д.), а можно использовать специальные инструменты для этого.
- интеграционная работа может занять больше времени, чем вы на неё выделили
- "взялся за гуж - не говори, что не дюж" если начал делать задачу, то надо доделывать.


История (не)успеха

Есть такой проект FreeRDP, в рамках которого разрабатывается библиотека для работы по протоколу RDP (Remote Desktop Protocol). Я когда-то давно делал несколько патчей для FreeRDP и их приняли в основную ветку, так что проект не был мне совсем чужим. Позднее я решил нанести ещё немного пользы проекту и интегрировать его в OSS Fuzz, чтобы фаззинг-тесты помогли разработчикам сделать код библиотеки более надежным. Помимо моего желания была ещё одна причина - периодически в библиотеке находили CVE и один из докладов на BlackHat был целиком посвящен "дырявости" FreeRDP - "Fuzzing and Exploiting Virtual Channels in Microsoft Remote Desktop Protocol for Fun and Profit". Чтобы сделать интеграцию проекта в OSS Fuzz надо сделать как минимум три вещи: добавить хотя бы один фаззинг тест в проект, сделать статическую сборку фаззинг-тестов в проекте и добавить сборочные скрипты в репозиторий OSS Fuzz.

Итак, в феврале 2020 году я выбрал для фаззинг-тестов самые простые цели в FreeRDP - небольшие модули, которые уже были покрыты юнит-тестами, и сделал для них обёртки для LibFuzzer. Всё это я делал в свободное время и задачка немного растянулась во времени, первые патчи с тестами смержили только через год - в декабре 2020. Следом за тестами добавил в проект отдельную CMake-опцию для включения сборки фаззинг-тестов. Нужно отдать должное ментейнерам проекта - ревью моих патчей почти всегда было оперативным.

Тесты были добавлены в проект и я сделал патч для OSS Fuzz. В теории работа это несложная: выбрать CMake-опции, с которыми собирать проект, чтобы не собрать лишнее, убедиться, что тесты собираются статически, есть аппрув от ментейнеров проекта и это наверное всё. На первом запуске CI для моего патча случилось страшное:

clang-15: error: unable to execute command: Segmentation fault (core dumped)

Хм, но Clang это не какой-то местечковый проект, почему он сегфолтит? Пока я думал и пытался отладить проблему мой PR закрыл один из ментейнеров OSS Fuzz, потому что "I was cleaning out some old issues/PRs, didn't realise this one was still active.". Я перестал проявлять активность в PR и его хотели прикрыть.

Пока идей с фиксом проблемы для Clang не было я сделал патч для статической сборки FreeRDP. Его закатали в основную ветку супер быстро - за 8 дней.

Проблема с Clang не решена. Тем временем код фаззинг-тестов собирается только под отдельной опцией в FreeRDP и может начать протухать - в одном из патчей переделали API и один из тестов сломался. Поэтому сделал отдельный воркфлоу в CI FreeRDP, чтобы собирать фаззинг-тесты на каждый коммит и проверять, что они не сломаны. Патч залили за 1 день.

Прошло 3 года. Я попробовал убрать опцию для LTO в FreeRDP и Clang перестал сегфолтить. Патч для интеграции FreeRDP наконец-то залили в OSS Fuzz.

Год 2023. Тесты запускаются в OSS Fuzz, всё работает. Потом сборка тестов в OSS Fuzz внезапно ломается. Нахожу коммит в FreeRDP, который сломал сборку. В переписке с ментейнером FreeRDP я пытаюсь аккуратно узнать почему на "красный" CI залили патч. Проблема в том, что все зависимости FreeRDP для сборки фаззинг-тестов описаны в репозитории OSS Fuzz, а разработчики не могут сами делать патчи для OSS Fuzz и при добавлении новых зависимостей всё ломается. Потом ещё раза два так сборка ломалась и я перестал уже обращать внимание на письма от OSS Fuzz про сломанную сборку. А разработчики FreeRDP и вовсе отключили в CI фаззинг.

Весной 2024 ментейнер FreeRDP делает патч, который переносит сборочные скрипты из репозитория OSS Fuzz в репозиторий FreeRDP. Сборка работает.

В апреле 2024 сотрудник Kaspersky сделал фаззинг-тест, который нашел несколько уязвимостей (Integer overflow & OutOfBound Write) в коде FreeRDP.

Ментейнеры в оперативном порядке исправляют уязвимости и выпускают новую версию с исправлениями:

https://github.com/FreeRDP/FreeRDP/releases/tag/2.11.6
https://github.com/FreeRDP/FreeRDP/security/advisories/GHSA-q5h8-7j42-j4r9


> Microsoft и IBM открыли код операционной системы MS-DOS 4.0

В опубликованном коде ни одного теста. Где тесты, Зин?


GCC 14 умеет рисовать ASCII-диаграммы для визуализации проблем с переполнением буфера.

via


Видео доклада How Badly Do We Want Correct Compilers? (NDC TechTown 2023)

Доклад известного исследователя Джона Регира (John Regehr). Докладчик, насколько можно заметить, ни разу не произносит слово "CompCert" и сомневается в успешности проектов формально верифицированных компиляторов для популярных ЯП, что, конечно, интригует. Рассматриваются инструменты, в разработке которых принял участие автор доклада: YARPGen, Souper и другие проекты.

via


ChatGPT использует материалы из моей вики про тестирование.


Из интересного в результатах ежегодного опроса среди разработчиков от JetBrains за 2023 год:

8% респондентов используют мутационное тестирование как одну из техник тест-дизайна,
а техникой "угадывание ошибок" пользуются 16%.

Больше половины опрашиваемых так или иначе использовали искусственный интеллект для генерирования тестов.
Более 80% хотели бы использовать AI для написания тестов, а 18% хотели бы продолжить это самостоятельно.

via Developer Ecosystem и Developer Ecosystem (Testing)

См. результаты опросов за прошлые года: 2019, 2020, 2021.


Расширение для визуализации тестирования кода на Python с помощью Hypothesis в VScode.

https://marketplace.visualstudio.com/items?itemName=HarrisonGoldstein.tyche


19 марта в Питере пройдёт митап по функциональному программированию и один из докладов посвящен практике совместного использования завтипов с тестированием с помощью свойств (property-based).

Регистрация по ссылке.


Гугл окончательно одолела полувековая проблема небезопасных ЯП, поэтому они постепенно будут отказываться от C++ в пользу Perl, Java, Go, Rust.

Secure by Design: Google’s Perspective on Memory Safety

https://security.googleblog.com/2024/03/secure-by-design-googles-perspective-on.html


Этот год високосный - в нем есть 29 февраля. И хотя каждый четвертый год високосный это не мешает разработчикам ошибаться вновь и вновь.

Внушительный список проблем, возникших из-за дополнительного дня в 2024 году https://codeofmatt.com/list-of-2024-leap-day-bugs/




Выложили слайды и видеозапись докладов с конференции ТБ Форум 2024.

Из докладов, которые мне больше всего "зашли":

Основные направления совершенствования сертификации средств защиты информации, Дмитрий Шевцов, начальник управления ФСТЭК России

Этот доклад перевернул в моей голове представление о людях, которые пишут стандарты для нашей индустрии разработки ПО. Я представлял себе этот доклад самым скучным из сетки докладов, а вышло совершенно наоборот. Из интересного: во ФСТЭК собрали статистику, чтобы профилировать процесс сертификации ПО на разных стадиях перед получением сертификата ФСТЭК. Выяснилось, что больше всего времени уходит на проведение испытаний (38% времени), а на втором месте стадия предоставления заявителем образцов СЗИ в испытательную лабораторию (25% времени). Как следствие, ФСТЭК сократил сроки рассмотрения документов и проведения отдельных видов работ (суммарно на 105 календарных дней). Этой весной вступают в силу приказы о введении "Требования по безопасности информации к системам управления базами данных", по данным ФСТЭК в настоящее время в системе сертификации ФСТЭК России сертифицировано 15 СУБД, из них Требованиям соответствуют 4 СУБД.

Центр исследования безопасности системного программного обеспечения, Алексей Хорошилов, ведущий научный сотрудник, ФГБУН "ИСП РАН"

Традиционный отчет о работе "Центра исследования безопасности ядра", который объединяет усилия отечественных компаний-разработчиков ПО в Linux в стат. анализе и фаззинге Linux-ядра.
Для самых интересных слайдов сделал скриншоты.

Унифицированная среда безопасной разработки программного обеспечения, Вартан Падарян, ведущий научный сотрудник ФГБУН "ИСП РАН"

ИСП РАН продолжает работать над средствами для безопасной разработки и их автоматизацией. На слайдах приведен план работ и отмечено, что планируют портирование технологий анализа кода на отечественные процессоры (Байкал, Эльбрус, что-то на RISC-V) и запустить облако, чтобы предоставлять инструменты для безопасной разработки как сервис. На одном из слайдов приводится сравнение статистики срабатываний в Svace и cppcheck, ожидаемо Svace показал лучшие результаты. Вот бы кто сравнил PVS Studio и Svace, результаты были бы любопытными.

Postgres Professional: путь от SDL к сертификации РБПО, Шаплов Николай Николаевич

В PostgresPro есть отдельная команда, которая целенаправленно занимается фаззингом PostgreSQL. На слайдах явно не указано, но насколько помню устно ребята говорили, что исправления для найденных проблем они возвращают в апстрим. Ребята тестируют сетевой протокол (libpq), функции-обработчики типов данных (28 типов: jsonb, int, line, varchar etc), функции для выполнения операций над данными (128 операций, используется структурированный фаззинг). Для libpq используют FUTAG для автоматической генерации целей. Отдельно докладчик отметил проблему с исправлением найденных проблем:

> Найденный баг должен быть праздником для фаззингиста. Если приходится биться за то, чтобы найденный баг взяли в работу, если багу никто не рад, фаззингист не захочет ничего находить.

Хех, игнорирование найденных проблем демотивирует не только фаззингистов. :-/

https://www.tbforum.ru/2024/program/information-security


VerifyThis это серия соревнования по верификации программ, которые проходят ежегодно с 2011 года. Сейчас проходит отбор задач для соревнования этого года, которое пройдет в рамках конференции ETAPS 6 и 7 апреля в Люксембурге. Как я понял нет никакого ограничения по инструментам для верификации и команда сама выбирает наиболее удобный, за прошлые года на сайте указаны инструменты, которые использовали победившие команды: Why3, mCRL2, Dafny, VeriFast. На скриншоте типичная задача с соревнования.

https://www.pm.inf.ethz.ch/research/verifythis.html


Компания Trail of Bits публикует главы своей книги-руководства по тестированию:

> Руководство по тестированию — это ресурс, который помогает разработчикам и специалистам по безопасности в настройке, оптимизации и автоматизации многих инструментов статического и динамического анализа, которые мы используем в Trail of Bits.

Сейчас там есть советы по стат анализу с помощью CodeQL и фаззингу.

Если The Fuzzing Book больше ориентирована на теорию, то эта книга чисто практическая. Один из советов: какой использовать промпт для LLM, чтобы сгенерировать словарь для фаззинга.

https://appsec.guide/


Ахах, это про меня.


Testing Graph Database Systems via Graph-Aware Metamorphic Relations

Authors: Zeyang Zhuang, Penghui Li, Pingchuan Ma, Wei Meng, Shuai Wang

Пример бага (RedisGraph#2929) из статьи:

MATCH path =(a) -[*]-(b) WHERE ID(a)=0 AND ID(b)=1
RETURN COUNT(path) // -> 0
MATCH path =(a) -[*]-(b) WHERE ID(a)=1 AND ID(b)=2
RETURN COUNT(path) // -> 4
MATCH path =(a) -[*]-(b) -[*]-(c) WHERE ID(a)=0 AND ID(b)=1 AND ID(c)=2
RETURN COUNT(path) // -> Error 4 != 0*4

Статья: https://www.vldb.org/pvldb/vol17/p836-zhuang.pdf
Код: https://github.com/cuhk-seclab/Gamera

20 ta oxirgi post ko‘rsatilgan.