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 для хеширования пароля, который ввел пользователь. Но одной хэш-функции недостаточно для защиты паролей, поскольку она уязвима для атак по словарю и атак по радужным таблицам.
Как устранить слабые места в коде
Все рекомендации в нашей статье на VC. Переходите по ссылке.
Один из вариантов — система CodeAche сама анализирует код, оценивает нарушения, зависимости и уязвимости в исходном коде, предоставляя актуальное состояние программы. Можно выявить системные ошибки на ранних стадиях — до того, как техдолг приведет к необходимости переписывать проект с нуля.
CodeAche находит подозрительные, с точки зрения безопасности, фрагменты кода, которые могут потенциально содержать уязвимости. А так же показывает известные уязвимости безопасности, например, OWASP-TOP10, CVE, SANS-25, которые требуют немедленной реакции и исправления.
Обнаруженные уязвимости содержат подробное описание проблемы и рекомендации по устранению с примерами безопасного кода.
Возможности для бизнеса:
- до 40% экономия бюджета на разработку;
- получение информации о проекте;
- принятие взвешенных управленческих решений на основании данных анализа;
- разные уровни доступа к данным;
- визуализация данных для нетехнических стейкхолдеров.
Возможности для руководителей:
- обзор проблем;
- планирование работы на основе найденных проблем и их критичности;
- отслеживание задач во встроенном таск-трекере;
- управление направлениями изменения техдолга в проекте;
- оценка эффективности ИТ-персонала;
- анализ активности разработчиков: скорость разработки, частота доставки кода, участие в code review.
Возможности для разработчиков:
- код ошибки;
- необходимые рекомендации по исправлению;
- более 600 правил для разных языков. Код будет проверен качественно и быстро;
- управление профилями.