Ajuste de las bases de datos: Consultas

Document created by RSA Information Design and Development on Apr 19, 2018Last modified by RSA Information Design and Development on Apr 23, 2018
Version 3Show Document
  • View in full screen mode
 

En este tema se describe la sintaxis de las consultas en la base de datos. Hay tres mecanismos principales para realizar consultas en la base de datos, las llamadas query , values y msearch en la carpeta /sdk de cada servicio principal.

La llamada query devuelve elementos de metadatos de la base de datos de metadatos, posiblemente mediante el uso del índice para una recuperación rápida.

La llamada values devuelve grupos de valores de metadatos únicos ordenados según algunos criterios. Está optimizada para devolver un subconjunto de los valores únicos ordenados según una función de agregado, como conteo.

La llamada msearch toma como su entrada los términos de búsqueda de texto y devuelve las sesiones que coinciden con los términos de búsqueda. Puede buscar dentro de los índices, los metadatos, los paquetes crudos o los registros crudos.

query Sintaxis

El mensaje query tiene la siguiente sintaxis:

 query-params = size-param, space, query-param, {space, start-meta-param}, {space, end-meta-param}; size-param = "size=", ? integer between 0 and 1,677,721 ? ; query-param = "query=", query-string ; start-meta-param = "id1=", metaid ; end-meta-param = "id2=", metaid ; metaid = ? any meta ID from the meta database ? ; 

Los parámetros id1 , id2 y size forman un mecanismo de paginación para el retorno de una gran cantidad de resultados de la base de datos. Su uso beneficia principalmente a los desarrolladores que escriben aplicaciones directamente contra la base de datos de NetWitness Core. Normalmente, los resultados se devuelven en el orden de los datos más antiguos a los más recientes (los ID de metadatos más altos son siempre más recientes). Para devolver los resultados del más reciente al más antiguo, invierta los ID de tal manera que id1 sea mayor que id2 . Esto tiene una leve pérdida de rendimiento, ya que la cláusula where debe estar completamente evaluada antes de que el procesamiento en orden inverso pueda comenzar.

Cuando el tamaño se deja fuera o se establece en cero, el sistema retrocede todos los resultados sin paginación. En el caso de la interfaz RESTful, esto da lugar a que se devuelva la respuesta completa con codificación fragmentada. El protocolo nativo devuelve los resultados a través de varios mensajes.

El parámetro query es una cadena de comandos query con su propia sintaxis específica de NetWitness:

 query-string = select-clause {, where-clause} {, group-by-clause {, order-by-clause } } ; select-clause = "select ", ( "*" | meta-or-aggregate {, meta-or-aggregate} ) ; where-clause = " where ", { where-criteria } ; meta-or-aggregate = meta | aggregate_func, "(", meta-key, ")" ; aggregate_func = "sum" | "count" | "min" | "max" | "avg" | "distinct" | "first" | "last" | "len" | "countdistinct" ; group-by-clause = " group by ", meta-key-list meta-key-list = meta-key {, meta-key-list} order-by-clause = " order by ", order-by-column order-by-column = meta-or-aggregate { "asc" | "desc" } {, order-by-column} 

La cláusula select permite especificar * para devolver todos los metadatos en todas las sesiones que coincidan con la cláusula where, o un conjunto de nombres de campos de metadatos y funciones de agregado para seleccionar un subconjunto de los metadatos con cada sesión.

La cláusula select puede contener nombres de clave de metadatos cuyo nombre cambió. Los campos que aparecen en el conjunto de resultados como consecuencia del cambio de nombre de una clave en la cláusula select se devolverán con el nombre de la clave de metadatos que coincide con el nombre utilizado en la cláusula select . Por ejemplo, si la clave port_src se utiliza para cambiar el nombre de tcp.srcport , una consulta que contiene select port_src solo devolverá campos port_src , incluso si los metadatos subyacentes tuvieran el tipo tcp.srcport .

