Бестиарий программирования
1.12K subscribers
337 photos
5 videos
4 files
425 links
Наблюдения за жизнью ошибок в коде.
Андрей Карпов.

ГОСТ Р 71207-2024, ГОСТ Р 56939-2024, РБПО, Статический анализ кода

Канал-дублёр в MAX: https://max.ru/join/3VWTp9apkQvTMSRQ__LGiTQ5NGVBj8p_tOpwlQO6vS8
Download Telegram
➡️Утечка через сравнение строк

Как думаете, сколько времени занимает такая проверка?
if token == "secret_key":
allow_access()


Почти за мгновение. Но иногда эти миллисекунды могут выдать секрет.

🔍В чем дело

Во многих реализациях строки сравниваются посимвольно.

Алгоритм обычно выглядит так:
1) Сравнить первый символ
2) Если совпал - второй
3) Если совпал второй - третий
И так далее

Если символ не совпал, тогда сравнение заканчивается.

📝Где появляется проблема

Предположим секретный токен
A9F4K2

Если атакующий отправит
BXXXX

Сравнение закончится на первом символе.

Если отправить AXXXX, то проверка пройдет чуть дальше.

В результате время выполнения будет немного отличаться.

Если отправить много запросов и измерять время ответа, можно постепенно угадывать символы по одному.

✔️Как решают проблему

Используют сравнение за константное время.

Алгоритм сравнивает все символы, даже если первый уже не совпал.

Для этого во многих языках есть специальные функции, например:

GO
subtle.ConstantTimeCompare(a, b)


JavaScript
crypto.timingSafeEqual(a, b)


😎Как часто вы видели проверки секретов через обычное ==?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
Самое быстрое — «хренак-хренак и в продакшн»: о статическом анализе и скорости выхода продукта

Иногда задают вопрос: "Как статический анализ ускорит Time to market?"

Никак. Статический анализатор не ускорит выход продукта/обновления на рынок. С ним будет дороже и медленнее. Причина — неправильный вопрос.

Аналогично можно спрашивать, как этап тестирования ускоряет Time to market? Точно так же — никак. Тестировщикам мало того, что надо деньги платить, так они ещё будут разработчиков багами отвлекать. Намного быстрее просто написать запускающийся код и выложить дистрибутив. Как говорится, "хренак-хренак и в продакшен". Это самый быстрый вариант.

Но про тестирование, в отличии от статического анализа, такой вопрос не задают. Все понимают, что тестирование — важный элемент создания ПО. Видимо, статический анализ — более молодая методология по сравнению с тестированием, и он просто ещё не стал неотъемлемой частью разработки. Хотя видится очевидным, что и то, и другое неразрывно связано с обеспечением необходимого качества создаваемых программных продуктов.

Какой вопрос правильный?

Как статический анализ ускоряет Time to market при выпуске продуктов заданного уровня качества и надёжности?

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

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

Статический анализ применяется на этапе конструирования, то есть написания кода, поэтому позволяет устранить многие ошибки ещё до этапа тестирования. Хотя на анализ предупреждений необходимо тратить время, это окупается сокращением числа дефектов, которые выявляются на других этапах проверки продукта и его эксплуатации. Известно, что чем раньше ошибка найдена, тем дешевле её исправление.
👍8
Сегодня мини-подборка под разный интерес:

1) Обзор PVS-Studio 7.42. Там говорится, что для студентов временно нет вариантов использования. Переработали разделы сайта, всё опять есть – Бесплатное использование PVS-Studio студентами и преподавателями.

2) Подводные камни регулярных выражений: катастрофический возврат, ReDoS-атаки и выявление уязвимостей. Немного РБПО теории. А вообще, напоминаю, что у нас есть про РБПО вот такая большая подборка – GOST56939.RU.

3) Запускаем цикл вебинаров, посвященных современному Gradle для Java-разработчика. Первый вебинар – Современный Gradle для Java-разработчика: один модуль — хорошо, несколько — лучше.

4) Продолжаем цикл подкастов "Разбаговка" – Контроль команды: как и зачем?
Единорог Коди и его товарищ Баг — узнаваемые маскоты PVS-Studio. Этих персонажей вы видели во многих сценариях: при археологических раскопках, в космосе, при ограблении банка, в саду и в сточной канаве. Но как вообще появился этот единорог, и как же он выглядел на заре времён?

