🔬 5 инструментов разработчика для обнаружения и исправления уязвимостей

Обзоры

Все мы знаем, как важно развиваться с ориентацией на клиента, надежность или безопасность.

На самом деле, чтобы сформировать образ мышления в определенной области, нужно время и усилия.

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

Нам нужны хорошие инструменты.

Ранее мы уже рассматривали некоторые из них:

🦟 11 интересных инструментов для аудита и управления качеством кода

🐛 Как установить инструмент проверки кода SonarQube на CentOS

🐳 Анализ кода с помощью SonarQube на Docker

Далее мы рассмотрим еще 5 инструментов, которые помогают обнаруживать проблемы с безопасностью и дают советы по их устранению.

Что у них общего, так это сочетание следующих функций:

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

Сканирование зависимостей

Своевременное обновление зависимостей – одна из основ уязвимостей в вашем коде.

Ранее мы рассмотрели bandit,safety и конечно Dependency Check:

OWASP DependencyCheck – обнаруживает публично раскрытые уязвимости в приложениях

Есть еще два инструмента, которые упрощают процесс поиска проблем с зависимостями , – это «dependabot» и «renovate».

1. Dependabot

Dependabot – теперь это собственное решение Github – имеет простой и понятный рабочий процесс: автоматически открывет пулл реквесты для новых версий зависимостей и предупреждает об уязвимых зависимостях.

Dependabot также будет четко различать PR, связанные с безопасностью, и обычные обновления зависимостей, отмечая [Security] в заголовке и метке, а также включая журнал изменений исправленных уязвимостей.

Несмотря на то, что Dependabot настраивемый, он включает в себя основные параметры, такие как возможность устанавливать частоту обновлений, настраиваемые метки ( лейблы), назначение ревьюверов.

И поскольку все мы знаем, каково это – пытаться обновиться только для того, чтобы получить PR-отчет о 20+ тестовых неудачах, одна из классных функций – возможность исключить те зависимости, которые, как вы знаете, имеют критические изменения, на которые вы просто не можете выделить время.

Конфигурация YAML относительно небольшая, и она не беспокоит так сильно, как, например в инфраструктурных проектах.

version: 2
updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    labels:
      - "dependencies"

Отличительной чертой Dependabot является то, что он поддерживает 15 языков, включая Terraform, Rust и Github Actions.

Чтобы включить Dependabot для обновлений версий, добавьте в репозиторий файл independentabot.yml, затем перейдите в Settings → Security & Analysis и включите обновления безопасности Dependabot.

2. Renovate

Как и Dependabot, Renovate – это приложение GitHub или CLI, которое отслеживает ваши зависимости и открывает пулл реквесты при появлении новых.

Хотя он поддерживает меньше языков, чем Dependabot, главное преимущество Renovate в том, что он чрезвычайно настраиваемый.

Вы когда-нибудь хотели написать “расписание”: “в первый день недели” в своих конфигах !?

Что ж, Renovate позволяет вам это делать!

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

Например, вы можете автоматически объединить незначительные обновления devDependencies.

"packageRules": [
    {
      "depTypeList": ["devDependencies"],
      "updateTypes": ["minor"],
      "automerge": true
    }
  ]

 

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

Настройка Renovate заключается в установке размещенного приложения и его настройке путем добавления файла Renovate.json в корень репозитория.

Вы также можете установить и запустить инструмент Renovate CLI, чтобы получать отзывы обо всех ваших коммитах.

Анализаторы кода

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

Не говоря уже о том, что снижения чувства беспокойства при отгрузке кода сильно влияет на скорость разработки, владение и позволяет нам спать немного лучше по ночам 😴.

Ранее мы не рассматривали следующие инструмент – это Snyk, GitGuardian и Webhint.

3. Snyk

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

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

Snyk – это, по сути, набор продуктов для поиска и исправления уязвимостей в ваших зависимостях, коде и контейнерах.

Продукт с открытым исходным кодом (Snyk Open Source Security Management) очень похож на Dependabot и Renovate и помогает выявлять и исправлять уязвимые зависимости.

Snyk использует семантический анализ для обнаружения ошибок безопасности и производительности.

И в создаваемом им отчете есть чему понравиться.

С каждой обнаруженной уязвимостью вы получаете подробное объяснение проблемы, потока данных, а также анализ исправления и способов предотвращения ее в будущем, что дает отличный опыт обучения безопасности.

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

Snyk Container позволяет разработчикам находить уязвимости в образах контейнеров и приложениях Kubernetes.

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

4. GitGuardian

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

Так что, если это звучит пугающе или вам когда-либо приходилось работать над инцидентом из-за утечки секретов или бросать все, чтобы сбросить свои учетные данные, вам действительно понравится GitGuardian.

GitGuardian – это, по сути, сервис для автоматического обнаружения и исправления секретов в вашем коде.

Он интегрируется с Github и работает как с общедоступными, так и с частными репозиториями, а также с хуками git.

Созданный как инструмент, ориентированный на разработчиков, GitGuarding также может быть интегрирован с рабочим процессом CI/CD для получения обратной связи по каждому коммиту.

Еще одна важная функция – это интеграция со Slack/Discord, PagerDuty, которая позволяет разработчикам оставаться в курсе предупреждений безопасности.

Также подвергается проверке все, даже когда секреты выглядят достоверными, а не только test1234.

5. Webhint

На самом деле Webhint – это не просто инструмент безопасности, это мощный фреймворк!

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

Он предназначен для разработчиков и абсолютно бесплатен.

 

{
    "connector": {...},
    "formatters": [...],
    "hints": {
        "no-vulnerable-javascript-libraries": ["error", {
            "severity": "low|medium|high"
        }],
        ...
    },
    ...
}

С точки зрения безопасности – поисковый робот смотрит не только на код, но и на заголовки, что невероятно полезно.

Наряду с заголовками, он обнаружил проблему с одним из моих атрибутов rel для ссылок, чего не заметил Snyk.

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

Например, если вам интересно, почему вышеперечисленное не удалось и должно быть исправлено, вы можете прочитать об этом!

Webhint поставляется как решение через браузер и расширением VScode, а также с интерфейсом командной строки, который может быть включен в пайплайеы CI/CD, поэтому он интегрируется в рабочий процесс разработчика и обеспечивает обратную связь на нескольких уровнях.

В общем, за Webhint стоит фантастическое сообщество, а качество инструмента и документации впечатляет.

Заключение

Если вы использовали какой-либо из этих инструментов, я хотел бы услышать ваш опыт работы с ними, а также, если у вас есть другие варианты, которые вы сочли бы полезными!

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