
badkeys v0.0.20
Инструмент для поиска распространённых уязвимостей в криптографических открытых ключах
badkeys
Инструмент и библиотека для проверки криптографических открытых ключей на известные уязвимости
Что это?
badkeys проверяет открытые ключи в различных форматах на известные уязвимости. Веб-версия доступна на badkeys.info.
установка
badkeys можно установить через pip:
pip3 install badkeys
Возможно, вы захотите использовать виртуальное окружение. Подробнее о различных вариантах установки см. официальную документацию Python. Кроме того, вы можете напрямую вызывать ./badkeys-cli прямо из git-репозитория.
Вы можете найти обзор пакетов badkeys для дистрибутивов Linux и других операционных систем на Repology.
использование
Перед использованием badkeys необходимо загрузить данные блок-листа:
badkeys --update-bl
После этого вы можете вызывать badkeys и передавать файлы с криптографическими открытыми ключами в качестве параметра:
badkeys test.crt my.key
Он автоматически попытается определить формат файла. Поддерживаются открытые и закрытые ключи в формате PEM (как PKCS #1, так и PKCS #8), сертификаты X.509, запросы на подпись сертификата (CSR) и открытые ключи SSH. Некоторые тестовые ключи можно найти в каталоге tests/data.
По умолчанию badkeys выводит информацию только об уязвимых ключах, то есть если уязвимостей не найдено, вывод не создаётся. Параметр -a создаёт вывод для всех ключей.
Инструмент командной строки возвращает 0, если ключи были просканированы, ошибок не возникло и уязвимостей не обнаружено. Он возвращает 1 при ошибках приложения, 2, если какой-либо ввод не удалось просканировать (ошибки парсера, неподдерживаемые типы ключей, файлы без ключа), и 4, если был найден уязвимый ключ. Коды возврата можно комбинировать как битовую маску. (Например, 2|4=6 означает, что некоторые ключи были уязвимы, а некоторые не удалось просканировать.)
сканирование
badkeys может сканировать SSH- и TLS-хосты и автоматически проверять их открытые ключи. Это можно включить параметрами -s (SSH) и -t (TLS). По умолчанию SSH будет сканироваться на порту 22, а TLS — на нескольких портах для распространённых протоколов (https/443, smtps/465, ldaps/636, ftps/990, imaps/993, pop3s/995 и 8443, который часто используется как нестандартный https-порт).
Альтернативные порты можно задать с помощью --tls-ports и --ssh-ports.
Сканирование TLS и SSH можно комбинировать:
badkeys -ts example.org
Обратите внимание, что режимы сканирования имеют ограничения. Часто предпочтительнее использовать другие инструменты для сбора ключей TLS/SSH и сканировать их локально с помощью badkeys.
Для сканирования SSH требуется дополнительная зависимость paramiko.
Сканирование TLS не может обнаружить несколько сертификатов на одном хосте (например, ECDSA и RSA). Это ограничение функции ssl.get_server_certificate() в Python.
Модуль Python и API
badkeys также можно использовать как модуль Python. Однако в настоящее время программное обеспечение находится в стадии беты и API может регулярно меняться.
О проекте
badkeys написан Ханно Бёком.
Эта работа изначально финансировалась в 2022 году фондом Industriens Fond в рамках проекта CIDI (Cybersecure IOT in Danish Industry) и Центром информационной безопасности и доверия (CISAT) при IT-университете Копенгагена, Дания. В 2025/2026 годах badkeys поддерживался NGI0 Core Fund от NLnet.