От контейнеров до кода: инструменты для поиска уязвимостей на все случаи
Всем привет
Меня зовут Сергей. Работаю в небольшой компании. Помимо прочих обязанностей, также анализирую код и docker-образы, написанные нашими разработчиками, на предмет различных уязвимостей. В этой статье хотел бы поделиться нашими подходами и open-source инструментами, которыми я использую в своей работе.
Быть может кто-то найдет что-то полезное или новое.
Введение
В этой статье я расскажу про семь инструментов для сканирования уязвимостей, которыми сам регулярно пользуюсь. Каждый из них хорош по-своему: кто-то вылавливает баги в Python-коде, а кто-то проверяет контейнеры, кто-то смотрит на лучшие практики в написании кода. Мы разберем, как эти инструменты установить, настроить и использовать.
Вы уверены, что ваш код безопасен? В современном мире одна маленькая уязвимость может стоить компании миллионов или, что хуже, репутации. Вспомните историю с Log4j — казалось бы, мелкая библиотека, а сколько шума наделала из-за критической уязвимости! Для разработчиков и компаний поиск слабых мест в коде, зависимостях и контейнерах — это не прихоть, а необходимость. Ведь лучше найти проблему самому, чем ждать, пока ею воспользуются хакеры.
Часть 1. Зачем нужны сканеры уязвимостей?
Представьте, что вы построили дом, но забыли проверить, нет ли в стенах трещин. Код и контейнеры — это ваш цифровой дом, а уязвимости — те самые трещины, через которые могут пролезть незваные гости. Без проверки кода или контейнеров вы рискуете столкнуться с утечкой данных, компрометацией системы или даже полной остановкой работы приложения. Один маленький баг, может превратиться в катастрофу.
Сканеры уязвимостей — это как охранная сигнализация: они помогают найти слабые места до того, как ими воспользуются злоумышленники. И поверьте, лучше потратить час на сканирование, чем неделю на объяснения, почему ваш сервис лег после атаки.
Выбор сканера уязвимостей — это как выбор машины: нужно, чтобы и ехала быстро, и не ломалась на первом повороте. Так на что же обращать внимание, чтобы не прогадать? Во-первых, посмотрите на поддерживаемые языки и платформы. Если вы пишете на Python, а инструмент заточен под Java, толку от него будет мало. Во-вторых, уточните, какие типы уязвимостей он ищет: код, зависимости, контейнеры или все сразу? Некоторые сканеры — настоящие "универсалы", а другие — узкие специалисты.
Не менее важна интеграция с CI/CD. Если инструмент не встраивается в ваш GitHub Actions или Jenkins, вы будете тратить часы на ручное сканирование, а это уже прошлый век. Обратите внимание на обновления базы данных уязвимостей — без свежих данных сканер пропустит новые угрозы, и вы останетесь беззащитны перед хакерами, которые, поверьте, спят и видят ваш устаревший софт. Также учитывайте удобство использования и стоимость: бесплатный инструмент — это здорово, пока он не выдает тонну ложных срабатываний.
Коммерческие решения мы затрагивать не будем, а сосредоточимся лучше на open-source проектах.
Часть 2.1 CVE-Bin-Tool
Краткое описание
CVE-Bin-Tool — это ваш маст-хэв детектив по поиску уязвимостей в бинарных файлах и зависимостях. Он сканирует исполняемые файлы и библиотеки, чтобы найти различные CVE. Оперативно обновляется. Правда собновлениями есть нюанс: основные сервера часто перегружены и обновляется приходится через зеркала или сканировать в оффлайн режиме.
Официальный гит - https://github.com/intel/cve-bin-tool.
Установка
pip install cve-bin-tool
Как вариант можно самому собрать из исходников
git clone https://github.com/intel/cve-bin-tool.git
cd cve-bin-tool
pip install .
После можно проверить
cve-bin-tool –version
Настройка
Предварительных настроек не требует. Дополнительно можно указать путь к базе данных уязвимостей или настроить формат вывода (JSON, CSV, HTML).
Сканирование
cve-bin-tool /path/to/dir
Полезные параметры командной строки
Параметр | Описание |
| Формат отчета |
| Сохранение отчета в файл |
| Проверять только файлы с расширениями .exe, .so, .dll и т.д. |
| Тихий режим (меньше вывода) |
| Фильтр по уровню серьезности |
Обновление базы данных
База данных загружается автоматически при запуске. База будет актуальной 24 часа, после потребуется обновить ее. Вот тут пожалуй и скрывается главный минус cve-bin-tool – нужно обновится.
Как я уже писал основные сервера часто загружены, а обновления могут весить много. Если кэш не обновлялся больше 24 часов, то при попытке отсканировать проект, софтина попытается обновится. Сервера лежат, обновление не проходит, сканер крашится.
Или вариант, понадобился нам OSV (Open Source Vulnerabilities) Maven – библиотека уязвимостей Maven. А она многовато весит. В итоге сканер опять отваливается.
Как обойти?
Можно сканировать в режиме оффлайн
cve-bin-tool –offline
Сканер выведет предупреждение, что базы не обновлялись больше 24 часов, но просканирует.
Можно попытаться обновится через зеркало
cve-bin-tool --update now --nvd json-mirror
Можно попытаться обновится вручную с сайта osv-vulnerabilities.storage.googleapis.com. Просмотреть все экосистемы можно тут osv-vulnerabilities.storage.googleapis.com/ecosystems.txt.
Команда для обновления (как вариант)
gsutil -m rsync -r gs://osv-vulnerabilities/Alpine ~/.cache/cve-bin-tool/osv/Alpine
Для каждой (почти для каждой) экосистемы есть файл all.zip
То есть gs://osv-vulnerabilities/Alpine/all.zip
Можно все выкачать архивом и после извлечь.
Как по мне, так самый оптимальный вариант это написать небольшой скрипт, который будет сначала запускать обычное сканирование, и если сканер лег, то перезапускать с флагом –offline.
Плюсы и минусы
Плюсы:
Простота установки и использования.
Поддерживает разные форматы вывода для отчетов.
Активное сообщество и открытый исходный код.
Минусы:
Частые проблемы с обновлением из-за перегруженных серверов.
Большие объемы данных для загрузки (например, для Maven).
Много ложных срабатываний — лучше перебдеть, чем недобдеть, но проверять вручную утомительно.
Бывает сложно настроить для работы с частными репозиториями.
Часть 2.2 Trivy
Краткое описание
Trivy — это универсальный open-source сканер уязвимостей, разработанный Aqua Security. Это один из самых популярных и универсальных инструментов в своей категории, поддерживающий:
Сканирование образов контейнеров (Docker, OCI)
Анализ зависимостей (OS пакеты, языковые пакеты)
Проверку инфраструктурного кода (IaC: Terraform, Kubernetes)
Сканирование репозиториев (Git репозитории)
Анализ секретов (утечки credentials)
Официальный гит - https://github.com/aquasecurity/trivy
Установка
sudo apt-get install wget apt-transport-https gnupg lsb-release
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/trivy.list
sudo apt-get update
sudo apt-get install trivy
После можно проверить
trivy --version
Настройка
Trivy поддерживает конфигурацию через файл .trivy.yaml.
Полезные параметры командной строки
Переменная | Описание |
| Путь к кэшу (по умолчанию ~/Library/Caches/trivy) |
| Отключить SSL проверки (не рекомендуется) |
| Таймаут операций |
| Тихий режим |
Сканирование
Сканирование Docker образа:
trivy image python:3.8
Сканирование файловой системы:
trivy fs --security-checks vuln,config,secret /path/to/dir
Сканирование репозитория:
trivy repo https://github.com/example/repo
Сканирование оффлайн:
trivy fs --skip-update -f table /path/to/dir
Сканирование оффлайн без секретов (скорость сканирования возрастает):
trivy fs --skip-update --scanners vuln -f table /path/to/dir
Обновление базы данных
Trivy автоматически обновляет базу данных при первом запуске. Для ручного обновления:
trivy --download-db-only
Плюсы и минусы
Плюсы:
Поддерживает сканирование контейнеров, ОС, зависимостей.
Быстрый и легкий, не перегружает систему.
Активное сообщество и интеграция с CI/CD.
Сканирует как код, так и готовый docker-образ.
Минусы:
Иногда выдает слишком много информации, приходится фильтровать.
Ложные срабатывания возможны, особенно на сложных конфигурациях.
Часть 2.3 Grype
Краткое описание
Grype — это мощный open-source инструмент для сканирования уязвимостей в программных компонентах, разработанный компанией Anchore. Это часть экосистемы Syft (генератор SBOM), специализирующаяся на:
Анализе образов контейнеров (Docker, OCI)
Проверке локальных файловых систем
Сканировании архивов и пакетов
Поддержке множества ОС и языков программирования
Официальный гит - https://github.com/anchore/grype
Установка
curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sudo sh -s -- -b /usr/local/bin
После можно проверить
grype version
Настройка
Grype поддерживает конфигурацию через .grype.yaml.
Полезные параметры командной строки
Параметр | Описание |
| Формат вывода (table, json, cyclonedx) |
| Сканировать конкретный файл/архив |
| Показывать только исправленные уязвимости |
| Группировать результаты по CVE |
| Завершать с ошибкой при указанных уязвимостях |
Сканирование
Сканирование Docker образа:
grype ubuntu:latest
Сканирование директории:
grype dir:/path/to/dir
Обновление базы данных
Grype автоматически обновляет базу при запуске. Для принудительного обновления:
grype db update
Плюсы и минусы
Плюсы:
Легкий и быстрый.
Поддерживает множество форматов (контейнеры, SBOM, архивы).
Отличная интеграция с CI/CD и другими инструментами Anchore.
Минусы:
Может быть излишне "болтливым" с ложными срабатываниями.
Сообщество поменьше, чем у некоторых конкурентов, вроде Trivy.
Часть 2.4 Bandit
Краткое описание
Bandit — это статический анализатор безопасности для Python-кода, разработанный OpenStack Security Project. Это инструмент для выявления распространенных уязвимостей безопасности в Python-приложениях, таких как:
Инъекции (SQL, командные и т.д.)
Использование небезопасных модулей (например,
pickle
)Проблемы с управлением доступом
Утечки чувствительных данных
Использование устаревших или небезопасных криптографических функций
Официальный гит - https://github.com/PyCQA/bandit
Установка
pip install bandit
После можно проверить
bandit --version
Как вариант можно самому собрать из исходников
Настройка
Bandit работает "из коробки", но можно настроить его поведение через файл конфигурации .bandit.yaml или .bandit.yml.
Полезные параметры командной строки
Параметр | Описание |
---|---|
| Список всех доступных тестов |
| Использовать предустановленный профиль |
| Запустить конкретные тесты (через запятую) |
| Пропустить определенные тесты |
| Формат вывода (txt, json, csv, custom) |
| Сохранить отчет в файл |
| Уровень детализации (i=info, ii=warning, iii=error) |
Сканирование
bandit -r /path/to/dir
или если файл один
bandit my_script.py
Обновление базы данных
Bandit не использует базу данных уязвимостей в классическом смысле, так как это инструмент статического анализа. Однако сам инструмент нужно держать в актуальном состоянии для новых правил и улучшений.
pip install --upgrade bandit
Плюсы и минусы
Плюсы:
Быстрый и легкий, не тормозит даже на больших проектах.
Специально для Python, глубоко понимает язык и его "подводные камни".
Хорошая документация и поддержка сообщества.
Минусы:
Ограничен только Python, для других языков бесполезен.
Может выдавать ложные срабатывания, особенно на сложных конструкциях.
Не ищет уязвимости в зависимостях, только в вашем коде.
Часть 2.5 Semgrep
Краткое описание
Semgrep — это мощный open-source инструмент для статического анализа кода (SAST) и ищет не только известные уязвимости (CVE), но и потенциальные ошибки, плохие практики и даже пользовательские паттерны. Он своего рода "лингвистический детектив" в мире кода.
Ключевые особенности:
Поддержка 20+ языков (Python, JavaScript, Java, Go, C#, PHP и др.)
Гибкие правила (простой синтаксис для создания собственных паттернов)
Быстрое сканирование (работает без полной компиляции кода)
Интеграция в CI/CD (GitHub Actions, GitLab CI и др.)
Предустановленные правила (1000+ готовых правил для безопасности и качества кода)
Официальный гит - https://github.com/semgrep/semgrep
Установка
pip install semgrep
После можно проверить
semgrep --version
Настройка
Semgrep использует файл .semgrep.yml для конфигурации.
Полезные параметры командной строки
Параметр | Описание |
---|---|
| Использовать правила (auto, p/security, p/python и др.) |
| Исключить файлы/директории |
| Специфичные файлы для сканирования |
| Фильтр по серьезности (INFO, WARNING, ERROR) |
| Отправка анонимной статистики (on/off) |
Сканирование
Сканирование с официальными правилами:
semgrep --config=auto /path/to/dir
Сканирование с кастомными правилами:
semgrep --config my_rules/ /src
Сканирование конкретного языка:
semgrep --config=p/python /src
Обновление базы данных
Правила обновляются автоматически при каждом запуске.
Плюсы и минусы
Плюсы:
Поддерживает множество языков и кастомные правила.
Быстрый, как молния, даже на больших проектах.
Активное сообщество и интеграция с CI/CD.
Минусы:
Требует времени на настройку правил для сложных случаев.
Иногда выдает ложные срабатывания, особенно на нестандартном коде.
Для новичков может показаться сложным из-за обилия опций.
Часть 2.6 Bearer
Краткое описание
Bearer — это современный open-source инструмент для статического анализа безопасности приложений (SAST). Он своего рода "охранник данных", специализирующийся на поиске уязвимостей, связанных с конфиденциальной информацией в коде. Bearer ищет такие утечки секретов, как API-ключи, пароли, токены, а также проблемы с обработкой персональных данных (GDPR, CCPA). Ключевые особенности:
Поддержка 7+ языков: Ruby, JavaScript/TypeScript, Java, Go, PHP, Python, C#
Обнаружение 120+ типов уязвимостей: SQL-инъекции, XSS, проблемы аутентификации и др.
Анализ конфиденциальных данных: Выявление утечек персональных данных (PII)
Compliance-проверки: Поддержка стандартов GDPR, HIPAA, PCI-DSS
Интеграция в CI/CD: Готовые решения для GitHub Actions, GitLab CI и др.
Официальный гит - https://github.com/Bearer/bearer
Установка
curl -sfL https://raw.githubusercontent.com/Bearer/bearer/main/contrib/install.sh | sh
После можно проверить
bearer --version
Настройка
Bearer работает "из коробки", но его также можно настроить его через файл конфигурации .bearer.yml.
Полезные параметры командной строки
Параметр | Описание |
---|---|
| Фильтр по серьезности (critical, high, medium, low, warning) |
| Формат отчета (json, yaml, csv, html) |
| Исключить директории из сканирования |
| Сканировать только определенные правила |
| Код завершения при нахождении уязвимостей |
Сканирование
Быстрое сканирование проекта:
bearer scan .
Сканирование с определенным уровнем серьезности:
bearer scan --severity=critical,high /path/to/dir
Обновление базы данных
Правила обновляются автоматически при каждом запуске.
Плюсы и минусы
Плюсы:
Специализируется на секретах и конфиденциальных данных, что делает его уникальным.
Прост в использовании, минимальная настройка.
Поддерживает интеграцию с CI/CD.
Минусы:
Ограничен поиском секретов, не ищет другие типы уязвимостей.
Может выдавать ложные срабатывания на тестовые данные.
Сообщество пока не такое большое, как у более универсальных инструментов.
Поддерживает только проекты с гитхаба
Часть 2.7 Graudit
Краткое описание
Graudit (Grep + Audit) — это легковесный инструмент для поиска уязвимостей в исходном коде с использованием регулярных выражений. Это скрипт на Bash, который использует grep для поиска потенциально опасных паттернов в коде, SQL-инъекций, XSS (межсайтовый скриптинг), жестко закодированные пароли.
Ключевые особенности:
Поддержка 15+ языков программирования (PHP, Java, Python, C/C++, JavaScript и др.)
50+ встроенных шаблонов для поиска распространённых уязвимостей
Простота использования и настройки
Не требует установки зависимостей (только Bash и grep)
Возможность добавления собственных правил
Официальный гит - https://github.com/wireghoul/graudit
Установка
git clone https://github.com/wireghoul/graudit.git
cd graudit
После можно проверить
grep --version
Настройка
Graudit не требует сложной настройки, но вы можете добавить свои сигнатуры (паттерны уязвимостей) в файлы базы данных, которые находятся в папке signatures
.
Полезные параметры командной строки
Параметр | Описание |
---|---|
| Указание языка (php, java, python и др.) |
| Рекурсивное сканирование директории |
| Только критические уязвимости |
| Игнорировать регистр |
| Подробный вывод |
| Показывать имя файла в выводе |
Сканирование
Сканирование файла:
graudit file.php
Сканирование директории:
graudit -d /path/to/code
Сканирование с указанием языка:
graudit -l python script.py
Поиск только критических уязвимостей:
graudit -c file.php
Обновление базы данных
Graudit не имеет автоматического механизма обновления базы уязвимостей, но его можно обновить просто скачав последнюю версию из репозитория.
Плюсы и минусы
Плюсы:
Очень легкий и быстрый, не требует сложной установки.
Поддерживает кастомные сигнатуры, что делает его гибким.
Работает на любых системах, где есть
grep
.
Минусы:
Выдает много ложных срабатываний, требует ручной фильтрации.
Выдает просто тонны сработок на относительно безопасный фронт.
Не такой умный, как современные SAST-инструменты, полагается на простые текстовые совпадения.
Сообщество небольшое, документация минимальна.
Это вам конечно не SonarQube, но в связке с остальными инструментами выдает хороший результат.
Часть 2.8 Horusec
Вы действительно думали, что их будет только семь? :)
Краткое описание
Horusec — это open-source инструмент для статического анализа безопасности (SAST) кода. Этот инструмент предназначен для выявления уязвимостей в исходном коде на ранних этапах разработки. Horusec ищет такие проблемы, как SQL-инъекции, XSS, жестко закодированные секреты, небезопасные криптографические алгоритмы и многое другое. Название кстати отсылает к египетскому богу Гору с его "всевидящим оком".
Поддержка 20+ языков программирования (JavaScript, Python, Go, Java и др.)
Сканирование Docker-образов на уязвимости
Анализ IaC (Terraform, Kubernetes manifests)
Обнаружение секретов (API-ключи, пароли в коде)
Интеграция с GitLab, GitHub Actions, Jenkins
Генерация отчетов в JSON, HTML, SonarQube-формате
Официальный гит - https://github.com/ZupIT/horusec
Установка
curl -fsSL https://raw.githubusercontent.com/ZupIT/horusec/main/deployments/scripts/install.sh | bash -s latest
После можно проверить
horusec version
Для полноценной устанвовки нужно еще установить docker-образ, однако на последних версиях самого dockera сканер работает нестабильно. На гитххабе даже видел ишью с этой проблемой. Автор посоветовал временно отключить привязку докера (--disable-docker), мол в скором времени все пофиксят, однако поддержка данного проекта заглохла. Поэтому юзаем как юзаем.
Настройка
Horusec работает сразу после установки, но его также можно настроить через файл конфигурации (.horusec-config.json
).
Полезные параметры командной строки
Параметр | Описание |
---|---|
| Игнорировать уязвимости определенной критичности |
| Сканировать историю Git (замедляет анализ) |
| Формат отчета ( |
Сканирование
horusec start -p "/path/to/code" \
--disable-docker \
--output-format=json \
--json-output-file="/path/to/report" 2>&1; then
еще пару полезных флагов
--information-severity=true
- будет выводить сведения типа INFO
--ignore-severity="LOW,MEDIUM,HIGH"
- будет игнорировать угрозы типа LOW
или MEDIUM
или HIGH
Обновление базы данных
Ну какое может быть обновление у проекта, который с 2022 не обновлялся?
Плюсы и минусы
Плюсы:
Поддерживает множество языков программирования (Go, JavaScript, Python и др.).
Интеграция с CI/CD пайплайнами для автоматизации.
Находит реального много "плохого" кода
Минусы:
Может выдавать ложные срабатывания, особенно на сложных проектах.
Не обновляется с 2022
Часть 2.9 Syft
Краткое описание
Как бонус
Syft — это инструмент командной строки от компании Anchore для генерации SBOM (Software Bill of Materials) — инвентаризации всех компонентов программного обеспечения, включая зависимости, библиотеки и метаданные. По сути это "детектив по инвентаризации".
Ключевые возможности:
Поддержка 20+ форматов пакетов (Docker, APK, DEB, RPM, Python Wheels, npm, Gem и др.)
Генерация SBOM в разных форматах (SPDX, CycloneDX, JSON)
Интеграция с Grype (инструмент для сканирования уязвимостей)
Работа с OCI-образами, файловыми системами и архивами
Поддержка CI/CD-интеграции (GitHub Actions, GitLab CI, Jenkins)
Официальный гит - https://github.com/anchore/syft
Установка
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sudo sh -s -- -b /usr/local/bin
После можно проверить
syft version
Настройка
Syft работает "из коробки", но его можно настроить через флаги командной строки или файл конфигурации (.syft.yaml
).
Форматы вывода
Формат | Описание | Пример команды |
---|---|---|
| SPDX в JSON |
|
| CycloneDX в XML |
|
| Собственный формат Syft |
|
| Табличный вывод (по умолчанию) |
|
Сканирование
Генерация SBOM для Docker-образа:
syft ubuntu:latest -o spdx-json > sbom.json
Анализ локальной файловой системы:
syft dir:/path/to/code --output table
Сканирование архива (tar, zip):
syft archive:app.tar.gz -o cyclonedx-json
Плюсы и минусы
Плюсы:
Отлично справляется с инвентаризацией ПО, особенно в контейнерах.
Поддерживает множество форматов и источников данных (Docker, OCI, файлы).
Активное сообщество и интеграция с другими инструментами, такими как Grype.
Минусы:
Может быть медленным при сканировании больших образов.
Требует дополнительных инструментов для полного анализа безопасности.
Часть 3. Небольшой вывод
Все сканеры устанавливаются быстро и легко, сканируют очень быстро, а запуск сканирования осуществляется одной командой. Можно написать скрипт на Bash для автоматизации запуска всех инструментов, а затем только просматривать отчеты, экономя время и силы.
Функционалы многих программ схожи и где-то пересекаются, что на самом деле очень хорошо. Это позволяет легко отсеивать ложные срабатывания, сравнивая результаты разных сканеров. Также, если один инструмент не успел обновить свою базу уязвимостей (или со стороны разработчика она не была обновлена), есть шанс, что другой сканер обнаружит свежую угрозу.
Понятное дело, об обнаружении 0-day уязвимостей речи не идет, однако SAST-сканеры способны существенно снизить вероятность возникновения таких атак в коде, выявляя потенциальные проблемы на ранних этапах разработки. Использование нескольких инструментов в связке позволяет закрыть большинство "слепых зон" и повысить общий уровень безопасности вашего проекта.
В итоге, выбор подходящего сканера или комбинации инструментов зависит от специфики вашего проекта, требований к безопасности и возможностей интеграции. Регулярное сканирование, обновление инструментов и анализ отчетов станут вашими верными союзниками в борьбе за безопасный код. Не стоит полагаться на один "волшебный" инструмент — разнообразие подходов и автоматизация проверок помогут вам быть на шаг впереди потенциальных угроз.
Ну и напоследов несколько рекомендаций по выбору сканера:
Если вы работаете с контейнерами и зависимостями:
Trivy — отличный выбор для быстрого и точного сканирования контейнеров, Kubernetes и зависимостей. Подходит для DevOps и CI/CD.
Grype + Syft — идеальная комбинация для инвентаризации (Syft) и анализа уязвимостей (Grype) в контейнерах. Рекомендуется для детализированных отчетов.
Если вы фокусируетесь на статическом анализе кода (SAST):
Semgrep — лучший выбор для гибкости благодаря кастомизации правил и поддержки множества языков. Подходит для больших команд и сложных проектов.
Bandit — если вы работаете исключительно с Python, это простой и быстрый инструмент для базового анализа.
Horusec — хороший вариант для команд, которым нужна поддержка множества языков и интеграция с CI/CD.
Если вы ищете узкоспециализированные инструменты:
CVE-Bin-Tool — подойдет для анализа бинарных файлов, если это ваш основной фокус.
Bearer — если приоритет на защите данных и поиске секретов в коде (например, API-ключей или паролей).
Если у вас ограниченные ресурсы или устаревшие проекты:
Graudit можно использовать как запасной вариант для простого анализа через сигнатуры, но он устарел и не рекомендуется для серьезных проектов.