Инструменты безопасности пугают. Они созданы для команд безопасности, которые уже знают жаргон и такие детали, как идентификаторы CWE. Но как быть с разработчиками? У нас есть инструменты для проверки уязвимых зависимостей и инструменты для проверки утечки секретов, но нам не хватает простых в применении советов по повышению безопасности нашего кода.
Хорошие новости! Существует бесплатный инструмент с открытым исходным кодом, который может просканировать ваш код, проверить его на наличие известных рисков и выдать вам список того, что нужно исправить. Все они отсортированы по степени опасности кода, исходя из того, насколько чувствительны данные и насколько опасной может быть утечка или взлом. Она называется Bearer.
Вот почему это очень круто:
Быстрое сканирование: большинство проектов занимает меньше минуты, а такие крупные проекты, как forem, gitlab и т. д., - от 3 до 10 минут. Ваши данные никогда не покидают ваш компьютер. Сканер с открытым исходным кодом считывает ваш код, но не отправляет его или метаданные на какие-либо серверы. Практический совет: Каждое срабатывающее правило показывает, где в вашем коде проблема, и дает ссылку на документацию о том, как ее улучшить.
TLDR: В итоге рабочий процесс выглядит следующим образом:
bearer scan /your-project.
Вы можете запустить это локально или в рамках CI/CD, и каждый раз вы будете получать обобщенный отчет. Давайте приступим.
Установка Bearer
В документации есть полный список способов установки Bearer, но самые распространенные - это использование Brew или curl.
Homebrew:
brew install Bearer/tap/bearer.
Curl:
curl -sfL https://raw.githubusercontent.com/Bearer/bearer/main/contrib/install.sh | sh.
Запустите первое сканирование
Теперь перейдите к проекту, который вы хотите просканировать, и выполните команду scan.
bearer scan .
Приложение просканирует ваш проект в несколько этапов. Сначала оно обнаруживает и классифицирует конфиденциальные типы данных, а затем отправляет их в тот тип отчета, который вы используете. По умолчанию используется отчет ”Безопасность”, который показывает все риски безопасности, найденные в вашей кодовой базе, путем проверки на соответствие набору “Правил”.
Вы получаете сводку, которая выглядит примерно так:
107 проверок, 12 неудач, 6 предупреждений CRITICAL: 0 HIGH: 1 (CWE-798) MEDIUM: 11 (CWE-201, CWE-209, CWE-313, CWE-315, CWE-319, CWE-326, CWE-331, CWE-532, CWE-539) НИЗКИЙ: 0 ПРЕДУПРЕЖДЕНИЕ: 6 (CWE-312)
Кроме того, каждый сбой и предупреждение показывают, где он произошел, и содержат ссылку на документацию о том, как устранить проблему.
MEDIUM: Sensitive data in a JWT detected. [CWE-315] https://docs.bearer.com/reference/rules/ruby_lang_jwt Чтобы пропустить это правило, используйте флаг --skip-rule=ruby_lang_jwt Файл: lib/jwt.rb:6 3 JWT.encode( 4 { 5 id: user.id, 6 email: user.email, 7 class: user.class, 8 }, 9 nil, ... 11 )
Эти правила взяты из топ-10 OWASP, популярных CWE и некоторых общих лучших практик сообщества appsec. Это быстрый способ получить вторую пару глаз на ваш код - особенно если вы не являетесь экспертом по безопасности.
Проверьте
Это большая просьба - включить что-то в ваш конвейер или поток тестирования, но мне очень нравится использовать это в качестве разового сканирования, когда я создаю что-то новое. Что-то вроде линтинга, но для безопасности. Сейчас основная проверка безопасности поддерживает кодовые базы ruby и JS/TS. Попробуйте - если хотите, можете использовать наше тестовое репо. Дайте нам знать, что вы думаете, и если есть что-то, что вы хотели бы видеть добавленным, откройте вопрос на GitHub.