in

Identificar secretos codificados de forma rígida en texto estructurado estático




«Mis pajaritos están por todas partes, incluso en el norte, me susurran las historias más extrañas». – Lord Varys

Whispers es una herramienta de análisis de código estático diseñada para analizar varios formatos de datos populares en busca de credenciales codificadas y características peligrosas. Los susurros se pueden ejecutar en la CLI o puede integrarlo con su canal de CI / CD.

Reconoce

  • Contraseñas
  • Token de API
  • Clave de AWS
  • Claves privadas
  • Credenciales hash
  • Token de autenticación
  • Funciones peligrosas
  • Archivos sensibles

Formatos admitidos

Se dice que los susurros son un texto estructurado Analizador, no analizador de código.

Actualmente se admiten los siguientes formatos de uso común:

  • YAML
  • JSON
  • XML
  • .npmrc
  • .pypirc
  • .htpasswd
  • .Propiedades
  • pip.conf
  • conf / ini
  • Dockerfile
  • Dockercfg
  • Secuencias de comandos de Shell
  • Python3

Los archivos Python3 se analizan como AST debido a la compatibilidad con el idioma nativo.

Formatos de declaración y asignación

Los siguientes archivos de idioma se analizan como texto y se comprueban para determinar la declaración de variables generales y los patrones de asignación:

Formatos especiales

  • Archivos de credenciales de AWS
  • Cadenas de conexión JDBC
  • Archivos de configuración de Jenkins
  • Archivos de configuración de SpringFramework Beans
  • Archivos de propiedades de Java
  • Archivos de autenticación de registro privado de Dockercfg
  • Token de Github

instalación

De PyPI

De GitHub

git clone https://github.com/Skyscanner/whispers
cd whispers
make install

propósito de uso

CLI

whispers --help
whispers --info
whispers source/code/fileOrDir
whispers --config config.yml source/code/fileOrDir
whispers --output /tmp/secrets.yml source/code/fileOrDir
whispers --rules aws-id,aws-secret source/code/fileOrDir
whispers --severity BLOCKER,CRITICAL source/code/fileOrDir
whispers --exitcode 7 source/code/fileOrDir

pitón

from whispers.cli import parse_args
from whispers.core import run

src = "http://www.kitploit.com/2021/11/tests/fixtures"
configfile = "whispers/config.yml"
args = parse_args(["-c", configfile, src])
for secret in run(args):
print(secret)

Config

Hay varias opciones de configuración disponibles en Whispers. Es posible incluir / excluir resultados según la ruta del archivo, la clave o el valor. Las rutas de archivo se interpretan como globales. Las claves y los valores aceptan expresiones regulares y varios otros parámetros. Hay un archivo de configuración predeterminado incorporado que se utilizará si no proporciona uno personalizado.

config.yml debe tener la siguiente estructura:

include:
files:
- "**/*.yml"

exclude:
files:
- "**/test/**/*"
- "**/tests/**/*"
keys:
- ^foo
values:
- bar$

rules:
starks:
message: Whispers from the North
severity: CRITICAL
value:
regex: (Aria|Ned) Stark
ignorecase: True

La forma más rápida de optimizar la detección (es decir, eliminar falsos positivos y resultados no deseados) es copiar el archivo config.yml estándar en un archivo nuevo, adaptarlo y pasarlo como argumento a Whispers.

whispers --config config.yml --rules starks src/file/or/dir

Reglas personalizadas

Las reglas especifican las cosas reales que se extraerán de los pares clave-valor. Hay varias incorporadas populares, como AWS Keys y Passwords, pero la herramienta está diseñada para ser fácilmente ampliable con nuevas reglas.

  • Las reglas personalizadas se pueden encontrar en el archivo de configuración principal en. Por definir rules:
  • Se pueden agregar reglas personalizadas a susurros / reglas
rule-id:  # unique rule name
description: Values formatted like AWS Session Token
message: AWS Session Token # report will show this message
severity: BLOCKER # one of BLOCKER, CRITICAL, MAJOR, MINOR, INFO

key: # specify key format
regex: (aws.?session.?token)?
ignorecase: True # case-insensitive matching

value: # specify value format
regex: ^(?=.*[a-z])(?=.*[A-Z])[A-Za-z0-9+/]{270,450}$
ignorecase: False # case-sensitive matching
minlen: 270 # value is at least this long
isBase64: True # value is base64-encoded
isAscii: False # value is binary data when decoded
isUri: False # value is not formatted like a URI

similar: 0.35 # maximum allowed similarity between key and value
# (1.0 being exactly the same)

Complementos

Todas las funciones de análisis se implementan mediante complementos. Cada complemento implementa una clase con el pairs() Método que recorre los archivos en iteración y devuelve los pares clave-valor que se comprobarán con las reglas.

class PluginName:
def pairs(self, file):
yield "key", "value"



What do you think?

Written by Helen Lafayette

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

GIPHY App Key not set. Please check settings

El FBI y la CISA instan a las organizaciones a estar en guardia contra los ataques durante las vacaciones

Apple está demandando a NSO Group por uso de software espía