
Uma biblioteca para detectar segredos conhecidos em muitos frameworks web

Uma biblioteca puramente em python para identificar o uso de segredos criptográficos conhecidos ou muito fracos em uma variedade de plataformas. O projeto foi projetado para ser tanto um repositório de vários "segredos conhecidos" (por exemplo, chaves de máquina ASP.NET encontradas em exemplos de tutoriais), quanto para fornecer uma camada de abstração agnóstica de linguagem para identificar seu uso.
Saber quando um 'segredo ruim' foi usado geralmente é uma questão de examinar algum produto criptográfico no qual o segredo foi utilizado: por exemplo, um cookie que é assinado com um algoritmo de hashing com chave. As coisas podem ficar complicadas quando você se aprofunda nas peculiaridades de implementação individuais que cada plataforma fornece, o que esta biblioteca visa amenizar.
Confira nosso post no blog completo no blog da Black Lantern Security!
Inspirado pelo Blacklist3r, com o desejo de expandir as plataformas suportadas e remover dependências de linguagem e sistema operacional.
Os módulos passivos analisam produtos criptográficos (cookies, tokens, URLs assinadas, etc.) que você já possui. Eles funcionam offline, tentando descriptografar ou verificar o produto contra um banco de dados de segredos conhecidos.
| Nome | Descrição |
|---|---|
| ASPNET_Viewstate | Verifica o viewstate/generator contra uma lista de chaves de máquina conhecidas. |
| ASPNET_Resource | Verifica URLs criptografadas de WebResource.axd e ScriptResource.axd contra uma lista de chaves de máquina conhecidas. Útil quando __VIEWSTATE não está presente em uma página. |
| Telerik_HashKey | Verifica versões corrigidas (2017+) do Telerik UI para uma Telerik.Upload.ConfigurationHashKey conhecida |
| Telerik_EncryptionKey | Verifica versões corrigidas (2017+) do Telerik UI para uma Telerik.Web.UI.DialogParametersEncryptionKey conhecida |
| Flask_SignedCookies | Verifica senha fraca de assinatura de cookie do Flask. Wrapper para flask-unsign |
| Peoplesoft_PSToken | Pode verificar um PS_TOKEN do peoplesoft para uma senha de assinatura ruim/fraca |
| Django_SignedCookies | Verifica cookies de sessão do django (quando em modo signed_cookie) para secret_key conhecida do django |
| Rails_SecretKeyBase | Verifica cookies de sessão assinados ou criptografados do Ruby on Rails (de várias versões principais) para secret_key_base conhecida |
| Generic_JWT | Verifica JWTs para segredos HMAC conhecidos ou chaves privadas RSA |
| Jsf_viewstate | Verifica ambas as implementações Mojarra e Myfaces do Java Server Faces (JSF) para uso de chaves secretas conhecidas ou fracas |
| Symfony_SignedURL | Verifica URLs "_fragment" do symfony para chave HMAC conhecida. Opera na URL completa, incluindo hash |
| Express_SignedCookies_ES | Verifica o middleware express-session do express.js para cookies assinados e cookies de sessão para 'session secret' conhecido |
| Express_SignedCookies_CS | Verifica o middleware cookie-session do express.js para cookies assinados e cookies de sessão para segredo conhecido |
| Laravel_SignedCookies | Verifica cookies 'laravel_session' para 'APP_KEY' conhecida do laravel |
| ASPNET_Compressedviewstate | Verifica um Viewstate comprimido customizado outrora popular trecho de código vulnerável a RCE |
| Rack2_SignedCookies | Verifica cookies assinados do Rack 2.x para chaves secretas conhecidas |
| Yii2_SignedCookies | Verifica cookies assinados do framework Yii2 para chaves de validação de cookie conhecidas |
| Shiro_RememberMe | Verifica cookies rememberMe do Apache Shiro para chaves de criptografia AES conhecidas |
| LTPA_Token | Verifica cookies LtpaToken e LtpaToken2 do IBM WebSphere para chaves de criptografia LTPA conhecidas |
| NextAuth | Verifica cookies de sessão JWE do NextAuth.js / Auth.js para um NEXTAUTH_SECRET / AUTH_SECRET conhecido ou fraco |
Os módulos ativos vão um passo além da detecção passiva. Eles usam pré-filtragem baseada em YARA para identificar um alvo ativo (com base em cabeçalhos de resposta HTTP, cookies e conteúdo do corpo), depois forjam produtos criptográficos com chaves conhecidas e os enviam ao alvo para confirmar se a chave é aceita. Isso os torna úteis para casos em que você ainda não possui um token para analisar, mas suspeita que o alvo possa estar usando segredos padrão ou bem conhecidos.
Os módulos ativos são habilitados por padrão no modo URL (--url). Use --passive-only para desabilitá-los.
| Nome | Descrição |
|---|---|
| Shiro_RememberMe_Key | Forja cookies rememberMe do Apache Shiro com chaves AES conhecidas e testa se o alvo as aceita (RCE por desserialização) |
| GlobalProtect_DefaultMasterKey | Testa portais PAN-OS GlobalProtect para uso da chave de criptografia mestra padrão |
| LTPA_Token_Key | Forja cookies LtpaToken2 do IBM WebSphere com chaves LTPA conhecidas e testa se o alvo concede autenticação (bypass de autenticação) |
Temos um pacote no pypi, então você pode simplesmente executar pip install badsecrets para fazer uso da biblioteca.
A melhor maneira de usar o Badsecrets é simplesmente executando badsecrets após fazer um pip install:
pip install badsecrets
badsecrets eyJhbGciOiJIUzI1NiJ9.eyJJc3N1ZXIiOiJJc3N1ZXIiLCJVc2VybmFtZSI6IkJhZFNlY3JldHMiLCJleHAiOjE1OTMxMzM0ODMsImlhdCI6MTQ2NjkwMzA4M30.ovqRikAo_0kKJ0GVrAwQlezymxrLGjcEiW_s3UJMMCo
Nos bastidores, ele está usando o exemplo cli.py. A CLI também pode ser acessada manualmente sem uma instalação via pip:
git clone https://github.com/blacklanternsecurity/badsecrets.git
cd badsecrets
python ./badsecrets/examples/cli.py eyJhbGciOiJIUzI1NiJ9.eyJJc3N1ZXIiOiJJc3N1ZXIiLCJVc2VybmFtZSI6IkJhZFNlY3JldHMiLCJleHAiOjE1OTMxMzM0ODMsImlhdCI6MTQ2NjkwMzA4M30.ovqRikAo_0kKJ0GVrAwQlezymxrLGjcEiW_s3UJMMCo
Para usar os exemplos, após fazer o pip install, basta git clone do repositório e cd para o diretório badsecrets:
git clone https://github.com/blacklanternsecurity/badsecrets.git
cd badsecrets
Os comandos na seção de exemplo abaixo pressupõem que você está neste diretório.
Se você estiver usando o módulo BBOT do Badsecrets, não precisa fazer mais nada - o BBOT instalará o pacote para você.
O Bad secrets inclui uma CLI de exemplo para conveniência ao verificar segredos manualmente. Como mencionado acima, também é acessível apenas executando badsecrets, após uma instalação bem-sucedida via 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 ...]