Core-DB: Abfragesyntax

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

In diesem Thema wird die Datenbank-Abfragesyntax beschrieben. Es gibt drei Hauptmechanismen für das Durchführen von Abfragen in der Datenbank, die Aufrufe query, values und msearch im Ordner /sdk in jedem Core-Service.

Der Aufruf query gibt Metaelemente aus der Metadatenbank zurück, wobei der Index für ein schnelles Abrufen genutzt werden kann.

Der Aufruf values gibt Gruppen eindeutiger Metawerte zurück, die nach bestimmten Kriterien geordnet sind. Er ist so optimiert, dass er die eindeutigen Werte als Untergruppe zurückgibt, die von einer Aggregatfunktion, z. B. Anzahl, sortiert werden.

Der Aufruf „msearch“ verwendet Suchbegriffe als Eingabe und gibt passende Sitzungen zurück, die mit den Suchbegriffen übereinstimmen.  Es kann innerhalb von Indizes, Metadaten, Rohpaketdaten oder Rohprotokolldaten suchen.

Abfragesyntax

Die Abfragemeldung weist folgende Syntax auf:

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

Die Parameter id1, id2 und size bilden für die Rückgabe größerer Ergebnismengen aus der Datenbank einen Auslagerungsmechanismus. Sie werden vor allem von Entwicklern genutzt, die Anwendungen direkt für die Security Analytics Core-Datenbank erstellen. Normalerweise werden zurückgegebene Ergebnisse vom ältesten zum neuesten Eintrag sortiert (höhere Meta-IDs sind stets aktueller). Um die Ergebnisse vom neuesten zum ältesten Eintrag zu sortieren, drehen Sie die IDs um, sodass id1 größer ist als id2. Dies bringt eine leichte Verschlechterung der Performance mit sich, da die Where-Klausel zunächst vollständig ausgewertet werden muss, bevor die Verarbeitung in umgekehrter Reihenfolge beginnen kann.

Wenn keine Größe angegeben oder sie auf null gesetzt wurde, gibt das System alle Ergebnisse ohne Paging zurück. Für die RESTful-Schnittstelle wird die gesamte Antwort daher mit segmentierter Codierung zurückgegeben. Das systemeigene Protokoll gibt die Ergebnisse in mehreren Meldungen zurück.

Der Parameter query ist eine Abfrage-Befehlszeichenfolge mit eigener Security Analytics-spezifischer Syntax:

 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}

Mithilfe der Select-Klausel können Sie entweder * festlegen, dass alle Metadaten aus allen Sitzungen zurückgegeben werden, die mit der Where-Klausel übereinstimmen, oder eine Reihe von Meta-Feldnamen und Aggregatfunktionen angeben, anhand derer bei jeder Sitzung eine Untergruppe der Metadaten ausgewählt wird.

Die Aggregatfunktionen wirken sich wie folgt auf den Ergebnissatz der Abfrage aus:

                                                   
FunktionErgebnis
sumAlle Metawerte zusammenaddieren; nur bei Ziffern möglich
countDie Gesamtzahl von Metafeldern, die zurückgegeben worden wären
minDer gesehene Mindestwert
maxDer gesehene Maximalwert
avgDer Durchschnittswert für die Anzahl
distinctGibt eine Liste aller erkannten eindeutigen Werte zurück
countdistinctGibt die Anzahl der gesehenen eindeutigen Werte zurück.  „Countdistinct“ ist gleich der Anzahl von Metawerten, die die Funktion „distinct“ zurückgegeben hätte.
firstGibt den ersten gesehenen Wert zurück
lastGibt den letzten gesehenen Wert zurück
lenKonvertiert alle Feldwerte in eine UInt32-Länge, statt den tatsächlichen Wert anzugeben. Diese Länge entspricht nicht der Länge der in der Metadatenbank gespeicherten Struktur, sondern der für die Speicherung des tatsächlichen Werts erforderlichen Anzahl von Byte. Für den Begriff „NetWitness“ wird beispielsweise die Länge 10 zurückgegeben. Für IPv4-Felder, z. B. ip.src, werden stets 4 Byte zurückgegeben.

Where-Klausel

