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

42% разработчиков раз в месяц публикуют уязвимый исходный код, и только треть уязвимостей устраняется — исследование Tromzo. Программисты выполняют первостепенные задачи и обрабатывают большой объем информации, поэтому могут пропустить детали, влияющие на безопасность кода.
Почему возникают уязвимости
Уязвимости в исходном коде — это слабые места или ошибки, которые могут быть использованы злоумышленниками для атаки на ПО. Они наносят ущерб как отдельному продукту, так и всей инфраструктуре: нарушают технологические процессы и работу клиентских систем, позволяют украсть личные данные и денежные средства. «Тинькофф», например, запустил публичную программу по поиску ошибок и уязвимостей в своих сервисах за вознаграждение до 400.000 ₽.
В идеальном мире разработчик с первых строк написания кода заботится о безопасности продукта, а специалисты по информационной безопасности помогают улучшить программу. Но писать сразу чистый код, когда каждый день поступают ТЗ, — тяжело, а количество новых уязвимостей ежегодно увеличивается: в 2020 году — более 18.000, в 2021 году — свыше 20.000, а в 2022 году — 25.000 (данные National Vulnerability Database).
Причины возникновения уязвимостей в коде:
- Недостаточная обработка пользовательского ввода
- Отсутствие фильтров и неправильная проверка команд допускают внедрение вредоносного кода и SQL-инъекций.
- Уязвимости в сторонних библиотеках
- Отбор и обновление библиотек с помощью последних исправлений безопасности необходимы, чтобы слабые места в исходном коде не появлялись.
- Отсутствие проверок аутентификации
- Игнорирование проверок авторизации приводит к несанкционированному доступу к системе, где хакеры выполняют привилегированные операции без разрешений.
- Слабые точки в безопасности
- Использование стандартных паролей, хранение паролей в открытом виде, не безопасная передача данных и отсутствие шифрования данных — все это уязвимости.
- Уязвимости, связанные с памятью
- Переполнение буфера или использование нулевого указателя приводят к сбою продукта или возможности выполнения удаленного кода.
- Недостаточная обработка исключений и ошибок
- Ошибки, не обрабатывающиеся должным образом, открывают доступ злоумышленникам к информации о системе. Исключения используются для осуществления атак.
- Отсутствие экранирования входных данных
- Без валидации злоумышленник внедряет вредоносный код, который будет исполняться при обработке пользовательского ввода.
Примеры уязвимостей
Согласно отчету 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 правил для разных языков. Код будет проверен качественно и быстро;
- управление профилями.
Запишитесь на онлайн-демонстрацию CodeAche, где мы расскажем о тонкостях системы и ответим на вопросы о возможностях для вашего бизнеса.