Como en cualquier proceso de consultoría, a menudo nos encontramos con que la realización de tareas repetitivas consume tiempo que podríamos invertir en otras actividades. En Faraday, nos gusta afrontar estos retos y utilizar cualquier herramienta disponible para automatizar estos casos de uso con sencillos scripts.
En nuestro equipo Red, preferimos centrarnos en tareas específicas en función del tipo de host y las vulnerabilidades asociadas. No es lo mismo explotar una vulnerabilidad en un servidor de terceros sin conexión a la red interna del cliente que atacar un servidor alojado en la nube que potencialmente podría llevar a un compromiso más interesante, ¿verdad? Otro ejemplo común es cuando se realiza un pentest interno; nuestro cliente detalla los rangos más críticos a observar y analizar.
Faraday nos ayuda a gestionar y analizar las vulnerabilidades y los activos que vamos a evaluar, utilizando múltiples entradas de diferentes herramientas:
Como puedes ver, un simple escaneo devuelve una lista de 240 activos y más de 6000 vulnerabilidades, por lo que organizar y catalogar mi alcance puede ser algo complejo y difícil. Usando la interfaz de Faraday, puedo aplicar filtros para, por ejemplo, etiquetar un conjunto de vulnerabilidades para separarlas y analizarlas colectivamente. Sin embargo, esto requeriría crear un filtro grande que podría ser engorroso de mantener actualizado, por lo que utilizaremos la API de Faraday junto con faraday-cli para automatizar estas tareas.
En esta primera sección, comprenderemos los componentes clave para llevar a cabo esta automatización:
Componentes
Token de autenticación
El primer paso es obtener un token de autenticación enviando una solicitud POST al servidor de Faraday con el nombre de usuario y la contraseña. El token que recibamos se utilizará en las siguientes solicitudes de la API.
ID de vulnerabilidad
En get_vulns_id devolverá una lista de identificadores para las IPs que queremos modificar/actualizar.
Etiquetas de configuración
Por último, el set_tags aplicará una etiqueta específica a los identificadores de vulnerabilidad que obtuvimos anteriormente.
Interfaz CLI
A lo que nos referimos como función principal es a una interfaz CLI (usando faraday-cli) para interactuar con la API de Faraday. Para instalarlo, puedes seguir los pasos desde el repositorio oficial: https://github.com/infobyte/faraday-cli, pero podemos simplificarlo con los dos métodos siguientes:
Usando pip:
pip install faraday-cli
Del código fuente:
git clone https://github.com/infobyte/faraday-cli.git cd faraday-cli pip install .
El script tomará como argumentos el espacio de trabajo, el servidor Faraday, las etiquetas y una lista de IPs como archivo de entrada. Internamente, se autenticará en nuestro servidor (usando el nombre de usuario y la contraseña como variables de entorno), recuperará las vulnerabilidades de las IPs a consultar, y aplicará una etiqueta específica a cada una.
Ejemplo de uso
Para utilizar este script, debe configurar las variables de entorno `FARADAY_USER` y `FARADAY_PASSWORD`. A continuación, puede ejecutar el script desde la línea de comandos, proporcionando los parámetros necesarios:
"`bash python script.py --workspace --servidor --tag --fichero-de-entrada "`
Sustituya ``, ``, `` y `` por sus valores reales.
Funciones internas
Internamente, nuestro script incluirá ciertas funciones para llevar a cabo el proceso que queremos automatizar. En esta sección se explicará cada función y cómo se implementan.
get_token(servidor, usuario, contraseña)
Propósito
Para devolver los IDs de vulnerabilidad para una IP dada.
Valor de retorno
Una lista completa de los ID de vulnerabilidad si la consulta tuvo éxito.
def get_vuln_ids(workspace, server, token, ip):
vulns_response = requests.get(
f'https://{server}/_api/v3/ws/{workspace}/vulns/filter?q={{"filters":[{{"name":"target","op":"==","val":"{ip}"}}]}}',
headers={'Authorization': f'Token {token}'},
verify=False
)
si vulns_response.status_code == 200:
vulns_data = vulns_response.json()
return [vuln['id'] for vuln in vulns_data["vulnerabilities"]]
else:
print(f "Error: No se han podido recuperar vulnerabilidades para IP {ip}. Código de estado: {vulns_response.status_code}")
return []
set_tags(workspace, server, token, vuln_ids, tag)
Propósito
Para aplicar etiquetas a las vulnerabilidades utilizando los identificadores obtenidos anteriormente.
Valor de retorno
Debe imprimir un mensaje si la solicitud se ha realizado correctamente.
def set_tags(workspace, server, token, vuln_ids, tag):
payload = {"vulnerability_ids": vuln_ids, "tags_to_add": [tag], "tags_to_remove": []}
set_tags_response = requests.post(
f'https://{server}/_api/v3/ws/{workspace}/vulns/set_tags',
json=carga,
headers={'Authorization': f'Token {token}'},
verify=False
)
si set_tags_response.status_code == 200:
print("Etiquetas configuradas correctamente.")
si no:
print(f "Error: No se han podido establecer las etiquetas. Código de estado: {set_tags_response.status_code}")
Para utilizar esta secuencia de comandos, debe configurar FARADAY_USER y FARADAY_PASSWORD como variables de entorno con los valores correspondientes a su instancia. Luego, para ejecutar el script, debe ejecutarlo de la siguiente manera:
python script.py --workspace --servidor --tag --input-file
Sustituya los valores de espacio de trabajo, servidor, etiqueta y archivo_de_entrada con los valores de su instancia.
¿Formación, servicios de red teaming o escaneado continuo? Tenemos lo que necesita. Solicite más información.