Las funciones de agregación tienen el siguiente efecto en el conjunto de resultados de las consultas.

                                             
Función Resultado
sum Agrega todos los valores de metadatos juntos; solo funciona con números
count El total de campos de metadatos que se han devuelto
min El valor mínimo que se ve
max El valor máximo que se ve
avg El valor promedio para el número
distinct Devuelve una lista de todos los valores únicos que se ve
countdistinct Devuelve la cantidad de valores únicos obtenidos. countdistinct es equivalente a la cantidad de metadatos que habría devuelto la función distinct.
first Devuelve el primer valor que se ve
last Devuelve el último valor que se ve
len Convierte todos los valores de campo a una longitud UInt32 en lugar de devolver el valor real. Esta longitud es el número de bytes para almacenar el valor real, no la longitud de la estructura almacenada en la base de datos de metadatos. Por ejemplo, la palabra “NetWitness” devuelve una longitud de 10. Todos los campos IPv4, como ip.src , devuelven 4 bytes.

where Cláusulas

La cláusula where es una especificación de filtro que permite seleccionar sesiones de la recopilación mediante el índice.

Sintaxis:

 where-criteria = criteria-or-group, { space, logical-op, space, criteria-or-group } ; criteria-or-group = criteria | group ; criteria = meta-key, ( unary-op | binary-op meta-value-ranges ) ; group = ["~"], "(" where-clause ")" ; logical-op = "&&" | "||" ; unary-op = "exists" | "!exists" ; binary-op = "=" | "!=" | "<" | ">" | ">=" | "<=" | "begins" | "contains" | "ends" | "regex" ; meta-value-ranges = meta-value-range, { ",", meta-value-range } ; meta-value-range = (meta-value | "l" ), [ "-", ( meta-value | "u" ) ] ; meta-value = number | quoted-value | ip-address | mac-address | relative-time ; quoted-value = ( '"' text '"' ) | ( '"' date-time '"' ) ; relative-time = "rtp(" , time-boundary , "," , positive-integer , time-unit, ")" ; time-boundary = "earliest" | "latest" ; positive-integer = ? any non-negative integral number ? time-unit = "s" | "m" | "h" ; 

Cuando se especifican criterios de regla, se espera que la parte meta-value de la cláusula coincida con el tipo de metadatos que especifica meta-key . Por ejemplo, si la clave es ip.src , meta-value debe ser una dirección IPv4.

Las consultas que usan un nombre meta-key coincidirán con elementos de metadatos correspondientes al nombre meta-key y también a los nombres de cualquier “cambio de nombre” especificado para la clave. Consulte “Cambio de nombre de clave” en el tema Personalización del índice para obtener detalles acerca del cambio de nombre de clave.

Operadores de consulta

En la tabla siguiente se describe la función de cada operador.

                                                         
Operador Función
= Coincide con sesiones que contienen exactamente el mismo valor de metadatos. Si se especifica un rango de valores, cualquiera de los valores se considera una coincidencia.
!= Coincide con todas las sesiones que no coincidirían con la misma cláusula como si estuvieran escritas con el operador = .
< En el caso de valores numéricos, coincide con sesiones que contienen metadatos con el valor numérico menor que el lado derecho. Si el lado derecho es un rango, se considera el primer valor del rango. Si se especifican varios rangos, el comportamiento es indefinido. Para metadatos de texto, se realiza una comparación lexicográfica.
<= El mismo comportamiento que < , pero las sesiones que contienen metadatos que igualan exactamente el valor también se consideran coincidencias.
> Similar al operador < , pero coincide con sesiones en las cuales el valor numérico es mayor que el lado derecho. Si el lado derecho es un rango, se considera el último valor del rango para la comparación.
>= El mismo comportamiento que > , pero las sesiones que contienen metadatos que igualan exactamente el valor también se consideran coincidencias.
begins Coincide con sesiones que contienen valor de metadatos de texto que comienzan con los mismos caracteres que el lado derecho.
ends Coincide con sesiones que contienen metadatos de texto que terminan con los mismos caracteres que el lado derecho.
contains Coincide con sesiones que contienen metadatos de texto que incluyen la subcadena dada en el lado derecho.
regex Coincide con sesiones que contienen metadatos de texto que coinciden con la expresión regular dada en el lado derecho. El análisis de la expresión regular se maneja mediante boost::regex.
exists Coincide con sesiones que contienen cualquier valor de metadatos con la clave de metadatos dada.
!exists Coincide con sesiones que no contienen valor de metadatos con la clave de metadatos dada.
length Coincide con sesiones que contienen valores de metadatos de texto de cierta longitud. La expresión en el lado derecho debe ser un número no negativo.