Давайте посмотрим хронологию взросления Коди в новой статье, а также изучим самые занятные иллюстрации с его участием! Переходите по ссылке ❤️

#статья #PVS_Studio
Please open Telegram to view this post
VIEW IN TELEGRAM
5
Продолжаем развивать Go анализатор. Про новую диагностику в PVS-Studio для выявления классического паттерна опечаток. Как можно ошибиться при обработке ошибок в Go.
Мы открыли ранний доступ для анализатора TypeScript 🔥

Если вы оставляли заявку, проверьте почту — вам должны были прийти инструкции по тестированию. Если вдруг инструкции не обнаружите, напишите нам в поддержку.

А для тех, кто впервые узнал о разработке нами TS анализатора, вот ссылочка на регистрацию и участие в EAP ❤️

#eap #TS
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
PVS-Studio в CMake: теперь официально
Если у вас кроссплатформенный проект на C или C++, то, как правило, вы не завязываетесь на одну систему сборки, а используете генератор сценариев для сборочных систем. Самый распространённый из них, CMake, недавно получил официальную интеграцию со статическим анализатором PVS-Studio для этих языков.
❤‍🔥82👍2
В социальных сетях вирусится высказывание Бьёрна Страуструпа про то, что ИИ в С++ не особо так успешен. Пожалуй, даПожалуй, да.
💯5
Продолжаем выкладывать избранные главы книги Сергей Кушниренко – Game++.

Часть 1. С++, движки и архитектуры: Часть 1.1, Часть 1.2.
У меня сегодня День Рождения. Приобретайте лицензии на PVS-Studio. Мне будет приятно! 🎂❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18🏆75😐2
Коллега собрала интересные события в мире C++ за последнее время, а также полезные материалы.
🔥4👏2
Дайте посмотреть на нормальный С++ проект, созданный вайб-кодингом

Чтобы корректировать развитие PVS-Studio я заинтересован смотреть C++ проекты, созданные с использованием генеративного AI или, по-простому, вайб-кодинга. Но вот незадача: все кругом пишут про этот самый вайб-кодинг, но я не знаю, как и где искать такие открытые проекты.

Мне попадается какая-то белиберда типа enhance-client, сгенерированная за $15. Но это даже смотреть несерьёзно. По присутствию в репозитории .obj, .iobj, .ipdb файлов и прочего мусора видно, что автор не понимает, что он делает. Проект не компилируется по разным причинам, например, из-за того, что заложен какой-то огрызок файла bytes.hpp (у массива нет конца).

Если немного поправить и проверить, что удалось собрать, то там лезут перлы вида:
void enhance::modules::autototem::run()
{
  ....
  auto env = enhance::instance->get_env();
  if (!env)
  {
    env->DeleteLocalRef(player);
    return;
  }
  ....
}

Предупреждение PVS-Studio: V522 [CWE-476, CERT-EXP34-C, SEC-NULL] Dereferencing of the null pointer 'env' might take place. autototem.cpp 757

Явное разыменование нулевого указателя.

Или бессмысленные сравнения значения типа int с константой 0.1f:
int sdk::minecraft_client::get_attack_cooldown() { .... }
 
void enhance::modules::shield_breaker::run()
{
  ....
  if (sdk::instance->get_attack_cooldown() > 0.1f)
  ....
}

Предупреждение PVS-Studio: V674 [CWE-682, CERT-FLP36-C] The '0.1f' literal of the 'float' type is compared to a value of the 'int' type. shield_breaker.cpp 628

Такие ляпы нет смысла серьёзно разбирать и описывать.

Можно спросить: "А что ты хочешь от поделок за 15$?" Да, в общем-то, ничего, но вместо нормальных проектов попадаются они. Мне интересно изучить большие открытые проекты нормального качества, при написании которых используется GenAI. А то пока ощущение, что термин "вайб-кодинг" есть, а C++ проектов нет. Или за них стыдно? :)

Если вы знаете подобные большие проекты, то присылайте ссылки на них в комментарии. Заранее спасибо.
👍7😁1
Появилась публичная запись доклада моих коллег с C++Russia 2025. Юрий Минаев, Олег Лысый – Семантика C++ изнутри компилятора.

Смотреть: VKvideo, Youtube, Cppconf.