Bei der Where-Klausel handelt es sich um einen spezifischen Filter, mit dem Sie unter Verwendung des Index Sitzungen aus der Sammlung auswählen können.

Syntax:

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

Bei der Angabe von Regelkriterien muss der Teil der Klausel, der sich auf den Metawert bezieht, mit dem im Metaschlüssel angegebenen Metawert übereinstimmen. Wenn der Schlüssel beispielsweise ip.src ist, sollte der Metawert eine IPv4-Adresse sein.

Abfrageoperatoren

In der folgenden Tabelle werden die Funktionen der einzelnen Operatoren beschrieben:

                                                               
OperatorFunktion
=Entspricht Sitzungen, die den exakten Metawert enthalten. Bei Angabe eines Wertebereichs wird jeder der Werte als Übereinstimmung betrachtet.
!=Entspricht allen Sitzungen, die mit ebendieser Klausel nicht übereinstimmen würden, wenn sie mit dem Operator = verfasst worden wäre.
<Für numerische Werte: Entspricht Sitzungen, die Metadaten mit einem numerischen Wert enthalten, der kleiner ist als die rechte Seite. Wurde auf der rechten Seite ein Bereich angegeben, wird der erste darin genannte Wert herangezogen. Wenn mehrere Bereiche angegeben wurden, ist das Verhalten unbestimmt. Bei Metadaten in Textform erfolgt ein lexikografischer Vergleich.
<=Dasselbe Verhalten wie bei <, wobei auch Sitzungen mit Metadaten, die dem Wert genau entsprechen, als Übereinstimmung gelten.
>Ähnlich wie beim Operator <, wobei hier Sitzungen als Übereinstimmung gelten, deren numerischer Wert größer ist als die rechte Seite. Wurde die rechte Seite als Bereich angegeben, wird der letztgenannte Wert des Bereichs für den Vergleich berücksichtigt.
>=Dasselbe Verhalten wie bei >, wobei auch Sitzungen mit Metadaten, die dem Wert genau entsprechen, als Übereinstimmung gelten.
beginntEntspricht Sitzungen, die Metadaten in Textform enthalten, die mit den gleichen Buchstaben wie die rechte Seite beginnen.
endetEntspricht Sitzungen, die Metadaten in Textform enthalten, die mit den gleichen Buchstaben wie die rechte Seite enden.
enthältEntspricht Sitzungen, die Metadaten in Textform enthalten, die die auf der rechten Seite angegebene Teilzeichenkette enthalten.
regexEntspricht Sitzungen, die Metadaten in Textform enthalten, die dem regulären Ausdruck (Regex) auf der rechten Seite entsprechen. Die Regex-Analyse erfolgt durch boost::regex.
existiertEntspricht Sitzungen, die beliebige Metawerte mit dem angegebenen Metaschlüssel enthalten.
!existiertEntspricht Sitzungen, die keine Metawerte enthalten, die dem angegebenen Metaschlüssel entsprechen.
lengthEntspricht Sitzungen, die Metawerte in Textform mit einer bestimmten Länge enthalten.  Der Ausdruck auf der rechten Seite muss eine nichtnegative Zahl sein.

Textwerte

Das System erwartet in Anführungszeichen stehende Textwerte. Es könnten zwar auch Zeichenfolgen ohne Anführungszeichen funktionieren, jedoch könnten die Werte auch als Zahlen oder Datumsangaben interpretiert werden.

Es ist auch wichtig, jeden Textwert mit Anführungszeichen zu versehen, der - enthalten könnte, damit er nicht als Bereich interpretiert wird.

IP-Adressen

IP-Adressen lassen sich mithilfe von Standardtextausdrücken für IPv4- und IPv6-Adressen darstellen. Außerdem kann in der Abfrage die CIDR-Notation für den Ausdruck eines Adressenbereichs verwendet werden. Bei Verwendung der CIDR-Notation wird diese auf den entsprechenden Wertebereich erweitert.

MAC-Adressen

MAC-Adressen können mithilfe der standardmäßigen MAC-Adressen-Notation angegeben werden: aa:bb:cc:dd:ee:ff

Ausdruck von Datum und Zeit

