Blog

Уязвимости в исходном коде и способы их устранения

Разработка
42% разработчиков раз в месяц публикуют уязвимый исходный код, и только треть уязвимостей устраняется — исследование Tromzo. Программисты выполняют первостепенные задачи и обрабатывают большой объем информации, поэтому могут пропустить детали, влияющие на безопасность кода.

Почему возникают уязвимости

Уязвимости в исходном коде — это слабые места или ошибки, которые могут быть использованы злоумышленниками для атаки на ПО. Они наносят ущерб как отдельному продукту, так и всей инфраструктуре: нарушают технологические процессы и работу клиентских систем, позволяют украсть личные данные и денежные средства. «Тинькофф», например, запустил публичную программу по поиску ошибок и уязвимостей в своих сервисах за вознаграждение до 400.000 ₽.
В идеальном мире разработчик с первых строк написания кода заботится о безопасности продукта, а специалисты по информационной безопасности помогают улучшить программу. Но писать сразу чистый код, когда каждый день поступают ТЗ, — тяжело, а количество новых уязвимостей ежегодно увеличивается: в 2020 году — более 18.000, в 2021 году — свыше 20.000, а в 2022 году — 25.000 (данные National Vulnerability Database).
Причины возникновения уязвимостей в коде:
  1. Недостаточная обработка пользовательского ввода
  2. Отсутствие фильтров и неправильная проверка команд допускают внедрение вредоносного кода и SQL-инъекций.
  3. Уязвимости в сторонних библиотеках
  4. Отбор и обновление библиотек с помощью последних исправлений безопасности необходимы, чтобы слабые места в исходном коде не появлялись.
  5. Отсутствие проверок аутентификации
  6. Игнорирование проверок авторизации приводит к несанкционированному доступу к системе, где хакеры выполняют привилегированные операции без разрешений.
  7. Слабые точки в безопасности
  8. Использование стандартных паролей, хранение паролей в открытом виде, не безопасная передача данных и отсутствие шифрования данных — все это уязвимости.
  9. Уязвимости, связанные с памятью
  10. Переполнение буфера или использование нулевого указателя приводят к сбою продукта или возможности выполнения удаленного кода.
  11. Недостаточная обработка исключений и ошибок
  12. Ошибки, не обрабатывающиеся должным образом, открывают доступ злоумышленникам к информации о системе. Исключения используются для осуществления атак.
  13. Отсутствие экранирования входных данных
  14. Без валидации злоумышленник внедряет вредоносный код, который будет исполняться при обработке пользовательского ввода.

Примеры уязвимостей

Согласно отчету Veracode 2022 распространенными уязвимостями являются: Information leakage (утечка информации) — 65,9%; CRLF Injection (CRLF инъекция) — 65,4%; Cryptographic issues (криптографические проблемы) — 63,7%.
Рассмотрим несколько примеров:

Внедрение в запросы SQL, LDAP, XML и другие

Использование недоверенных данных ведет к получению доступа к информации и изменению поведения продукта.
Запись данных в XML

В безобидном случае хакер внедрит в документ лишние теги, в результате чего XML-парсер завершит работу с ошибкой. Но может и изменить аутентификационные данные и цены в базе клиентов.
Cryptographic issues в JavaScript

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

Как устранить слабые места в коде

  • регулярно обновлять и исправлять баги в коде;
  • использовать библиотеки и фреймворки с проверенной безопасностью;
  • работать с динамическими отладчиками — инструментами, которые производят отладку программы в процессе ее исполнения;
  • внедрять инструменты для автоматического анализа кода и выявления потенциальных ошибок.
К примеру, система CodeAche сама анализирует код, оценивает нарушения, зависимости и уязвимости в исходном коде, предоставляя актуальное состояние программы. Можно выявить системные ошибки на ранних стадиях — до того, как техдолг приведет к необходимости переписывать проект с нуля.
CodeAche находит подозрительные, с точки зрения безопасности, фрагменты кода, которые могут потенциально содержать уязвимости. А так же показывает известные уязвимости безопасности, например, OWASP-TOP10, CVE, SANS-25, которые требуют немедленной реакции и исправления.

Обнаруженные уязвимости содержат подробное описание проблемы и рекомендации по устранению с примерами безопасного кода.
Возможности для бизнеса:

  • до 40% экономия бюджета на разработку;
  • получение информации о проекте;
  • принятие взвешенных управленческих решений на основании данных анализа;
  • разные уровни доступа к данным;
  • визуализация данных для нетехнических стейкхолдеров.

Возможности для руководителей:

  • обзор проблем;
  • планирование работы на основе найденных проблем и их критичности;
  • отслеживание задач во встроенном таск-трекере;
  • управление направлениями изменения техдолга в проекте;
  • оценка эффективности ИТ-персонала;
  • анализ активности разработчиков: скорость разработки, частота доставки кода, участие в code review.
Возможности для разработчиков:

  • код ошибки;
  • необходимые рекомендации по исправлению;
  • более 600 правил для разных языков. Код будет проверен качественно и быстро;
  • управление профилями.