Поговорим о семантике C++ с точки зрения статического анализатора или фронтенда компилятора. Рассмотрим, как устроена таблица символов и как происходит поиск имен, а также как семантика влияет на парсинг. Поговорим о том, как происходит выбор перегрузок и каким образом компилятор находит функции, которые даже не видны в текущей точке программы. Еще затронем тему шаблонов и их инстанцирования.
👍7
Про новые интеграции ⚡️

Начиная с релиза 7.42 у нас появилось еще больше новых интеграций:

1️⃣ Qt Creator 19
Появилась поддержка плагина PVS-Studio для Qt Creator версий 19.x. Плагин позволяет запускать анализ, просматривать предупреждения и работать с кодом, не покидая привычную среду разработки. Подробнее о работе с плагином можно прочитать в документации.

2️⃣ Интеграция в SourceCraft
SourceCraft — платформа, с помощью которой можно разрабатывать исходный код, управлять версиями, тестировать, собирать, развёртывать и сопровождать программные продукты. Мы проверили техническую совместимость PVS-Studio с этой платформой и описали процесс её использования в нашей документации.

3️⃣ Официальная интеграция в CMake
Начиная с версии 4.3.0 сборочная система CMake имеет встроенный механизм для работы с PVS-Studio, при котором срабатывания анализатора будут появляться в процессе компиляции проекта. Подробнее об этом можно прочитать в документации.

А тут вы найдете полную заметку со всеми последними обновлениями 👈🏻

#PVS_Studio
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32👌2
НЕкурс про разработку безопасного программного обеспечения (РБПО)

Мы подготовили раздел материалов, посвящённых разработке безопасного ПО (РБПО) по ГОСТ Р 56939—2024. Теперь эти материалы представлены в виде бесплатного онлайн-курса из 28 уроков. Такая структура поможет, во-первых, распределить нагрузку при знакомстве с теорией, а во-вторых, проверить свои знания.

Материалы о РБПО по ГОСТ Р 56939—2024

Компания ООО "ПВС" совместно с учебным центром "Маском" провела цикл вебинаров, посвящённых разработке безопасного программного обеспечения (РБПО). Совместно с приглашёнными экспертами из различных компаний мы рассмотрели 25 процессов, приведённых в ГОСТ Р 56939—2024.

Общее количество вебинаров — 30: каждому из 25 процессов ГОСТа посвящено по одному вебинару и 5 записано дополнительно на смежные темы. Записи всех вебинаров и подборка дополнительной информации доступна бесплатно по ссылке: ГОСТ56939.РФ.

Материалы ориентированы на специалистов, которые начинают знакомиться с темой РБПО. Для них они станут отправной точкой погружения в процессы безопасной разработки и внедрением их в компании. Те, кто уже знаком с темой, также найдут для себя новое и полезное.

Теперь с этими материалами и вебинарами можно знакомиться ещё и в формате уроков.

Чем не является курс

Чтобы избежать неправильных ожиданий, просим обратить внимание, что это не курс в области информационной безопасности в классическом понимании.

Во-первых, предлагаемый материал рассчитан на самостоятельное знакомство и не включает практическую часть или взаимодействие с преподавателем.

Во-вторых, существует перечень организаций, осуществляющих образовательную деятельность, имеющих дополнительные профессиональные программы в области информационной безопасности, согласованные с ФСТЭК. Мы не ведём образовательную деятельность, не входим в этот список и не выдаём удостоверяющие документы.

Если вам необходимо направить сотрудников на курсы повышения квалификации и получить подтверждающие документы, то вы можете обратиться в одну из организаций, приведённых в списке. Например, вы можете обратиться в УЦ "Маском", вместе с которым мы проводили вебинары. ФСТЭК России согласовала их программу повышения квалификации М-БРПО "Специалист по процессам разработки безопасного программного обеспечения" (200 часов).

Чем является курс

Суммарное время предлагаемых к изучению вебинаров составляет около 50 часов. Их можно смотреть на ускорении. Однако даже в этом случае с учётом дополнительных материалов и отсылок на внешние ресурсы изучение займёт около двух рабочих недель.

Это достаточно большая задача, поэтому мы решили помочь и разбили материалы на отдельные уроки. Так будет проще усваивать материал, а интерфейс позволяет отмечать, с чем вы уже познакомились.

