Tenable Security Center
Versión de integración: 15.0
En este documento, se explica cómo integrar Tenable Security Center en Google Security Operations (Google SecOps).
Antes de comenzar
Para configurar la integración de Tenable Security Center, primero debes obtener las credenciales de conexión necesarias y confirmar que comprendes el método de autenticación requerido.
Requisitos previos para la autenticación
La integración admite dos métodos de autenticación mutuamente exclusivos. Debes proporcionar un par completo de credenciales.
Nombre de usuario y contraseña: Usa tus credenciales de acceso estándar.
Clave de acceso y clave secreta (recomendado): Este método usa la autorización de la clave de API y tiene prioridad si se proporcionan ambos pares de credenciales.
Para generar estas claves, consulta Autorización de la clave de API.
Verificación de SSL
De forma predeterminada, la integración verifica el certificado SSL del servidor de Tenable Security Center. Si tu entorno usa un certificado interno o autofirmado, debes inhabilitar el parámetro de configuración Verify SSL.
Entradas de integración
Para configurar la integración, usa los siguientes parámetros:
| Parámetros | |
|---|---|
Server Address |
Obligatorio Es la dirección del servidor de Tenable Security Center que se usará en la integración. |
Username |
Optional Nombre de usuario para acceder al servidor de Tenable Security Center. Se deben proporcionar |
Password |
Optional Contraseña para acceder al servidor de Tenable Security Center. Se deben proporcionar |
Access Key |
Optional Es la clave de acceso de la cuenta de Tenable Security Center. Se deben proporcionar |
Secret Key |
Optional Clave secreta de la cuenta de Tenable Security Center. Se deben proporcionar |
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 se selecciona de forma predeterminada. |
Acciones
Agregar IP al recurso de lista de IPs
Agrega un activo de lista de IPs a la lista de IPs en Tenable Security Center.
Parámetros
| Nombre visible del parámetro | Tipo | Valor predeterminado | Is Mandatory | Descripción |
|---|---|---|---|---|
| Nombre de elemento | String | N/A | Sí | Especifica el nombre del recurso de lista de IPs al que deseas agregar IPs nuevas. |
Fecha de ejecución
Esta acción se ejecuta en la entidad Dirección IP.
Resultados de la acción
Resultado de 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
}
Muro 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 agregaron direcciones IP al activo de lista de IPs {0}.format(name)
Si no es el código estático 200 (is_success = false): Imprime "Error al ejecutar la acción "Agregar IP al activo de la lista de IPs". Motivo: {0}''.format(error_msg) |
General |
Crea un recurso de lista de IPs
Crea un activo de lista de IPs en Tenable Security Center. Se requiere al menos una entidad de IP para una ejecución exitosa.
Parámetros
| Nombre visible del parámetro | Tipo | Valor predeterminado | Is Mandatory | Descripción |
|---|---|---|---|---|
| Nombre | String | N/A | Sí | Especifica el nombre del activo de la lista de IPs. |
| Descripción | String | N/A | No | Especifica la descripción del activo de la lista de IPs. |
| Etiqueta | String | N/A | No | Especifica la etiqueta del activo de la 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 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
}
Muro 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: Imprime el mensaje "At least 1 IP entity should be available in order to create an IP List Asset".
Si no es el código estático 200 (is_success = false): Imprime "Error al ejecutar la acción "Crear activo de lista de IPs". Motivo: {0}''.format(error_msg) |
General |
Enriquecer IP
Obtener información sobre las direcciones IP y enriquecerlas
Parámetros
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| Nombre de repositorio | String | N/A | Es el 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 |
| vínculos | 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 |
| unicidad | 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 |
| descripción | Devuelve si existe en el resultado JSON |
| nombre | 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 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"
}
]
Obtener recursos relacionados
Obtén recursos relacionados con una dirección IP.
Parámetros
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| Nombre de repositorio | String | N/A | Es el 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 |
| nombre | Devuelve si existe en el resultado JSON |
Resultado de 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"
}
]
Obtener informes
Obtiene el contenido del informe por ID o nombre.
Parámetros
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| ID del informe | String | N/A | Es el número de ID del informe, que se puede encontrar en la URL del informe. |
Ejecutar en
Esta acción se ejecuta en todas las entidades.
Resultados de la acción
Resultado de 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"
]
}
Obtén resultados del análisis
Espera a que se complete el análisis y obtén sus resultados.
Parámetros
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| ID del resultado del análisis | String |
N/A | Es 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 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"
}
]
}
Obtén vulnerabilidades para la IP
Obtén 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 |
| unicidad | 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 |
| nombre | Devuelve si existe en el resultado JSON |
Resultado de 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 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 | String | N/A | Es el nombre del análisis que se creará. |
| Nombre de la política | String | N/A | Es 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 secuencia de comandos
| Nombre del resultado de la secuencia de comandos | Opciones de valor | Ejemplo |
|---|---|---|
| scan_result_id | N/A | N/A |
Ejecuta el análisis de recursos
Ejecuta el análisis de activos en Tenable Security Center.
Dónde encontrar el ID de política y el ID de repositorio
Para el ID de política:
- Navega hacia
https://INSTANCE_IP_ADDRESS/#policies. - Selecciona la política que deseas usar en la acción.
- En la URL, podrás ver el ID de esa política.
Para el ID del repositorio:
- Navega hacia
https://INSTANCE_IP_ADDRESS/#repositories. - Selecciona el repositorio que quieres usar en la acción.
- En la URL, podrás ver el ID de ese repositorio.
Parámetros
| Nombre visible del parámetro | Tipo | Valor predeterminado | Is Mandatory | Descripción |
|---|---|---|---|---|
| Nombre del análisis | N/A | Sí | Especifica el nombre del análisis. | |
| Nombre de elemento | String | N/A | Sí | Especifica el nombre del activo que se debe analizar. |
| ID de la política | Número entero | N/A | Sí | Especifica el ID de la política que se debe usar en el análisis. |
| ID del repositorio | Número entero | N/A | Sí | Especifica el ID del repositorio que se debe usar en el análisis. |
| Descripción | String | 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 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
}
Muro 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:
La acción debe fallar y detener la ejecución de un playbook: Si no se encuentra el recurso: Imprime "Error al ejecutar la acción "Ejecutar análisis de recursos". Motivo: No se encontró el recurso {0} en Tenable Security Center. ''.format(name) Si no es el código estático 200 (is_success = false): Imprime "Error al ejecutar la acción "Ejecutar análisis de recursos". Reason:{0}".format(error_msg) |
General |
Conectores
Conector de Tenable Security Center
Si quieres obtener instrucciones detalladas para configurar un conector en Google SecOps, consulta Cómo configurar el conector.
Parámetros del conector
Usa los siguientes parámetros para configurar el conector:
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| DeviceProductField | String | device_product | Nombre del campo que se usa para determinar el producto del dispositivo. |
| EventClassId | String | nombre | Es el nombre del campo que se usa para determinar el nombre del evento (subtipo). |
| PythonProcessTimeout | String | 60 | Es el límite de tiempo de espera (en segundos) para el proceso de Python que ejecuta el script actual. |
| Dirección del servidor | String | null | N/A |
| Nombre de usuario | String | null | N/A |
| Contraseña | Contraseña | null | N/A |
| Clave de acceso | String | null | Optional Es la clave de acceso de la cuenta de Tenable Security Center. Se deben proporcionar |
| Clave secreta | Contraseña | null | Optional Clave secreta de la cuenta de Tenable Security Center. Se deben proporcionar |
| Usa SSL | Casilla de verificación | Desmarcado | N/A |
| Máx. de días hacia atrás | Número entero | 1 | Cantidad de días hacia atrás desde los que deseas recuperar datos. |
| Límite por ciclo | Número entero | 10 | Es la cantidad de alertas transferidas al conector en cada ciclo de ejecución. |
| Dirección del servidor proxy | String | null | Es la dirección del servidor proxy que se usará. |
| Nombre de usuario del proxy | String | null | Nombre de usuario del proxy con el que se realizará la autenticación. |
| Contraseña de proxy | Contraseña | null | Es la contraseña del proxy con la que se realizará la autenticación. |
Reglas del conector
El conector admite proxies.
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.