NVD або OWASP Dependency-Check - пошук вразливостей в ваших NPM пакетах

Коли ваш проект доходить до якогось етапу, то вам треба потурбуватися про його безпеку. Звістно, не існує захисту, який би хакери не змогли би обійти. Але захиститися хоб від базових вразливостей потрібно навіть маленьким проектам. 

Сьогодні я розповім про NVD,та інструмент для його використання OWASP Dependency-Check. Це інструменти, які анлізують залежності, та встановлені пакети в вашому проекті на предмет вразливостей. Фактично OWASP шукає в базі NVD пакети, які ви використовуєте в вашому коді, і які мають вразливості. 

Встановлення

Рекомендую використовувати brew:

brew install dependency-check 

Після встановлення вам потрібно отримати API ключ NVD. Можна і без нього, але швидкість тесту збільшиться до 10 разів. Враховуючи те, що ключ безкоштовний, рекомундую його отримати, для цього перейдіть на сторінку запиту ключа: https://nvd.nist.gov/developers/request-an-api-key

Вказуєте свою почту, та рекомендую обирати Academia (для навчання), в цьому ключі начебто нема обмежень.

Далі після того, як лист прийде вам на пошту, і ви отримаєте апі ключ, вам буде потрібно його вказати. Тут є 2 варіанта, перший - це вказувати ключ що разу, коли ви виконуєте пошук. Або вказати його одноразово для всієї системи:

echo 'export NVD_API_KEY=тут_твій_ключ' >> ~/.bashrc  # Для Bash
echo 'export NVD_API_KEY=тут_твій_ключ' >> ~/.zshrc   # Для Zsh (macOS)

Після чого ребутніть термінал командою:

source ~/.bashrc # Для баш
source ~/.zshrc # Для мак

Фактично модуль считує ключ з env змінної NVD_API_KEY, тому ви можете вказати ключ навіть в докер енв, або в package.json в scripts.

Як тестувати OWASP Dependency-Check

В папкці вашого проекту вказуєте шлях для yarn.lock або package-lock.json.

Якщо ключ не вказаний глобально:

dependency-check --scan yarn.lock --format HTML --out report.html --nvdApiKey твій_ключ

Якщо ключ вказаний

dependency-check --scan yarn.lock --format HTML --out report.html

Модуль створить файл report.html, в якому надать звіт про всі встановлені модулі, а токож вкаже на всі відомі вразливості в ваших модулях.

Тестування залежності перший раз буде відбуватися дуже довго, тому що NVD буде завантажено локально на ваш пк, а база може займати декілька гігабайт.

Але настільке довге оновлення буде тільки при виході нової бази. У мене перше встановлення зайняло близько 50 хвилин.

Після того як завантаження бази завершиться, то кожен скан буде відбуватися за декілька секунд:

На виході ви отримаєте звік в форматі HTML приблизно на 10-20 екранів, який буде виглядати приблизно так, в ньому буде показаний список пакетів, та список проблем в ціх пакетах, а також всі відомі проблемні участки коду, які мають вразливості. На першому екрані у вас буде показано список проблемних пакетів, та кількість проблем в них.

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

В деяких випадках будуть показані навіть участки коду, та приклади вирішення проблем:

Заключення

Як висновок NVD та OWASP це дуже потужні інструменти, які можуть допомогти вам виявити явні вразливості. Але в більшость випадків звісно ніхто з вас не буде правити сторонні пакети. Ви будете чекати оновлень цих пакетів, з якими скоріш за все ці проблеми будуть виправлені. Так навіщо це тоді потрібно? Тому що багато розробників встановлюють мертві пакети, у яких багато дірок, і вже ніколи не буде оновлень. NVD допомагає виявити такі пакети, щоб виправити їх, або видалити їх.