Skip to content

Dokumentation Management Konsole

AdrianMiska edited this page Dec 20, 2017 · 1 revision

Die Honeygrove Management-Konsole

Einleitung

Die Management-Konsole dient der Interaktion des Anwenders mit einem oder mehreren Honeygrove-Honeypots. Es spielt keine Rolle ob die angesteuerten Honeypots lokal oder verteilt vorliegen, solange eine eindeutige IP-Adresse bekannt ist. Die Management-Konsole kann direkt aus der systemeigenen Konsole heraus mit Parametern gestartet und benutzt werden, wie der Benutzer es von Kommandozeilen-Programmen gewohnt ist. Damit lässt sich die Management-Konsole ohne Probleme in gewohnte Arbeitsabläufe integrieren, ohne eine umständliche neue Benutzerumgebung zu erlernen. Für noch mehr Übersichtlichkeit bietet die Management-Konsole jedoch auch eine grafisch überarbeitete UI, welche anstelle des Scripts mit Parametern verwendet werden kann um größtmöglichen Nutzerkomfort zu gewährleisten.

Resourcen

Wichtig! Sowohl zu Betrieb als auch Entwicklung der Management-Konsole müssen folgende Vorraussetzungen erfüllt werden:

  • Betriebssystem Um die Management-Konsole starten zu können, wird eine dieser unterstütze Linux-Distribution benötigt:

    • Debian Version 9.1 (Stretch)
    • Ubuntu 17.04 (Zesty Zapus)
  • Python 3.5 Das Honeygrove-Projekt wurde einheitlich in dieser Python-Version entwickelt und greift auf Funktionen zurück, welche nicht mit früheren Versionen entwickelt werden können.

  • Pybroker Die Kommunikation zwischen Management-Konsole und Honeypots wird durch Broker-Endpoints realisiert. Broker inklusive Python-bindings (Pybroker) kann hier bezogen werden: Broker Github (Stand: 11.08.2017)

Installation

Es ist keine weitere Installation der Management-Konsole vonnöten. Das ganze Projekt kann unabhängig von anderen Komponenten des Honeygrove-Projektes lokal abgelegt werden.

Konfiguration

Um dauerhaftes Arbeiten mit der Management-Konsole zu vereinfachen, kann eine Standard-Konfigurationsdatei angelegt werden, welche bei jedem Start der Konsole ausgelesen und verwendet wird. Hierzu muss lediglich eine Datei mit dem Namen default.conf im Hauptordner der Management-Konsole erstellt werden. Diese Konfigurationsdatei kann nun mit allen von der Konsole unterstützten Befehlen gefüllt werden. Hierbei ist zu beachten, dass zum Abschluss jedes Befehls ein Zeilenumbruch eingefügt werden muss.

Starten der Management-Konsole

Die Management-Konsole bietet zwei verschiedene Benutzeroberflächen. Zum Starten der klassischen Konsolenintegration führen Sie einfach das Script mit Paramter -cli aus:

./management-konsole.sh -cli

Um die grafische UI zu starten, muss das Script ohne Parameter ausgeführt werden.

Beispiele

Zunächst muss sichergestellt werden, dass der oder die Honeypots konfiguriert sind und laufen (bei Problemen lesen Sie hierzu den Abschnitt Honeypot des Entwicklerhandbuches). Falls noch nicht geschehen, wechseln Sie mit der Konsole in den Ordner in dem sich das Script management-konsole.sh befindet und starten Sie dieses.

  1. Eine direkte Verbindung aufbauen
peer -ip 127.0.0.1 -p 8888

Hier wird eine direkte Verbindung zu einem Honeypot mit der IP 127.0.0.1sowie dem Port 8888 aufgebaut. Dies kann für beliebig viele Honeypots wiederholt werden.

  1. Die Verbindungen testen
ls -s

Der Funktionsaufruf ls -s gibt nun eine Liste aller vorhandenen Services aller verbundener Honeypots zurück.

Schnittstellen

Main Branch

management-konsole.sh

Beschreibung

Startpunkt der Management-Konsole. Ruft das Script management-konsole-startup.py mit Python 3 auf und übergibt gegebenenfalls Parameter.

Aufruf Parameter

  • '$@' Parameter der an die 'management-konsole-startup.py' übergeben wird. default: null -cli: Startet die Management-Konsole in klassischer Konsolen Ansicht.

management-konsole-startup.py

Beschreibung

Erstellt das Grundgerüst der Management-Konsole indem die Logik, Logging und Parser Objekte erstellt und gestartet werden. Die optionale default.conf wird hier ausgelesen (falls vorhanden) und an den Parser übergeben.

Dependencies

parser.parser
parser.Ui
logic.logic
logging.logging	
readline

