
Библиотека для обнаружения известных секретов во многих веб-фреймворках

Чистая библиотека на Python для выявления использования известных или очень слабых криптографических секретов на различных платформах. Проект задуман как хранилище различных «известных секретов» (например, ключей машины ASP.NET, встречающихся в примерах из руководств), а также как независимый от языка слой абстракции для выявления их использования.
Определить, когда был использован «плохой секрет», обычно можно путём изучения некоторого криптографического продукта, в котором этот секрет применялся: например, cookie, подписанного алгоритмом хеширования с ключом. Всё может усложниться, когда вы углубляетесь в особенности реализации, присущие каждой платформе, — именно это и призвана упростить данная библиотека.
Ознакомьтесь с нашей полной публикацией в блоге в блоге Black Lantern Security!
Вдохновлено Blacklist3r, с желанием расширить список поддерживаемых платформ и устранить зависимости от языка и операционной системы.
Пассивные модули анализируют криптографические продукты (cookie, токены, подписанные URL и т. д.), которые у вас уже есть. Они работают офлайн, пытаясь расшифровать или проверить продукт по базе данных известных секретов.
| Название | Описание |
|---|---|
| ASPNET_Viewstate | Проверяет viewstate/generator по списку известных ключей машины. |
| ASPNET_Resource | Проверяет зашифрованные URL WebResource.axd и ScriptResource.axd по списку известных ключей машины. Полезно, когда __VIEWSTATE отсутствует на странице. |
| Telerik_HashKey | Проверяет пропатченные (2017+) версии Telerik UI на наличие известного Telerik.Upload.ConfigurationHashKey |
| Telerik_EncryptionKey | Проверяет пропатченные (2017+) версии Telerik UI на наличие известного Telerik.Web.UI.DialogParametersEncryptionKey |
| Flask_SignedCookies | Проверяет на слабый пароль подписи cookie Flask. Обёртка для flask-unsign |
| Peoplesoft_PSToken | Может проверить peoplesoft PS_TOKEN на плохой/слабый пароль подписи |
| Django_SignedCookies | Проверяет сессионные cookie django (в режиме signed_cookie) на известный django secret_key |
| Rails_SecretKeyBase | Проверяет подписанные или зашифрованные сессионные cookie Ruby on Rails (из нескольких основных выпусков) на известный secret_key_base |
| Generic_JWT | Проверяет JWT на известные HMAC-секреты или приватные ключи RSA |
| Jsf_viewstate | Проверяет обе реализации Java Server Faces (JSF) — Mojarra и Myfaces — на использование известных или слабых секретных ключей |
| Symfony_SignedURL | Проверяет URL symfony "_fragment" на известный ключ HMAC. Работает с полным URL, включая хеш |
| Express_SignedCookies_ES | Проверяет промежуточное ПО express.js express-session на подписанные cookie и сессионные cookie на известный 'session secret' |
| Express_SignedCookies_CS | Проверяет промежуточное ПО express.js cookie-session на подписанные cookie и сессионные cookie на известный секрет |
| Laravel_SignedCookies | Проверяет cookie 'laravel_session' на известный laravel 'APP_KEY' |
| ASPNET_Compressedviewstate | Проверяет некогда популярный пользовательский сжатый Viewstate фрагмент кода, уязвимый к RCE |
| Rack2_SignedCookies | Проверяет подписанные cookie Rack 2.x на известные секретные ключи |
| Yii2_SignedCookies | Проверяет подписанные cookie фреймворка Yii2 на известные ключи валидации cookie |
| Shiro_RememberMe | Проверяет cookie rememberMe Apache Shiro на известные ключи шифрования AES |
| LTPA_Token | Проверяет cookie LtpaToken и LtpaToken2 IBM WebSphere на известные ключи шифрования LTPA |
| NextAuth | Проверяет сессионные cookie JWE NextAuth.js / Auth.js на известный или слабый NEXTAUTH_SECRET / AUTH_SECRET |
Активные модули идут на шаг дальше пассивного обнаружения. Они используют предварительную фильтрацию на основе YARA для фингерпринтинга живого целевого узла (на основе заголовков HTTP-ответов, cookie и содержимого тела), затем подделывают криптографические продукты с известными ключами и отправляют их на целевой узел, чтобы подтвердить, принимается ли ключ. Это делает их полезными в случаях, когда у вас ещё нет токена для анализа, но вы подозреваете, что целевой узел может использовать стандартные или широко известные секреты.
Активные модули включены по умолчанию в режиме URL (--url). Используйте --passive-only, чтобы отключить их.
| Название | Описание |
|---|---|
| Shiro_RememberMe_Key | Подделывает cookie rememberMe Apache Shiro с известными ключами AES и проверяет, принимает ли их целевой узел (десериализационный RCE) |
| GlobalProtect_DefaultMasterKey | Проверяет порталы PAN-OS GlobalProtect на использование стандартного мастер-ключа шифрования |
| LTPA_Token_Key | Подделывает cookie LtpaToken2 IBM WebSphere с известными ключами LTPA и проверяет, предоставляет ли целевой узел аутентификацию (обход аутентификации) |
У нас есть пакет на pypi, так что вы можете просто выполнить pip install badsecrets, чтобы использовать библиотеку.
Лучший способ использовать Badsecrets — просто запустить badsecrets после установки через pip:
pip install badsecrets
badsecrets eyJhbGciOiJIUzI1NiJ9.eyJJc3N1ZXIiOiJJc3N1ZXIiLCJVc2VybmFtZSI6IkJhZFNlY3JldHMiLCJleHAiOjE1OTMxMzM0ODMsImlhdCI6MTQ2NjkwMzA4M30.ovqRikAo_0kKJ0GVrAwQlezymxrLGjcEiW_s3UJMMCo
Под капотом используется пример cli.py. CLI также можно запускать вручную без установки через pip:
git clone https://github.com/blacklanternsecurity/badsecrets.git
cd badsecrets
python ./badsecrets/examples/cli.py eyJhbGciOiJIUzI1NiJ9.eyJJc3N1ZXIiOiJJc3N1ZXIiLCJVc2VybmFtZSI6IkJhZFNlY3JldHMiLCJleHAiOjE1OTMxMzM0ODMsImlhdCI6MTQ2NjkwMzA4M30.ovqRikAo_0kKJ0GVrAwQlezymxrLGjcEiW_s3UJMMCo
Чтобы использовать примеры, после выполнения pip install просто выполните git clone репозитория и cd в директорию badsecrets:
git clone https://github.com/blacklanternsecurity/badsecrets.git
cd badsecrets
Команды в примере ниже предполагают, что вы находитесь в этом каталоге.
Если вы используете модуль Badsecrets для BBOT, вам не нужно делать ничего дополнительно — BBOT установит пакет за вас.
Bad secrets включает пример CLI для удобства при ручной проверке секретов. Как упоминалось выше, к нему также можно получить доступ, просто выполнив badsecrets после успешной установки через pip.
usage: badsecrets [-h] [-nc] [-j] [-u URL] [-nh] [-c FILE_OR_MODULE:KEYS]
[-p PROXY] [-a USER_AGENT] [-H HEADER] [-d] [-t TIMEOUT]
[-P] [-l]
[product ...]
Check cryptographic products against badsecrets library