Usa tablas de datos
Las tablas de datos son construcciones de datos de varias columnas que te permiten ingresar tus propios datos en Google Security Operations. Pueden actuar como tablas de consulta con columnas definidas y los datos almacenados en filas. Puedes crear o importar una tabla de datos a tu cuenta de Google SecOps con la interfaz web de Google SecOps, la API de tablas de datos o una consulta YARA-L.
Asigna permisos a las tablas de datos con el RBAC de datos
Para usar las tablas de datos, debes asignarles permisos mediante el control de acceso basado en roles de datos (RBAC de datos). Si asignas alcances a una tabla de datos, puedes controlar qué usuarios y recursos pueden acceder a ella y utilizarla. Para obtener más información, consulta Configura el RBAC de datos para las tablas de datos.
Administra tablas de datos con la interfaz web de Google SecOps
En las siguientes secciones, se describe cómo administrar tablas de datos con la interfaz web, lo que incluye cómo acceder a ellas, agregar una nueva y editar su contenido, importar datos a la tabla, agregar filas, separar datos con comas o tabulaciones, y quitar una tabla de datos de tu cuenta.
Accede a tus tablas de datos
Para acceder a la página Tablas de datos, haz lo siguiente:
- En la barra lateral izquierda, selecciona Investigación > Tablas de datos.
Para encontrar una tabla de datos específica, en la parte superior de la barra lateral, ingresa su nombre en el campo Búsqueda.
Agrega una nueva tabla de datos
Para agregar una nueva tabla de datos a Google SecOps, completa los siguientes pasos:
Haz clic en agregar Agregar en la parte superior derecha de la barra lateral.
En el cuadro de diálogo Crear una tabla de datos nueva, asigna un nombre a la tabla nueva y, de manera opcional, agrega una descripción.
Haz clic en Crear. La nueva tabla de datos aparecerá en la ventana principal y estará lista para aceptar datos.
Importa datos a tu tabla de datos
Para agregar datos a tu tabla de datos, puedes importarlos directamente a Google SecOps de la siguiente manera:
Haz clic en Import Data (Importar datos).
Selecciona un archivo CSV estándar (solo se pueden importar archivos CSV a Google SecOps).
Haz clic en Abrir cuando tengas todo listo para importar los datos a tu tabla de datos.
Asigna tipos de datos a columnas de tablas de datos individuales
Asigna cada tipo de datos a una sola columna de la tabla de datos. Cualquier columna que contenga valores para varios campos se debe dividir antes de que se pueda usar como tablas de datos.
En el siguiente ejemplo, la columna Field_value
de la tabla de datos contiene valores para varios campos:
Field_value | Field_name |
altostrat.com | FQDN |
192.0.2.135 | IP |
Charlie | userid |
ejemplo | Nombre de host |
La tabla anterior se divide en cuatro columnas, cada una de las cuales se asigna a un solo tipo de campo antes de que se pueda usar para cualquiera de los casos de uso de la tabla de datos que se presentan en este documento.
FQDN | IP | Userid | Nombre de host |
altostrat.com | 192.0.2.135 | Charlie | ejemplo |
… | … | … | … |
Asigna nombres de columnas a campos de entidad (opcional)
Cuando creas una tabla de datos, puedes asignar los nombres de las columnas de la tabla de datos a campos de entidad.
En la siguiente tabla de datos de ejemplo, las columnas Userid
y Role
se asignan a entity.user.userid
y entity.user.attribute.role.name
, respectivamente:
Userid
(asignarlo a entity.user.userid) |
Correo electrónico | Rol
(asignarlo a entity.user.attribute.role.name) |
conector | jack123@gmail.com | administrador |
Tony | tony123@gmail.com | ingeniero |
La columna Email
no se puede asignar a entity.user.email_address
porque es un campo repetido. Las columnas de la tabla de datos solo deben asignarse a campos de un solo valor (no repetidos).
Puedes asignar una columna de la tabla de datos a un campo de proto de entidad con el campo mapped_column_path
del recurso DataTable
.
Para las columnas que no tienen definida una ruta de entidad, como Email
en esta tabla de ejemplo, debes definir un tipo de datos. Al igual que con las listas de referencia, los tipos de datos admitidos para las tablas de datos son string
, regex
y cidr
.
Puedes incluir columnas asignadas y no asignadas en una tabla de datos si especificas una condición join
.
Las columnas sin asignar se almacenan en el campo additional
de la entidad a la que se une la tabla. Se agregan como pares clave-valor, en los que key
es el nombre de la columna y value
es el valor de la fila correspondiente.
Agrega una fila de datos nueva a tu tabla de datos
Para agregar una fila nueva de datos a una tabla de datos de forma manual, puedes ingresarla directamente, y la primera fila servirá como encabezado de la tabla. Para ello, sigue estos pasos:
En la pestaña Detalles, coloca el puntero sobre el final de una fila existente y presiona Intro.
Ingresa una nueva fila de datos:
- Separa los campos de datos con comas o tabulaciones.
- Asegúrate de que cada elemento de datos coincida con la columna de datos adecuada.
- A medida que ingresas los datos de una fila en la pestaña Detalles, se propagan en el editor de tablas.
Especifica si quieres usar comas o tabulaciones para separar los datos
Para separar los datos con comas o tabulaciones, haz lo siguiente:
Haz clic en
Editar tipo de separador junto a Importar datos.En el diálogo Editar tipo de separador, selecciona Coma o Tab en el menú Separador.
Cómo quitar una tabla de datos
Para quitar una tabla de datos, haz lo siguiente:
Selecciona una tabla de datos de la lista Tablas de datos que se encuentra a la izquierda.
Haz clic en Borrar.
Administra tablas de datos con la API de Chronicle
También puedes usar los recursos de REST disponibles en la API de Chronicle para administrar las tablas de datos en Google SecOps. La API puede replicar todas las funciones disponibles en la interfaz web y, además, incluye algunas funciones adicionales que te permiten administrar tablas de datos con más rendimiento y escalamiento.
Estos son los recursos de REST de la tabla de datos:
Usa tablas de datos en Google SecOps
Una vez que hayas importado las tablas de datos a tu instancia de Google SecOps, podrás usarlas para filtrar, mejorar y enriquecer tus datos con consultas YARA-L. En este documento, se incluyen numerosos ejemplos en la sintaxis de YARA-L, que puedes incorporar a Google SecOps.
Puedes usar tablas de datos junto con consultas YARA-L en la Búsqueda y en las reglas. Las tablas de datos se pueden usar de las siguientes maneras:
Filtra los datos de eventos o entidades de la UDM con una tabla de datos. Puedes filtrar los eventos y las entidades de telemetría de la AUA comparándolos con las entradas de una tabla de datos.
Usa una tabla de datos como una lista de referencia de varias columnas. Puedes usar una tabla de datos como una lista de referencia de varias columnas. Si bien una lista de referencia puede acceder a datos en una sola dimensión, las tablas de datos te permiten acceder a datos en varias dimensiones, lo que habilita el filtrado de datos.
Unir una tabla de datos con un evento o una entidad Puedes vincular los eventos de la UDM a una tabla de datos con el operador de igualdad (
=
) para las comparaciones basadas en filas. Esta comparación te permite filtrar los datos. Una comparación basada en filas se evalúa comotrue
solo si todas las condiciones de la sentencia coinciden con una sola fila en la tabla de datos.
Filtra los datos de eventos y entidades del UDM con una tabla de datos
Puedes filtrar los eventos y las entidades del UDM comparándolos con las entradas de una tabla de datos.
Vincula los eventos de la AUA a las tablas de datos de las siguientes maneras:
Usa un operador de igualdad (
=, !=, >, >=, <, <=
) para la comparación basada en filas. Por ejemplo,$<udm_variable>.<field_path> = %<data_table_name>.<column_name>
Usar la palabra clave
in
para la comparación basada en columnas Por ejemplo,$<udm_variable>.<field_path> in %<data_table_name>.<column_name>
.`
Al igual que con las listas de referencias, los tipos de datos admitidos para cada columna de la tabla de datos pueden ser string
, regex
o CIDR
.
Para usar una columna de tabla de datos de tipo CIDR o expresión regular para la comparación basada en filas, usa la siguiente sintaxis:
net.ip_in_range_cidr($e.principal.ip, %<data_table_name>.<column_name>)
re.regex($e.principal.hostname, %<data_table_name>.<column_name>)
Para usar una columna de tabla de datos de tipo CIDR o expresión regular para la comparación basada en columnas, usa la siguiente sintaxis:
$e.principal.ip in cidr %cidr_data_table.column_name
$e.principal.hostname in regex %regex_data_table.column_name
Si especificaste el tipo de datos de la columna como CIDR o expresión regular, excluye la palabra clave cidr
o regex
.
También puedes usar el operador not
con tablas de datos. En la siguiente consulta de ejemplo, se filtran las entradas en las que las direcciones IP ($e.principal.ip
) no coinciden con ninguno de los rangos de CIDR que se enumeran en la columna benign_ip
en cidr_data_table
:
not $e.principal.ip in %data_table.benign_ip
Usa una tabla de datos como lista de referencia de varias columnas
Puedes usar una tabla de datos como una lista de referencia de varias columnas. Si bien una lista de referencia puede acceder a datos en una sola dimensión (una columna), las tablas de datos admiten varias columnas, lo que te permite filtrar y acceder a datos en varias dimensiones.
Puedes vincular eventos de la AUA a una tabla de datos con la palabra clave in
para la comparación basada en columnas, lo que te permite hacer coincidir los valores de un campo de la AUA específico con los valores de una sola columna de la tabla de datos.
En el siguiente ejemplo, se activan alertas para las conexiones de red que coinciden con combinaciones sospechosas de port
y protocol
. La tabla de datos badApps
contiene dos columnas: port
y protocol
. La regla se activa cuando ambos
valores de un evento de la AUA coinciden con una fila de la tabla de datos.
events:
$e.metadata.event_type = NETWORK_CONNECTION
$e.security_result.action = ALLOW
$e.target.asset.asset_id = $assetid
// event port matches at least one value in table column port
$e.target.port in %badApps.port
// event IP matches at least 1 value in table column protocol
$e.target.network.ip in %badApps.ip
match:
$assetid over 1h
condition:
$e
Cómo unir una tabla de datos con un evento o una entidad de la AUA
Puedes vincular eventos de la AUA a una tabla de datos con operadores de igualdad (=, !=, >, >=, <, <=
) para realizar comparaciones basadas en filas. Este enfoque te permite filtrar datos haciendo coincidir los valores de los eventos del UDM con las filas de la tabla de datos. Si usas varias instrucciones de comparación, todos los campos deben coincidir en la misma fila de la tabla de datos.
En el siguiente ejemplo, se usa una columna de tabla de datos de tipo string
. Esta consulta de YARA-L verifica si un evento de acceso de usuario coincide con una fila en example_table
confirmando que el user ID
existe en la tabla. Ambas condiciones deben coincidir en la misma fila de la tabla de datos para que se active la regla.
// Check if a user exists in a data table and that the user is active for all user login events.
event:
$e.metadata.event_type = USER_LOGIN
$e.security_result.action = ALLOW
$e.principal.user.userid = $userid
// Event must match at least one row in the table where the uid in the table
// row is the userid for the event and the active date in the same table
// row is before the event timestamp
%example_table.uid = $userid
$e.principal.hostname = %example_table.hostname
match:
$userid over 1h
condition:
$e
En el siguiente ejemplo, se muestra cómo funcionan juntos una tabla de datos y los datos de eventos de la AUA. En función de la lógica de la consulta YARA-L anterior, un usuario con user ID 32452
aparece en la detección como el hostname
del usuario del sistema y coincide con el hostname
en la tabla de datos.
Tabla de datos | ||
uid | title | hostname |
32452 | RR.HH. | host1 |
64452 | Finanzas | host2 |
46364 | TI | host3 |
Tabla de eventos de la AUA | |||
principal | metadata | security_result | principal |
32452 | USER_LOGIN | PERMITIR | host1 |
64589 | USER_LOGIN | PERMITIR | host9 |
87352 | USER_LOGIN | PERMITIR | host4 |
Escribe los resultados de las consultas de YARA-L en tablas de datos
Puedes escribir los resultados de las consultas de YARA-L en una tabla de datos. Con esta función, puedes crear tablas de datos a partir de tus datos de Google SecOps y usarlas para filtrar y mejorar otros datos.
Puedes usar la sintaxis de escritura de consultas de YARA-L para lo siguiente:
Define la sintaxis de YARA-L para escribir los resultados de las consultas en tablas de datos.
Usa tablas de datos para la inteligencia de amenazas, la respuesta ante incidentes y otros casos de uso de seguridad.
Asegúrate de que los datos sean coherentes con las convenciones de YARA-L.
Escribe detecciones y alertas en tablas de datos con YARA-L
Puedes usar una consulta YARA-L para enviar detecciones y alertas a las tablas de datos.
Con la función write_row, puedes reemplazar una fila de la tabla de datos con la clave coincidente en la tabla de datos usando los resultados de una regla. Si la clave no se encuentra en la tabla, agrega una fila nueva.
Especifica la función write_row en la sección de exportación de una consulta YARA-L. La acción final de la consulta debe ser escribir datos en la tabla de datos. Esto garantiza que las variables de resultado se escriban en la tabla de datos.
export:
%<data_table_name>.write_row(
data_table_column_x_name: <value>,
data_table_column_y_name: <value>,
...,
...,
data_table_column_z_name: <value>
)
// depending on the key column(s), the rows will be updated for existing keys
and appended for new keys
Modifica una tabla de datos con YARA-L
A continuación, se muestra cómo modificar una tabla de datos con YARA-L:
TableName: ip_user_domain_table
(las columnas clave para la clave primaria se definen en el momento de la creación)
ip_address | employee_id* | domain |
192.0.2.10 | Dana | altostrat.com |
192.0.2.20 | Quinn | altostrat.com |
192.0.2.30 | Lee | cymbalgroup.com |
* indica la clave primaria.
La siguiente consulta captura combinaciones únicas de principal.ip
, principal.user.employee_id
y target.domain
. Filtra los resultados según la prevalencia de target.domain
:
events:
$e.principal.ip = $principal_ip
$e.principal.user.employee_id = $principal_user_employee_id
$e.target.domain.name = $target_domain
$e.target.domain.prevalence.day_count < 5
condition:
$e
Resultados de la consulta:
ip | empid | domain |
192.0.2.10 | Dana | altostrat.com |
192.0.2.30 | Lee | examplepetstore.com |
192.0.2.20 | Quinn | altostrat.com |
Ejemplo: Usa write_row para escribir el resultado de la consulta en una tabla de datos
events:
$e.principal.user.employee_id = $principal_user_employee_id
$e.target.domain.name = $target_domain
$e.target.domain.prevalence.day_count < 5
outcome:
$hostname = $target_domain
$principal_emp_id = $principal_user_employee_id
condition:
$e
export:
%ips_with_hostnames.write_row(
employeeid:$principal_emp_id,
hostname:$hostname,
)
Ejemplo: Información sobre write_row
En el siguiente ejemplo, user
y ip
se usan como claves primarias. Cada detección que persiste en la tabla de detecciones genera una evaluación de la llamada a función en la sección de exportación de la consulta.
events:
$e.metadata.event_type = "USER_LOGIN"
all $e.security_result.action != "BLOCK"
all $e.security_result.action != "UNKNOWN_ACTION"
$user = $e.principal.user.userid
$ip = $e.target.ip
$ts = $e.metadata.event_timestamp.seconds
match:
$user, $ip over 1h
outcome:
$first_seen = min($ts)
condition:
$e
export:
%successful_logins.write_row(user:$user, ip:$ip)
Estos son los datos del evento:
metadata: {
event_type: USER_LOGIN
event_timestamp: { seconds: 1283299200 }
}
principal: {
user: {
userid: "charlie"
}
}
target: {
ip: ["192.0.2.135", "192.0.2.136"]
}
security_result: {
action: ALLOW
}
Cuando se ejecuta esta consulta como una regla, se muestran las siguientes detecciones:
ID de detección | Coincidencia con $user | Match $ip |
0 | Charlie | 192.0.2.135 |
1 | Charlie | 192.0.2.136 |
La tabla de datos contiene lo siguiente:
usuario | ip |
Charlie | 192.0.2.135 |
charlie | 192.0.2.136 |
La siguiente búsqueda ilustra la compatibilidad que ofrece la Búsqueda para escribir valores escalares en tablas de datos.
events:
$e.metadata.event_type = "NETWORK_CONNECTION"
export:
%summary_table.write_row(col_name: &e.metadata.id)
"Event_Count":$e.metadata.id,
)
Enriquece el gráfico de entidades con una tabla de datos
Puedes usar tablas de datos para agregar, quitar o reemplazar las entidades que se presentan en el gráfico de entidades de las reglas. Usa funciones en la sección setup
de la regla para indicar cómo se debe combinar la tabla de datos, cómo se debe agregar a ella o cómo se debe usar para quitar entidades de los eventos de entidad a los que se hace referencia en la sección events
.
Puedes usar la siguiente plantilla de regla para modificar un gráfico de entidades:
rule entity_graph_template {
meta:
...
setup:
// import the data table into entity graph
<enrichment_keyword> <join_condition>
events:
...
match:
...
condition:
...
}
Puedes usar las siguientes funciones de YARA-L 2.0 para mejorar el gráfico de entidades con una tabla de datos:
graph_override
: Reemplaza las filas del gráfico de entidades que coincidan con la condición de unión con datos de la tabla de datos.Por ejemplo:
[graph_override](?tab=t.0#heading=h.v0fps7eke1if)
graph_append
: Agrega las filas de la tabla de datos a las filas del gráfo de entidades. La operacióngraph_append
requiere un array que incluya una variable de tabla de datos y una variable de evento de entidad en lugar de una condición de unión.En el siguiente ejemplo,
$g1
es la variable del gráfico de entidades yexample_table
es la tabla de datos:graph_append [$g1, %example_table]
En el caso de la función
append
, las tablas de datos deben incluir las siguientes columnas para validar la entidad:start_time
(asignada ametadata.interval.start_time.seconds
)end_time
(asignada ametadata.interval.end_time.seconds
)
Las columnas de la tabla de datos no se pueden asignar a campos de metadatos con la interfaz web. Para los casos de uso de
append
, las tablas de datos deben crearse con la API de Chronicle (https://cloud.google.com/chronicle/docs/reference/rest/v1alpha/projects.locations.instances.dataTables/create).graph_exclude
: Quita las filas del gráfico de entidades que coincidan con la condiciónjoin
.Por ejemplo:
[graph_exclude](?tab=t.0#heading=h.o0qbb5paki6g)
La condición de unión debe ser una expresión de igualdad entre la columna de la tabla de datos y el campo del gráfico de entidades. Para las funciones graph_override
y graph_exclude
, la sintaxis para acceder a una tabla de datos es la siguiente:
<data_table_name>.<column_name>
Cualquier filtro especificado para el <entity_variable>
en la sección del evento se aplica después de su mejora con la tabla de datos.
Después de que la entidad del gráfico de entidades se enriquece con la entidad de la tabla de datos, la variable de entidad del gráfico de entidades debe unirse a la entidad del UDM.
Cómo anular el gráfico de entidades con datos de la tabla de datos
Con la función graph_override
, los campos presentes en el grafo de entidades y en la tabla de datos se reemplazan por campos de la tabla de datos. Los campos presentes en el gráfico de entidades y no en la tabla de datos permanecen iguales. Se incluyen los campos que no están presentes en el gráfico de entidades, pero sí en la tabla de datos.
Solo las columnas de la tabla de datos que están asignadas anula las columnas del gráfico de entidades. Las columnas que no se asignan se agregan al campo additional
del gráfico de entidades en el que se une la tabla de datos.
Ejemplo: Coincidencia en una sola unión
En el siguiente ejemplo, la tabla de datos anula las filas del gráfico de entidades que coinciden con la condición de unión entre la columna de la tabla de datos y el campo del gráfico de entidades ($g1.graph.entity.ip = %example_table.my_ip
).
rule rule_override {
meta:
description = "Override entity context with data table before joining with UDM event"
setup:
//Rows in the entity graph that match the join condition are overridden by the data table
graph_override ($g1.graph.entity.ip = %example_table.my_ip)
events:
$e.metadata.event_type = "NETWORK_CONNECTION"
$e.security_result.action = "ALLOW"
// Filter will be applied after graph is overridden by data table
$g1.graph.entity.hostname = "ftp01"
// Accessing unmapped columns
$g1.graph.additional.fields["Owner"] = "alice"
// Joining the UDM event with the enriched entity graph
$e.target.ip = $iocip
$g1.graph.entity.ip = $iocip
match:
$iocip over 1h
condition:
$e and $g1
}
Para usar una columna sin asignar (por ejemplo, “Propietario”) de la tabla de datos, usa una sentencia equivalente para $g1.graph.entity.owner = "alice" is $g1.graph.additional.fields["Owner"] = "alice"
.
Esto se debe a que todas las columnas no asignadas de la tabla de datos van al campo additional
del grafo de entidades ($g1)
.
En las siguientes tablas, se ilustra una operación de anulación en la que las filas del gráfico de entidades se enriquecen cuando el campo de IP de la tabla de datos coincide con el campo de IP del gráfico de entidades.
Gráfico de entidades existente | ||
Nombre de host | IP | MAC |
ftp01 | 10.1.1.4 | …:01 |
www01 | 10.1.1.5 | …:02 |
Tabla de datos | |||
Nombre de host | IP | MAC | Propietario |
ftp01 | 10.1.1.4 | …:bb | alice |
h1 | 10.1.1.6 | …:cc | bob |
h2 | 10.1.1.7 | …:dd | Chris |
h3 | 10.1.1.4 | …:ee | doug |
Gráfico de entidades enriquecidas | |||
Nombre de host | IP | MAC | Propietario |
ftp01 | 10.1.1.4 | …:bb | alice |
www01 | 10.1.1.5 | …:02 | |
h3 | 10.1.1.4 | …:ee | doug |
Ejemplo: Coincidencia en varias combinaciones
En el siguiente ejemplo, la tabla de datos anula las filas del gráfico de entidades que coinciden con las múltiples condiciones de unión ($g1.graph.entity.ip = %example_table.my_ip
y $g1.graph.entity.hostname = %example_table.my_hostname
).
rule rule_override {
meta:
description = "Override Entity context with Data Table before joining with UDM event"
setup:
// example with more than one condition
graph_override ($g1.graph.entity.ip = %example_table.my_ip and
$g1.graph.entity.hostname = %example_table.my_hostname)
events:
$e.metadata.event_type = "NETWORK_CONNECTION"
$e.security_result.action = "ALLOW"
// Filter will be applied after graph is overridden by data table
$g1.graph.entity.hostname = "ftp01"
// joining the UDM event with the enriched entity graph
$e.target.ip = $iocip
$g1.graph.entity.ip = $iocip
match:
$iocip over 1h
condition:
$e and $g1
}
En las siguientes tablas, se ilustra una operación de anulación en la que las filas del gráfico de entidades se enriquecen cuando el campo de IP y el campo de nombre de host de la tabla de datos coinciden con el campo de IP y el campo de nombre de host del gráfico de entidades.
Gráfico de entidades existente | ||
Nombre de host | IP | MAC |
ftp01 | 10.1.1.4 | …:01 |
www01 | 10.1.1.5 | …:02 |
Tabla de datos | |||
Nombre de host | IP | MAC | Propietario |
ftp01 | 10.1.1.4 | …:bb | alice |
h1 | 10.1.1.5 | …:cc | bob |
h2 | 10.1.1.6 | …:dd | Chris |
h3 | 10.1.1.4 | …:ee | doug |
Gráfico de entidades enriquecidas | |||
Nombre de host | IP | MAC | Propietario |
ftp01 | 10.1.1.4 | …:bb | alice |
www01 | 10.1.1.5 | …:02 |
Cómo agregar datos de la tabla de datos al gráfico de entidades
Con la función graph_append
, no se requiere ninguna condición de unión.
En el siguiente ejemplo, todas las filas de la tabla de datos se adjuntan a las filas del gráfico de entidades.
rule rule_append {
meta:
description = "Data table append entity"
setup:
graph_append [$g1, %example_table]
events:
// filter UDM events
$e.metadata.event_type = "NETWORK_CONNECTION"
$e.security_result.action = "ALLOW"
// Join the filtered UDM events with the enriched graph
$e.target.ip = $iocip
$g1.graph.entity.ip = $iocip
match:
$iocip over 1h
condition:
$e and $g1
}
En la siguiente tabla de ejemplo, se ilustra una operación de adición en la que las filas de la tabla de datos se agregan a las filas del grafo de entidades:
Gráfico de entidades existente | ||
Nombre de host | IP | MAC |
ftp01 | 10.1.1.4 | …:01 |
www01 | 10.1.1.5 | …:02 |
Tabla de datos | ||
IP | MAC | Propietario |
10.1.1.4 | …:01 | alice |
10.1.1.6 | …:cc | bob |
10.1.1.7 | …:dd | Chris |
10.1.1.4 | …:ee | doug |
Gráfico de entidades enriquecidas | |||
Nombre de host | IP | MAC | Propietario |
ftp01 | 10.1.1.4 | …:01 | |
www01 | 10.1.1.5 | …:02 | |
10.1.1.4 | …:bb | alice | |
10.1.1.6 | …:cc | bob | |
10.1.1.7 | …:dd | Chris | |
10.1.1.4 | …:ee | doug |
Usa graph_exclude para quitar filas del gráfico de entidades
Con la función graph_exclude
, se quitan del gráfico de entidades las filas que coinciden con la condición de unión.
En el siguiente ejemplo, se quitan todas las filas del grafo de entidades que coinciden con la condición de unión proporcionada (entre la columna de la tabla de datos y el campo del grafo de entidades). No se agregan filas de la tabla de datos al gráfico de entidades.
rule rule_exclude {
meta:
setup:
graph_exclude ($g1.graph.entity.ip = %example_table.ip)
events:
$e.metadata.event_type = "NETWORK_CONNECTION"
$e.security_result.action = "ALLOW"
$e.target.ip = $iocip
$g1.graph.entity.ip = $iocip
match:
$iocip over 1h
condition:
$e and $g1
}
En las siguientes tablas, se ilustra una operación de exclusión en la que se quitan las filas del grafo de entidades que coinciden con el campo de IP de la tabla de datos:
Gráfico de entidades existente | ||
Nombre de host | IP | MAC |
ftp01 | 10.1.1.4 | …:01 |
www01 | 10.1.1.5 | …:02 |
Tabla de datos | ||
IP | MAC | Propietario |
10.1.1.4 | …:bb | alice |
10.1.1.6 | …:cc | bob |
10.1.1.7 | …:dd | Chris |
Gráfico de entidades enriquecidas | ||
Nombre de host | IP | MAC |
www01 | 10.1.1.5 | …:02 |
Limitaciones
Los límites de la cantidad de sentencias
in
cuando se hace referencia a una lista de referencias en una consulta también se aplican a las sentenciasin
en una tabla de datos.Solo se admite el tipo de archivo CSV para las cargas.
El tamaño máximo de una tabla de datos es de 10 GB.
El límite máximo agregado del volumen de datos en las tablas de datos de un inquilino es de 1 TB.
Cantidad máxima de sentencias
in
en una consulta, con o sin operadores especiales: 7Cantidad máxima de sentencias
in
con el operadorregex
: 4Cantidad máxima de sentencias
in
con el operadorcidr
: 2No se permiten marcadores de posición en la nueva sección de configuración.
Las columnas sin asignar de una tabla de datos con el tipo de datos establecido en
string
solo se pueden unir con campos de cadena del evento o la entidad del UDM.Usa solo columnas sin asignar en una tabla de datos con un tipo de datos establecido en
cidr
oregex
para CIDR o expresión regular.No puedes asignar la columna de una tabla de datos a un campo repetido.
Uniones
A diferencia de las entidades y la UDM, las tablas de datos no admiten marcadores de posición. Esto significa que no puedes aplicar un conjunto de filtros a una tabla de datos, unirla con una entidad de la AUA y, luego, aplicar un conjunto diferente de filtros a la misma tabla de datos y, al mismo tiempo, unirla con otra variable de marcador de posición de la AUA.
Por ejemplo, una tabla de datos llamada
dt
con 3 columnas:my_hostname
,org
ymy_email
, y con la siguiente regla:
events:
$e1.principal.hostname = %dt.my_hostname
%dt.org ="hr"
$e2.principal.email = %dt.my_email
%dt.org !="hr"
Primero, se aplican todos los filtros de una tabla de datos y, luego, las filas filtradas de la tabla de datos se unen con la UDM. En este caso, una tabla de datos vacía se une con e1
y e2
porque los dos filtros de la tabla de datos dt
se contradicen (%dt.org ="hr" and %dt.org !="hr"
).
Usa tablas de datos con reglas
Las siguientes limitaciones se aplican a las tablas de datos cuando se usan con reglas.
Frecuencia de ejecución
La frecuencia de ejecución en tiempo real no es compatible con las reglas que tienen tablas de datos.
Salida a tablas de datos
Solo puedes exportar variables de resultados a una tabla de datos. No puedes exportar directamente las columnas de la ruta de eventos ni de la tabla de datos.
Las listas de columnas deben incluir las columnas de clave primaria de las tablas de datos.
No puedes tener más de 20 resultados.
Las columnas de la tabla de datos no admiten valores repetidos, por lo que todas las variables de resultados que se escriben en una tabla de datos deben ser valores singulares.
Si no existe una tabla de datos, se crea una nueva con el tipo de datos de cadena predeterminado para todas las columnas, siguiendo el orden especificado.
Solo una regla puede escribir en una tabla de datos a la vez. Si una regla intenta escribir en una tabla de datos en la que ya está escribiendo otra regla, la compilación de la regla falla.
No hay garantía de que una regla de productor pueda agregar filas a una tabla de datos antes de que comience una regla de consumidor para esa tabla de datos.
Una regla tiene un límite en la cantidad de filas de resultados. Se aplica un límite de 10,000 filas a los resultados y los datos persistentes. El mismo límite se aplica a las tablas de datos. Una sola ejecución de reglas puede generar un máximo de 10,000 filas en una tabla de datos.
Si ya existe una fila con la misma clave primaria en la tabla de datos, las columnas de clave no primaria se reemplazarán por los valores nuevos.
Enriquecimiento de entidades a partir de tablas de datos
Solo puedes aplicar una operación de enriquecimiento (
override
,append
oexclude
) a una sola variable de gráfico de entidad.Cada operación de enriquecimiento se puede realizar con una sola tabla de datos.
Puedes definir un máximo de dos operaciones de enriquecimiento de cualquier tipo en la sección
setup
de una regla YARA-L.
En el siguiente ejemplo, se aplica una operación de anulación a la variable $g1
del grafo de entidades y una operación append
a la variable $g2
del grafo de entidades.
setup:
graph_override($g1.graph.entity.user.userid = %table1.myids)
graph_append [$g2, %table1]
En el ejemplo anterior, se usa la misma tabla de datos (table1
) para mejorar diferentes gráficos de entidades. También puedes usar diferentes tablas de datos para mejorar los diferentes gráficos de entidades, como se indica a continuación:
setup:
graph_override($g1.graph.entity.user.userid = %table1.myids)
graph_append [$g2, %table2]
Usa tablas de datos con la Búsqueda
Las siguientes limitaciones se aplican a las tablas de datos cuando se usan con la Búsqueda.
No puedes ejecutar consultas de búsqueda en tablas de datos con la API de Chronicle. Solo puedes ejecutar consultas de búsqueda desde la interfaz web.
Una sola ejecución de consulta puede generar un máximo de 1 millón de filas en una tabla de datos o 1 GB, lo que ocurra primero.
El resultado de la búsqueda en una tabla de datos omite las filas de eventos si superan los 5 MB.
Solo se admite el tipo de datos de cadena.
La función de enriquecimiento de entidades no es compatible con la Búsqueda.
Las tablas de datos no son compatibles con los clientes que usan claves de encriptación administradas por el cliente (CMEK).
Las operaciones de escritura se limitan a 6 por minuto por cliente.
La asistencia de la API no está disponible.
Las consultas de estadísticas no son compatibles con las uniones de tablas de datos.
La tabla de datos y la unión de tablas de datos solo son compatibles con eventos del UDM y no con entidades.
Compatible:
%datatable1.column1 = %datatable2.column1
No compatible:graph.entity.hostname = %sample.test
No puedes incluir una variable
match
en la consulta de estadísticas en la secciónexport
.Por ejemplo, no se admite lo siguiente:
none match: principal.hostname export: %sample.write_row( row: principal.hostname )
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.