Felder

  • use_ui: Ein boolean welcher besagt ob die Konsole in einer grafisch erweiterten Version gestartet werden soll.

Erweiterbarkeit management-konsole-startup.py

Sollen weitere Startparameter von der Management-Konsole erkannt werden, müssen diese im linear ablaufenden If-Statement berücksichtigt werden.


Main Branch > Parser

parser.py

Beschreibung

Das Herzstück der Textverarbeitung. Alle der Management-Konsole bekannten Befehle werden hier erkannt und weitergeleitet.

Dependencies

parser.ui
parser.functions.NO_SELECT
parser.functions.ALL_FUNCTIONS
traceback

Felder

  • logic: Eine Instanz der Logik Klasse.
  • logging: Eine Instanz der Logging Klasse.
  • is_select: Boolean welcher die Verwendung von 'select' anzeigt.
  • selected_group: Name der ausgewählten Gruppe (bei Verwendung von 'select').
  • selected_dict: Dictionary aller erstellen Gruppen (bei Verwendung von 'select').
  • ui: Eine Instanz der grafischen Ui Klasse.
  • map_dict Ein Dictionary zum mappen von Namen zu Honeypot IDs.

Methoden

class 'Parser.'init(self,logic,logging)
Initialisiert den Parser. Setzt Logging und Logik Objekte und hält fest, ob eine grafische Ui verwendet wird oder nicht.

Parameter

  • logic Logik Objekt
  • logging Logging Objekt

class 'Parser.'print(self,string)
Ruft die Print Methoden der Konsole oder der Ui auf.

Parameter

  • string Die zu druckende Nachricht.

class 'Parser.'input(self,string)
Gibt den string gegebenenfalls aus der Ui zurück.

Parameter

  • string Die eingegebene Nachricht.

class 'Parser.'select(self,args)
Ermöglicht das erstellen von Gruppen zur Verwaltung von mehreren Honeypots auf einmal.

Parameter

  • args Die Option zur Verwaltung der Honeypot Gruppen.
    • default: null Gibt informationen über selectierte Gruppen, deren IDs und alle vorhandenen Gruppen aus (nur falls select aktiv ist).
    • g : Wählt die Gruppe mit übergebenem Namen als aktiv aus. Ist der Name nicht vorhanden wird eine neue Gruppe erstellt. Wird zu der Option kein Parameter angegeben, wird die default Gruppe gewaehlt.
    • a / all: Add / Add-All
    • d : Löscht eine bestimmte Gruppe.
    • c: Loescht die Liste der ausgewaehlten Honeypots, der aktuell ausgewaehlten Gruppe.
    • r : Löscht einen Honeypot aus der aktiven Gruppe.
    • on: Aktiviert select.
    • off: Deaktiviert select

class 'Parser.'script(self,args)
Ermöglicht die Automation von Arbeitsschritten. Einzelne Befehle können so hintereinander ausgeführt werden ohne diese immer erneut ein zu tippen. Wird aus einer .conf Datei gelesen. Ruft die Methode 'Parser.parse()' für jede Zeile auf.

Parameter

  • args Die einzelnen Script Dateien.

Rückgabe

Der Rückgabewert des letzten 'Parser.parse' Aufrufs.


class 'Parser.'default_script(self)
Lädt die 'default.conf' Datei und ruft die Methode Parser.parse() auf.

Rückgabe

Der Rückgabewert des 'Parser.parse' Aufrufs (boolean).


class 'Parser.'list_to_dict(self,l)
Eine Hilfsmethode von parse(). Sie erhaelt das eingegebene Kommando als eine Liste von Strings (Parameter: l) und wandelt diese in ein Dictionary um, das die Parserfunktionen als args uebergeben bekommen.

Parameter

  • l: Eine Liste die in ein Dictionary umgewandelt wird. Kann leer sein.

Rückgabe

Ein 'Dictionary' mit Inhalt von 'l'.


class 'Parser.'parse(self, command)
Spaltet den übergebenen String in die einzelnen Bestandteile (Leerzeichen separiert) vergleicht diese mit den bekannten Befehlen und leitete diese zur Verarbeitung weiter.

Parameter

  • command: Ein String mit Befehlen.

Rückgabe

Gibt 'False' zurück wenn die Konsole beendet wird, ansonsten 'True'.

Erweiterbarkeit der parser.py

Workflow zum erweitern des Parsers:

  1. Schreiben einer neuen Funktion und abspeichern als Python Datei im Ordner Parser > Functions
  2. Erweitern der init.py im Ordner Parser > Functions:
    • Einsetzen des Dateinamens in die Liste 'all'.
    • Falls 'select' für die neu erstellte Funktion deaktiviert werden soll, hinzufügen des Dateinamens in die Liste 'NO_SELECT'.
  3. Erstellen einer neuen Hilfe Datei im Unterordner Parser > Functions > Help. Die Textdatei muss den selben Namen tragen wie die neue Funktion.

ui.py

Beschreibung

Die grafisch überarbeitete Konsolenansicht.

Dependencies

curses
ascii
math

Felder

  • logging: Eine Instanz der Logging Klasse.
  • parser: Eine Instanz der Parser Klasse.
  • log_length: Zeilen die durch 'pageup/pagedown' gesrollt werden können.
  • command_history: Befehls Historie.

Methoden

class 'Ui.'init(self)
Initialisiert die Ui Klasse.


class 'Ui.'print(self,string)
Textausgabe im log Fenster.

Parameter

  • string: Der aus zu gebende Text.

class 'Ui.'draw_log(self)
Zeichnen des Ausgabe Fenster.


class 'Ui.'draw_cmd(self,prompt_string=">")
Zeichnen der Befehlseingabezeile.


class 'Ui.'draw_select(self)
Schreibt Informationen zu selektierten Gruppen in das Befehlsfenster.


class 'Ui.'resize(self)
Baut die Konsole im Falle neu auf falls das Fenster verändert wurde.


class 'Ui.'input(self,prompt_string)
Verarbeitet die Navigation in der Konsole. Es werden die Eingabe und das Löschen von Zeichen, das scrollen im Befehlsfenster sowie das verschieben des Cursors behandelt.

Parameter

  • prompt_string: Eingabeaufforderung am Anfang der Befehlszeile.

Rückgabe

Eine Befehlszeile als String.


class 'Ui.'loop(self)
Die Schleife, welche die Ui am laufen hällt und regelmäßig aktualisiert.


class 'Ui.'start(self)
Startet eine neue Instanz der Ui.

Erweiterbarkeit der ui.py

Um die Ui um neue Steuerbefehle zu erweitern müssen die entsprechenden Befehle in der Methode 'input' hinzugefügt werden. Die von curses bereitgestellten Steuerbefehle können hier nachgeschlagen werden: curses - Teminal handling for character-cell displays


Main Branch > Parser > Functions

init.py

Beschreibung

Hier wird die Liste aller eingebundenen Konsolenbefehle erstellt. Jede der hier eingegliederten Funktionsnamen brauchen ein gleichnamiges Python Script im Ordner Parser > Functions.

Felder

  • all: Die Liste aller eingebundenen Funktinen

  • ALL_FUNCTIONS: Publicname für all .

  • NO_SELECT: Liste aller Funktionen für die 'select' deaktiviert ist.

Erweiterbarkeit von init.py

Neue Funktionen müssen in die Liste all eingetragen werden. Falls 'select' deaktiviert werden soll muss auch ein Eintrag in die Liste NO_SELECT erfolgen.


config.py

Beschreibung

Befehl zum konfigurieren von Honeypot Services.

Methoden

class 'Parser.'config(parser, logic, logging, args=0)

Parameter

  • parser: Ein Parser Objekt.
  • logic: Ein Logik Objekt.
  • logging: Ein Logging Objekt.
  • args: Optionen. Folgende Befehle werden unterstützt:
    • hid: Honeypot ID.
    • sid: Service ID.
    • p: Port
    • tp: Token probability (für Honeytoken).

filesysd.py

Beschreibung

Befehl zum herunterladen eines Honeypot Dateisystems.

Methoden

class 'Parser.'filesysd(parser, logic, logging, args=0)

Parameter

  • parser: Ein Parser Objekt.
  • logic: Ein Logik Objekt.
  • logging: Ein Logging Objekt.
  • args: Optionen. Folgende Befehle werden unterstützt:
    • hid: Honeypot ID.
    • dir: Pfad

filesysu.py

Beschreibung

Befehl zum hochladen eines neuen Dateisystems auf einen Honeypot.

Methoden

class 'Parser.'filesysu(parser, logic, logging, args=0)

Parameter

  • parser: Ein Parser Objekt.
  • logic: Ein Logik Objekt.
  • logging: Ein Logging Objekt.
  • args: Optionen. Folgende Befehle werden unterstützt:
    • hid: Honeypot ID.

get_config.py

Beschreibung

Befehl zum herunterladen von Service Settings von einem Honeypot.

Methoden

class 'Parser.'get_config(parser, logic, logging, args=0)

Parameter

  • parser: Ein Parser Objekt.
  • logic: Ein Logik Objekt.
  • logging: Ein Logging Objekt.
  • args: Optionen. Folgende Befehle werden unterstützt:
    • hid: Honeypot ID.
    • sid: Service ID

get_token_files.py

Beschreibung

