42% разработчиков раз в месяц публикуют уязвимый исходный код, и только треть уязвимостей устраняется — исследование Tromzo. Программисты выполняют первостепенные задачи и обрабатывают большой объем информации, поэтому могут пропустить детали, влияющие на безопасность кода.
Почему возникают уязвимости
Уязвимости в исходном коде — это слабые места или ошибки, которые могут быть использованы злоумышленниками для атаки на ПО. Они наносят ущерб как отдельному продукту, так и всей инфраструктуре: нарушают технологические процессы и работу клиентских систем, позволяют украсть личные данные и денежные средства. «Тинькофф», например, запустил публичную программу по поиску ошибок и уязвимостей в своих сервисах за вознаграждение до 400.000 ₽.
В идеальном мире разработчик с первых строк написания кода заботится о безопасности продукта, а специалисты по информационной безопасности помогают улучшить программу. Но писать сразу чистый код, когда каждый день поступают ТЗ, — тяжело, а количество новых уязвимостей ежегодно увеличивается: в 2020 году — более 18.000, в 2021 году — свыше 20.000, а в 2022 году — 25.000 (данные National Vulnerability Database).
Причины возникновения уязвимостей в коде:
Недостаточная обработка пользовательского ввода
Отсутствие фильтров и неправильная проверка команд допускают внедрение вредоносного кода и SQL-инъекций.
Уязвимости в сторонних библиотеках
Отбор и обновление библиотек с помощью последних исправлений безопасности необходимы, чтобы слабые места в исходном коде не появлялись.
Отсутствие проверок аутентификации
Игнорирование проверок авторизации приводит к несанкционированному доступу к системе, где хакеры выполняют привилегированные операции без разрешений.
Слабые точки в безопасности
Использование стандартных паролей, хранение паролей в открытом виде, не безопасная передача данных и отсутствие шифрования данных — все это уязвимости.
Уязвимости, связанные с памятью
Переполнение буфера или использование нулевого указателя приводят к сбою продукта или возможности выполнения удаленного кода.
Недостаточная обработка исключений и ошибок
Ошибки, не обрабатывающиеся должным образом, открывают доступ злоумышленникам к информации о системе. Исключения используются для осуществления атак.
Отсутствие экранирования входных данных
Без валидации злоумышленник внедряет вредоносный код, который будет исполняться при обработке пользовательского ввода.
Использование недоверенных данных ведет к получению доступа к информации и изменению поведения продукта.
Запись данных в XML
В безобидном случае хакер внедрит в документ лишние теги, в результате чего XML-парсер завершит работу с ошибкой. Но может и изменить аутентификационные данные и цены в базе клиентов.
Cryptographic issues в JavaScript
Этот код использует алгоритм хеширования sha256 для хеширования пароля, который ввел пользователь. Но одной хэш-функции недостаточно для защиты паролей, поскольку она уязвима для атак по словарю и атак по радужным таблицам.
Как устранить слабые места в коде
регулярно обновлять и исправлять баги в коде;
использовать библиотеки и фреймворки с проверенной безопасностью;
работать с динамическими отладчиками — инструментами, которые производят отладку программы в процессе ее исполнения;
внедрять инструменты для автоматического анализа кода и выявления потенциальных ошибок.
К примеру, система CodeAche сама анализирует код, оценивает нарушения, зависимости и уязвимости в исходном коде, предоставляя актуальное состояние программы. Можно выявить системные ошибки на ранних стадиях — до того, как техдолг приведет к необходимости переписывать проект с нуля.
CodeAche находит подозрительные, с точки зрения безопасности, фрагменты кода, которые могут потенциально содержать уязвимости. А так же показывает известные уязвимости безопасности, например, OWASP-TOP10, CVE, SANS-25, которые требуют немедленной реакции и исправления.
Обнаруженные уязвимости содержат подробное описание проблемы и рекомендации по устранению с примерами безопасного кода.
Возможности для бизнеса:
до 40% экономия бюджета на разработку;
получение информации о проекте;
принятие взвешенных управленческих решений на основании данных анализа;
разные уровни доступа к данным;
визуализация данных для нетехнических стейкхолдеров.
Возможности для руководителей:
обзор проблем;
планирование работы на основе найденных проблем и их критичности;
отслеживание задач во встроенном таск-трекере;
управление направлениями изменения техдолга в проекте;
оценка эффективности ИТ-персонала;
анализ активности разработчиков: скорость разработки, частота доставки кода, участие в code review.
Возможности для разработчиков:
код ошибки;
необходимые рекомендации по исправлению;
более 600 правил для разных языков. Код будет проверен качественно и быстро;