
Ein hostbasiertes IDS- und Netzwerküberwachungssystem (Mein Abschlussprojekt)
# EagleEye - hostbasiertes IDS- und Netzwerküberwachungssystem
> Dieses Projekt braucht noch viel Arbeit, um einsatzbereit zu sein, da es mein Abschlussprojekt ist. Es ist also nicht benutzerfreundlich, nur für erfahrene Benutzer gedacht, eine Betaversion, und ich habe es nur zu Bildungszwecken veröffentlicht/erstellt!

- EagleEye besteht aus zwei Teilen:
- **Client** *(geschrieben in Golang)*
+ **Zweck:** Erfasst jedes Paket auf dem Gerät und extrahiert wichtige Details aus bekannten Protokollen und sendet schließlich alle gesammelten Daten an den Master, falls dieser online ist!
+ **Verwendung:** Er sollte auf jedem Gerät installiert werden, das du überwachen möchtest (z. B. Mitarbeitergeräte für Unternehmen).
- **Master**: *(geschrieben in Python und Bootstrap)*
+ **Zweck:** Empfängt jedes von den Clients gesendete Paket, zeigt es organisiert in der GUI-Überwachungstabelle an, zeigt Informationen zu verbundenen Geräten wie aktuellen Systembenutzer/Systeminformationen an, vergleicht die erfassten Daten mit den bereits zuvor geschriebenen Bedrohungsmodellen und warnt schließlich den Master-Benutzer vor möglichen Sicherheitsbedrohungen im Netzwerk – wie es ein typisches IDS-System tun würde!
+ **Verwendung:** Er sollte auf einem Server im selben Netzwerk wie die Clients laufen (z. B. möglicherweise ein Server, der von der IT-Abteilung oder dem Blue-Hacking-Team des Unternehmens verwaltet wird).
> Für weitere Informationen musst du dich über (I)ntrusion (D)etection (S)ystems und deren Typen informieren. Ich empfehle [den NIST-Leitfaden](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-94.pdf).
## Screenshots
### Haupt-GUI
<img src="https://assets.kitploit.com/production/public/readmes/40597/e48d66e6c97c2213a6afd2887b906e41ed128e98b7f37c23f9e76417f1021038.png" width="50%"></img><img src="https://assets.kitploit.com/production/public/readmes/40597/67d8230be525fb2dabff9acd029b193e2de1da6a0b78247eba5b8111310290be.png" width="50%"></img>
---
### Überwachungstabelle
<img src="https://assets.kitploit.com/production/public/readmes/40597/31d8d7b24627340cfe2c1064a9c32fcb801f0b25f74b5f9b05dfddf90e2d322c.png" width="100%">
<img src="https://assets.kitploit.com/production/public/readmes/40597/8e6391f9de5ba9575a0a2ab0f163b2a563b813034e59f310a646d1b9790f70f0.png" width="100%">
<img src="https://assets.kitploit.com/production/public/readmes/40597/ebe89b179bf55011fefdb26bb4cbf52b8ff25329a9de5b4609cae461f006102c.png" width="100%">
> Beachte, dass die Schaltflächen in der Tabelle dir die Möglichkeit geben, die Tabelle als (CSV, Excel, PDF) zu exportieren, Tabellendaten in die Zwischenablage zu kopieren und die Tabellendaten bei Bedarf zu drucken.
### Suche in der Überwachungstabelle
#### Einfache Suche
<img src="https://assets.kitploit.com/production/public/readmes/40597/092a66fc554229070ef91816c66c8cc8b4ae9ee6168527a394d92bd52dc78150.png" width="100%">
#### Detaillierte Suche
<img src="https://assets.kitploit.com/production/public/readmes/40597/0c256d2437f060c3b3d4f841c8a48e5285b3881149e2599db375fc28c021c140.png" width="100%">
> Wie du siehst, bietet die Suche hier die Möglichkeit, nach allem zu suchen, was in der Tabelle dargestellt wird.
---
### Tabelle der verbundenen Geräte
#### Wenn ein neuer Client mit dem Client verbunden wird
<img src="https://assets.kitploit.com/production/public/readmes/40597/76c1b36fb223caf2aa3fc50373e29a01ee73cec79e39c89c3ecd45b086abe1bf.png" width="80%">
#### Informationen zu jedem Client
<img src="https://assets.kitploit.com/production/public/readmes/40597/14878d88a28d9af30cca2fdb4af9e54ea8c7ce93226924f527c9067a6832cd6b.png" width="80%">
> Beachte, dass die Tabelle automatisch alle 5s oder bei Seitenaktualisierung aktualisiert wird!
---
### Tabelle der Bedrohungen
#### Wenn eine Bedrohung erkannt wurde
<img src="https://assets.kitploit.com/production/public/readmes/40597/e94f6f488f60848f781300d68d2b556a297dc0b43c2cd02a17038e4a09c486cf.png" width="80%">
#### Details zu allen möglichen erkannten Bedrohungen + Referenz beim Klicken
<img src="https://assets.kitploit.com/production/public/readmes/40597/fff1d8d4dee003ab9622a452f1d496eeef4660557eb37eb83860a6c63e1d1763.png" width="48%"><img src="https://assets.kitploit.com/production/public/readmes/40597/683d2a0cdc210484dce60226de06123339ec6875f0b7789330ab25a30b22f49b.png" width="50%">
#### Desktop-Benachrichtigung bei Bedrohungen
<img src="https://assets.kitploit.com/production/public/readmes/40597/3a515dc76162fe1c089c1a98a6012f8db29cec7adcd0fbe746784db14eea708e.png" width="60%">
> Beachte, dass die Tabelle automatisch alle 5s oder bei Seitenaktualisierung aktualisiert wird!
---
## Installationsanleitung
### Der Client
#### Voraussetzungen
- Unterstützt derzeit nur Windows-Systeme (wegen der aus der Registrierung gelesenen Daten; das muss geändert werden).
- Die folgenden Anweisungen
#### Installationsanleitung
1. Stelle sicher, dass Golang installiert ist.
2. Installiere die gopacket-Bibliothek mit diesem Befehl:
`go get github.com/google/gopacket`
3. Lade npcap von [hier](https://nmap.org/npcap/) herunter und installiere es.
4. Ändere die folgenden Variablen im Code nach deinen Bedürfnissen:
+ *Zeile 57:* Ändere die Variable **url** zu deiner aktuellen Master-URL
+ *Zeile 59:* Ändere die Variable **device** zu der Netzwerkschnittstelle, auf der du lauschen möchtest. Für Windows benötigst du [diesen Artikel](https://haydz.github.io/2020/07/06/Go-Windows-NIC.html)!
+ *Zeile 66:* Ändere die Variable **filter** zu dem Filter, den du beim Erfassen von Netzwerkpaketen verwenden möchtest, oder lasse sie leer, wie sie ist (falls du alle Pakete erfassen möchtest). Die Filtersyntax ist BPF, die gleiche wie bei der Wireshark-Suche. Du kannst sie in [diesem Leitfaden](https://docs.extrahop.com/8.3/bpf-syntax/) lernen. Ich habe auch einige Beispiele in den Kommentaren hinterlassen, falls sie jemand verwenden möchte.
5. Navigiere in CMD zum Client-Verzeichnis, natürlich.
6. Jetzt kannst du den Client als Skript mit diesem Befehl ausführen: `go run main.go`
7. Zum Kompilieren/Builden kannst du den folgenden Befehl verwenden: `go build -o client.exe main.go`, vielleicht benötigst du [diesen Leitfaden](https://golang.org/cmd/go/#Compile_packages_and_dependencies).
8. Wenn du das alles geschafft hast, geh raus und hab ein Leben, Kumpel :laughing: (Scherz)
---
### Der Master
#### Voraussetzungen
- Jedes Betriebssystem.
- Die folgenden Anweisungen – es ist viel einfacher als beim Client, keine Sorge LOL!
#### Installationsanleitung
1. Stelle sicher, dass Python 3 (Version 3.5 oder höher) und pip installiert sind.
2. Navigiere in CMD zum Master-Ordner und installiere dann die Anforderungen mit diesem Befehl: `pip install -r requirements.txt` oder `python -m pip install -r requirements.txt`
3. Wenn du unter Windows arbeitest und dir farbige Ausgaben in CMD wichtig sind, führe diesen Befehl aus: `pip install -r coloring-requirements.txt` oder `python -m pip install -r coloring-requirements.txt`
4. Jetzt ein paar Variablen, die du nach deinen Bedürfnissen ändern kannst :laughing:
+ *Zeile 21:* Ändere die Variable **host_port** auf den Port, auf dem du den Dienst bereitstellen möchtest (Standard: 8000)
+ *Zeile 23:* Ändere die Variable **serve_localhost** auf True, wenn du den Master nur auf dem lokalen Host ausführen möchtest (Standard: True)
+ *Zeile 24:* Ändere die Variable **view_browser** auf True, wenn der Master die Serving-URL automatisch im Browser öffnen soll (Standard: True)
5. Jetzt kannst du den Master mit `python interface.py` ausführen.
6. Viel Spaß :)
# TODO-Liste
- [ ] Erweiterung der GUI (Benutzer-Login, Einstellungen ...)
- [ ] E-Mail- und SMS-Benachrichtigungen hinzufügen.
- [ ] Netzwerkauslastung optimieren
- [ ] Weitere Bedrohungsmodelle hinzufügen, besonders die komplexeren wie Angriffe auf Basis von ARP-Spoofing.
- [ ] Detaillierte Berichte für die Tabelle der Sicherheitsbedrohungen hinzufügen.
- [ ] Die Möglichkeit hinzufügen, den Status jedes Clients zu überprüfen und ihn zu ändern, wenn das Gerät z. B. eine Stunde lang inaktiv und nicht online ist.
- [ ] Den Client auf weiteren Plattformen zum Laufen bringen.
- [ ] Eine Setup-GUI für den Client erstellen (benutzerfreundlicher)
- [ ] TBD