Datumsangaben in Security Analytics Core erfolgen mithilfe der Unix-Epochenzeit, die der Anzahl der seit dem 1.1.1970 (UTC) vergangenen Sekunden entspricht. In Abfragen können Sie die Zeit als Anzahl dieser Sekunden darstellen oder die Darstellung als Zeichenkette nutzen. Die Darstellung von Datum und Zeit als Zeichenkette lautet YYYY-mmm-DD HH:MM:SS. Der Monat wird als dreibuchstabige Abkürzung dargestellt. Sie können den Monat auch als zweistellige Zahl zwischen 01 und 12 angeben.

Es wird davon ausgegangen, dass in Abfragen enthaltene Zeitangaben im UTC-Format angegeben sind.

Werte für spezielle Bereiche

Bereiche werden üblicherweise mit der Syntax "smallest" - "largest" angegeben, es gibt allerdings einige spezielle Platzhalterwerte, die in Bereichsausdrücken verwendet werden können. Der Buchstabe l wird beispielsweise verwendet, um die untere Grenze aller Metawerte als Startwert des Bereichs zu verwenden, während u für die obere Grenze steht. Die Grenzen werden anhand des kleinsten bzw. größten Werts aus allen bereits in den Index eingegangenen Metawerten ermittelt.

Hinweis: Wenn Sie das Tag l oder u verwenden, sollte es nicht in Anführungszeichen stehen.

So würde der Ausdruck time = "2014-may-20 11:57:00" - u allen Zeitangaben ab dem 20. Mai 2014 11:57:00 bis zum neuesten in der Sammlung enthaltenen Datum entsprechen.

Beachten Sie, dass der Ausdruck eines Bereichs leicht mit einer Textzeichenkette verwechselt werden kann. Stellen Sie sicher, dass Textwerte, die - enthalten, in Anführungszeichen stehen und dass Bindestriche innerhalb von Ausdrücken eines Bereichs nicht innerhalb von Text in Anführungszeichen stehen.

Group by-Klausel (seit 10.5)

Die Abfrage-API hat die Fähigkeit, aus den Ergebnissen eines Abfrageaufrufs Aggregatgruppen zu erzeugen. Dies geschieht, indem eine GROUP BY-Klausel auf die Abfrage angewendet wird.  Wenn GROUP BY spezifiziert wird, wird der Ergebnissatz für die Abfrage in Gruppen unterteilt.  Jede Ergebnisgruppe wird durch die in der Group by-Klausel angegebenen Metawerte eindeutig identifiziert. 

Ziehen Sie beispielsweise die Abfrage select count(ip.dst) in Betracht. Diese Abfrage gibt die Anzahl aller ip.dst-Metadaten in der Datenbank zurück. Wenn Sie allerdings eine Group-by-Klausel wie folgt hinzufügen: select count(ip.dst) group by ip.src, gibt die Abfrage eine Anzahl der ip.dst-Metadaten zurück, die für jede eindeutige ip.src gefunden wurde.

Ab Security Analytics Version 10.5 können Sie bis zu 6 Metafelder in einer Group-by-Klausel verwenden.

Die Group by-Klausel hat mit der Values-Abfrage einige Funktionen gemeinsam, aber sie bietet signifikant erweiterte Gruppen auf Kosten längerer Abfragezeiten. Zum Hervorbringen der Ergebnisse einer gruppierten Abfrage gehört das Lesen der Metadaten von der Metadatenbank für alle Sitzungen, die der WHERE-Klausel entsprechen, während eine Values-Abfrage ihre Aggregate hervorbringen kann, indem sie einfach den Index liest.

Die Inhalte jeder Gruppe, die von der Abfrage zurückgegeben werden, werden durch die Select-Klausel definiert. Die Select-Klausel kann jede der ausgewählten Aggregatfunktionen oder Metafelder enthalten. Wenn mehrere Aggregate ausgewählt werden, wird das Ergebnis der Aggregatfunktion für jede Gruppe definiert. Wenn nicht aggregierte Felder ausgewählt werden, werden die Metafelder für jede Gruppe stapelweise zurückgegeben.

