Update Durchführung

Marcel Schwarz 2021-02-06 22:05:06 +00:00
parent e3d6a593fc
commit 82154b1486

@ -1,27 +1,36 @@
## Erstellung der Testmaschinen ## Erstellung der Testmaschinen
### Amazon Web Services (im folgenden nur "AWS") ### Amazon Web Services (im folgenden nur "AWS")
![aws](uploads/d90e3dc64b6497926d4128d668b789cd/aws.png) AWS ist der weltweit größte Anbieter für Cloud Services. Aufgrund der hohen Nutzerzahlen war AWS unsere erste Wahl, um Tests durchzuführen. Die Nutzeroberfläche ist aktuell im Umbau auf ein neueres Interface. Im Großen und Ganzen jedoch besteht die Erstellung einer virtuellen Maschine aus 7 Schritten. Darin ist z.B. die Auswahl des Maschinentyps, des Betriebssystems und auch des Massenspeichers enthalten. Weiter können noch sehr umfangreiche Netzwerk- und Zugriffseinstellungen durchgeführt werden. Es ist hier zwingend notwendig, ein SSH-Keypair zu generieren, um auf den Server zugreifen zu können. Dieses Keypair wird dann bei AWS gespeichert und kann für beliebig viele Maschinen verwendet werden.
AWS ist der Weltweit größte Anbieter für Cloud Services. Aufgrund der hohen Nutzerzahlen war AWS unsere erste Wahl um Tests durchzuführen. Die Nutzeroberfläche ist aktuell im Umbau auf ein neueres Interface. Im Großen und Ganzen jedoch besteht die Erstellung einer virtuellen Maschine aus 7 Schritten. Darin ist z.B. die Auswahl des Maschinentyps, des Betriebssystems und auch des Massenspeichers enthalten. Weiter können noch sehr umfangreiche Netzwerk- und Zugriffseinstellungen durchgeführt werden. Es ist hier zwingend notwendig einen SSH-Keypair zu generieren, um auf den Server zugreifen zu können. Dieses Keypair wird dann bei AWS gespeichert und kann für beliebig viele Maschinen verwendet werden.
Die Auswahl an Betrienssystemen ist enorm, rund 80 Betriebssysteme werden offiziell von Amazon angeboten, und weitere von den Nutzern oder anderen Firmen bereitgestellt. Auch der Maschinentyp kann sehr feingranular gewählt werden, oder komplett individuell sein. Die Auswahl an Betrienssystemen ist enorm, rund 80 Betriebssysteme werden offiziell von Amazon angeboten, und weitere von den Nutzern oder anderen Firmen bereitgestellt. Auch der Maschinentyp kann sehr feingranular gewählt werden, oder komplett individuell sein.
Bei dieser Menge an Images ist es sehr interessant, wie aktuell diese sind. Bei dieser Menge an Images ist es sehr interessant, wie aktuell diese sind.
![aws](uploads/d90e3dc64b6497926d4128d668b789cd/aws.png)
*AWS Weboberfläche*
### Google Cloud Plattform (im folgenden nur "GCP") ### Google Cloud Plattform (im folgenden nur "GCP")
Durch ein Projekt im letzten Semester hatten wir bereits einen GCP-Account und erste Erfahrungen mit der Plattform. Um eine VM zu erstellen, kann man unter "Compute Engine/VM-Instanzen" eine neue VM-Instanz erstellen. Dann können Eigenschaften der VM eingestellt werden, wie z. B.: Name, Region, CPU-Kerne und Arbeitsspeicher, sowie das Bootlaufwerk mit Betriebssystem und Version. Unten, unter dem Punkt "Sicherheit", kann ein systemweiter SSH-Schlüssel gesetzt werden. Dieser gilt dann auf allen virtuellen Maschinen, egal ob sie schon erstellt wurden.
Danach kann mit der externen IP-Adresse auf die VM zugegriffen werden. Zusätzlich kann Google ein Browserfenster mit einer SSH-Sitzung öffnen.
<table> <table>
<tr> <tr>
<td>![gcp-1](uploads/38ee4d59eb674c424082198ba54ab13b/gcp-1.png)</td> <td>![gcp-1](uploads/38ee4d59eb674c424082198ba54ab13b/gcp-1.png)</td>
<td>![gcp-2](uploads/f100d12cbc5d56b1b93f271fca14ebf6/gcp-2.png)</td> <td>![gcp-2](uploads/f100d12cbc5d56b1b93f271fca14ebf6/gcp-2.png)</td>
</tr> </tr>
</table> </table>
Durch ein Projekt im letzten Semester hatten wir bereits einen GCP-Account und erste Erfahrungen mit der Plattform. Um eine VM zu erstellen, kann man unter "Compute Engine/VM-Instanzen" eine neue VM-Instanz erstellen. Dann können Eigenschaften der VM eingestellt werden, wie z. B.: Name, Region, CPU-Kerne und Arbeitsspeicher, sowie das Bootlaufwerk mit Betriebssystem und Version. Unten, unter dem Punkt "Sicherheit", kann ein systemweiter SSH-Schlüssel gesetzt werden. Dieser gilt dann auf allen virtuellen Maschinen, egal ob sie schon erstellt wurden.
Danach kann mit der externen IP-Adresse auf die VM zugegriffen werden. Zusätzlich kann Google ein Browserfenster mit einer SSH-Sitzung öffnen. *GCP Weboberfläche*
### GCP- und AWS-Marketplace ### GCP- und AWS-Marketplace
GCP und AWS bieten beide eine Plattform für von Nutzern erstellte Images, den sogenannten Marketplace. Dieser ist meist durch einen separaten Reiter in der Benutzeroberfläche erreichbar. Hier hat man eine Auswahl an den verschiedensten Images und Softwarepaketen. Hat man ein passendes gefunden, so können die Einstellungen gewählt und schließlich die VM gestartet werden. Die Software auf diesen Images ist speziell für den gewünschten Zweck angepasst, um optimal zu funktionieren. Beispiele hierfür wären etwa ein LAMP-Stack oder auch Wordpress.
![gcp-marketplace](uploads/39ede4110c02aa6b9c190814090609f8/gcp-marketplace.png) ![gcp-marketplace](uploads/39ede4110c02aa6b9c190814090609f8/gcp-marketplace.png)
GCP und AWS bieten beide eine Plattform für von Nutzern erstelle Images, den sogenannten Marketplace. Dieser ist meist durch einen separaten Reiter in der Benutzeroberfläche erreichbar. Hier hat man eine Auswahl an den verschiedensten Images und Softwarepaketen. Hat man ein passendes gefunden, so können die Einstellungen gewählt und schließlich die VM gestartet werden. Die Software auf diesen Images ist speziell für den gewünschten Zweck angepasst, um optimal zu funktionieren. Beispiele hierfür wären etwa ein LAMP-Stack oder auch Wordpress. *GCP Marketplace - Wordpress*
### Hetzner ### Hetzner
Hetzner ist, im Vergleich zu GCP oder AWS, ein eher kleinerer deutscher Anbieter für Cloud Infrastruktur. Es werden neben virtuellen Maschinen auch dedizierte Server und Webspaces, sowie Speichersysteme angeboten. Hetzner wurde ausgewählt, da Privatpersonen dort deutlich einfacher und kostentransparenter Server mieten können als bei z.B. AWS. Die Server werden auf Stundenbasis bezahlt und haben ein maximales Preislimit pro Monat, was etwas unter dem Stundensatz liegt.
<table> <table>
<tr> <tr>
<td>![hetzner-1](uploads/b2ba144a98d724da422763c78c847780/hetzner-1.png)</td> <td>![hetzner-1](uploads/b2ba144a98d724da422763c78c847780/hetzner-1.png)</td>
@ -29,12 +38,12 @@ GCP und AWS bieten beide eine Plattform für von Nutzern erstelle Images, den so
</tr> </tr>
</table> </table>
Hetzner ist, im Vergleich zu GCP oder AWS, ein eher kleinerer deutscher Anbieter für Cloud Infrastruktur. Es werden neben virtuellen Maschinen auch Dedizierte Server und Webspaces, sowie Speichersysteme angeboten. Hetzner wurde ausgewählt, da Privatpersonen dort deutlich einfacher und kostentransparenter Server mieten können, als bei z.B. AWS. Die Server werden auf Stundenbasis bezahlt und haben ein maximales Preislimit pro Monat was etwas unter dem Stundensatz liegt. *Hetzner Weboberfläche*
In den obigen Screenshots ist die Oberfläche zur VM Erstellung zu sehen. Es ist sehr übersichtlich gehalten. Ein Nachteil hier ist es aber, dass es nur feste Maschinentypen gibt, sowie eine sehr begrenzte Anzahl an Betriebssystemen. Die Performance soll laut neuster AMD Epic Prozessoren sehr gut sein. Zugegriffen kann entweder über ein automatisch erstelltes Passwort, oder einen vorher ausgewählten SSH-Key. In den obigen Screenshots ist die Oberfläche zur VM Erstellung zu sehen. Es ist sehr übersichtlich gehalten. Ein Nachteil hier ist aber, dass es nur feste Maschinentypen gibt, sowie eine sehr begrenzte Anzahl an Betriebssystemen. Die Performance soll laut neuster AMD Epic Prozessoren sehr gut sein. Der Zugriff erfolgt entweder über ein automatisch erstelltes Passwort, oder einen vorher ausgewählten SSH-Key.
### VMware ### VMware
Unsere eigenen Maschinen haben wir mit VMware Workstation Player erstellt, da dieser kostenlos zur Verfügung steht. Das die Ubuntu Server Base Images haben wir als ISO heruntergeladen und in VMware importiert. Dabei mussten wir auch die VMware Tools installieren. Diese werden der VM von der VMware Software als virtuelle CD-ROM zur Verfügung gestellt. Die CD-ROM musste zuerst per "mount" eingebunden werden. Danach konnte das enthaltene TAR Archiv entpackt, sowie die Tools installiert werden. Unsere eigenen Maschinen haben wir mit VMware Workstation Player erstellt, da dieser kostenlos zur Verfügung steht. Die Ubuntu Server Base Images haben wir als ISO heruntergeladen und in VMware importiert. Dabei mussten wir auch die VMware Tools installieren. Diese werden der VM von der VMware Software als virtuelle CD-ROM zur Verfügung gestellt. Die CD-ROM musste zuerst per "mount" eingebunden werden. Danach konnte das enthaltene TAR Archiv entpackt, sowie die Tools installiert werden.
Auf 3 von 4 Base Images haben wir noch jeweils einen LAMP Stack, MEAN Stack und eine Vulnerable VM aufgesetzt. Für die Erstellung LAMP und MEAN Stack haben wir jeweils das erste Tutorial verwendet, das wir finden konnten. Die verwendeten Tutorials sind: Auf 3 von 4 Base Images haben wir noch jeweils einen LAMP Stack, MEAN Stack und eine Vulnerable VM aufgesetzt. Für die Erstellung LAMP und MEAN Stack haben wir jeweils das erste Tutorial verwendet, das wir finden konnten. Die verwendeten Tutorials sind:
* LAMP Stack: [https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-ubuntu-18-04-de](https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-ubuntu-18-04-de) * LAMP Stack: [https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-ubuntu-18-04-de](https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-ubuntu-18-04-de)
@ -46,7 +55,7 @@ Bei der Erstellung der Vulnerable VM haben wir die vier folgenden Änderungen du
* Verändern der Berechtigungen auf SSH-Keys und .ssh-Ordnern, sodass diese für alle Benutzer einsehbar sind. * Verändern der Berechtigungen auf SSH-Keys und .ssh-Ordnern, sodass diese für alle Benutzer einsehbar sind.
* Installation verschiedenster Compiler. * Installation verschiedenster Compiler.
Um Dateien mit der VM auszutauschen haben wir "Shared Folders" verwendet. Diese haben wir zu Beginn aktiviert, um das Run-Script auf das Image zu laden und anschließend deaktiviert. Nach der Durchführung aller Scans haben wir den "Shared Folder" erneut aktiviert, um den entstandenen Output zu extrahieren. Um Dateien mit der VM auszutauschen, haben wir "Shared Folders" verwendet. Diese haben wir zu Beginn aktiviert, um das Run-Script auf das Image zu laden und anschließend deaktiviert. Nach der Durchführung aller Scans haben wir den "Shared Folder" erneut aktiviert, um den entstandenen Output zu extrahieren.
## Preisvergleich ## Preisvergleich
Im Zuge der Anbieter ist noch kurz der teilweise sehr hohe Preisunterschied der Plattformen für ähnliche Rechenleistung zu erwähnen. AWS und GCP sind hierbei sehr ähnlich. Beide liegen für eine Basismaschine für eine Wordpress Installation etwa bei 30 USD pro Monat. Hetzner hingegen kostet für dieselbe Rechenleistung etwas weniger als die Hälfte. Es bleibt nun abzuwarten, ob der Preisunterschied sich in der Pflege und Sicherheit der Images widerspiegelt, oder es rein am Funktionsumfang liegt. Im Zuge der Anbieter ist noch kurz der teilweise sehr hohe Preisunterschied der Plattformen für ähnliche Rechenleistung zu erwähnen. AWS und GCP sind hierbei sehr ähnlich. Beide liegen für eine Basismaschine für eine Wordpress Installation etwa bei 30 USD pro Monat. Hetzner hingegen kostet für dieselbe Rechenleistung etwas weniger als die Hälfte. Es bleibt nun abzuwarten, ob der Preisunterschied sich in der Pflege und Sicherheit der Images widerspiegelt, oder es rein am Funktionsumfang liegt.
@ -56,7 +65,7 @@ Die Frage nach der Notwendigkeit eines Skriptes zur Durchführung lässt sich sc
Da es für eine automatische Verarbeitung wichtig war, dass alle Scans gleich ausgeführt wurden, musste ein klar definierter Weg erstellt werden, wie dieses Ziel erreicht werden kann. Da es für eine automatische Verarbeitung wichtig war, dass alle Scans gleich ausgeführt wurden, musste ein klar definierter Weg erstellt werden, wie dieses Ziel erreicht werden kann.
Zunächst musste eine optimale Sprache für das Skript gefunden werden. Zu Auswahl standen hier Python und Bash. Letztendlich wurde es dann eine Bash Implementierung. Python wurde aufgrund der hohen Abhängigkeiten nicht gewählt, denn das Python SDK (sowie auch die Runntime, da es ein Skriptspache ist) ist mit etwa 800 Megabyte sehr schwergewichtig. Weiter sind nicht auf allen Systemen die aktuellsten Pythonversionen verfügbar. Bash hingegen ist auf allen getesteten Maschinen automatisch installiert und auch der Funktionsumfang reicht für unsere Zwecke komplett aus. Zunächst musste eine optimale Sprache für das Skript gefunden werden. Zur Auswahl standen hier Python und Bash. Letztendlich wurde es dann eine Bash Implementierung. Python wurde aufgrund der hohen Abhängigkeiten nicht gewählt, denn das Python SDK (sowie auch die Runntime, da es ein Skriptspache ist) ist mit etwa 800 Megabyte sehr schwergewichtig. Weiter sind nicht auf allen Systemen die aktuellsten Pythonversionen verfügbar. Bash hingegen ist auf allen getesteten Maschinen automatisch installiert und auch der Funktionsumfang reicht für unsere Zwecke komplett aus.
Das Script ist in drei Teile unterteilt: Das Script ist in drei Teile unterteilt:
1. Setup 1. Setup
@ -85,7 +94,7 @@ function init() {
exit exit
} }
``` ```
Im `init`-Block wird die nötige Dateistruktur angelegt und fehlende Pakete, sowie die Tools installiert. Die Tools werden immer direkt von GitHub geholt, um immer die aktuelle version zu haben. Weiter musste für otseca noch ein Installationsscript ausgeführt werden. Im `init`-Block wird die nötige Dateistruktur angelegt und fehlende Pakete, sowie die Tools installiert. Die Tools werden immer direkt von GitHub geholt, um immer die aktuelle Version zu haben. Weiter musste für Otseca noch ein Installationsscript ausgeführt werden.
### Durchführung ### Durchführung
```bash ```bash
@ -119,10 +128,10 @@ function run_scan() {
``` ```
Bei der Durchführung wird die Funktion `run_scan` ausgeführt. Diese nimmt einen Parameter an, der den aktuellen Scannamen bestimmt (der Parameter wird das Postfix des Logfiles). Bei der Durchführung wird die Funktion `run_scan` ausgeführt. Diese nimmt einen Parameter an, der den aktuellen Scannamen bestimmt (der Parameter wird das Postfix des Logfiles).
Als Erstes wird Lynis via `audit system` ausgeführt, von dieser Ausführung wird der Konsolenoutput, das Logfile, sowie die Lynis DAT-Datei gespeichert. Danach werden 16 TestSSL Scans ausgeführt, die die normalen Webserverports testen, sowie auch Datenbanken und Mailports. Hierbei ist zu beachten, dass TestSSL nicht zwingend für den SSL-Test benutzt wurde, sondern auch, um zu sehen, ob auf diesem Port ein Dienst ausgeführt wird. Zuletzt wird noch Otseca mit allen zur Verfügung stehenden Tasks ausgeführt. Otseca liefert anstatt einzelne Dateien ein ganzes Verzeichnis als Ausgabe. Dieses wird dann ebenfalls in unsere Ordnerstuktur verschoben. Als Erstes wird Lynis via `audit system` ausgeführt, von dieser Ausführung wird der Konsolenoutput, das Logfile, sowie die Lynis DAT-Datei gespeichert. Danach werden 16 TestSSL Scans ausgeführt, die die normalen Webserverports testen, sowie auch Datenbanken und Mailports. Hierbei ist zu beachten, dass TestSSL nicht zwingend für den SSL-Test benutzt wurde, sondern auch, um zu sehen, ob auf diesem Port ein Dienst ausgeführt wird. Zuletzt wird noch Otseca mit allen zur Verfügung stehenden Tasks ausgeführt. Otseca liefert statt einzelner Dateien ein ganzes Verzeichnis als Ausgabe. Dieses wird dann ebenfalls in unsere Ordnerstuktur verschoben.
### Artefakte ### Artefakte
Um nun zuletzt die Resultate archivieren zu können bietet das Skript die Funktion `tar_files` an. Um nun zuletzt die Resultate archivieren zu können, bietet das Skript die Funktion `tar_files` an.
```bash ```bash
function tar_files() { function tar_files() {
@ -141,7 +150,7 @@ function tar_files() {
} }
``` ```
Sie legt einen FTP Benutzer an, in den dann die vorher getarten Dateien verschoben werden. Um dieses Archiv nun herunterzuladen, kann entweder eine SFTP oder SCP session gestartet werden. Manchmal ist es notwendig für diesen Schritt die Passwordauthentifikation in den Einstellungen zu aktivieren. Dies ist aber kein Sicherheitsrisiko, da dies es ganz am Ende geschieht, kurz bevor die Maschine sowieso gelöscht wird. Sie legt einen FTP Benutzer an, in den dann die vorher getarten Dateien verschoben werden. Um dieses Archiv nun herunterzuladen, kann entweder eine SFTP oder SCP session gestartet werden. Manchmal ist es notwendig, für diesen Schritt die Passwordauthentifikation in den Einstellungen zu aktivieren. Dies ist aber kein Sicherheitsrisiko, da dies erst ganz am Ende geschieht, kurz bevor die Maschine sowieso gelöscht wird.
### Beispielnutzung ### Beispielnutzung
Nachdem der Server erstellt wurde, kann dann mit folgenden Schritten ein Testlauf durchgeführt werden. Nachdem der Server erstellt wurde, kann dann mit folgenden Schritten ein Testlauf durchgeführt werden.
@ -154,6 +163,6 @@ Nachdem der Server erstellt wurde, kann dann mit folgenden Schritten ein Testlau
7. Dateien exportieren `script.sh tar_files` 7. Dateien exportieren `script.sh tar_files`
8. Export herunterladen 8. Export herunterladen
**Notiz:** Wenn der JShielder nicht manuell ausgeführt werden müsste, sondern CLI-Parameter unterstützen würde, wäre es möglich ein komplettes Skript zu schreiben, dass nur einmal angestoßen werden müsste und dann alle Schritte allein ausführt. **Notiz:** Wenn der JShielder nicht manuell ausgeführt werden müsste, sondern CLI-Parameter unterstützen würde, wäre es möglich, ein komplettes Skript zu schreiben, das nur einmal angestoßen werden müsste und dann alle Schritte allein ausführt.
Das komplette Skript ist im Repository unter [deep-thought-run.sh](https://gitlab.com/marcel.schwarz/it-security-2/-/blob/master/deep-thought-run.sh) zu finden. Das komplette Skript ist im Repository unter [deep-thought-run.sh](https://gitlab.com/marcel.schwarz/it-security-2/-/blob/master/deep-thought-run.sh) zu finden.