Что помогает разработчику писать безопасный код: обзор инструментов

от автора

Современное производство программного обеспечения — сложный процесс, от разработчика требуется не только писать код, но и справляться с целым комплексом сопутствующих задач: отслеживать изменения, проводить тестирование, соблюдать стилистические правила и внутренние стандарты, учитывать безопасность и применять best practices по обеспечению ИБ уже во время написания кода.

Но есть и хорошие новости. Разработчику доступно большое число инструментов, которые упрощают труд: от линтеров до анализаторов и систем автоматизированного тестирования — все они встраиваются в среду разработки и помогают решать сложные задачи, не отвлекаясь от творческой части работы. В этой статье я, Евгений Иляхин, архитектор процессов безопасной разработки в Positive Technologies, как раз расскажу о крайне полезных инструментах, которые автоматизируют рутину и повышают качество кода, позволяя программисту сосредоточиться на разработке новой фичи или поиске оптимального решения.

Традиционно за безопасность отвечают AppSec- и DevSecOps-специалисты, однако важно вовлечь самих разработчиков в процесс обеспечения безопасности, так как отправка кода на тот же статический анализ каждый раз требует значительных ресурсов, в то время как редкие проверки могут привести к большому количеству пропущенных уязвимостей и большому числу задач по исправлению дефектов в дальнейшем. Чтобы решить эту проблему, разработчики могут использовать современные инструменты, которые позволяют им проводить локальные проверки качества кода, выявлять и исправлять уязвимости до коммита. Эти инструменты интегрируются в среду разработки и позволяют автоматизировать проверки, соблюдать стандарты безопасности и повысить уровень защищенности разрабатываемого ПО. Такой подход обеспечивает быструю обратную связь, позволяя разработчикам немедленно получать уведомление о выявленных проблемах и исправлять их на раннем этапе разработки. Кроме того, затронем несколько решений класса test-time-проверок, позволяющих проводить выборочные проверки уже готовых приложений вне границ пайплайна, не оказывая влияния на процесс разработки. О них и поговорим ниже.

SonarLint

SonarLint — это бесплатное расширение для IDE (таких как Visual Studio Code, IntelliJ IDEA, Eclipse) от Sonar с открытым исходным кодом, которое помогает разработчикам находить и устранять проблемы непосредственно во время написания кода. Плагин анализирует код, выявляя стилистические ошибки, дублирование, несоответствия правилам кодирования и другие недостатки, которые могут сделать код менее читаемым, понятным и поддерживаемым. SonarLint уведомляет разработчиков о выявленных проблемах, часто предлагая решения или советы по их исправлению. Проблемы подсвечиваются прямо в коде, а также отображаются в панели PROBLEMS.

Демонстрация панели со списком проблем

Демонстрация панели со списком проблем

SonarLint также предоставляет в контекстном меню дополнительную информацию о проблемах, включая описания, примеры и ссылки на лучшие практики.

Демонстрация информации о выявленных проблемах

Демонстрация информации о выявленных проблемах

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

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

SonarLint поддерживает множество языков программирования, включая Java, C#, JavaScript, Python, PHP, C, C++, Go и другие.

SonarLint может работать как автономно, так и в сочетании с инструментом статического анализа SonarQube. Второй вариант более предпочтителен, поскольку SonarQube позволяет создавать новые правила и связывать их с каждым языком программирования, в то время как SonarLint использует лишь набор встроенных правил.

Плагин Semgrep

Semgrep — плагин для IDE (поддерживает интеграцию с Visual Studio Code и IntelliJ IDEA), который позволяет получать информацию о потенциальных ошибках и уязвимостях, а также соблюдать стандарты кода во время его написания. Semgrep интегрируется в качестве pre-commit-проверки, позволяя сканировать код перед каждым коммитом в репозиторий. Это дает возможность разработчикам быстро исправлять проблемы, предотвращая попадание небезопасного кода в производственную среду.

Установка и запуск Semgrep

Установка и запуск Semgrep

Плагин Semgrep отличается своей гибкостью и удобством использования. Он прост в изучении и использовании благодаря собственному языку паттернов и наличию готовых правил сканирования, а функция Аutofix позволяет автоматически исправлять некоторые найденные ошибки, применяя предлагаемое самим инструментом решение из готовых правил. Это делает Semgrep доступным даже для разработчиков, не имеющих глубоких знаний в области безопасности. В нем также можно настроить свои правила сканирования в соответствии с конкретными требованиями проекта, в том числе добавить исключения и уровни опасности уязвимостей.

Демонстрация редактирования правил плагином Semgrep

Демонстрация редактирования правил плагином Semgrep

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

Демонстрация проверки зависимостей плагином Semgrep

Демонстрация проверки зависимостей плагином Semgrep

Semgrep поддерживает сканирование кода на разных языках, включая JavaScript, Python, Go, C++, Java, PHP, Ruby, C# и другие.

Сам же Semgrep — это полноценный статический анализатор с открытым исходным кодом, который использует собственный язык паттернов для определения правил сканирования кода. Благодаря анализу семантики и контекста кода Semgrep проводит более гибкое сканирование, выявляя ошибки и уязвимости. Например, он способен обнаружить SQL-инъекцию даже без явного присутствия ключевых слов SQL, распознавая паттерн, похожий на атаку, и предупреждая разработчика о возможной уязвимости. Для максимальной эффективности Semgrep может быть внедрен в процесс CI/CD.

Плагин PT AI

Еще один плагин для IDE (поддерживает интеграцию с Visual Studio Code и IntelliJ IDEA) — PT Application Inspector.

Демонстрация запуска сканирования

Демонстрация запуска сканирования

Плагин проводит локальные проверки исходного кода на устройстве разработчика до коммита в Git, выявляя уязвимости, недокументированные функции и секреты (конфиденциальные данные, например креды) в коде по мере его написания, а также проверяя конфигурационные файлы с точки зрения безопасности. Благодаря встроенным модулям SCA плагин обнаруживает не только уязвимости исходного кода и недостатки конфигурационных файлов, но и уязвимые сторонние компоненты и библиотеки, используемые при разработке приложений.

Демонстрация результатов сканирования плагином PT AI

Демонстрация результатов сканирования плагином PT AI

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

Демонстрация информации об уязвимости в плагине PT AI

Демонстрация информации об уязвимости в плагине PT AI

Плагин позволяет прямо в среде разработки управлять уязвимостями, устанавливая их статусы, отмечая ложные срабатывания, подтверждая реальные проблемы, а также фильтруя результаты (например, отмечая ложные срабатывания или подтверждая реальные проблемы).

Демонстрация управления уязвимостями в плагине PT AI

Демонстрация управления уязвимостями в плагине PT AI

Инструмент может сравнить результаты двух сканирований в рамках проекта при повторном сканировании и наглядно показать разницу.

Демонстрация сравнения результатов сканирования плагином PT AI

Демонстрация сравнения результатов сканирования плагином PT AI

Плагин работает автономно, используя те же модули анализа, что и энтерпрайз-решение PT Application Inspector, но может использоваться совместно с ним. Интеграция позволяет нескольким членам команды одновременно работать с уязвимостями и их статусами в IDE и веб-интерфейсе PT AI Enterprise Edition, тем самым повышая безопасность кода. Статусы обнаруженных уязвимостей синхронизируются автоматически, и все члены команды могут оценить текущий уровень угрозы.

Плагин PT AI поддерживает языки программирования C#, Go, Java, JavaScript, Kotlin, PHP, Python, Ruby, SQL и TypeScript.

Gitleaks

Gitleaks — это open-source-инструмент, который используется для поиска потенциальных секретов в исходном коде и Git-репозиториях. Инструмент сканирует файлы и код на наличие секретов, таких как API-ключи, токены доступа, пароли, ключи SSH, данные кредитных карт, а также других типов конфиденциальной информации, например личных данных пользователей, номеров телефонов и адресов электронной почты. Обнаруживая секреты в коде, которых там быть не должно, Gitleaks предотвращает их публикацию, предупреждая разработчика о потенциальных проблемах, которые могут привести к утечке конфиденциальных данных и другим серьезным последствиям.

Запуск и результаты сканирования с помощью Gitleaks

Запуск и результаты сканирования с помощью Gitleaks

Gitleaks использует несколько механизмов для поиска секретов. Он анализирует код, используя регулярные выражения, чтобы найти известные форматы секретов, например строки, начинающиеся с secret или password. Кроме того, Gitleaks использует машинное обучение, чтобы выявлять новые паттерны и форматы, которые могут указывать на наличие секретов.

Gitleaks используется в качестве pre-commit hook, то есть запускается перед каждым коммитом, сканируя файлы на наличие секретов и блокируя коммит, если обнаруживает опасные данные. Это гарантирует, что секреты не попадут в репозиторий.

Git-secrets

Git-secrets — еще один инструмент с открытым исходным кодом, предназначенный для обнаружения секретов. Как и Gitleaks, он помогает разработчикам предотвратить случайное попадание секретов (например, API-ключей, токенов доступа, паролей) в репозитории Git.

Git-secrets работает как pre-commit hook. Это означает, что он запускается перед каждым коммитом и проверяет файлы на наличие секретов, блокируя коммит, если таковые обнаружены.

Запуск и результаты сканирования с помощью Git-secrets

Запуск и результаты сканирования с помощью Git-secrets

Функциональность Git-secrets более ограничена, чем у Gitleaks, так как он использует только набор регулярных выражений для поиска секретов, в то время как Gitleaks применяет более продвинутые методы. Тем не менее в некоторых случаях использованию Git-secrets может быть отдано предпочтение из-за его следующих преимуществ:

  • простота установки и настройки;

  • низкие системные требования;

  • скорость сканирования;

  • гибкая интеграция с Git.

Таким образом, если вам нужен простой и быстрый инструмент для предотвращения коммита секретов в Git, Git-secrets может быть отличным выбором.