Valores de texto

El sistema espera valores de texto entre comillas. A menos que se pueda analizar como tiempo (consulte a continuación), un valor entre comillas se interpreta como texto.

Direcciones IP

Las direcciones IP se pueden expresar mediante representaciones de texto estándar para las direcciones IPv4 e IPv6. Además, la consulta puede usar la notación CIDR para expresar un rango de direcciones. Si se usa la notación CIDR, se expande al rango de valores equivalente.

Direcciones MAC

Una dirección MAC se puede especificar mediante una notación de dirección MAC estándar: aa:bb:cc:dd:ee:ff

Expresiones de fecha y hora

En NetWitness Suite, las fechas se representan mediante tiempo Unix, que es la cantidad de segundos desde el 1 de enero de 1970 UTC. En las consultas, se puede expresar el tiempo como esta cantidad de segundos, o puede usar la representación de cadena. La representación de cadena para la fecha y la hora es "YYYY-mmm-DD HH:MM:SS" . Una abreviatura de tres letras representa el mes. También puede expresar el mes como un número de dos dígitos, 01–12.

Los valores de hora deben ir entre comillas.

Se espera que todas las horas que se expresan en las consultas estén en UTC.

Puntos de tiempo relativos

Los puntos de tiempo relativos permiten que una cláusula where haga referencia a un valor en algún desplazamiento fijo relativo a los metadatos de tiempo más tempranos o más recientes observados en la recopilación.

Una expresión de punto de tiempo relativo tiene la sintaxis rtp(boundary, duration) .

El límite es earliest o latest .

La duración es una expresión de horas, minutos o segundos. Por ejemplo, 24h , 60m o 60s .

Los puntos de tiempo relativos solo se pueden utilizar en operaciones de SDK, donde hay una recopilación desde la cual se obtienen los límites para los metadatos de tiempo más tempranos y más recientes.

Los puntos de tiempo relativos solo funcionan en tipos de metadatos indexados. Los tipos de metadatos indexados predeterminados son time y event.time .

Ejemplos:

 Last 90m of collection time: time = rtp(latest, 90m) - u First 2 days of event time: event.time = l - rtp(earliest, 48h) 

Valores de rango especiales

Generalmente, los rangos se expresan con la sintaxis * smallest * - * largest *, pero puede usar algunos valores especiales de marcador de posición en las expresiones de rango. Puede usar la letra l para representar el límite inferior de todos los valores de metadatos como el inicio del rango, y u para representar el límite superior. Los límites se determinan con la observación del valor de metadatos menor o mayor que se encuentra en el índice de todos los valores de metadatos que ya ingresaron en el índice.

Si usa la etiqueta l o u , no debe estar entre comillas.

Por ejemplo, la expresión time = "2014-may-20 11:57:00" - u coincidiría con todas las horas desde el 20 de mayo de 2014 a las 11:57:00 h hasta la hora más reciente que se encuentra en la recopilación.

Observe que es fácil confundir una expresión de rango con una cadena de caracteres. Asegúrese de que los valores de texto que contienen - estén entre comillas y que los guiones dentro de las expresiones de rango no estén dentro de texto entre comillas.

Cláusula group by (desde 10.5)

La API de consulta tiene la capacidad de generar grupos agregados a partir de los resultados de una llamada query. Esto se hace mediante una cláusula group by en la consulta. Cuando se especifica group by , el conjunto de resultados para la consulta se subdivide en grupos. Cada grupo de resultados se identifica de manera única con los valores de metadatos que se indican en la cláusula group by.

Por ejemplo, considere la consulta select count(ip.dst) . Esta consulta devuelve un conteo de todos los metadatos ip.dst en la base de datos. Sin embargo, si agrega una cláusula group by como esta: select count(ip.dst) group by ip.src , la consulta devuelve un conteo de los metadatos ip.dst que se encuentran para cada ip.src único.

A partir de NetWitness Suite versión 10.5, puede utilizar hasta 6 campos de metadatos en una cláusula group by .

La cláusula group by tiene en parte la misma funcionalidad que la llamada values , pero ofrece una cantidad considerablemente mayor de grupos avanzados a expensas de tiempos de consulta más prolongados. La producción de los resultados de una consulta agrupada implica leer los metadatos de la base de datos de metadatos de todas las sesiones que coinciden con la cláusula where , mientras que una llamada values puede producir sus agregados con tan solo leer el índice.

La cláusula select define el contenido de cada grupo que devuelve la consulta. La cláusula select puede contener cualquiera las funciones de agregado o de los campos de metadatos seleccionados. Si se seleccionan múltiples agregados, el resultado de la función de agregado se define para cada grupo. Si se seleccionan campos no agregados, los campos de metadatos se devuelven en lotes para cada grupo.

El conjunto de resultados de una consulta group by se codifica con las siguientes reglas:

  1. Todos los elementos de metadatos asociados a un grupo se entregan con el mismo número de grupo.
  2. Los primeros elementos de metadatos que se devuelven al grupo identifican la clave del grupo. Por ejemplo, si la cláusula group by especifica group by ip.src , el primer elemento de metadatos de cada grupo será ip.src .
  3. Los elementos de metadatos no agregados normales se devuelven después de group key , pero todos tendrán el mismo número de grupo que los metadatos de clave del grupo.
  4. A continuación se devuelven los campos de metadatos de resultados agregados para cada grupo.
  5. Todos los campos dentro de un grupo se devuelven juntos. Los diversos resultados de grupos no se entrelazarán.

Si falta uno de los elementos de metadatos group by en una de las sesiones que coincidieron con la cláusula where , ese campo de metadatos se trata como NULO en lo que respecta a ese grupo. Cuando se devuelven los resultados para ese grupo, las partes con valor NULO de la clave del grupo se omitirán de los resultados del grupo, puesto que la base de datos no tiene el concepto de NULO.

La semántica de una consulta group by difiere de una base de datos como SQL en términos de los campos de metadatos que se devuelven. En las bases de datos SQL, debe seleccionar explícitamente las columnas group by en la cláusula select si desea que se devuelvan en el conjunto de resultados. La base de datos de NetWitness Core devuelve siempre implícitamente las columnas de grupo en primer lugar.

Una consulta con una cláusula group by respeta el parámetro size del conjunto de resultados, si se proporciona uno. Sin embargo, debido a la naturaleza de la agrupación, impone una carga adicional en el llamador para paginar y reformar grupos en caso de que se solicite un conjunto de resultados de tamaño fijo. Por esta razón, no debe especificar un tamaño de resultado explícito cuando se hace una llamada group by . Cuando no se especifica un tamaño explícito, el conjunto de resultados completo se entrega como resultados parciales.

En la siguiente tabla se describen los parámetros de configuración que debe respetar la base de datos y que limitan el impacto en los I/O o en la memoria de una consulta group by.

             
Parámetro Función
/sdk/config/max.query.groups Este es el límite de la cantidad de grupos que se pueden mantener en la memoria para calcular agregados. Este parámetro permite limitar el uso total de la memoria de la consulta.
/sdk/config/max.where.clause.sessions Este es el límite de la cantidad de sesiones desde la cláusula where que se pueden procesar en una consulta. Este parámetro permite configurar un límite de la cantidad de sesiones que se deben leer desde las bases de datos de sesiones y metadatos para resolver una consulta.

Cláusula order by (desde 10.5)

Una cláusula order by se puede agregar a una consulta que contiene una cláusula group by . La cláusula order by hace que el conjunto de resultados agrupados se devuelva de manera ordenada.

Una cláusula order by consta de un conjunto de elementos de clasificación en orden ascendente o descendente. El orden se puede aplicar a cualquiera de los campos de datos que se devolverá en el conjunto de resultados. Esto incluye los metadatos que especifica la cláusula select , los resultados de las funciones de agregado que especifica la cláusula select o los campos de metadatos de group by .

La cláusula order by puede ordenar muchas columnas. No hay un límite en la cantidad de columnas order by que se permiten en la consulta, pero existe un límite práctico que consiste en que cada una de las columnas order by debe hacer referencia a algo que devolvieron las cláusulas select o group by . La clasificación de múltiples columnas se impone de manera lexicográfica, lo cual significa que si dos grupos tienen valores iguales para la primera columna, se clasifican por las segundas columnas. Si son iguales en la segunda columna, se clasifican por la tercera y así sucesivamente para la cantidad de columnas order by que se proporcionan.

La base de datos de NetWitness Core es única en el sentido de que cada uno de los grupos de resultados que devuelve una consulta puede tener muchos valores para una selección. Por ejemplo, es posible seleccionar todos los elementos de metadatos que coinciden con un tipo de metadatos y organizarlos en grupos, y es posible usar la función distinct() para devolver grupos de valores de metadatos distintos. Si una cláusula order by hace referencia a uno de los campos del grupo que tiene múltiples valores, el orden de clasificación se aplica de la siguiente manera:

  1. Dentro de cada grupo, los campos con múltiples valores coincidentes se ordenan por la cláusula de orden
  2. Todos los grupos se clasifican mediante la comparación de la primera aparición del campo ordenado que se encuentra dentro de cada grupo

La cláusula order by solo está disponible en consultas que tienen una cláusula group by , puesto que se requieren grupos para organizar los campos de metadatos en los registros distintos. Si desea clasificar una consulta arbitraria como si no se aplicara agrupación, use group by sessionid . Esto garantiza que los resultados se devuelven en grupos de sesiones o eventos distintos.

Las cláusulas group by se devuelven naturalmente en orden de clave de grupo ascendente, pero se puede usar una cláusula order by para devolver grupos en otro orden.

Si una columna order by no especifica asc o desc , el orden predeterminado es ascendente.

Ejemplos:

 select countdistinct(ip.dst) GROUP BY ip.src ORDER BY countdistinct(ip.dst) select countdistinct(ip.dst) GROUP BY ip.src ORDER BY countdistinct(ip.dst) desc select countdistinct(ip.dst),sum(size) GROUP BY ip.src ORDER BY sum(size) desc, countdistinct(ip.dst) select sum(size) GROUP BY ip.src, ip.dst ORDER BY ip.dst desc select user.dst,time GROUP BY sessionid ORDER BY user.dst select * GROUP BY sessionid ORDER BY time 

Llamada values

El índice proporciona una función values de bajo nivel para acceder a los valores de metadatos únicos que se almacenaron en el índice. Esta función permite a los desarrolladores realizar operaciones más avanzadas en grupos de valores de metadatos únicos.

La sintaxis de los parámetros de la llamada values :

 values-params = field-name-param, space, where-param, space, size-param, {space, flags-param} {space, start-meta-param}, {space, end-meta-param}, {space, threshold-param}, {space, aggregate-func-param}, {space, aggregate-field-param}, {space, min-param}, {space, max-param} ; field-name-param = "fieldName=", meta-key ; where-param = "where=", where-clause ; size-param = "size=", ? integer between 1 and 1,677,721 ? ; start-meta-param = ? same as query message ? end-meta-param = ? same as query message ? flags-param = "flags=", {values-flag, {"," values-flag} } ; values-flag = "sessions" | "size" | "packets" | "sort-total" | "sort-value" | "order-ascending" | "order-descending" ; threshold-flag = "threshold=", ? non-negative integer ? ; aggregate-func-param = "aggregateFunction=", { aggregate-func-flag } ; aggregate-func-flag = "count" | "sum" ; aggregate-field-param = "aggregateFieldName=", meta-key ; min-param = "min=", meta-value ; max-param = "max=", meta-value ; 

La llamada values proporciona la función de devolver un conjunto de valores de metadatos únicos para una clave de metadatos determinada. Para cada valor único, la llamada values puede proporcionar un conteo total de agregación. El parámetro de marcas controla la función que se utiliza para generar el total.

Parámetros

En la siguiente tabla se describe la función de cada parámetro.

                                         
Parámetro Función
fieldName Este es el nombre de la clave de metadatos para la cual se recuperan valores únicos. Por ejemplo, si fieldName es ip.src , esta función devuelve los valores de IP de origen únicos de la recopilación. Si fieldName se refiere a una clave con referencias de cambio de nombre, el resultado se define como el conjunto combinado de valores de campo para el nombre de clave de metadatos determinado más todas las claves de metadatos de las referencias.
where Esta es una cláusula where que filtra el conjunto de sesiones para el cual se devuelven los valores únicos. Por ejemplo, si fieldName es ip.src y la cláusula where es ip.src = 192.168.0.0/16 , solo se devuelven valores en el rango de 192.168.0.0 a 192.168.255.255 . Para obtener información sobre la sintaxis de la cláusula where , consulte Cláusulas where .
size El tamaño del conjunto de valores únicos para devolver. Esta función está optimizada para devolver un pequeño subconjunto de los posibles valores únicos en la base de datos.
id1 , id2 Estos parámetros opcionales limitan el alcance de la búsqueda de valores únicos a una región específica de la base de datos de metadatos y el índice. Establecer los parámetros id1 e id2 en un rango limitado de la base de datos de metadatos es muy importante para realizar búsquedas rápidamente en recopilaciones grandes.
flags Los indicadores controlan cómo se clasifican y totalizan los valores. Los indicadores se describen en la siguiente sección Indicadores de valores.
threshold La configuración del parámetro threshold permite que la llamada values realice un acceso directo para la recopilación del total asociado a cada valor una vez que se alcanza el umbral. El usuario que llama, cuando proporciona un umbral, puede reducir la cantidad de elementos de índice y metadatos que se debe recuperar de la base de datos. Si el parámetro threshold se omite o se establece en 0, esta optimización no se utiliza.
aggregateFunction Parámetro opcional que se usa para cambiar el comportamiento predeterminado de conteo de sesiones, paquetes o tamaños a conteo o resumen del campo numérico que define aggregateFieldName . Se deben especificar ambos parámetros cuando se define alguno. Transmita sum o count para especificar el comportamiento que se ejecutará.
aggregateFieldName El campo de metadatos en el que se ejecuta aggregateFunction . Los parámetros aggregateFunction y aggregateFieldName se deben especificar cuando se configura la marca aggregate . Realizar una llamada values con el uso de una de las funciones de agregado puede ser significativamente más lento que una llamada values que recopila totales de sesiones, paquetes o tamaños. El motivo de esto es que cada sesión que coincide con la cláusula where debe recuperarse de la base de datos de metadatos. Este escaneo hace que una gran parte de la consulta esté en el límite de I/O de los volúmenes de base de datos de metadatos. El tiempo que tarda la ejecución de una llamada values agregada es linealmente proporcional a la cantidad de sesiones que coinciden con la cláusula where .
min , max El valor mínimo y máximo que debería devolver la llamada. Estos parámetros se usan para iterar (o paginar) en una cantidad de valores extremadamente grande, generalmente más valores que aquellos que podrían devolver una sola llamada. Se usan principalmente en conjunto con las marcas sort-value,sort-ascending , de tal modo que el valor más alto devuelto se use en una llamada posterior como el valor del parámetro min . Los valores son exclusivos. Si se especificó min="rsa" y rsa es un valor válido, no se devolverá rsa , sino que el siguiente valor más alto.

Marcas de values

El parámetro flags controla la forma en que funciona la llamada values. Hay tres grupos de marcas que corresponden a los diferentes modos de funcionamiento, como se muestra en la siguiente tabla.

                 
Marca Descripción
sessions , size , packets La llamada values permite especificar una de estas marcas para determinar cómo se calcula el total de cada valor. Si la marca es sessions , la llamada values devuelve un conteo de las sesiones que contienen cada valor. Si la marca es size , la llamada values totaliza el tamaño de todas las sesiones que contienen cada valor único e informa el tamaño total de cada valor único. Si la marca es packets , la llamada values totaliza la cantidad de paquetes de todas las sesiones que contienen cada valor único e informa el total de cada valor único.
sort-total , sort-value Estas marcas controlan cómo se clasifican los resultados. Si la marca es sort-total , el conjunto de resultados se clasifica por orden de los totales recopilados. Si la marca es sort-value , los resultados se devuelven por orden según el orden de clasificación de los valores.
order-ascending , order-descending Estos indicadores controlan el orden de clasificación del conjunto de resultados. Por ejemplo, si se clasifica por total en orden descendente, en primer lugar se devuelven los valores con el total mayor.

Ejemplo de llamada values

La vista Navegación en NetWitness Suite usa ampliamente la llamada values . La vista predeterminada genera llamadas que tienen la siguiente apariencia:

 /sdk/values id1=198564099173 id2=1542925695937 size=20 flags=sessions,sort-total,order-descending threshold=100000 fieldName=ip.src where="time=\"2014-May-20 13:12:00\"-\"2014-May-21 13:11:59\"" 

En este ejemplo, la vista Navegación solicita valores únicos para ip.src . Solicita valores únicos de ip.src en el rango de tiempo dado. Solicita el conteo de sesiones que coinciden con cada ip.src y los resultados son los 20 valores ip.src principales cuando se clasifican por el conteo total de sesiones en orden descendente. Además, la vista Navegación tiene un rango de ID de metadatos para proporcionar una pista de optimización al motor de consulta.

Llamada msearch

El índice proporciona una función msearch de bajo nivel para realizar búsquedas de texto de todos los tipos de metadatos. Este tipo de búsqueda no requiere que los usuarios definan sus consultas en términos de tipos de metadatos conocidos. En su lugar, busca coincidencias en todas las partes de la base de datos. msearch se usa en la búsqueda de texto de la vista Eventos. Consulte el tema “Filtrar y buscar resultados en la vista Eventos” de la Guía de Investigation y Malware Analysis para obtener detalles acerca de las formas de búsqueda aceptadas y ejemplos.

Parámetros de msearch :

 msearch-params = search-param, {space, where-param}, {space, limit-param}, {space, flags-param}; search-param = "search=", ? free-form search string ? ;where-param = "where=", ? optional where clause ? ; limit-param = "limit=", ? optional session scan limit ? ;flags = "flags=", {msearch-flag, {"," msearch-flag} }; msearch-flag = "sp" | "sm" | "si" | "ci" | "regex" ; 

El algoritmo msearch funciona de la siguiente manera:

  1. Se identifica un conjunto de sesiones del índice mediante la búsqueda de la intersección de tres conjuntos:
    • (Conjunto 1) Todas las sesiones de la base de datos
    • (Conjunto 2) Sesiones que coinciden con el parámetro de la cláusula where
    • (Conjunto 3) Si se especifica la marca si , sesiones con valores indexados que coinciden con el parámetro de cadena de búsqueda.
  2. Si la búsqueda especifica el parámetro sm , se leen todos los elementos de metadatos del conjunto de sesiones identificado en el paso 1 y se escanean para ver si coinciden con el parámetro de cadena de búsqueda. Los elementos de metadatos se leerán desde el servicio más cercano al punto donde se ejecutó la búsqueda. Por ejemplo, si la búsqueda se realiza en un Broker, los elementos de metadatos se pueden leer desde el Concentrator más cercano al Broker, pero si se realiza en un Archiver, se leerán desde el propio Archiver.
  3. Si la búsqueda especifica el parámetro sp , se leen todas las entradas de paquetes o registros crudos del conjunto de sesiones identificado en el paso 1 y se escanean para ver si coinciden con el parámetro de cadena de búsqueda. Los paquetes se leerán desde el servicio más cercano al punto donde se ejecutó la búsqueda. Por ejemplo, si la búsqueda se realiza en un Concentrator, los datos de paquetes se leerán desde el Decoder, pero si se realiza en un Archiver, se leerán desde el propio Archiver.
  4. Las coincidencias de los pasos 2 y 3 se devuelven a medida que se encuentran hasta el punto en el cual se alcanza el parámetro limit . Limit especifica la cantidad máxima de sesiones para las cuales se escanearán metadatos y datos de paquetes. Si no se especifica, se escanea el conjunto de sesiones completo determinado en el paso 1.

Marcas de msearch

                         
Marca Descripción
sp Escanea datos de paquetes crudos
sm Escanea todos los metadatos
si Realiza búsquedas de índice para todos los parámetros de búsqueda antes de escanear metadatos
ci Lleva a cabo una búsqueda que no distingue mayúsculas de minúsculas. Los resultados devueltos conservan las mayúsculas y las minúsculas.
regex Trata el parámetro de búsqueda como una expresión regular. Se puede especificar solo una expresión regular, pero esta puede ser arbitrariamente compleja.

Modo de búsqueda de índice de msearch

El uso del modo de búsqueda de índice, que se especifica mediante la marca si , hace que los resultados se devuelvan de manera mucho más rápida que con cualquier otro modo. La principal limitación de este modo es que solo devuelve coincidencias en términos de texto que coinciden con valores de metadatos indexados por valor.

  • El parámetro si se debe combinar con la marca sm . El parámetro si implica que la búsqueda solo obtiene coincidencias con metadatos indexados.
  • El parámetro si se puede utilizar con búsquedas regex; sin embargo, solo habrá coincidencias con valores indexados de texto. Las direcciones IP y los números no coincidirán con regex.

Consejos para msearch

  • Utilice siempre la cláusula where para especificar un rango de tiempo para la búsqueda.
  • Para buscar rangos de direcciones IP, debe especificarlas en la cláusula where .
  • Utilice el parámetro limit cuando no use el modo de búsqueda de índice. Sin él, las bases de datos de metadatos y paquetes leerán una cantidad excesiva de datos.

Procedimientos almacenados

Las llamadas query y values proporcionan más funcionalidad de búsqueda de bajo nivel. Para los casos de uso más avanzados, existen procedimientos almacenados en el nivel de servidor.

Uso de comillas en la sintaxis de una consulta

El analizador de consultas no distingue si se usan comillas simples o dobles en una declaración de consulta. Un valor entre comillas simples o dobles se trata como metadatos de texto.

El analizador de consultas intenta encontrar sentido a lo que se agrega en la declaración. No es muy estricto en cuanto a lo que aceptará.

Por ejemplo:

reference.id=4752

Esta cláusula identifica las sesiones que tienen un valor de metadatos reference.id con un valor numérico de 4,752.

reference.id='4752' o reference.id="4752"

Esta cláusula identifica las sesiones que tienen un valor de metadatos reference.id con un valor de cadena de 4752 .

Sin embargo, el motor de consultas compara de manera implícita como iguales los números y las cadenas que parecen números cuando los valores son semánticamente iguales. Por lo tanto, funciona con cualquier sintaxis.

Sin embargo, para lograr el rendimiento más eficiente, siempre es recomendable crear consultas de modo que su sintaxis coincida con los tipos de datos que genera el analizador.

Por ejemplo, si el analizador está creando reference.id como un tipo de datos numérico (por ejemplo, uint32 o uint64 ), use la sintaxis numérica.

Si está creando reference.id como un tipo de datos de texto, use la sintaxis de cadena.

Previous Topic:Rollover
You are here
Table of Contents > Consultas

Attachments

    Outcomes