Tenable Security Center
Versión de integración: 15.0
En este documento se explica cómo integrar Tenable Security Center con Google Security Operations (Google SecOps).
Antes de empezar
Para configurar la integración de Tenable Security Center, primero debes obtener las credenciales de conexión necesarias y confirmar que entiendes el método de autenticación requerido.
Requisitos previos de autenticación
La integración admite dos métodos de autenticación mutuamente excluyentes. Debes proporcionar un par de credenciales completo.
Nombre de usuario y contraseña: usa tus credenciales de inicio de sesión habituales.
Clave de acceso y clave secreta (recomendado): este método usa la autorización de clave de API y tiene prioridad si se proporcionan ambos pares de credenciales.
Para generar estas claves, consulta Autorización de claves de API.
Verificación SSL
La integración verifica el certificado SSL del servidor de Tenable Security Center de forma predeterminada. Si tu entorno usa un certificado interno o autofirmado, debes inhabilitar el ajuste Verify SSL.
Entradas de integración
Para configurar la integración, usa los siguientes parámetros:
| Parámetros | |
|---|---|
Server Address |
Obligatorio La dirección del servidor de Tenable Security Center que se va a usar en la integración. |
Username |
Optional Nombre de usuario para iniciar sesión en el servidor de Tenable Security Center. Se deben proporcionar tanto |
Password |
Optional Contraseña para iniciar sesión en el servidor de Tenable Security Center. Se deben proporcionar tanto |
Access Key |
Optional Clave de acceso de la cuenta de Tenable Security Center. Se deben proporcionar tanto |
Secret Key |
Optional Clave secreta de la cuenta de Tenable Security Center. Se deben proporcionar tanto |
Verify SSL |
Optional Si se selecciona, verifica que el certificado SSL para la conexión al servidor de Tenable sea válido. Esta opción está seleccionada de forma predeterminada. |
Acciones
Add IP To IP List Asset
Añade una IP a un recurso de lista de IPs en Tenable Security Center.
Parámetros
| Nombre visible del parámetro | Tipo | Valor predeterminado | Es obligatorio | Descripción |
|---|---|---|---|---|
| Asset Name | Cadena | N/A | Sí | Especifica el nombre del recurso de lista de IPs al que quieras añadir IPs. |
Fecha de ejecución
Esta acción se ejecuta en la entidad Dirección IP.
Resultados de la acción
Resultado de la secuencia de comandos
| Nombre del resultado de la secuencia de comandos | Opciones de valor | Ejemplo |
|---|---|---|
| is_success | Verdadero/Falso | is_success:False |
Resultado de JSON
{
"type": "regular",
"response": {
"id": "41",
"name": "api_test_5",
"type": "static",
"description": "",
"tags": "qweqwe",
"context": "",
"status": "0",
"createdTime": "1606129689",
"modifiedTime": "1606129689",
"ioSyncStatus": "Not Synced",
"ioFirstSyncTime": "-1",
"ioLastSyncSuccess": "-1",
"ioLastSyncFailure": "-1",
"ioSyncErrorDetails": null,
"typeFields": {
"definedIPs": "203.0.113.1,203.0.113.10"
},
"repositories": [
{
"ipCount": "-1",
"repository": {
"id": "1",
"name": "Example-Repository",
"description": ""
}
}
],
"ipCount": -1,
"groups": [],
"assetDataFields": [],
"canUse": "true",
"canManage": "true",
"creator": {
"id": "1",
"username": "security_manager",
"firstname": "Manager",
"lastname": "Security"
},
"owner": {
"id": "1",
"username": "security_manager",
"firstname": "Manager",
"lastname": "Security"
},
"ownerGroup": {
"id": "0",
"name": "Full Access",
"description": "Full Access group"
},
"targetGroup": {
"id": -1,
"name": "",
"description": ""
},
"template": {
"id": -1,
"name": "",
"description": ""
}
},
"error_code": 0,
"error_msg": "",
"warnings": [],
"timestamp": 1606129688
}
Panel de casos
| Tipo de resultado | Valor/Descripción | Tipo |
|---|---|---|
| Mensaje de salida* | La acción no debe fallar ni detener la ejecución de un playbook:
Si no hay entidades de IP: no se ha añadido ninguna dirección IP al recurso de lista de IPs {0}.format(name).
Si no es código estático 200 (is_success = false): print "Error al ejecutar la acción "Añadir IP a recurso de lista de IPs". Motivo: {0}''.format(error_msg) |
General |
Crear recurso de lista de IPs
Crea un recurso de lista de IPs en Tenable Security Center. Requiere al menos una entidad de IP para ejecutarse correctamente.
Parámetros
| Nombre visible del parámetro | Tipo | Valor predeterminado | Es obligatorio | Descripción |
|---|---|---|---|---|
| Nombre | Cadena | N/A | Sí | Especifica el nombre del recurso de lista de IPs. |
| Descripción | Cadena | N/A | No | Especifica la descripción del recurso de lista de IPs. |
| Etiqueta | Cadena | N/A | No | Especifica la etiqueta del recurso de lista de IPs. |
Fecha de ejecución
Esta acción se ejecuta en la entidad Dirección IP.
Resultados de la acción
Resultado de la secuencia de comandos
| Nombre del resultado de la secuencia de comandos | Opciones de valor | Ejemplo |
|---|---|---|
| is_success | Verdadero/Falso | is_success:False |
Resultado de JSON
{
"type": "regular",
"response": {
"id": "41",
"name": "api_test_5",
"type": "static",
"description": "",
"tags": "qweqwe",
"context": "",
"status": "0",
"createdTime": "1606129689",
"modifiedTime": "1606129689",
"ioSyncStatus": "Not Synced",
"ioFirstSyncTime": "-1",
"ioLastSyncSuccess": "-1",
"ioLastSyncFailure": "-1",
"ioSyncErrorDetails": null,
"typeFields": {
"definedIPs": "203.0.113.1,203.0.113.10"
},
"repositories": [
{
"ipCount": "-1",
"repository": {
"id": "1",
"name": "Example-Repository",
"description": ""
}
}
],
"ipCount": -1,
"groups": [],
"assetDataFields": [],
"canUse": "true",
"canManage": "true",
"creator": {
"id": "1",
"username": "security_manager",
"firstname": "Manager",
"lastname": "Security"
},
"owner": {
"id": "1",
"username": "security_manager",
"firstname": "Manager",
"lastname": "Security"
},
"ownerGroup": {
"id": "0",
"name": "Full Access",
"description": "Full Access group"
},
"targetGroup": {
"id": -1,
"name": "",
"description": ""
},
"template": {
"id": -1,
"name": "",
"description": ""
}
},
"error_code": 0,
"error_msg": "",
"warnings": [],
"timestamp": 1606129688
}
Panel de casos
| Tipo de resultado | Valor/Descripción | Tipo |
|---|---|---|
| Mensaje de salida* | La acción no debe fallar ni detener la ejecución de un libro de jugadas:
Si no hay entidades de IP: imprime "Debe haber al menos una entidad de IP para crear un recurso de lista de IPs".
Si el código no es estático 200 (is_success = false): imprime "Error al ejecutar la acción "Crear recurso de lista de IPs". Motivo: {0}''.format(error_msg) |
General |
Enriquecer IP
Obtener información sobre direcciones IP y enriquecerlas.
Parámetros
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| Nombre del repositorio | Cadena | N/A | Nombre del repositorio. |
Fecha de ejecución
Esta acción se ejecuta en la entidad Dirección IP.
Resultados de la acción
Enriquecimiento de entidades
| Nombre del campo de enriquecimiento | Lógica: cuándo aplicar |
|---|---|
| macAddress | Devuelve si existe en el resultado JSON |
| severityLow | Devuelve si existe en el resultado JSON |
| links | Devuelve si existe en el resultado JSON |
| ip | Devuelve si existe en el resultado JSON |
| último análisis | Devuelve si existe en el resultado JSON |
| severityCritical | Devuelve si existe en el resultado JSON |
| total | Devuelve si existe en el resultado JSON |
| severityAll | Devuelve si existe en el resultado JSON |
| mcafeeGUID | Devuelve si existe en el resultado JSON |
| policyName | Devuelve si existe en el resultado JSON |
| uuid | Devuelve si existe en el resultado JSON |
| lastAuthRun | Devuelve si existe en el resultado JSON |
| severityInfo | Devuelve si existe en el resultado JSON |
| osCPE | Devuelve si existe en el resultado JSON |
| singularidad | Devuelve si existe en el resultado JSON |
| dnsName | Devuelve si existe en el resultado JSON |
| repositorio | Devuelve si existe en el resultado JSON |
| ip | Devuelve si existe en el resultado JSON |
| description | Devuelve si existe en el resultado JSON |
| name | Devuelve si existe en el resultado JSON |
| lastUnauthRun | Devuelve si existe en el resultado JSON |
| biosGUID | Devuelve si existe en el resultado JSON |
| tpmID | Devuelve si existe en el resultado JSON |
| puntuación | Devuelve si existe en el resultado JSON |
| hasPassive | Devuelve si existe en el resultado JSON |
| pluginSet | Devuelve si existe en el resultado JSON |
| hasCompliance | Devuelve si existe en el resultado JSON |
| severityHigh | Devuelve si existe en el resultado JSON |
| netbiosName | Devuelve si existe en el resultado JSON |
| severityMedium | Devuelve si existe en el resultado JSON |
| os | Devuelve si existe en el resultado JSON |
Resultado de la secuencia de comandos
| Nombre del resultado de la secuencia de comandos | Opciones de valor | Ejemplo |
|---|---|---|
| is_success | Verdadero/Falso | is_success:False |
Resultado de JSON
[
{
"EntityResult":
{
"macAddress": "",
"severityLow": "0",
"links": [],
"ip": "203.0.113.1",
"lastScan": "1549425224",
"severityCritical": "0",
"total": "2",
"severityAll": "0,0,0,0,2",
"mcafeeGUID": "",
"policyName": "1e2e4247-0de7-56d5-8026-34ab1f3150ef-1130313/Basic Discovery Scan",
"uuid": "",
"lastAuthRun": "",
"severityInfo": "2",
"osCPE": "",
"uniqueness": "repositoryID,ip,dnsName",
"dnsName": "example.com",
"repository":
{
"id": "1",
"description": "",
"name": "repository"
},
"lastUnauthRun": "1549363419",
"biosGUID": "",
"tpmID": "",
"score": "0",
"hasPassive": "No",
"pluginSet": "201902020242",
"hasCompliance": "No",
"severityHigh": "0",
"netbiosName": "",
"severityMedium": "0",
"os": ""
},
"Entity": "203.0.113.1"
}
]
Get Related Assets
Obtiene los recursos relacionados con una dirección IP.
Parámetros
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| Nombre del repositorio | Cadena | N/A | Nombre del repositorio. |
Fecha de ejecución
Esta acción se ejecuta en la entidad Dirección IP.
Resultados de la acción
Enriquecimiento de entidades
| Nombre del campo de enriquecimiento | Lógica: cuándo aplicar |
|---|---|
| id | Devuelve si existe en el resultado JSON |
| name | Devuelve si existe en el resultado JSON |
Resultado de la secuencia de comandos
| Nombre del resultado de la secuencia de comandos | Opciones de valor | Ejemplo |
|---|---|---|
| is_success | Verdadero/Falso | is_success:False |
Resultado de JSON
[
{
"EntityResult":
[
{
"id": "0",
"description": "All defining ranges of the Group in whose context this Asset is being evaluated.",
"name": "All Defined Ranges"
}, {
"id": "2",
"description": "This asset uses the Scan Summary plugin to detect if a host has been scanned by Nessus. The Scan Summary plugin contains the list of tests conducted during the most recent scan.",
"name": "Systems that have been Scanned"
}, {
"id": "13",
"description": "Leverage Nessus plugin 10180 (Ping the remote host) and Nessus plugin 12503 (Host Fully Qualified Domain Name (FQDN) Resolution) to find hosts that don't have a resolvable FQDN in DNS.",
"name": "Scanned Hosts Not in DNS"
}
],
"Entity": "203.0.113.1"
}
]
Ver el informe
Obtiene el contenido de un informe por ID o nombre.
Parámetros
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| ID de informe | Cadena | N/A | Número de ID del informe.Se puede encontrar en la URL del informe. |
Fecha de ejecución
Esta acción se ejecuta en todas las entidades.
Resultados de la acción
Resultado de la secuencia de comandos
| Nombre del resultado de la secuencia de comandos | Opciones de valor | Ejemplo |
|---|---|---|
| is_success | Verdadero/Falso | is_success:False |
Resultado de JSON
{
"pubSites":
[
"https://example.com",
"https://example.net"
]
}
Obtener resultados de análisis
Espera a que se complete el análisis y obtén los resultados.
Parámetros
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| ID de resultado del análisis | Cadena |
N/A | El ID de los resultados del análisis. |
Fecha de ejecución
Esta acción se ejecuta en todas las entidades.
Resultados de la acción
Resultado de la secuencia de comandos
| Nombre del resultado de la secuencia de comandos | Opciones de valor | Ejemplo |
|---|---|---|
| is_success | Verdadero/Falso | is_success:False |
Resultado de JSON
{
"severity_summary":
[
{
"count": "0",
"severity":
{
"id": "4",
"name": "Critical",
"description": "Critical Severity"
}
}, {
"count": "0",
"severity":
{
"id": "3",
"name": "High",
"description": "High Severity"
}
}, {
"count": "3",
"severity":
{"id": "2",
"name": "Medium",
"description": "Medium Severity"
}}
],
"results":
[
{
"name": "DNS Server Recursive Query Cache Poisoning Weakness",
"family": "DNS",
"hostTotal": "1",
"pluginID": "10539",
"total": "1",
"severity": "Medium"
}, {
"name": "DNS Server Spoofed Request Amplification DDoS",
"family": "DNS",
"hostTotal": "1",
"pluginID": "35450",
"total": "1",
"severity": "Medium"
}, {
"name": "SSL Medium Strength Cipher Suites Supported",
"family": "General",
"hostTotal": "1",
"pluginID": "42873",
"total": "1",
"severity": "Medium"
}
]
}
Get Vulnerabilities for IP
Obtiene un resumen de las vulnerabilidades y la gravedad de una dirección IP.
Parámetros
N/A
Fecha de ejecución
Esta acción se ejecuta en la entidad Dirección IP.
Resultados de la acción
Enriquecimiento de entidades
| Nombre del campo de enriquecimiento | Lógica: cuándo aplicar |
|---|---|
| macAddress | Devuelve si existe en el resultado JSON |
| protocolo | Devuelve si existe en el resultado JSON |
| uuid | Devuelve si existe en el resultado JSON |
| familia | Devuelve si existe en el resultado JSON |
| pluginInfo | Devuelve si existe en el resultado JSON |
| ip | Devuelve si existe en el resultado JSON |
| pluginID | Devuelve si existe en el resultado JSON |
| gravedad | Devuelve si existe en el resultado JSON |
| repositorio | Devuelve si existe en el resultado JSON |
| singularidad | Devuelve si existe en el resultado JSON |
| dnsName | Devuelve si existe en el resultado JSON |
| puerto | Devuelve si existe en el resultado JSON |
| netbiosName | Devuelve si existe en el resultado JSON |
| name | Devuelve si existe en el resultado JSON. |
Resultado de la secuencia de comandos
| Nombre del resultado de la secuencia de comandos | Opciones de valor | Ejemplo |
|---|---|---|
| is_success | Verdadero/Falso | is_success:False |
Resultado de JSON
[
{
"EntityResult":
[
{
"macAddress": "",
"protocol": "TCP",
"uuid": "",
"family": "Web Servers",
"pluginInfo": "10107 (443/6) HTTP Server Type and Version",
"ip": "203.0.113.1",
"pluginID": "10107",
"severity": "Info",
"repository": "repo",
"uniqueness": "repositoryID,ip,dnsName",
"dnsName": "example.com",
"port": "443",
"netbiosName": "",
"name": "HTTP Server Type and Version"
}, {
"macAddress": "",
"protocol": "UDP",
"uuid": "",
"family": "DNS",
"pluginInfo": "10539 (53/17) DNS Server Recursive Query Cache Poisoning Weakness",
"ip": "203.0.113.1",
"pluginID": "10539",
"severity": "Medium",
"repository": "repo",
"uniqueness": "repositoryID,ip,dnsName",
"dnsName": "exaample.com",
"port": "53",
"netbiosName": "",
"name": "DNS Server Recursive Query Cache Poisoning Weakness"
}, {
"macAddress": "",
"protocol": "TCP",
"uuid": "",
"family": "General",
"pluginInfo": "10863 (443/6) SSL Certificate Information",
"ip": "203.0.113.1",
"pluginID": "10863",
"severity": "Info",
"repository": "repo",
"uniqueness": "repositoryID,ip,dnsName",
"dnsName": "example.com",
"port": "443",
"netbiosName": "",
"name": "SSL Certificate Information"
}
],
"Entity": "203.0.113.1"
}
]
Ping
Prueba la conectividad.
Fecha de ejecución
Esta acción se ejecuta en todas las entidades.
Resultados de la acción
Resultado de la secuencia de comandos
| Nombre del resultado de la secuencia de comandos | Opciones de valor | Ejemplo |
|---|---|---|
| null | N/A | N/A |
Analizar IPs
Inicia un análisis de direcciones IP.
Parámetros
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| Nombre del análisis | Cadena | N/A | Nombre del análisis que se va a crear. |
| Nombre de la política | Cadena | N/A | El nombre de la política. |
Fecha de ejecución
Esta acción se ejecuta en la entidad Dirección IP.
Resultados de la acción
Resultado de la secuencia de comandos
| Nombre del resultado de la secuencia de comandos | Opciones de valor | Ejemplo |
|---|---|---|
| scan_result_id | N/A | N/A |
Ejecutar análisis de recursos
Ejecuta un análisis de recursos en Tenable Security Center.
Dónde encontrar el ID de la política y el ID del repositorio
Para el ID de política:
- Ve a
https://INSTANCE_IP_ADDRESS/#policies. - Selecciona la política que quieras usar en la acción.
- En la URL, podrás ver el ID de esa política.
ID de repositorio:
- Ve a
https://INSTANCE_IP_ADDRESS/#repositories. - Selecciona el repositorio que quieras usar en la acción.
- En la URL, verás el ID de ese repositorio.
Parámetros
| Nombre visible del parámetro | Tipo | Valor predeterminado | Es obligatorio | Descripción |
|---|---|---|---|---|
| Nombre del análisis | N/A | Sí | Especifica el nombre del análisis. | |
| Asset Name | Cadena | N/A | Sí | Especifica el nombre del recurso que se debe analizar. |
| ID de política | Entero | N/A | Sí | Especifica el ID de la política que se debe usar en el análisis. |
| ID de repositorio | Entero | N/A | Sí | Especifica el ID del repositorio que se debe usar en el análisis. |
| Descripción | Cadena | N/A | No | Especifica la descripción del análisis. |
Fecha de ejecución
Esta acción no se ejecuta en entidades.
Resultados de la acción
Resultado de la secuencia de comandos
| Nombre del resultado de la secuencia de comandos | Opciones de valor | Ejemplo |
|---|---|---|
| is_success | Verdadero/Falso | is_success:False |
Resultado de JSON
{
"type": "regular",
"response": {
"id": "11",
"name": "Scan Name",
"description": "",
"ipList": "",
"type": "policy",
"dhcpTracking": "false",
"classifyMitigatedAge": "0",
"emailOnLaunch": "false",
"emailOnFinish": "false",
"timeoutAction": "import",
"scanningVirtualHosts": "false",
"rolloverType": "template",
"status": "0",
"createdTime": "1606132784",
"modifiedTime": "1606132784",
"maxScanTime": "3600",
"reports": [],
"assets": [
{
"id": "38",
"name": "api_test_1",
"description": ""
}
],
"credentials": [],
"numDependents": "0",
"schedule": {
"id": -1,
"objectType": -1,
"type": "now",
"start": "",
"repeatRule": "",
"enabled": "true",
"nextRun": -1,
"dependent": {
"id": -1,
"name": "",
"description": ""
}
},
"policy": {
"id": "1000002",
"context": "",
"name": "Host Discovery",
"description": "",
"tags": "",
"owner": {
"id": "1",
"username": "security_manager",
"firstname": "Manager",
"lastname": "Security"
},
"ownerGroup": {
"id": "0",
"name": "Full Access",
"description": "Full Access group"
}
},
"policyPrefs": [
{
"name": "MODE|discovery",
"value": "host_enumeration"
},
{
"name": "description",
"value": ""
},
{
"name": "display_unreachable_hosts",
"value": "no"
},
{
"name": "log_live_hosts",
"value": "yes"
},
{
"name": "name",
"value": "Host Discovery"
},
{
"name": "reverse_lookup",
"value": "no"
}
],
"repository": {
"id": "1",
"name": "Example-Repository",
"description": ""
},
"canUse": "true",
"canManage": "true",
"plugin": {
"id": -1,
"name": "",
"description": ""
},
"zone": {
"id": -1,
"name": "",
"description": ""
},
"ownerGroup": {
"id": "0",
"name": "Full Access",
"description": "Full Access group"
},
"creator": {
"id": "1",
"username": "security_manager",
"firstname": "Manager",
"lastname": "Security"
},
"owner": {
"id": "1",
"username": "security_manager",
"firstname": "Manager",
"lastname": "Security"
},
"scanResultID": "34"
},
"error_code": 0,
"error_msg": "",
"warnings": [],
"timestamp": 1606132783
}
Panel de casos
| Tipo de resultado | Valor/Descripción | Tipo |
|---|---|---|
| Mensaje de salida* | La acción no debe fallar ni detener la ejecución de un runbook:
La acción debe fallar y detener la ejecución de un libro de jugadas: Si no se encuentra el recurso: imprime "Error al ejecutar la acción "Ejecutar análisis de recursos". Motivo: no se ha encontrado el recurso {0} en Tenable Security Center. ''.format(name) Si no es el código estático 200 (is_success = false): print "Error al ejecutar la acción "Run Asset Scan". Motivo:{0}".format(error_msg) |
General |
Conectores
Conector de Tenable Security Center
Para obtener instrucciones detalladas sobre cómo configurar un conector en Google SecOps, consulta el artículo Configurar el conector.
Parámetros de conectores
Utiliza los siguientes parámetros para configurar el conector:
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| DeviceProductField | Cadena | device_product | Nombre del campo que se usa para determinar el producto del dispositivo. |
| EventClassId | Cadena | name | Nombre del campo que se usa para determinar el nombre del evento (subtipo). |
| PythonProcessTimeout | Cadena | 60 | El límite de tiempo de espera (en segundos) del proceso de Python que ejecuta el script actual. |
| Dirección del servidor | Cadena | null | N/A |
| Nombre de usuario | Cadena | null | N/A |
| Contraseña | Contraseña | null | N/A |
| Clave de acceso | Cadena | null | Optional Clave de acceso de la cuenta de Tenable Security Center. Se deben proporcionar tanto |
| Clave secreta | Contraseña | null | Optional Clave secreta de la cuenta de Tenable Security Center. Se deben proporcionar tanto |
| Use SSL (Usar SSL) | Casilla | Desmarcada | N/A |
| Máximo de días hacia atrás | Entero | 1 | El número de días anteriores a partir del cual quieres obtener los datos. |
| Límite por ciclo | Entero | 10 | La cantidad de alertas ingeridas en el conector en cada ciclo de ejecución. |
| Dirección del servidor proxy | Cadena | null | Dirección del servidor proxy que se va a usar. |
| Nombre de usuario del proxy | Cadena | null | Nombre de usuario del proxy para autenticarse. |
| Contraseña del proxy | Contraseña | null | La contraseña del proxy para autenticarte. |
Reglas de conectores
El conector admite proxies.
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.