Der Ergebnissatz einer Group by-Abfrage wird mit den folgenden Regeln kodiert:

  1. Alle einer Gruppe zugeordneten Metadaten werden mit derselben Gruppennummer bereitgestellt.
  2. Die ersten an die Gruppe zurückgegebenen Metadaten bestimmen den Gruppenschlüssel. Zum Beispiel, wenn die Group by-Klausel das Gruppieren nach ip.src spezifiziert, dann wird das erste Metadatum jeder Gruppe eine ip.src sein.
  3. Die normalen, nicht-aggregierten Metadaten werden nach dem Gruppenschlüssel zurückgegeben, aber sie werden alle dieselbe Gruppennummer haben wie die Gruppenschlüsselmetadaten.
  4. Danach werden die aggregierten Ergebnismetafelder für jede Gruppe zurückgegeben.
  5. Alle Felder innerhalb einer Gruppe werden zusammen zurückgegeben. Verschiedene Gruppenergebnisse werden sich nicht überlappen.

Wenn GROUP BY-Metadaten von einer der durch die Where-Klausel zugeordneten Sitzungen fehlen, wird das entsprechende Metafeld für die Zwecke dieser Gruppe als NULL behandelt. Wenn die Ergebnisse für diese Gruppe zurückgegeben werden, werden die als NULL gewerteten Teile des Gruppenschlüssels aus den Gruppenergebnissen ausgelassen, da die Datenbank kein Konzept von NULL hat.

Die Semantik einer GROUP BY-Abfrage unterscheidet sich von einer SQL-artigen Datenbank dahingehend, welche Metafelder zurückgegeben werden. SQL-Datenbanken erfordern, dass Sie die Gruppe explizit nach Spalten in der Select-Klausel auswählen, wenn Sie möchten, dass sie im Ergebnissatz zurückgegeben wird. Die Security Analytics Core-Datenbank gibt die Gruppenspalten immer implizit zuerst zurück.

Eine Abfrage mit einer GROUP BY-Klausel honoriert den Parameter Ergebnissatzgröße, falls einer angegeben wurde. Allerdings legt sie aufgrund des Typs der Gruppierung dem Aufrufer eine zusätzliche Belastung auf, Gruppen zu paginieren und zu reformieren, wenn ein Ergebnissatz mit fester Größe gefordert wird. Aus diesem Grund sollten Sie keine ausdrückliche Ergebnisgröße angeben, wenn Sie einen Group-by-Aufruf tätigen. Wenn Sie keine ausdrückliche Größe angeben, wird der gesamte Ergebnissatz als teilweises Ergebnis geliefert.

Die folgende Tabelle beschreibt die Datenbank-Honorierungs-Konfigurationsparameter, die die Auswirkung von I/O oder Speicher einer Group-by-Abfrage beschränken.

                   
ParameterFunktion
/sdk/config/max.query.groupsDies ist der Grenzwert für die Anzahl der Gruppen, die im Speicher gehalten werden können, um Aggregate zu berechnen. Dieser Parameter erlaubt Ihnen, die Gesamtspeichernutzung der Abfrage zu begrenzen.
/sdk/config/max.where.clause.sessionsDies ist der Grenzwert für die Anzahl der Sitzungen, die von der Where-Klausel in einer Abfrage verarbeitet werden können. Dieser Parameter erlaubt Ihnen, einen Grenzwert für die Anzahl der Sitzungen einzustellen, die von den Metadaten- und Sitzungsdatenbanken gelesen werden müssen, um eine Abfrage zu lösen.

Order-By-Klausel (seit Version 10.5)

Eine Order-by-Klausel kann einer Abfrage hinzugefügt werden, die eine Group-by-Klausel enthält. Die Order-by-Klausel sorgt dafür, dass der Satz gruppierter Ergebnisse in sortierter Reihenfolge zurückgegeben wird.

Eine Order-by-Klausel besteht aus einem Satz von zu sortierenden Elementen, in aufsteigender oder absteigender Reihenfolge. Das Sortieren kann auf jedem Datenfeld durchgeführt werden, das im Ergebnissatz zurückgegeben wird. Dazu zählen von der Select-Klausel spezifizierte Metadaten, von der Select-Klausel spezifizierte Ergebnisse von Aggregatfunktionen oder Group-by-Metafelder.

Die Order-by-Klausel kann über mehrere Spalten sortieren. Es gibt keinen Grenzwert für die Anzahl zulässiger Order-by-Spalten in der Abfrage, aber es gibt eine praktische Begrenzung insoweit, dass jede der Order-by-Spalten sich auf etwas beziehen muss, das von der Select-Klausel oder Group-by-Klausel zurückgegeben wurde.  Die Sortierung über mehrere Spalten geschieht lexikographisch, das heißt, wenn zwei Gruppen gleiche Werte für die erste Spalte haben, werden sie nach den zweiten Spalten sortiert. Wenn auch die zweiten Spalten gleich sind, werden sie nach den dritten Spalten sortiert usw. über alle zu sortierenden Spalten hinweg.

Die Security Analytics Core-Datenbank ist insofern einzigartig, als dass jede der Ergebnisgruppen, die auf eine Abfrage zurückgegeben werden, viele Werte für eine Auswahl haben können.  Zum Beispiel ist es möglich, alle einem Metadatentyp entsprechenden Metadaten auszuwählen und sie in Gruppen zu organisieren und es ist möglich, mithilfe der Funktion distinct() Gruppen von unterschiedlichen Metawerten zurückzugeben. Wenn eine Order-by-Klausel eines der Felder in der Gruppe mit mehreren Werten referenziert, wird wie folgt sortiert:

  1. Innerhalb jeder Gruppe werden die Felder mit mehreren passenden Werten nach der Sortierklausel sortiert.
  2. Alle Gruppen werden sortiert, indem das erste Vorkommnis des sortierten Feldes, das innerhalb jeder Gruppe gefunden wird, verglichen wird.

Die Order-by-Klausel ist nur in Abfragen verfügbar, die eine Group-by-Klausel haben, da Gruppen die Metafelder in unterschiedliche Datensätze organisieren müssen. Wenn Sie eine beliebige Abfrage so sortieren möchten, als wäre keine Gruppierung angewendet worden, verwenden Sie „group-by-sessionid“. So wird sichergestellt, dass die Ergebnisse in Gruppen von unterschiedlichen Sitzungen oder Ereignissen zurückgegeben werden.

Group-by-Klauseln werden natürlicherweise in aufsteigender Gruppenschlüssel-Reihenfolge zurückgegeben, aber mithilfe einer Order-by-Klausel können Gruppen auch in anderer Reihenfolge zurückgegeben werden.

Wenn bei einer Order-by-Spalte weder asc noch desc angegeben ist, wird standardmäßig aufsteigend sortiert.

Beispiele:

 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

Werteaufruf

Der Index hält eine Funktion für values auf niedriger Stufe bereit, um auf die im Index gespeicherten eindeutigen Metawerte zugreifen zu können. Dank dieser Funktion können Entwickler erweiterte Funktionen an Gruppen eindeutiger Metawerte ausführen.

Parametersyntax von Werteaufrufen:

 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 ;

Mit dem Werteaufruf steht eine Funktion für die Rückgabe einer Reihe von eindeutigen Metawerten für einen angegebenen Metaschlüssel bereit. Der Werteaufruf kann für jeden eindeutigen Wert eine aggregierte Gesamtanzahl zurückgeben. Die für die Berechnung der Summe verwendete Funktion wird vom Flags-Parameter gesteuert.

Parameter

In der folgenden Tabelle werden die Eigenschaften der einzelnen Parameter beschrieben:

                                               
ParameterFunktion
fieldNameDies ist der Name des Metaschlüssels, für den Sie eindeutige Werte abrufen. Wenn fieldName beispielsweise ip.src lautet, dann gibt diese Funktion die eindeutigen Quellen-IP-Werte in der Sammlung zurück.
Dabei gilt Folgendes:Dies ist eine Where-Klausel, die der Filterung derjenigen Sitzungen dient, für die die eindeutigen Werte zurückgegeben wurden. Wenn fieldName beispielsweise ip.src und die Where-Klausel ip.src = 192.168.0.0/16 lautet, dann werden nur Werte aus dem Bereich von 192.168.0.0 bis 192.168.255.255 zurückgegeben. Weitere Informationen zur Syntax der Where-Klausel finden Sie unter Where-Klausel.
GrößeDie Größe der zurückgegebenen Menge von Werten. Mit dieser Funktion wird eine kleine Untermenge der möglichen eindeutigen Werte aus der Datenbank zurückgegeben.
id1, id2Mit diesen optionalen Parametern wird der Umfang der Suche nach eindeutigen Werten auf einen bestimmten Abschnitt der Metadatenbank und des Index begrenzt. Die Festlegung der Parameter id1 und id2 für einen begrenzten Bereich der Metadatenbank ist unabdingbar, um umfangreiche Sammlungen schnell durchsuchen zu können.
flagsMit Flags wird die Sortierung und Aufsummierung von Werten gesteuert. Flags werden im folgenden Abschnitt „Werte-Flags“ beschrieben.
thresholdDurch Setzen des threshold-Parameters (Schwellenwert) kann der Werteaufruf die Erfassung der mit jedem Wert verknüpften Summe abkürzen, sobald der Schwellenwert erreicht ist. Durch die Angabe eines Schwellenwertes kann der Rufer die Menge der aus der Datenbank abzurufenden Index- und Metaelemente beschränken. Diese Optimierung findet nicht statt, wenn der threshold-Parameter nicht festgelegt oder auf null gesetzt wurde.
aggregateFunctionOptionaler Parameter, wird zum Ändern des Standardverhaltens vom Zählen von Sitzungen, Paketen oder Größen bis hin zum Zählen oder Aufsummieren des durch aggregateFieldName definierten numerischen Felds verwendet. Wenn einer der Parameter definiert wurde, müssen beide angegeben werden. Übergeben Sie entweder sum oder count, um anzugeben, welches Verhalten ausgeführt werden soll.
aggregateFieldNameAn diesem Metafeld wird aggregateFunction ausgeführt. Wenn der Aggregat-Flag gesetzt ist, müssen sowohl der Parameter aggregateFunction als auch aggregateFieldName angegeben werden. Die Ausführung eines Werteaufrufs mithilfe einer der Aggregatfunktionen kann erheblich langsamer erfolgen als ein Werteaufruf, der die Summen von Sitzungen, Paketen oder Größen erfasst. Das liegt daran, dass für jede übereinstimmende Sitzung die Where-Klausel aus der Metadatenbank abgerufen werden muss. Bei diesem Scanvorgang erfolgt eine I/O-Bindung eines überwiegenden Teils der Abfrage an die Meta-Datenbank-Volumes. Die für einen aggregierten Werteaufruf erforderliche Zeit verhält sich linear proportional zur Anzahl der Sitzungen, die der Where-Klausel entsprechen.
min, maxDer Mindest- und der Maximalwert, die vom Aufruf zurückgegeben werden sollten. Diese Parameter werden für die Iteration (oder das Paging) einer besonders hohen Anzahl von Werten verwendet – üblicherweise mehr Werte, als von einem einzelnen Aufruf zurückgegeben werden könnten. Sie werden vor allem zusammen mit den Flags sort-value,sort-ascending verwendet, sodass der höchste zurückgegebene Wert in einem nachfolgenden Aufruf als min-Parameterwert verwendet wird. Es handelt sich um exklusive Werte. Wenn min="rsa" angegeben wurde, und rsa ein gültiger Wert war, wird nicht rsa zurückgegeben, sondern der nächsthöhere Wert.

Werte-Flags

Mit dem Flags-Parameter lässt sich die Funktion des Werteaufrufs steuern. Es gibt drei Gruppen von Flags, die den unterschiedlichen Operationsmodi entsprechen, wie Sie der folgenden Tabelle entnehmen können.

                       
FlagBeschreibung
Sitzungen, Größe, PaketeDer Werteaufruf ermöglicht Ihnen, einen dieser Flags anzugeben, um zu bestimmen, wie die Summe für jeden Wert berechnet werden soll. Beim Flag Sitzungen gibt der Werteaufruf eine Anzahl von Sitzungen zurück, die jeden Wert enthalten. Mit dem Flag Größe summiert der Werteaufruf die Größe aller Sitzungen, die jeweils eindeutige Werte enthalten, und meldet die Gesamtgröße für jeden eindeutigen Wert. Beim Flag Pakete summiert der Werteaufruf die Anzahl der Pakete in allen Sitzungen, die jeweils eindeutige Werte enthalten, und gibt diese Summe für jeden eindeutigen Wert zurück.
sort-total, sort-valueMit diesen Flags wird die Sortierung der Flags gesteuert. Lautet der Flag sort-total, dann wird die Ergebnismenge in der Reihenfolge der erfassten Summen sortiert. Lautet der Flag sort-value, dann erfolgt die Sortierung der Ergebnisse in der Reihenfolge ihrer Werte.
order-ascending, order-descendingMit diesen Flags wird die Sortierreihenfolge der Ergebnismenge gesteuert. Wenn zum Beispiel nach der Summe in absteigender Reihenfolge sortiert werden soll, dann werden die Werte mit der größten Summe zuerst zurückgegeben.

