-
Notifications
You must be signed in to change notification settings - Fork 8
Dokumentation Management Konsole
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.
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)
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.
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.
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.
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.
- 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.1
sowie dem Port 8888
aufgebaut.
Dies kann für beliebig viele Honeypots wiederholt werden.
- Die Verbindungen testen
ls -s
Der Funktionsaufruf ls -s
gibt nun eine Liste aller vorhandenen Services aller verbundener Honeypots zurück.
Startpunkt der Management-Konsole. Ruft das Script management-konsole-startup.py
mit Python 3 auf und übergibt gegebenenfalls Parameter.
- '$@' Parameter der an die 'management-konsole-startup.py' übergeben wird. default: null -cli: Startet die Management-Konsole in klassischer Konsolen Ansicht.
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.
parser.parser
parser.Ui
logic.logic
logging.logging
readline
- use_ui: Ein boolean welcher besagt ob die Konsole in einer grafisch erweiterten Version gestartet werden soll.
Sollen weitere Startparameter von der Management-Konsole erkannt werden, müssen diese im linear ablaufenden If-Statement berücksichtigt werden.
Das Herzstück der Textverarbeitung. Alle der Management-Konsole bekannten Befehle werden hier erkannt und weitergeleitet.
parser.ui
parser.functions.NO_SELECT
parser.functions.ALL_FUNCTIONS
traceback
- 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.
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'.
Workflow zum erweitern des Parsers:
- Schreiben einer neuen Funktion und abspeichern als Python Datei im Ordner Parser > Functions
- 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'.
- Erstellen einer neuen Hilfe Datei im Unterordner Parser > Functions > Help. Die Textdatei muss den selben Namen tragen wie die neue Funktion.
Die grafisch überarbeitete Konsolenansicht.
curses
ascii
math
- 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.
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.
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
Hier wird die Liste aller eingebundenen Konsolenbefehle erstellt. Jede der hier eingegliederten Funktionsnamen brauchen ein gleichnamiges Python Script im Ordner Parser > Functions.
-
all: Die Liste aller eingebundenen Funktinen
-
ALL_FUNCTIONS: Publicname für all .
-
NO_SELECT: Liste aller Funktionen für die 'select' deaktiviert ist.
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.
Befehl zum konfigurieren von Honeypot Services.
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).
Befehl zum herunterladen eines Honeypot Dateisystems.
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
Befehl zum hochladen eines neuen Dateisystems auf einen Honeypot.
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.
Befehl zum herunterladen von Service Settings von einem Honeypot.
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
Befehl zum herunterladen von Honeytoken Dateien von einem Honeypot.
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.
Befehl zum anzeigen einer Hilfeseite bzw. Befehlserklärung.
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 .
Befehl zum loggen einkommender Honeypot Benachrichtigungen.
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
Befehl zum auflisten von Honeypots und deren Services und Konfigurationen.
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
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.
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
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.
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
Befehl zum starten eines Services an einem Honeypot.
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
Befehl zum stoppen eines Services an einem Honeypot.
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
Befehl zum konfigurieren von Honeytokens an einem Honeypot.
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.
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.
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
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.
Die Netzwerk Klase kümmert sich um die Verbindungen zu den Honeypots und kümmert sich um gesendete und empfangene Nachrichten.
pybroker
time
random
- 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.
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).
Wenn weitere Kommunikationskanäle zur Management-Konsole hinzugefügt werden sollen, so müssen die Message Queues in der 'init' Methode erweitert werden.
Die Logik Klasse kümmert sich um die semantische Verarbeitung der durch den Parser übergebenen Befehle.
time
json
os
network.network.Network
pathlib.Path
- network: Eine Instanz der Netzwerk Klasse.
- home_dir: Das Homeverzeichnis.
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.
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.
Die Logging Klasse ermöglicht das loggen von einkommenden Nachrichten aller verbundener Honeypots.
threading
time
logging.LoggingTask
- *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.'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.
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.
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.
threading
time
LoggingTask
- 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".
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.
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.
User Guides:
- Honeygrove user guide
- Incident-Monitoring user guide
- Management-Console user guide
Documentation:
- Honeygrove documentation
- Incident-Monitoring documentation
- Management-Console documentation
Legacy: