Graphen-Datenbanken in der Praxis
Mit Blick auf die immer steigende Komplexität von Computer-Netzwerken und möglichen Gefahren diese betreffend, ist es wichtiger geworden, Angriffe zu erkennen und zu behandeln. Für die Analyse von Netzwerkdaten gibt es viele verschiedene Möglichkeiten. Nahezu alle Hersteller, die Produkte für die IT-Sicherheit entwickeln, stellen auch Produkte zur Verfügung, um Anomalien in Netzwerkdaten zu erkennen. Die Thematik für diesen Blog-Artikel wurde ursprünglich im Rahmen einer studentischen Ausarbeitung (Masterarbeit) aufgegriffen. Mit Hilfe von semantischer Strukturierung der Netzwerkdaten in einer Graphen-Datenbank war es möglich, eben jene Daten besser zu analysieren. Dabei lag der Fokus auf der Transformation der Datenpakete in ein lesbares Format und der Kombination von weiteren Datenquellen. Ebenso wurden Beispiele der Anomalie-Erkennung entwickelt und mit ähnlichen Herangehensweisen verglichen.
Grundlagen und Hintergrund
Semantic Web
Das Thema des Semantic Web ist eng verknüpft mit der Darstellung durch das Resource Description Framework (RDF). RDF ist ein Datenmodell, welches durch das World Wide Web Consortium (W3C) erstellt und veröffentlicht wurde. RDF ist vergleichbar mit Entity-Relationship oder Klassen-Diagrammen. Datenmodellierung in Ontologien, die unter anderem mit RDF dargestellt werden können, beruht vor allem auf der Darstellung der logischen Verknüpfungen einzelner Elemente und der Beschreibung dieser Verknüpfungen.
RDF
Das RDF ist eine formelle Beschreibung und ein Rahmenwerk für Ressourcen-Beschreibungen im Internet. Die Grundlage des RDF bildet das sogenannte Triple. Dies besteht aus Subjekt, Prädikat und Objekt und beschreibt Verbindungen zwischen zwei Objekten. Eine Menge von Triple nennt man RDF-Graph. Dieser kann mithilfe von Kanten und Knoten visualisiert werden. In Abbildung 1 ist ein einfacher RDF-Graph dargestellt. Oft wird auch nur die Zeichenfolge verwendet und der Datentyp nicht explizit angegeben. Ein RDF-Datensatz besteht aus einer Menge von Graphen: Zum einen existiert immer der "default"-Graph. Zum anderen kann eine beliebige Menge von beliebig benennbaren Graphen verwendet werden. Im ersten Fall spricht man dann von Triple, im zweiten von Quad. Demnach wird mit der Ergänzung des Graphen aus dem Triple ein Quad.
SPARQL
Für die Abfrage von in RDF gespeicherten Daten wird SPARQL (SPARQL Protocol And RDF Query Language) verwendet. SPARQL ist angelehnt an SQL und verwendet eine ähnliche Struktur. Die Abfragen werden über den Abgleich der oben beschriebenen Triple definiert. Unter anderem wird auch die Verwendung von Variablen und Sonderfunktionen unterstützt. Alle Filterungen und Analysen in dieser Arbeit wurden in SPARQL implementiert.
Transformation
Als Teil der Masterarbeit wurde ein Prozess entwickelt, der es ermöglicht, Netzwerkdaten aus dem PCAP/ PDML-Format in eine Graphen-Datenbank zu laden. Beispielhaft ist ein Teil der Daten unten dargestellt. Eine PDML-Datei enthält alle Informationen des Netzwerkverkehrs auf Paket- und Protokollebene.So enthält ebene diese eine Liste an Paketen, die wiederum eine Liste an Protokollen und Protokoll-Feldern beinhaltet.
<?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="pdml2html.xsl"?> <!--- ... ---> <pdml> <packet> <proto name="geninfo" pos="0" size="183"> <field name="num" pos="0" show="1" value="1" size="183"/> <field name="len" pos="0" show="183" value="b7" size="183"/> <field name="caplen" pos="0" show="183" value="b7" size="183"/> <!--- ... ---> </proto> <proto name="frame" showname="" size="183" pos="0"> <field name="frame.interface_id" size="0" pos="0" show="0"> <!--- ... ---> </field> <!--- ... ---> </proto> </packet> </pdml>
Die PDML Datei ist nach dem XML-Standard strukturiert und enthält alle Information, die ein Netzwerkpaket innehält. Dabei ist jedes Paket in die jeweils verwendeten Protokolle unterteilt. Jedes Paket beginnt mit dem Protokoll geninfo. Dieses enthält Daten zur Größe des Pakets, Datum bzw. Zeitpunkt sowie generelle Informationen des Pakets. Die darauffolgenden Protokolle sind "echte" Protokolle innerhalb des Pakets. Jedes Protokoll ist wiederum in Felder untergliedert, die ebenfalls Felder enthalten können.
Während der Transformation wird zunächst das Paket an sich als Triple erstellt (siehe unten) sowie mit dem vorangegangen Paket verknüpft.
<https://sns.ordix.de/data/packet#ec92e80b3d572ac8f2879e64b1a18d85421c13957d48bd63f5e3b0be0b71dbf0> <https://sns.ordix.de/2021/schema/rd#prev> <https://sns.ordix.de/data/packet#null>
Jedes Feld (und alle Felder darunter) werden ebenfalls als ein Triple erstellt. Dabei besteht das Triple aus dem Paket-Hash, dem Feldnamen und dem Feldwert. Ergänzt wird das Triple noch durch den Namen des Graphen.
Beispielhaft wird nach dem obigen Beispiel aus den folgenden Zeilen ein Quad gebildet. Hier ist der Feldname eine Kombination aus Protokoll-Name geninfo und dem Feldnamen num. Der Feldwert ist 1.
<proto name="geninfo" pos="0" size="183"> <field name="num" pos="0" show="1" value="1" size="183"/>
<https://sns.ordix.de/data/packet#ec92e80b3d572ac8f2879e64b1a18d85421c13957d48bd63f5e3b0be0b71dbf0> <https://sns.ordix.de/2021/schema/proto/geninfo#num> "1"^^<http://www.w3.org/2001/XMLSchema#integer> <https://sns.ordix.de/data/graph#default> .
Im nächsten Beispiel wird das Protokoll frame und das Feld time transformiert.
<https://sns.ordix.de/data/packet#ec92e80b3d572ac8f2879e64b1a18d85421c13957d48bd63f5e3b0be0b71dbf0> <https://sns.ordix.de/2021/schema/proto/frame#time> "2021-07-15T19:06:42.839253"^^<http://www.w3.org/2001/XMLSchema#dateTime> <https://sns.ordix.de/data/graph#default> .
In der gekürzten Schreibweise lassen sich die Triple (bzw. Quads) auch ohne den Präfix schreiben, was seine Lesbarkeit verbessert.
PREFIX packet <https://sns.ordix.de/data/packet> PREFIX graph <https://sns.ordix.de/data/graph> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> PREFIX frame: <https://sns.ordix.de/2021/schema/proto/frame#> <packet#ec92e80b3d572ac8f2879e64b1a18d85421c13957d48bd63f5e3b0be0b71dbf0> <frame#time> "2021-07-15T19:06:42.839253"^^<xsd#dateTime> <graph#default> .
Nach der Transformation von PDML nach Triple (bzw. Quad) werden eben diese in die Graphen-Datenbank geladen.
Analyse
Für eine einfachere Analyse können Präfixe definiert werden, welche in den SPARQL-Abfragen verwendet werden können.
Eine SPARQL-Abfrage ist sehr ähnlich aufgebaut wie eine SQL-Abfrage, was den Einstieg in dessen Verwendung erleichtert.
Der grobe Aufbau besteht aus SELECT und WHERE. Das Format des SPARQL-SELECT ist hierbei nahezu identisch zu dem SELECT von SQL. In der WHERE-Bedingung werden alle "Einschränkungen" des Graphen definiert, welcher ausgewählt werden soll.
SELECT ?person ?firstname ?lastname WHERE { ?person fname ?firstname. ?person lname ?lastname. }
PERSON_1 Max Mustermann PERSON_2 Anna Musterfrau PERSON_3 Peter Mustermann
Mit der obigen Abfrage werden in der Graphen-Datenbank alle Personen sowie deren Vor- und Nachname gebildet.
Die Abfragen lassen sich auch durch eine Filterung, Sortierung oder Gruppierung ergänzen. Für die Filterung von Text können auch reguläre Ausdrücke verwendet werden. Ähnlich wie in SQL-Abfragen können auch Aggregationen erstellt werden.
HTTP-Request
Die Analyse der Netzwerkdaten geschieht auch mithilfe von SPARQL-Abfragen. Beispielhaft wird hier eine Liste alle HTTP-Requests erstellt. Dazu werden alle Pakete betrachtet, die als HTTP-Request-Methode GET verwenden. Wie im Beispiel unten zu sehen ist, ist ein HTTP-Request gefunden worden. Dabei ist der Host www.1d5920f4b44b27a802bd77c4f0536f5a-gdprlock und die Anfragesearch?q=test. Das lässt darauf schließen, dass ein Paket gefunden wurde, bei dem an einem Computer in Google nach „test" gesucht wurde.
SELECT DISTINCT ?host ?request WHERE { ?p frame:time ?time. ?p http:request.uri ?request. ?p http:request.method 'GET'. ?p http:host ?host. FILTER(?request != "") } ORDER BY ?time ?host
www.1d5920f4b44b27a802bd77c4f0536f5a-gdprlock search?q=test
Zusammenfassung
Mit Hilfe der Transformation des Netzwerkdaten ist eine Analyse mit SPARQL sehr einfach möglich. Die semantische Betrachtung der einzelnen Pakete bieten einen großen Spielraum komplexe Analysen zu erstellen und neue Erkenntnisse zu gewinnen.
Sie haben Interesse an einer Weiterbildung oder Fragen zum Thema? Sprechen Sie uns an oder besuchen Sie einen unserer Kurse aus unserem Seminarshop:
Zu unseren Seminaren
Quellen
SPARQL 1.1 Query Language - https://www.w3.org/TR/sparql11-query
Wikidata Query Service - https://blazegraph.com
Blazegraph Database - https://www.w3.org/TR/sparql11-query
Amazon Neptune - https://aws.amazon.com/de/neptune
RDF 1.1 Concepts and Abstract Syntax - https://www.w3.org/TR/rdf11-concepts/
PDML · Wiki · Wireshark Foundation / wireshark · GitLab - https://gitlab.com/wireshark/wireshark/-/wikis/PDML
WikiData Query Service - https://query.wikidata.org/
Bei Updates im Blog, informieren wir per E-Mail.
Kommentare