Werteaufruf – Beispiel

Der Werteaufruf kommt in der Navigationsansicht in Security Analytics sehr häufig zum Einsatz. Die Standardansicht erzeugt Aufrufe, die wie folgt aussehen:

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

In diesem Beispiel fordert die Ansicht Navigation eindeutige Werte für ip.src an. Es werden eindeutige Werte von ip.src im angegebenen Zeitbereich angefordert. Die Anforderung bezieht sich auf die Anzahl Sitzungen, die mit jedem ip.src übereinstimmen. Ausgegeben werden die ersten 20 ip.src-Werte bei einer Sortierung nach der Gesamtanzahl der Sitzungen in absteigender Reihenfolge. Außerdem verfügt die Ansicht Navigation über einen Meta-ID-Bereich, um der Suchmaschine einen Optimierungshinweis zu liefern.

Aufruf „msearch“

Der Index bietet die Low-Level-Funktion msearch, um Textsuchläufe für alle Metadatentypen durchzuführen. Diese Art von Suche erfordert nicht, dass die Benutzer in ihren Abfragen bekannte Metadatentypen definieren. Stattdessen werden alle Teile der Datenbank auf Übereinstimmung durchsucht. „Msearch“ wird bei der Textsuche in der Ansicht „Ereignisse“ eingesetzt. Details zu den akzeptierten Suchformularen und Beispiele finden Sie im Thema Filter und Suchergebnisse in der Ereignisansicht im Leitfaden zu Investigation und Malware Analysis.

msearchParameter:

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

Der msearch-Algorithmus funktioniert folgendermaßen:

  1. Ein Satz von Sitzungen wird im Index ermittelt, indem die Schnittmenge der folgenden drei Sätze gesucht wird:
    • (Satz 1) Alle Sitzungen in der Datenbank
    • (Satz 2) Sitzungen, die dem Parameter der Where-Klausel entsprechen
    • (Satz 3) Wenn das Flag si angegeben ist: Sitzungen, die Werte indiziert haben, die dem Suchzeichenfolgen-Parameter entsprechen.
  2. Wenn bei der Suche der Parameter sm angegeben ist, werden alle Metadaten aus dem im Schritt 1 ermittelten Sitzungssatz gelesen und auf Übereinstimmung mit dem Suchzeichenfolgen-Parameter geprüft. Die Metadaten werden aus dem Service gelesen, der dem Punkt am nächsten liegt, von dem aus die Suche ausgeführt wurde. Wenn die Suche beispielsweise in einem Broker ausgeführt wurde, können die Metadaten aus dem dem Broker nächstgelegenen Concentrator gelesen werden, wenn aber die Suche in einem Archiver ausgeführt wurde, werden die Metadaten aus dem Archiver selbst gelesen.
  3. Wenn bei der Suche der Parameter sp angegeben ist, werden alle Rohpaketdaten oder Rohdatenprotokolleinträge aus dem im Schritt 1 ermittelten Sitzungssatz gelesen und auf Übereinstimmung mit dem Suchzeichenfolgen-Parameter geprüft. Die Pakete werden aus dem Service gelesen, der dem Punkt am nächsten liegt, von dem aus die Suche ausgeführt wurde. Wenn die Suche beispielsweise in einem Concentrator ausgeführt wurde, werden die Paketdaten aus dem Decoder gelesen, wenn aber die Suche in einem Archiver ausgeführt wurde, werden die Paketdaten aus dem Archiver selbst gelesen.
  4. Übereinstimmungen aus Schritt 2 und 3 werden zurückgegeben, sobald sie gefunden werden, bis zum Erreichen des Parameters limit. Der limit-Parameter gibt die maximale Anzahl der Sitzungen an, in denen nach Meta- und Paketdatenbanken gesucht wird. Wenn „limit“ nicht angegeben ist, wird der gesamte Satz an Sitzungen durchsucht, der in Schritt 1 bestimmt wurde.

