👮‍♂️🔐🦹‍♀️

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

NPM предоставляет инструмент для аудита уязвимостей в проектах Node.js, который представляет собой команду npm audit, которая позволяет выполнять сканирование и устранять проблемы (в большинстве случаев). TeamCity — это инструмент CI, среди огромного списка функций три — возможность сообщать о проблемах в исходном коде проекта, которые называются проверки кода.

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

1. Аудит НПМ

NPM проделал большую работу, внедрив проверку уязвимостей в экосистему Node.js. Некоторое время назад они купили Node Security Project, несколько коммерческий инструмент, специализирующийся на проверке уязвимостей в инфраструктуре Node.js. Чуть позже в NPM появилась команда audit. Он проверяет зависимости пакетов на наличие уязвимостей безопасности, сообщает об уязвимых пакетах и ​​предоставляет исправления, когда они доступны.

https://docs.npmjs.com/auditing-package-dependencies-for-security-vulnerabilities

2. Проверка кода TeamCity

TeamCity предоставляет отличный способ сообщать о проблемах, обнаруженных в исходном коде продукта, называемый Code Inspection, который поддерживает внешних репортеров. Это также позволяет настраивать условия сбоя сборки в зависимости от количества проверок.

+ немного клея = 🎉

Чтобы использовать отчет об аудите уязвимостей в TeamCity, я создал пакет npm, который берет вывод JSON команды npm audit и преобразует его в проверки TeamCity: https://www.npmjs.com/package/npm-audit-reporter- тимсити. Это прямой преемник предыдущего репортера аудита безопасности, созданного для NSP (https://www.npmjs.com/package/nsp-reporter-teamcity), но поскольку NSP был закрыт в конце 2018 года, я решил создать второе поколение репортеров.

Установка/использование

Репортер генерирует служебные сообщения TeamCity для использования с раннером командной строки, поэтому использование просто как 1–2–3:

  1. Установите его как зависимость проекта
npm i --save-dev npm-audit-reporter-teamcity

2. Добавьте скрипт npm для запуска во время сборки.

"audit:ci": "npm audit --json|npm-audit-reporter-teamcity"

3. Настройте шаг сборки раннера командной строки для установки зависимостей проекта и запуска скрипта.

npm install
npm run audit:ci

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

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

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

Вот и все. Быть безопасным!