Befehl zum herunterladen von Honeytoken Dateien von einem Honeypot.

Methoden

class 'Parser.'get_token_files(parser, logic, logging, args=0)

Parameter

  • parser: Ein Parser Objekt.
  • logic: Ein Logik Objekt.
  • logging: Ein Logging Objekt.
  • args: Optionen. Folgende Befehle werden unterstützt:
    • hid: Honeypot ID.

help.py

Beschreibung

Befehl zum anzeigen einer Hilfeseite bzw. Befehlserklärung.

Methoden

class 'Parser.'help(parser,logic,logging,args=0)

Parameter

  • parser: Ein Parser Objekt.
  • logic: Ein Logik Objekt.
  • logging: Ein Logging Objekt.
  • args: Name eines Befehls oder 'null'. Ruft anschließend die gleichnamige '.txt' Datei aus dem Ordner Parser > Functions > Help .

log.py

Beschreibung

Befehl zum loggen einkommender Honeypot Benachrichtigungen.

Methoden

class 'Parser.'log(parser,logic,logging,args=0)

Parameter

  • parser: Ein Parser Objekt.
  • logic: Ein Logik Objekt.
  • logging: Ein Logging Objekt.
  • args: Optionen. Folgende Befehle werden unterstützt:
    • freq: Zeitintervall indem Loggs abgerufen werden sollen in Sekunden.
    • k: Schlüsselwörter nach denen die Logs gefiltert werden.
    • o: Logischer Operator, nach dem der Filter die Logs scannt.
    • f: Dateiname der Ausgabedatei. Nur eine Ausgabedatei pro Loggingtask.
    • e: Logtask beenden, mehrere Id mit einem Funktionsaufruf moeglich

ls.py

Beschreibung

Befehl zum auflisten von Honeypots und deren Services und Konfigurationen.

Methoden

class 'Parser.'ls(parser,logic,logging,args=0)

Parameter

  • parser: Ein Parser Objekt.
  • logic: Ein Logik Objekt.
  • logging: Ein Logging Objekt.
  • args: Optionen. Folgende Befehle werden unterstützt:
    • hid: Honeypot ID.
    • sid: Service ID
    • s: Services
    • c: Konfigurationen

peer.py

Beschreibung

Befehl zum aufbauen einer direkten Verbindung zu einem Broker Endpoint. Oder zum Verbinden eines Honeypots mit einem Broker endpoint. Wenn die Option hid gesetzt wird, wird der entsprechende Honeypot mit einem endpunkt verbunden. Ist hid nicht gesetzt wird die Management Konsole mit einem Endpunkt verbunden.

Methoden

class 'Parser.'peer(parser,logic,logging,args=0)

Parameter

  • parser: Ein Parser Objekt.
  • logic: Ein Logik Objekt.
  • logging: Ein Logging Objekt.
  • args: Optionen. Folgende Befehle werden unterstützt:
    • ip: IP Adresse des Endpoints.
    • p: Port des Endpoints.
    • hid: Honeypot ID

peers.py

Beschreibung

Befehl zum auflisten aller aktiver Verbindngen zu Honeypots inklusive IP und Port. Analog zum Befehl peer koennen mit peers sowohl die Verbindungen zwischen Management Konsole und Endpunkten als auch zwingend Honeypot und Endpunkt eingesehen werden.

Methoden

class 'Parser.'peers(parser,logic,logging,args=0)

Parameter

  • parser: Ein Parser Objekt.
  • logic: Ein Logik Objekt.
  • logging: Ein Logging Objekt.
  • args: Optionen. Folgende Befehle werden unterstützt:
    • hid: Honeypot ID

start.py

Beschreibung

Befehl zum starten eines Services an einem Honeypot.

Methoden

class 'Parser.'start(parser,logic,logging,args=0)

Parameter

  • parser: Ein Parser Objekt.
  • logic: Ein Logik Objekt.
  • logging: Ein Logging Objekt.
  • args: Optionen. Folgende Befehle werden unterstützt:
    • hid: Honeypot ID.
    • sid: Service ID

stop.py

Beschreibung

Befehl zum stoppen eines Services an einem Honeypot.

Methoden

class 'Parser.'stop(parser,logic,logging,args=0)

Parameter

  • parser: Ein Parser Objekt.
  • logic: Ein Logik Objekt.
  • logging: Ein Logging Objekt.
  • args: Optionen. Folgende Befehle werden unterstützt:
    • hid: Honeypot ID.
    • sid: Service ID

token.py

Beschreibung

Befehl zum konfigurieren von Honeytokens an einem Honeypot.

Methoden

class 'Parser.'token(parser,logic,logging,args=0)

Parameter

  • parser: Ein Parser Objekt.
  • logic: Ein Logik Objekt.
  • logging: Ein Logging Objekt.
  • args: Optionen. Folgende Befehle werden unterstützt:
    • hid: Honeypot ID.
    • l: Listet alle vorhandenen Honeytoken auf.
    • a: Fügt einen neuen Honeytoken hinzu.
    • r: Entfernt einen Honeytoken.
    • c: Entfernt die Liste der Honeytokens aus dem lokalen Speicher der Management Konsole.

unpeer.py

Beschreibung

Befehl zum abbrechen einer direkten Verbindung zu einem Broker Endpoint. Wie bei peer und peers koennen mit diesem Befehl sowohl Verbindungen zwischen Management Konsole und Endpunkten als auch zwingend Honeypot und Endpunkt gesteuert werden.

Methoden

class 'Parser.'unpeer(parser,logic,logging,args=0)

Parameter

  • parser: Ein Parser Objekt.
  • logic: Ein Logik Objekt.
  • logging: Ein Logging Objekt.
  • args: Nummer einer aktiven Verbindung.
    • hid: Honeypot ID

Erstellen einer neuen Funktion.

Für einen generellen Überblick darüber wie der Parser um Funktionen erweitert wird: Erweiterbarkeit der parser.py Die Management-Konsole kann nach belieben um Funktionen erweitert werden. Um dem Schema der bereits vorhandenen Funktionen zu entsprechen, sollte jede neue Funktion Instanzen des Parsers (für Print befehle und callbacks), der Logik Klasse (zur semantischen Verarbeitung der Befehle) und der Logging Klasse (zur dokumentation von Logfiles) übergeben werden.


Main Branch > Network

network.py

Beschreibung

Die Netzwerk Klase kümmert sich um die Verbindungen zu den Honeypots und kümmert sich um gesendete und empfangene Nachrichten.

Dependencies

pybroker
time
random

Felder

  • mc_id: Eindeutige ID der Management-Konsole bestehend aus dem prefix 'mc_' und einer zufallsgenerierten Nummer.
  • endpoint: Der Broker Endpoint der Management-Konsole.
  • answereQueue: Eine Broker MessageQueue für Antworten auf Anfragen der MK.
  • logsQueue: Eine Broker MessageQueue für eingehende Logs.
  • connection_counter: Anzahl bestehender Verbindungen.
  • connection_dic: Dictionary welches jeder Verbindung eine ID zuordnet.

Methoden

class 'Network.'init(self)
Initialisiert die Netzwerk Klasse. Setzt eine eindeutige ID, erstellt einen Broker Endpoint und meldet sich an antwort und logging Message Queues an.


class 'Network.'connect(self, IP, PORT)
Baut eine neue Verbindung auf.

Parameter

  • IP: IP des Honeypots.
  • PORT: Port des Honeypots.

Rückgabe

True wenn Verbindung möglich war, sonst false.


class 'Network.'disconnect(self, connectionName)
Löst eine bestehende Verbindung.

Parameter

  • connectionName: ID der Verbindung.

Rückgabe

True wenn lösen der Verbindung möglich war, sonst false.


class 'Network.'list_connections(self)
Gibt eine Liste von bestehenden Verbindungen zurück.

Rückgabe Liste mit bestehenden Verbindungen.


class 'Network.'get_logs(self)
Gibt alle bestehenden Log Nachrichten zurück. Leert die 'logsQueue'.

Rückgabe

Liste mit allen bestehenden Log Nachrichten zurück.


class 'Network.'empty_queue(self,queue)
Leert eine komplette MessageQueue und gibt deren Inhalt als Liste zurück.

Parameter

  • queue: MessageQueue, welche geleert werden soll.

Rückgabe

Liste mit allen bestehenden Nachrichten einer MessageQueue.


class 'Network.'get_message(self,timeout=10)
Wartet auf eine Antwort auf eine Anfrage der Management-Konsole und gibt diese zurück. Wird benutzt wenn auf eine Anfrage auch eine Antwort erwartet wird.

Parameter

  • timeout: Die Zeit welche auf eine Antwort gewartet wird.

Rückgabe

Der Rückgabewert kann zwei Formen haben: Eine einfache Antwort (dies ist der Normalfall) oder eine Liste von Antworten (falls der vorherige aufruf seinen timeout überschritten hat ohne das die Nachricht zurück kam).


class 'Network.'wait_for_messages(self,sec=5)
Wird benutzt wenn die Anzahl der ankommenden Antworten unbekannt ist.

Parameter

  • sec: Die Zeit welche auf eine Antwort gewartet wird.

Rückgabe

Gibt eine Liste von Nachrichten zurück. Nachrichten werden nach der eigenen mc-id gefiltert.


class 'Network.'sendMessageToTopic(self, msg)
Sendet eine Nachricht über die MessageQueue 'commands' an alle Honeypots.

Parameter

  • msg: Die zu übermittelnde Nachricht (JSON).

Erweiterbarkeit der network.py

Wenn weitere Kommunikationskanäle zur Management-Konsole hinzugefügt werden sollen, so müssen die Message Queues in der 'init' Methode erweitert werden.


Main Branch > Logic

logic.py

Beschreibung

Die Logik Klasse kümmert sich um die semantische Verarbeitung der durch den Parser übergebenen Befehle.

Dependencies

time
json
os
network.network.Network
pathlib.Path

Felder

  • network: Eine Instanz der Netzwerk Klasse.
  • home_dir: Das Homeverzeichnis.

Methoden

class 'Logic.'init(self)
Initialisiert die Logik Klasse. Erstellt eine neue Netzwerk Instanz und setzt das Homeverzeichnis auf einen Standart Pfad.


class 'Logic.'connect(self,ip,port)
Ruft die 'connect' Methode der Netzwerk Klasse auf.

Parameter

  • ip: IP Adresse
  • port: Port

Rückgabe

Gibt True zurück falls eine Verbindung hergestellt werden konnte, sonst False.


class 'Logic.'disconnect(self,connection_name)
Ruft die 'disconnect' Methode der Netzwerk Klasse auf.

Parameter

  • connection_name: Name der zu beendenden Verbindung.

Rückgabe

Gibt True zurück falls eine Verbindung beendet werden konnte, sonst False.


class 'Logic.'list_connections(self)
Ruft die 'list_connections' Methode der Netzwerk Klasse auf.

Rückgabe

Gibt eine Liste aller bestehdenden Verbindungen mit IP und Port zurück.


class 'Logic.'extract_messages(self,msg_list)
Methode zum entpacken einer eingegangenen JSON Nachricht in eine Liste.

Parameter

  • msg_list: Die eingehenden Nachrichten in JSON Format.

Rückgabe

Eine entpackte JSON Nachrichtenliste.


class 'Logic.'check_answer(self,msg_list,honeypotids,expect_dict)
Die Methode prüft ob eine Nachricht die in 'expect_dict' enthaltenen Schluesselwert Paare enthaelt und ob die Nachrichten von erwarteten Honeypots sind.

Parameter

  • msg_list: Die eingehenden Nahrichten als Liste.
  • honeypotids: Die Honeypot IDs deren Antworten erwartet werden.
  • expected_dict: Die zu erwarteten Schlüsselwörter.

Rückgabe

Eine Liste nach Absender und Nachrichten Typ gefilterter Nachrichten.


class 'Logic.'get_messages(self,honeypotids,expect_dict)
Ruft Nachrichten ab und gibt sie nach Ursprung und Typ gefiltert als Dictionary zurück.

Parameter

  • honeypotids: Die Honeypot IDs deren Antworten erwartet werden.
  • expected_dict: Die zu erwarteten Schlüsselwörter.

Rückgabe

Eine Liste mit Nachrichten als filterbares Dictionary oder, falls keine Nachrichten eingegangen sind, eine leere Liste.


class 'Logic.'send_receive(self, req, honeypotids, expect_dict)
Ruft die Methode 'sendMessageToTopic' der Netzwerk Klasse auf und wartet auf Antworten.

Parameter

  • req: Enthält den Nachrichten Kopf mit zwingend im Nachrichten Typ vorraussgesetzten Inhalten.
  • honeypotids: Die Honeypot IDs deren Antworten erwartet werden.
  • expected_dict: Die zu erwarteten Schlüsselwörter.

Rückgabe

Eine Liste mit Nachrichten als filterbares Dictionary oder, falls keine Nachrichten eingegangen sind, eine leere Liste.


class 'Logic.'honeypot_peer(self,honeypotids,ip,port)
Setzt die peer Verbindung eines Honeypots.

Parameter

  • honeypotids: Die Honeypot IDs deren Antworten erwartet werden.
  • ip: IP Adresse
  • port: Port

Rückgabe

Eine Liste von Verbindungen.


class 'Logic.'honeypot_get_peering(self,honeypotids)
Gibt die Verbindung eines oer mehrerer Honeypots zurück.

Parameter

  • honeypotids: Die Honeypot IDs deren Antworten erwartet werden.

Rückgabe

Gibt Verbindungen anhand einer Honeypot ID zurück.


class 'Logic.'honeypot_unpeer(self,honeypotids)
Trennt eine Verbindung zu einem Honeypot.

Parameter

  • honeypotids: Die Honeypot IDs deren Antworten erwartet werden.

Rückgabe