Flags für „msearch“

                               
FlagBeschreibung
spDurchsucht Rohpaketdaten
smDurchsucht alle Metadaten
siFührt vor dem Durchsuchen von Metadaten Indexabfragen für alle Suchparameter aus
ciFührt eine Suche ohne Beachtung der Groß- und Kleinschreibung durch. Bei den zurückgegebenen Ergebnisse wird die Groß- und Kleinschreibung beachtet.
regexBehandelt den Parameter „search“ als regulären Ausdruck. Nur ein regulärer Ausdruck kann angegeben werden, er kann aber beliebig komplex sein.

Indexsuchmodus für „msearch“

Im Indexsuchmodus, angegeben durch das Flag si, werden Ergebnisse deutlich schneller zurückgegeben als in jedem anderen Modus. Die wichtigste Einschränkung dieses Modus ist, dass nur Übereinstimmungen mit Textbegriffen zurückgegeben werden, die werteindizierten Metawerten entsprechen.

  • Der Parameter si muss mit dem Flag sm kombiniert werden. Mit dem Parameter si wird angegeben, dass die Suche nur in indizierten Metadaten erfolgt. 
  • Der Parameter si kann bei Suchläufen mit regulären Ausdrücken verwendet werden, es werden jedoch nur textindizierte Werte abgeglichen. IP-Adressen und Zahlen werden mit den regulären Ausdrücken nicht geprüft.

Tipps zu „msearch“

  • Verwenden Sie immer die Where-Klausel, um einen Zeitbereich für die Suche anzugeben.  
  • Um nach IP-Adressbereichen zu suchen, geben Sie diese in die Where-Klausel ein.
  • Verwenden Sie den Parameter limit, wenn Sie nicht den Indexsuchmodus verwenden. Ohne diesen wird sonst eine sehr große Menge an Daten in der Meta- und Paketdatenbank gelesen.

Gespeicherte Verfahren

Die Abfrage- und Werteaufrufe halten weitere Suchfunktionen auf niedriger Ebene bereit. Für weitere erweiterte Verwendungsmöglichkeiten hält der Server verschiedene Verfahren bereit.

Verwendung von Anführungsstrichen in der Abfragesyntax

Der Abfrageparser unterscheidet nicht zwischen einfachen oder doppelten Anführungsstrichen in einer Abfrageanweisung. Ein Wert in einfachen oder doppelten Anführungszeichen wird als Textmetawert behandelt.

Der Abfrageparser versucht, die Bedeutung dessen zu verstehen, was Sie in die Anweisung schreiben. Er ist nicht sehr streng in dieser Hinsicht.

Beispiel:

reference.id=4752

Diese Klausel identifiziert Sitzungen, die einen reference.id-Metawert mit einem _numeric_-Wert von 4752 haben.

reference.id='4752' oder reference.id="4752"

Diese Klausel identifiziert Sitzungen, die einen reference.id-Metawert mit einem _string_-Wert von "4752" haben.

Allerdings vergleicht die Abfrage-Engine implizit Zahlen und Zeichenfolgen, die wie Zahlen aussehen, und behandelt sie gleich, wenn die Werte semantisch gleich sind. Es funktioniert also mit jeder dieser Schreibweisen.

Für eine möglichst effiziente Performance wäre es allerdings eine gute Idee, die Abfragen so zu konstruieren, dass die Abfragesyntax den vom Parser erzeugten Datentypen entspricht.

Wenn also zum Beispiel der Parser reference.id als einen numerischen Datentyp erstellt, (wie etwa uint32 oder uint64), dann sollten Sie die numerische Syntax verwenden.

Wenn der Parser reference.id als einen Textdatentyp erstellt, sollten Sie die Zeichenfolgensyntax verwenden.

Previous Topic:Rollover
Next Topic:Indexanpassung
You are here
Table of Contents > Abfragen

Attachments

    Outcomes