Все мы знаем, как важно развиваться с ориентацией на клиента, надежность или безопасность.
На самом деле, чтобы сформировать образ мышления в определенной области, нужно время и усилия.
В такой обширной теме, как безопасность приложений, а также в той, с которой разработчики, время от времени сталкиваются, нужно больше, чем просто воля, чтобы изучить и сохранить наш код в безопасности.
Нам нужны хорошие инструменты.
Ранее мы уже рассматривали некоторые из них:
🦟 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 стоит фантастическое сообщество, а качество инструмента и документации впечатляет.
Заключение
Если вы использовали какой-либо из этих инструментов, я хотел бы услышать ваш опыт работы с ними, а также, если у вас есть другие варианты, которые вы сочли бы полезными!