После завершения курса вы можете пройти тестирование для самопроверки. В качестве приятного бонуса при хорошем прохождении теста вы получите ачивку – сертификат о знакомстве с курсом. Сертификат автоматически генерируется по окончании обучения и тестирования.

Тестирование также может использовать руководитель, чтобы убедиться, что сотрудники действительно изучили материалы и познакомились с основами РБПО.

Начать знакомство c курсом можно после регистрации/авторизации: Разработка безопасного программного обеспечения (РБПО) по ГОСТ Р 56939—2024
👍4
Forwarded from SourceCraft
🔓 Новые security-интеграции в SourceCraft

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

Недавно команда PVS-Studio интегрировала с нашей платформой свой инструмент статического анализа и добавила в документацию инструкцию для его подключения. Теперь все находки этого инструмента можно обрабатывать в интерфейсе SourceCraft Security и ускорять разбор уязвимостей с помощью встроенной функции ИИ-триажа.

❤️ На SourceCraft размещён репозиторий от партнёров с тремя готовыми Docker-образами для быстрого запуска проверки C, Java и .NET кода в CI/CD платформы, а также примером настройки сканирования для проекта на C. Проект можно склонировать и запустить — для работы потребуется действующая лицензия PVS-Studio.

Механизм интеграции открыт для всех анализаторов кода, совместимых с SARIF, и расширяет возможности стандартных проверок SourceCraft.


А какие внешние инструменты ждёте вы в SourceCraft?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41🔥1
Время от времени начал сталкиваться с тем, что разные люди присылают выхлоп нейросети как ответ или как описание чего-то. Я не про коллег. Сотрудников, как учат в Стратоплане, можно "учить-лечить-мочить". Есть внешний мир людей, с которым сложно что-то делать.

Поскольку бессмысленных и беспощадных текстов будет становиться всё больше, появилась задумка сделать специальную мини-статью или даже раздел на сайте и отправлять туда всех, кто стал прокладкой между мной и ИИ :) Уверен, другим такой ресурс тоже пригодится.

Неудивительно, что такая же идея пришла в голову не только мне. Так что всё уже сделано. Держите ссылку: Не вставляй мне нейросеть, пожалуйста.
😁6👍3
Раз речь зашла об использовании ИИ для подготовки материалов, хочу законспектировать ещё одну мысль: ИИ можно использовать для поиска данных, анализа материала, исследований и т. д.

Но надо чётко понимать, что исследования являются, во-первых, "археологическими" (что было в интернете, книгах, ...), а во-вторых, ограничено доступным для ИИ материалом. Если нет материала, не будет и никакого исследования, а только словоблудие. Боюсь, что не все и не всегда это понимают, создавая "обзоры продуктов", "сравнение с конкурентами", "исследования рынка" и так далее.

Попробую объяснить на примере. Если начать делать с помощью ИИ сравнение PVS-Studio и Cppcheck, то не будет никакого исследования на самом-то деле! Вернее, будет, на основе того, что написано в интернете, и не более того. Неизвестно, насколько это старая/полная информация и насколько полученный вывод будет соответствовать действительности. Ведь ИИ не пойдёт сам скачивать анализаторы, смотреть их интерфейс и запускать на разных проектах.

Можно сказать, что это всё и так понятно, но наблюдая безудержный рост ИИ-статей, в том числе "исследовательских", стоит лишний раз проговорить банальную вещь. Ответы ИИ – это переваренный материал из интернета. Кто больше/громче про себя написал, тот в исследовании и будет лучше. Вот и вся достоверность.

Между исследованием и "ИИ, сравни эти штуки" может лежать пропасть. Например, если говорить об испытаниях анализаторов, несколько компаний занимались этим год и то не сделали всё, что хотели (Кратко об итогах испытаний статических анализаторов исходного кода в 2025 году). Это можно назвать исследованием, а не вот это вот всё...

P.S. Ради интереса задал пару вопросов DeepSeek про детекторы утечек памяти: 1, 2. Как пафосно он нахваливает PVS-Studio! :) Я бы постеснялся быть таким безапелляционным. А ему-то что — про PVS-Studio подробно написано, вот и результат. Единственный вывод: мы молодцы и хорошо описываем наши возможности :)
🔥8🤔1