Gibt eine Statusmeldung des Honeypots zurück.


class 'Logic.'list_honeypots(self)
Gibt die Namen aller aktiver und verbundener Honeypots aus.

Rückgabe

Eine Liste von Namen der aktiven Honeypots.


class 'Logic.'list_services(self,honeypotids)
Ruft alle aktiven Services eines Honeypots ab.

Parameter

  • honeypotids: Die Honeypot IDs deren Antworten erwartet werden.

Rückgabe

Eine Liste aller aktiver Services die der entsprechende Honeypot anbietet.


class 'Logic.'get_service_config(self, honeypotids, serviceid)
Ruft die Konfiguration eines Services an einem oder mehreren Honeypots ab.

Parameter

  • honeypotids: Honeypot IDs.
  • serviceid: Der Bezeichner des Services.

Rückgabe

Ein Dictionary mit Service Konfigurationen.


class 'Logic.'send_service_config(self, honeypotids, config)
Sendet neue Konfigurationen eines Services an einen oder mehrere Honeypots.

Parameter

  • honeypotids: DHoneypot IDs.
  • config: Ein Dictionary von Service Settings.

Rückgabe

Die aktuellen Service Konfigurationen als Dictionary.


class 'Logic.'start_service(self,honeypotids,serviceids)
Startet eine beliebige Anzahl von Services an einer Liste von Honeypots.

Parameter

  • honeypotids: Honeypot IDs.
  • serviceids: Der Bezeichner der Services.

Rückgabe

Eine Benachrichtigung der Honeypots mit deren gestarteten Services.


class 'Logic.'stop_service(self,honeypotids,serviceids)
Stoppt eine beliebige Anzahl von Services an einer Liste von Honeypots.

Parameter

  • honeypotids: Honeypot ID
  • serviceids: Der Bezeichner der Services.

Rückgabe

Eine Benachrichtigung der Honeypots mit deren gestoppten Services.


class 'Logic.'get_filesystem(self, honeypotid, directory=[])
Läd das Dateisystem eines Honeypots lokal auf den Client auf dem sich die Management-Konsole befindet.

Parameter

  • honeypotid: Honeypot ID
  • directory: Ein Pfad im Dateisystem.

Rückgabe

True wenn eine Datei empfangen und geschrieben werden konnte, sonst False.


class 'Logic.'send_filesystem(self, honeypotids, xml_files)
Sendet ein neues Dateisystem an einen oder mehrere Honeypots.

Parameter

  • honeypotids: Honeypot IDs.
  • xml_files: Die neuen Dateisysteme.

Rückgabe

True wenn die Datei gesendet und geschrieben werden konnte, sonst False.


class 'Logic.'get_token_files(self, honeypotid, directory=[])
Läd die Honeytoken Dateien eines Honeypots lokal auf den Client auf dem sich die Management-Konsole befindet.

Parameter

  • honeypotid: Die Honeypot ID
  • directory: Ein Pfad im Dateisystem.

Rückgabe

Schreibt die Honeytoken Datei in das Homeverzeichnis des Anwenders.


class 'Logic.'add_token_files(self, honeypotid, filepath)
Überträgt eine neue Honeytoken Datei an einen Honeypot.

Parameter

  • honeypotid: Die Honeypot ID
  • filepath: Dateipfad der zu übertragenenen Honey Token Datei.

Rückgabe

Gibt True zurück wenn die Datei übertragen werden konnte, sonst false.


class 'Logic.'remove_token_files(self, honeypotid, filenames)
Entfernt Honey Token Dateien von einem Honeypot.

Parameter

  • honeypotid: Die Honeypot ID
  • filenames: Die zu entfernenden Honeytoken Dateien.

Rückgabe

Gibt True zurück wenn die Dateien entfernt werden konnte, sonst false.


class 'Logic.'get_html_pages(self, honeypotid)
Läd die Html Seiten von einem Honeypot lokal auf den Client auf dem sich die Management-Konsole befindet.

Parameter

  • honeypotid: Die Honeypot ID

Rückgabe

Gibt die heruntergeladenen HTML und Dashboard Seiten auf der Konsole aus und speichert diese im Homeverzeichnis des Anwenders.

Erweiterbarkeit logic.py

Alle neuen Befehle um die der Parser erweitert wird müssen auch eine semantische Verarbeitung bekommen. Ausgehende und eingehende Nachrichten werden über die bereitgestellten Methoden einer Instanz der 'network.py' realisiert welche bei Initialisierung übergeben wurde.


Main Branch > Logging

logging.py

Beschreibung

Die Logging Klasse ermöglicht das loggen von einkommenden Nachrichten aller verbundener Honeypots.

Dependencies

threading
time
logging.LoggingTask

Felder

  • *lock *: Ein Lock Objekt zum sperren und entsperren eines Threads.
  • *logic *: Eine Instanz der Logik Klasse
  • *ui *: Eine Instanz der grafischen Ui.
  • task_list: Eine Liste von logging Tasks.
  • task_count: Anzahl an logging Tasks
  • freq: Frequenz in der Loggs abgerufen werden.

Methoden

class 'Logging.'init(self,logic)
Initialisierung der Logging Instanz.

Parameter

  • *lock *: Ein Lock Objekt zum sperren und entsperren eines Threads.
  • *logic *: Eine Instanz der Logik Klasse
  • *ui *: Eine Instanz der grafischen Ui.
  • task_list: Eine Liste von logging Tasks.
  • task_count: Anzahl an logging Tasks
  • freq: Frequenz in der Loggs abgerufen werden.

class 'Logging.'new_task(self,keywords,operator,filename=None)
Erstellt einen neuen Logging Task zu einem übergebenen Thema.

Parameter

  • keywords: Schlagwörter nach denen in den eingehenden Nachrichten gesucht werden soll.
  • operator: Logging Operator.
  • filename: Optional. Falls ein Name übergeben wird, werden alle Loggs in eine Datei gleichen Namens abgespeichert.

class 'Logging.'end_task(self,number)
Beendet einen Logging Task.

Parameter

  • number: ID des Logging Tasks

Rückgabe

Gibt True zurück falls der Task entfernt werden konnte, sonst False.


class 'Logging.'print_tasks(self)
Gibt eine Auflistung aller laufender Logging Tasks aus.


class 'Logging.'start(self)
Erstellt einen Thread welcher für das Abrufen und verarbeiten von Log Nachrichten verwendet wird.


class 'Logging.'print(self, string)
Gibt Nachrichten über die Ui oder die Systemkonsole aus.


class 'Logging.'loop(self)
Ruft in regelmäßigen Abständen eingegangene Logfiles ab und gibt diese an den aktiven Logging Task weiter.

Erweiterbarkeit logging.py

Beim Anpassen oder Erweitern der Methoden sollte darauf geachtet werden, dass neue Features konform zu denen in 'loggingTask.py' bereitgestellten Schnittstellen sind. Werden Features implementiert die noch nicht von den Logging Task Instanzen verarbeitet werden könne, müssen diese entsprechen erweitert werden.


loggingTask.py

Beschreibung

Die Logging Tasks Klasse erstellt Logging Aufträge zu individuellen Themen. Loggs können sowohl über die Konsole ausgegeben als auch lokal als logfile gesichert werden.

Dependencies

threading
time
LoggingTask

Felder

  • logging: Eine Instanz der Logging Klasse.
  • keywords: Schlagwörter für den Logging Filter.
  • name: Optionaler Dateiname zum lokalen abspeichern der Log Nachrichten.
  • id: ID der Logging Tasks
  • operator: Logging Operator. Moeglich sind "and" und "or".

Methoden

class 'LoggingTask.'init(self, logging,task_id, keywords, operator, name = None)
Initialisiert einen neuen Logging Task.

Parameter

  • logging: Eine Instanz der Logging Klasse.
  • task_id: ID der Logging Tasks
  • keywords: Schlagwörter für den Logging Filter.
  • operator: Logging Operator. Möglich sind "and" oder "or".
  • name: Optionaler Dateiname zum lokalen abspeichern der Log Nachrichten.

class 'LoggingTask.'log(self,msg_list)
Händelt die eigentliche Logging Aufgabe. Ist das Feld 'name' gesetzt, so werden Log Nachrichten in eine gleichnamige Datei geschrieben. Ansonsten erfolgt die Ausgabe über die Konsole.

Parameter

  • msg_list: Eine Liste von Log Nachrichtten.

class 'LoggingTask.'evaluate_log(self,msg)
Überprüft den Inhalt der übergebenen Nachricht auf Logging Operatoren.

Parameter

  • msg: Eine Log Nachricht.

Rückgabe

Sollte der gesetzte Log Operator (entweder 'or' oder 'and') in der Nachricht enthalte sein wird True zurück gegeben, sonst False.


class 'LoggingTask.'info(self)
Schreibt informationen über den Logging Task in die Konsole.

Erweiterbarkeit der loggingtask.py

Beim hinzufügen von neuen Methoden sollte darauf geachtet werden sowohl die Verarbeitung über Konsole als auch das direkte erstellen von Logfiles ein zu binden. Dadurch wird ein gleichmäßiges Nutzererlebnis garantiert.

Home

User Guides:

Documentation:

  • Honeygrove documentation
  • Incident-Monitoring documentation
  • Management-Console documentation

Legacy:

Clone this wiki locally