Trivy Secret Scanning

Trivy Secret Scanning — это часть инструмента Trivy, предназначенная для обнаружения секретов, таких как токены API, ключи доступа и пароли, утечка которых может представлять угрозу безопасности проекта. Trivy Secret может сканировать различные объекты, включая конфигурационные файлы и Docker-образы. Trivy Secret Scanning имеет набор встроенных правил для сканирования секретов, которые можно расширить или, наоборот, отключить, если нужна более быстрая проверка.

Сам по себе Trivy — это многофункциональный инструмент с открытым исходным кодом, предназначенный для выявления уязвимостей в различных программных компонентах: образах контейнеров, файловых системах и зависимостях. Помимо сканирования секретов, разработчики могут использовать Trivy для других типов pre-commit-проверок, таких как сканирование уязвимостей в зависимостях и образах контейнеров. Однако Trivy не блокирует коммиты или уязвимые компоненты самостоятельно. Вместо этого он предоставляет информацию о найденных уязвимостях и рекомендации по их исправлению. Эта информация помогает разработчику быстро оценить степень опасности и принять решение о дальнейших действиях.

Результаты сканирования образа

Результаты сканирования образа
Результаты сканирования файловой системы

Результаты сканирования файловой системы

Внедрение Trivy Secret Scanner также может осуществляться различными способами. Существуют плагины IDE, также можно настроить Git hooks, запускающие проверку при каждом коммите, что гарантирует сканирование кода перед отправкой его в репозиторий. Кроме того, возможно внедрение как Trivy Secret Scanning, так и других модулей Trivy в систему CI/CD-пайплайн, что позволит автоматизировать проверки на всех этапах разработки.

PT BlackBox Scanner

PT BlackBox Scanner — это открытое решение для динамического анализа веб-приложений, разработанное компанией Positive Technologies. Сервис предоставляется в виде облачного решения со свободным доступом, что позволяет проводить отдельные проверки готового приложение без привязки к процессу разработки. Чтобы воспользоваться PT BlackBox Scanner, вам не нужно устанавливать какое-либо программное обеспечение или настраивать сложные конфигурации. Достаточно ввести доменное имя веб-ресурса на официальном сайте сервиса, и PT BlackBox Scanner автоматически проведет анализ, имитируя реальные атаки на ваше приложение.

Окно с запуском сканирования

Окно с запуском сканирования

Сервис выявляет различные типы уязвимостей, которые могут быть использованы злоумышленниками для получения несанкционированного доступа к данным, нарушения целостности приложения или даже установления полного контроля над ним. PT BlackBox Scanner не ограничивается только сканированием самого веб-приложения, но также проводит анализ его периметра, выявляя поддомены и открытые порты, которые могут быть использованы для атак.

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

Результаты сканирования с помощью PT BlackBox Scanner

Результаты сканирования с помощью PT BlackBox Scanner

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

OWASP ZAP

OWASP ZAP (Zed Attack Proxy) — еще один бесплатный инструмент с открытым исходным кодом для сканирования веб-приложений. Он функционирует как прокси-сервер, перехватывая весь трафик между браузером и веб-приложением, анализируя его и выявляя уязвимости.

Запуск сканирования с помощью OWASP ZAP

Запуск сканирования с помощью OWASP ZAP

OWASP ZAP предлагает гибкие варианты использования. Он может проводить сканирование по требованию, его необязательно встраивать в конвейеры CI/CD. Это особенно удобно, когда нужно быстро проверить безопасность приложения или отдельных его компонентов. Кроме того, OWASP ZAP интегрируется с популярными IDE, такими как Visual Studio Code и IntelliJ IDEA, предоставляя плагины для запуска сканирования прямо из среды разработки. Это позволяет специалистам выявлять и исправлять уязвимости еще на ранних этапах создания приложения.

Инструмент предоставляет разнообразные методы сканирования, включая активное и пассивное, а также ручное сканирование, которое позволяет проводить более детальный анализ с использованием специальных инструментов и техник. OWASP ZAP может обнаружить различные типы уязвимостей, которые могут быть использованы злоумышленниками, например, для SQL-инъекции, межсайтового скриптинга (XSS), обхода аутентификации.

Окно с пайплайном сканирования

Окно с пайплайном сканирования

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

Результаты сканирования с помощью OWASP ZAP

Результаты сканирования с помощью OWASP ZAP

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

Мы представили лишь небольшой список инструментов из множества доступных (а их тысячи). Призываем вас поделиться своим опытом и дополнить его, рассказав о том, какими инструментами пользуетесь вы.

Однако всегда стоит помнить: сами по себе инструменты не могут обеспечить безопасность. Ключевым фактором являются процессы и люди. Только при пересечении трех элементов — инструментов, процессов и компетенций — можно говорить о грамотном внедрении DevSecOps, AppSec.

Евгений Иляхин

Архитектор процессов безопасной разработки, Positive Technologies


ссылка на оригинал статьи https://habr.com/ru/articles/891400/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *