Base de données Core : Syntaxe de requête

Document created by RSA Information Design and Development on Feb 3, 2017
Version 1Show Document
  • View in full screen mode
  

Cette rubrique couvre la syntaxe de requête de la base de données. Il existe trois principaux mécanismes pour effectuer des requêtes dans la base de données : l'appel query, l'appel values et l'appel msearch dans le dossier /sdk pour chaque service Core.

L'appel query renvoie des éléments de métadonnées depuis la métabase de données, éventuellement à l'aide de l'index pour une récupération rapide.

L'appel values renvoie des groupes de valeurs de métadonnées uniques triés selon certains critères. Il est optimisé pour renvoyer un sous-ensemble des valeurs uniques triées selon une fonction d'agrégat, comme un nombre.

L'appel msearch effectue la recherche sur le texte saisi et renvoie les sessions qui correspondent aux termes recherchés.  Il peut rechercher dans les index, les méta, les données brutes des paquets ou des fichiers log.

Syntaxe de requête

Le message de requête possède la syntaxe suivante :

 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 ? ;

Les paramètres id1, id2, et size forment un mécanisme de pagination pour renvoyer un grand nombre de résultats à partir de la base de données. Leur utilisation est principalement utile pour les développeurs, qui écrivent des applications directement par rapport à la base de données Security Analytics Core. Généralement, les résultats sont renvoyés dans l'ordre des données les plus anciennes aux plus récentes (les ID de métadonnées supérieurs sont toujours plus récents). Pour pouvoir renvoyer des résultats des plus récents aux plus anciens, inversez les ID de sorte que id1 soit supérieur à id2. Les performances en sont légèrement pénalisées, car la clause where doit être entièrement évaluée avant que le traitement en ordre inversé ne puisse commencer.

Lorsque la taille est ignorée ou définie sur zéro, le système renvoie tous les résultats sans pagination. Dans l'interface RESTful, cela cause le renvoi de la réponse complète avec un codage par fragments. Le protocole natif renvoie les résultats sur plusieurs messages.

Le paramètre query est une chaîne de commande de paramètres possédant sa propre syntaxe spécifique Security Analytics :

 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_key | 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 clause select vous permet de spécifier * pour renvoyer toutes les métadonnées de toutes les sessions correspondant à la clause where, ou un ensemble de noms de champ de métadonnées et de fonctions agrégées pour sélectionner un sous-ensemble de métadonnées avec chaque session.

Les fonctions d'agrégat exercent l'effet suivant sur l'ensemble de résultats de la requête.

                                                   
FonctionRésultat
sumSomme de toutes les valeurs de métadonnées ; ne fonctionne qu'avec les nombres
countNombre total de champs de métadonnées qui auraient été renvoyés
minValeur minimale affichée
maxValeur maximale affichée
avgValeur moyenne pour le nombre
distinctRenvoie la liste de toutes les valeurs uniques affichées
countdistinctRenvoie le nombre de valeurs uniques affichées.  Countdistinct est équivalent au nombre de métadonnées qui auraient été renvoyées par la fonction distinct.
firstRenvoie la première valeur affichée
lastRenvoie la dernière valeur affichée
lenConvertit toutes les valeurs de champ en longueur UInt32 plutôt que de retourner la valeur réelle. Cette longueur est le nombre d'octets permettant de stocker la valeur réelle, non la longueur de la structure stockée dans la métabase de données. Par exemple, le mot « NetWitness » renvoie une longueur de 10. Tous les champs IPv4, comme ip.src, renvoient 4 octets.

Clauses where

La clause where est une spécification de filtre qui vous permet de sélectionner des sessions dans la collection en utilisant l'index.

Syntaxe :

 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 | ( '"' text '"' ) | ip-address | mac-address | ( '"' date-time '"' ) ;

Lorsque vous spécifiez des critères de règle, la partie de valeur de métadonnées de la clause doit correspondre au type de métadonnées spécifié par la clé méta. Par exemple, si la clé est ip.src, la valeur de métadonnées doit être une adresse IPv4.

Opérateurs de requête

Le tableau suivant décrit la fonction de chaque opérateur.

                                                               
OpérateurFonction
=Associez les sessions contenant exactement la valeur de métadonnées. Si la gamme de valeurs est spécifiée, toutes les valeurs sont considérées comme une correspondance.
!=Associe toutes les sessions qui ne correspondraient pas à la clause same comme si elles étaient écrites avec l'opérateur =.
<Pour les valeurs numériques, associe les sessions contenant des métadonnées dont la valeur numérique est inférieure au côté droit. Si le côté droit contient une gamme, sa première valeur est prise en compte. Si plusieurs gammes sont spécifiées, le comportement n'est pas défini. Pour les métadonnées texte, une comparaison lexicographique est effectuée.
<=Même comportement que <, mais les sessions contenant une métadonnée exactement égale à la valeur sont également considérées comme des correspondances.
>Semblable à l'opérateur <, mais associe les sessions dans lesquelles la valeur numérique est supérieure au côté droit. Si le côté droit est une gamme, la dernière valeur de la gamme est prise en compte pour la comparaison.
>=Même comportement que >, mais les sessions contenant une métadonnée exactement égale à la valeur sont également considérées comme des correspondances.
beginsAssocie des sessions qui contiennent une valeur de métadonnées texte qui commence par les mêmes caractères que le côté droit.
endsAssocie des sessions qui contiennent une valeur de métadonnées texte qui se termine par les mêmes caractères que le côté droit.
contientAssocie des sessions qui contiennent une valeur de métadonnées texte contenant la sous-chaîne indiquée sur le côté droit.
regexAssocie des sessions qui contiennent une valeur de métadonnées texte correspondant au regex donné sur le côté droit. L'analyse syntaxique de regex est gérée par boost::regex.
existsAssocie des sessions qui contiennent toutes les valeurs de métadonnées avec la clé méta donnée.
!existsAssocie des sessions qui ne contiennent pas toutes les valeurs de métadonnées avec la clé méta donnée.
lengthAssocie des sessions qui contiennent des valeurs de métadonnées texte d'une certaine longueur.  L'expression sur le côté droit doit être un nombre non négatif.

Valeurs de texte

Le système attend des valeurs de texte entre guillemets. Bien que les chaînes sans guillemets puissent être acceptées, les valeurs exprimées risquent d'être interprétées de façon ambiguë en tant que nombres ou dates.

Il est également important de placer entre guillemets toute valeur de texte pouvant contenir -, de sorte qu'elle ne soit pas interprétée comme une gamme.

Adresses IP

Les adresses IP peuvent être exprimées à l'aide de représentations de texte standard pour les adresses IPv4 et IPv6. De plus, la requête peut utiliser la notation CIDR pour exprimer une plage d'adresses. Si la notation CIDR est utilisée, elle est développée à la plage de valeur équivalente.

Adresses MAC

Une adresse MAC peut être spécifiée grâce à la notation d'adresse MAC standard : aa:bb:cc:dd:ee:ff

Expressions de date et d'heure

Dans Security Analytics Core, les dates sont représentées à l'aide de l'heure Epoch Unix, qui est le nombre de secondes depuis le 1er jan. 1970 UTC. Dans les requêtes, vous pouvez exprimer l'heure sous forme de ce nombre en secondes, ou vous pouvez utiliser la représentation de chaîne. La représentation de chaîne de la date et de l'heure est YYYY-mmm-DD HH:MM:SS. Une abréviation à trois lettres représente le mois. Vous pouvez également exprimer le mois sous forme de nombre à deux chiffres, de 01 à 12.

Toutes les heures spécifiées dans les requêtes doivent être en UTC.

Valeurs de gamme spéciales

Les gammes sont généralement exprimées avec la syntaxe "smallest" - "largest", mais vous pouvez utiliser certaines valeurs spéciales d'espace réservé dans les expressions de gamme. Vous pouvez utiliser la lettre l pour représenter la limite inférieure de toutes les valeurs de métadonnées en tant que début de la gamme, et la lettre u pour représenter la limite supérieure. Les limites sont déterminées par l'observation de la valeur de métadonnées inférieure ou supérieure dans l'index, parmi toutes les valeurs de métadonnées qui ont déjà été saisies dans l'index.

Remarque : Si vous utilisez la balise l ou u, elle ne doit pas être entre guillemets.

Par exemple, l'expression time time = "2014-may-20 11:57:00" - u correspondrait à toutes les heures à partir de 2014-may-20 11:57:00 jusqu'à l'heure la plus récente trouvée dans la collection.

Notez qu'il est facile de confondre une expression de gamme avec une chaîne de texte. Vérifiez que toutes les valeurs de texte qui contiennent - sont entre guillemets et que les tirets dans des expressions de gamme ne sont pas entre guillemets.

Clause Group By (à partir de 10.5)

L'API de requête peut générer des groupes agrégés à partir des résultats d'un appel de requête. Ceci s'effectue à l'aide d'une clause GROUP BY sur la requête.  Lorsque GROUP BY est spécifié, l'ensemble de résultats pour la requête est sous-divisé en groupes.  Chaque groupe de résultats est identifié de façon unique par les valeurs de métadonnées indiquées dans la clause group by. 

Prenez par exemple la requête select count(ip.dst). Cette requête renvoie le nombre de toutes les métadonnées ip.dst dans la base de données. Cependant, si vous ajoutez un groupe par clause, comme ceci : select count(ip.dst) group by ip.src, la requête renvoie le nombre de métadonnées ip.dst trouvées pour chaque ip.src unique.

À partir de Security Analytics version 10.5, vous pouvez utiliser jusqu'à 6 champs de métadonnées dans une clause group by.

La clause group by partage certaines des fonctionnalités de l'appel de valeurs, mais offre des groupes beaucoup plus avancés, allongeant ainsi la durée des requêtes. La production des résultats d'une requête groupée implique la lecture de la métadonnée à partir de la métabase de données pour toutes les sessions qui correspondent à la clause WHERE, tandis qu'un appel de valeurs peut produire ses agrégats en lisant uniquement l'index.

Le contenu de chaque groupe renvoyé par la requête est défini par la clause select. La clause select peut contenir l'une des fonctions agrégées ou des champs de métadonnées sélectionnés. Si plusieurs agrégats sont sélectionnés, le résultat de la fonction agrégée est défini pour chaque groupe. Si des champs non agrégés sont sélectionnés, les champs de métadonnées sont renvoyés par lots pour chaque groupe.

L'ensemble de résultats d'une requête group by est codé avec les règles suivantes :

  1. Toutes les métadonnées associées à un groupe sont fournies avec le même numéro de groupe.
  2. Les premières métadonnées renvoyées au groupe identifient la clé de groupe. Par exemple, si la clause group by spécifie le groupe par ip.src, la première métadonnée de chaque groupe sera un ip.src.
  3. Les métadonnées normales et non agrégées sont renvoyées après la clé de groupe, mais elles auront toujours toutes le même numéro de groupe que les métadonnées clés de groupe.
  4. Les champs de métadonnées de résultat agrégé pour chaque groupe sont renvoyés ensuite.
  5. Tous les champs dans un groupe sont renvoyés ensemble. Différents résultats de groupe seront entrelacés.

S'il manque l'une des métadonnées GROUP BY dans l'une des sessions associées par la clause where, ce champ de métadonnées est traité comme NULL pour ce groupe. Lorsque les résultats de ce groupe sont renvoyés, les parties à valeur NULL de la clé de groupe seront omises des résultats du groupe, car la base de données ne possède pas de concept NULL.

La sémantique d'une requête GROUP BY diffère d'une base de données de type SQL par rapport aux champs de métadonnées renvoyés. Les bases de données SQL nécessitent que vous sélectionniez de façon explicite les colonnes group by dans la clause select si vous souhaitez qu'elles soient renvoyées dans l'ensemble de résultats. La base de données Security Analytics principale renvoie toujours de façon implicite les colonnes de groupe en premier.

Une requête avec une clause GROUP BY est conforme au paramètre de taille d'ensemble de résultats, s'il est fourni. Cependant, en raison de la nature du regroupement, l'appelant doit faire des efforts supplémentaires pour mettre en page et reformer les groupes si un ensemble de résultats à taille fixe est requis. C'est pour cette raison que vous ne devez pas spécifier une taille de résultat explicite lorsque vous faites un appel group by. Si vous ne spécifiez pas de taille explicite, l'ensemble des résultats sera livré sous forme de résultats partiels.

Le tableau suivant décrit les paramètres de configuration de conformité de base de données qui limiteront l'E/S ou l'impact sur la mémoire d'un groupe par requête.

                   
ParamètreFonction
/sdk/config/max.query.groupsIl s'agit de la limite du nombre de groupes pouvant être conservés en mémoire pour calculer des agrégats. Ce paramètre vous permet de limiter l'utilisation de la mémoire globale de la requête.
/sdk/config/max.where.clause.sessionsIl s'agit de la limite du nombre de sessions de la clause where pouvant être traitées dans une requête. Ce paramètre vous permet de définir une limite du nombre de sessions devant être lues à partir des métabases de données et des bases de données de session pour résoudre une requête.

Clause Order By (à partir de la version 10.5)

Une clause order by peut être ajoutée à une requête qui contient une clause group by. La clause order by cause le renvoi de l'ensemble des résultats groupés dans l'ordre trié.

Une clause order by se compose d'un ensemble d'éléments à trier, dans l'ordre croissant ou décroissant. Le tri peut être effectué sur tout champ de données qui sera renvoyé dans un ensemble de résultats. Ceci inclut la métadonnée spécifiée par la clause select, les résultats de la fonction aggregate spécifiés par la clause select, ou les champs de métadonnées group by.

La clause order by peut faire le tri sur de nombreuses colonnes. Il n'existe pas de limite au nombre de colonnes order by autorisées dans la requête, mais il existe une limite pratique car chacune des colonnes order by peut se rapporter à un élément renvoyé par la clause select ou la clause group by.  Le tri de colonne multiple est imposé de façon lexicographique, ce qui signifie que si deux groupes possèdent des valeurs égales pour la première colonne, ils sont ensuite triés selon la deuxième colonne. S'ils sont égaux dans la deuxième colonne, ils sont triés selon la troisième colonne, et ainsi de suite pour le nombre de colonnes order by fournies.

La base de données Security Analytics principale est unique car les groupes de résultats renvoyés par une requête peuvent chacun avoir plusieurs valeurs pour une sélection.  Par exemple, il est possible de sélectionner toutes les métadonnées qui correspondent à un type de métadonnée et de les organiser en groupes, et il est possible d'utiliser la fonction distinct() pour renvoyer des groupes de valeurs de métadonnées distinctes. Si une clause order by fait référence à l'un des champs du groupe possédant plusieurs valeurs, l'ordre de tri est appliqué comme suit :

  1. Dans chaque groupe, les champs possédant plusieurs valeurs de correspondance sont organisés selon la clause de classement
  2. Tous les groupes sont triés par la comparaison de la première occurrence du champ ordonné trouvé dans chaque groupe

La clause order by n'est disponible que dans les requêtes qui possèdent une clause group by, car les groupes sont obligatoires pour organiser les champs de métadonnées en enregistrements distincts. Si vous souhaitez trier une requête arbitraire comme si aucun groupement n'était appliqué, utilisez le groupe par sessionid. Ceci permet de s'assurer que les résultats sont renvoyés en groupes de sessions ou événements distincts.

Les clauses group by sont naturellement renvoyées dans un ordre de clé de groupe croissant, mais une clause order by peut être utilisée pour renvoyer des groupes dans un ordre différent.

Si une colonne order by ne spécifie pas asc ni desc, l'ordre par défaut est croissant.

Exemples :

 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

Appel de valeurs

L'index fournit une fonction values de bas niveau pour accéder aux valeurs de métadonnées uniques qui ont été stockées dans l'index. Cette fonction permet aux développeurs d'effectuer des opérations plus avancées sur des groupes de valeurs de métadonnées uniques.

Syntaxe de paramètre d'appel de valeurs :

 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 ;

L'appel de valeurs fournit la fonction de renvoi d'un ensemble de valeurs de métadonnées uniques pour une clé de métadonnée donnée. Pour chaque valeur unique, l'appel de valeurs peut fournir un nombre total agrégé. La fonction utilisée pour générer le total est contrôlée par le paramètre des balises.

Parameters

Le tableau suivant décrit la fonction de chaque paramètre.

                                               
ParamètreFonction
fieldNameIl s'agit du nom de clé de métadonnée pour lequel vous récupérez des valeurs uniques. Par exemple, si fieldName est ip.src, cette fonction renvoie les valeurs IP source uniques dans la collection.
Il s'agit d'une clause where qui filtre l'ensemble de sessions pour lesquelles les valeurs uniques sont renvoyées. Par exemple, si fieldName est ip.src et si la clause where est ip.src = 192.168.0.0/16, seules les valeurs dans la plage de 192.168.0.0 à 192.168.255.255 sont renvoyées. Pour plus d'informations sur la syntaxe de la clause where, voir Clauses Where.
tailleTaille de l'ensemble de valeurs uniques à renvoyer. Cette fonction est optimisée pour renvoyer un petit sous-ensemble de valeurs uniques possibles dans la base de données.
id1, id2Ces paramètres facultatifs limitent le périmètre de la recherche de valeurs uniques à une région spécifique de la métabase de données et de l'index. La définition des paramètres id1 et id2 sur une gamme limitée de la base de données méta est très importante pour exécuter des recherches sur de grandes collections.
flagsLes balises contrôlent la façon dont les valeurs sont triées et additionnées. Les balises sont décrites dans la section Balises de valeurs suivante.
seuilLa définition du paramètre de seuil permet à l'appel de valeurs d'ignorer la collection du total associé à chaque valeur une fois le seuil atteint. En fournissant un seuil, l'appelant peut réduire la quantité d'éléments d'index et de métadonnées qui doivent être récupérés à partir de la base de données. Si le paramètre de seuil est omis ou défini sur 0, cette optimisation n'est pas utilisée.
aggregateFunctionParamètre facultatif utilisé pour modifier le comportement par défaut des sessions de comptage, des paquets ou de la taille pour le comptage ou la somme du champ numérique défini par aggregateFieldName. Les deux paramètres doivent être spécifiés lorsque l'un des deux est défini. Passez sum ou count pour spécifier le comportement à suivre.
aggregateFieldNameChamp de métadonnées sur lequel exécuter aggregateFunction. Les paramètres aggregateFunction et aggregateFieldName doivent être spécifiés lorsque l'indicateur aggregate est défini. Un appel de valeurs utilisant l'une des fonctions d'agrégat peut être beaucoup plus lent qu'un appel de valeurs collectant des totaux de sessions, paquets ou taille. En effet, chaque session qui correspond à la clause where doit être récupérée à partir de la métabase de données. En raison de cette recherche, une grande partie de la requête est liée à l'E/S sur les volumes de la métabase de données. Le temps nécessaire à l'exécution d'un appel de valeurs d'agrégat est linéairement proportionnel au nombre de sessions correspondant à la clause where.
min, maxValeurs minimale et maximale qui doivent être renvoyées à partir de l'appel. Ces paramètres permettent d'effectuer une itération (ou une mise en page) sur un nombre de valeurs extrêmement important, généralement plusieurs valeurs qui pourraient être renvoyées à partir d'un appel unique. Principalement utilisé en association avec les balises sort-value,sort-ascending de sorte que la valeur supérieure renvoyée serait utilisée dans un appel suivant en tant que valeur de paramètre min. Les valeurs sont exclusives. Si min="rsa" était spécifié et rsa était une valeur valide, rsa ne serait pas renvoyé, mais la prochaine valeur supérieure serait renvoyée.

Balises de valeurs

Le paramètre flags contrôle le fonctionnement de l'appel de valeurs. Il existe trois groupes de balises qui correspondent aux différents modes de fonctionnement, tel que l'indique le tableau ci-dessous.

                       
IndicateurDescription :
sessions, size, packetsL'appel de valeurs vous permet de spécifier l'une de ces balises pour déterminer la façon dont le total de chaque valeur est calculé. Si la balise est sessions, l'appel de valeurs renvoie un nombre de sessions qui contiennent chaque valeur. Si la balise est size, l'appel de valeur établit le total de la taille de toutes les sessions qui contiennent chaque valeur unique, et établit un rapport de la taille totale de chaque valeur unique. Si la balise est packets, l'appel de valeur établit le total du nombre de paquets dans toutes les sessions qui contiennent chaque valeur unique, et établit un rapport de ce total pour chaque valeur unique.
sort-total, sort-valueLes balises contrôlent la façon dont les résultats sont triés. Si la balise est sort-total, l'ensemble de résultats est trié dans l'ordre des totaux collectés. Si la balise est sort-value, les résultats sont renvoyés dans l'ordre de tri des valeurs.
order-ascending, order-descendingCes balises contrôlent l'ordre de tri de l'ensemble de résultats. Par exemple, en cas de tri par le total dans l'ordre décroissant, les valeurs possédant le total supérieur sont renvoyées en premier.

Exemple d'appel de valeurs

L'appel de valeurs est utilisé de façon étendue par la vue Navigation dans Security Analytics. La vue par défaut génère des appels ressemblant à celui-ci :

 /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\"" 

Dans cet exemple, la vue Navigation requiert des valeurs uniques pour ip.src. Elle requiert des valeurs uniques d'ip.src pour la période donnée. Elle demande le nombre de sessions qui correspondent à chaque ip.src. Les résultats sont les 20 valeurs ip.src supérieures lorsqu'elles sont triées par le nombre total de sessions dans l'ordre décroissant. De plus, la vue Navigation possède une gamme d'ID de métadonnées afin de fournir un conseil d'optimisation au moteur de requête.

Appel msearch

L'index propose une fonction msearch de faible niveau afin de réaliser des recherches de texte par rapport à tous les types de données. Ce type de recherche ne requiert pas que les utilisateurs définissent leurs requêtes en termes de types de données connus. En revanche, il recherche toutes les parties de la base de données à la recherche de résultats. Msearch est utilisé par la recherche de texte de la vue Événements. Consultez la section Résultats du filtrage et de la recherche dans la vue Événements dans le Guide Investigation et Malware Analysis pour plus d'informations sur les formulaires et exemples de recherche acceptés.

msearchParamètres :

 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" ;

L'algorithme msearch fonctionne de la manière suivante :

  1. Un ensemble de sessions est identifié à partir de l'index en trouvant les croisements entre trois ensembles :
    • (Ensemble 1) Toutes les sessions de la base de données
    • (Ensemble 2) Sessions correspondant au paramètre de la clause where
    • (Ensemble 3) Sessions ayant indexé des valeurs qui correspondent au paramètre de la chaîne de recherche, si la balise si est spécifiée.
  2. Si la recherche indique le paramètre sm, toutes les méta de l'ensemble de sessions identifiées à l'étape 1 sont lues et scannées pour voir si elles correspondent au paramètre de la chaîne de recherche. Les méta sont lues à partir du service le plus proche du point où la recherche a été exécutée. Par exemple, si la recherche est réalisée sur un broker, les méta peuvent être lues à partir du Concentrator le plus proche du broker, mais si la recherche est réalisée sur un Archiver, les méta seront lues à partir de l'Archiver lui-même.
  3. Si la recherche spécifie le paramètre sp, toutes les données brutes des paquets ou entrées de log provenant de l'ensemble de sessions identifié à l'étape 1 est lu et analysé pour vérifier s'il correspond au paramètre de la chaîne de recherche. Les paquets sont lus à partir du service le plus près du point où la recherche a été exécutée. Par exemple, si la recherche est réalisée sur un Concentrator, les données de paquets sont lues à partir du Decoder, mais si la recherche est réalisée sur un Archiver, les données de paquets sont lues à partir de l'Archiver lui-même.
  4. Les correspondances des étapes 2 et 3 sont renvoyées au fur et à mesure qu'elles sont trouvées, jusqu'à ce que le paramètre limit soit atteint. La limite spécifie le nombre maximum de sessions pour lesquelles les données de méta et de paquets sont analysées. Si aucune limite n'est spécifiée, l'intégralité de l'ensemble de sessions de l'étape 1 est analysé.

Balises msearch

                               
IndicateurDescription :
spAnalyse les données brutes des paquets
smAnalyse toutes les données méta
siEffectue des recherches d'index pour tous les paramètres de recherche avant d'analyser les méta
ciEffectue une recherche non sensible à la casse. Les résultats de la recherche conservent la casse.
regexTraite le paramètre de recherche en tant qu'expression régulière. Une seule expression régulière peut être spécifiée, mais l'expression régulière peut être arbitrairement complexe.

Mode de recherche d'index msearch

L'utilisation du mode de recherche d'index, spécifié grâce à la balise si, permet de renvoyer des résultats bien plus rapidement que les autres modes. La principale limite de ce mode est qu'il ne renvoie que des correspondances sur les termes du texte qui correspondent aux valeurs des méta dont la valeur est indexée.

  • Le paramètre si doit être combiné à la balise sm. Le paramètre si implique que la recherche ne peut correspondre qu'à des méta indexées. 
  • Le paramètre si peut être utilisé avec des recherches regex, même si seules des valeurs de texte indexé sont renvoyées. Les adresses IP et les chiffres ne peuvent pas correspondre au regex.

Conseils msearch

  • Utilisez toujours une clause where pour spécifier la période pour la recherche.  
  • Pour rechercher des plages d'adresses IP, spécifiez-les dans la clause where.
  • Utilisez le paramètre limit lorsque vous n'utilisez pas le mode de recherche d'index. Si ce n'est pas le cas, la quantité de données lues par les bases de données de méta et de paquets sera extrêmement vaste.

Procédures stockées

Les appels de requête et de valeurs fournissent plus de fonctionnalités de recherche à un niveau faible. Pour les exemples d'utilisation plus avancés, il existe des procédures stockées côté serveur.

Utilisation des guillemets dans la syntaxe de requête

L'analyseur de requête ne tient pas compte du fait que des guillemets simples ou doubles soient employés dans une instruction de requête. Une valeur à guillemets simples ou doubles est traitée en tant que métadonnée de texte.

L'analyseur de requête tente de comprendre ce que vous placez dans l'instruction. Il n'est pas très strict sur les éléments acceptés.

Par exemple :

reference.id=4752

Cette clause identifie les sessions qui possèdent une valeur de métadonnée reference.id qui possède une valeur _numeric_ de 4752.

reference.id='4752' ou reference.id="4752"

Cette clause identifie les sessions qui possèdent une valeur de métadonnée reference.id qui possède une valeur _string_ de "4752".

Cependant, le moteur de requête compare implicitement les nombres et les chaînes qui ressemblent à des numéros comme étant égaux, lorsque les valeurs sont identiques sémantiquement. Il fonctionne donc avec les deux syntaxes.

Pour obtenir les meilleures performances, cependant, il est toujours conseillé de construire les requêtes de sorte que la syntaxe de requête corresponde aux types de données générés par l'analyseur.

Par exemple, si l'analyse crée reference.id en tant que type de données numérique (tel que uint32 ou uint64), utilisez la syntaxe numérique.

Si l'analyseur crée reference.id en tant que type de données de texte, utilisez la syntaxe de chaîne.

Previous Topic:RollOver
You are here
Table of Contents > Requêtes

Attachments

    Outcomes