HOW-TO: So erstellen Sie Ihre eigene "hausgemachte" Firewall

(Di Alessandro Fiori)
07/10/19

Eine praktische Methode, um Ihre Daten zu speichern und sicher aufzubewahren.
In dieser Zeit, in der die Finanzen von Unternehmen und öffentlichen Verwaltungen auf die Probe gestellt werden, ist es leicht, Manager zu finden, die Sicherheit als Kosten und nicht als echte Notwendigkeit ihrer Infrastruktur betrachten.
Man kann sich daher leicht ein eher besorgniserregendes Szenario vorstellen, in dem die Struktur nicht ganz den Anforderungen entspricht.

Unzureichende Server, veraltete Software, keine Möglichkeit zur Änderung der Plattformen usw.
Bestimmte Kontexte sind tatsächlich keine Seltenheit und es ist daher notwendig, sich darauf vorzubereiten, auch angesichts knapper Ressourcen zu handeln.

Im Allgemeinen kann die Implementierung einer Softwarelösung auf nicht dedizierter Hardware, wie die Lösung, die wir unten analysieren, in den folgenden Fällen konkret nützlich sein:

- Geldmangel
- Im extremen Notfall muss eine „Pufferlösung“ ohne zusätzliche Kosten eingeführt werden
- Notwendigkeit, kleine Maschinen (z. B. Laptops) zu schützen und aufgrund außergewöhnlicher Bedingungen nicht in der Lage zu sein, „klassische“ Lösungen zu übernehmen.
- Ein isoliertes Netzwerk, beispielsweise ein Labor, muss neu konfiguriert werden, ohne dass zusätzliche Hardware gekauft werden muss, wobei die Flexibilität des Netzwerks selbst erhalten bleibt.

Dies sind nur einige Beispiele, in Wirklichkeit gibt es viele Möglichkeiten.

Wenn Sie auf die Windows-basierte Lösung umsteigen möchten, wird es je nach Fall zu keinen nennenswerten Leistungseinbußen kommen.
Die Situation ändert sich, wenn Sie OPNSense übernehmen möchten.

Ich empfehle OPNSense, wenn die zu schützenden Anwendungen und Systeme noch nie getestet wurden, während Windows, wenn Sie die Grenzen Ihrer Anwendungen genau kennen und wissen, wie Sie den Code sichern können.

Ist es möglich, mit etwas Geduld Hardware-Firewalls und UTMs (wie sehr empfehlenswert sie auch sein mögen) einzusparen, um eine „ausweglose Situation“ abzusichern?

Hardware-Firewalls sind Geräte, die speziell dafür entwickelt wurden, ein Betriebssystem (das „Herz“ jedes Computers) zu hosten, normalerweise in einer „gehärteten“ Version.
Mit einem „gehärteten“ Betriebssystem (OS) meinen wir ein System, auf das bestimmte Patches und Bugfixes angewendet wurden, d. h. spezifische Korrekturen und Modifikationen, die es dem System selbst ermöglichen, zahlreichen Arten von Angriffen zu widerstehen.

UTMs (Unified Threat Management) sind Maschinen, die zahlreiche Angriffsarten zentral verwalten können.
Der Benutzer kann beispielsweise Regeln sowohl für die Firewall als auch für den Anti-Spam-Filter direkt über eine einzige Oberfläche festlegen, die normalerweise über einen Browser zugänglich ist.

Offensichtlich haben wir in einer „verzweifelten Situation“ nichts davon auf der „Hardware“-Ebene und müssen daher unser Bestes geben, um eine Lösung für ein ziemlich schwieriges Problem zu finden.

Was uns helfen kann, ist „Virtualisierung“

Virtualisierung ist eine spezielle Technik, die es ermöglicht, Hardwarekomponenten zu „abstrahieren“ oder auf virtuelle Weise verfügbar zu machen.
Um das Konzept besser zu erklären, stellen wir uns vor, wir hätten einen Prozessor (die Komponente, die die Vorgänge im Computer physisch ausführt) mit 20 „Kernen“ (die verschiedenen Einheiten, die die Berechnungen im Prozessor ausführen).
Durch Virtualisierung können wir beispielsweise 10 Kerne „trennen“ und sie einem anderen Betriebssystem widmen.
Das gleiche Konzept, einen Teil der Hardware für andere Software zu „dedizieren“ oder zu „abstrahieren“, kann auf RAM, Netzwerkkarten usw. angewendet werden.
Dies ermöglicht es Ihnen, gleichzeitig ein „Host“-Betriebssystem (das Hauptbetriebssystem) und mehrere „Gast“-Systeme (die virtualisierten Systeme) auf demselben Computer gleichzeitig laufen zu lassen.
Die Komponente, die diese „Abstraktion“ ermöglicht, heißt „Hypervisor“.

Es sind viele Virtualisierungssysteme auf dem Markt zu finden, die aufgrund unserer „Notlage“ teilweise unerschwingliche Lizenzkosten haben.
In unserem Fall fällt die Wahl des Virtualisierungssystems auf die von Oracle entwickelte VirtualBox-Software.
VirtualBox ist eine Open-Source-Software, das heißt, ihr Code ist offen, das heißt, er kann von jedem gelesen und geändert werden.

Aber warum kann uns die Virtualisierung helfen?

Um diese Frage zu beantworten, müssen wir über das „Konzept“ von UTM nachdenken.
Konzeptionell kann ein Sicherheitssystem als „Black Box“ mit zwei Kabeln, einem Eingang und einem Ausgang vereinfacht werden.
Das Eingangskabel verbindet sich direkt mit dem Internet, und von dort kommen Pakete an (d. h. Daten und Verbindungen), deren Natur wir nicht kennen, ob böswillig oder legitim.
Die Kontrolle erfolgt in der Blackbox und die bösartigen Pakete werden verworfen, während die legitimen Pakete über das Ausgangskabel an die Maschine weitergeleitet werden, die den eigentlichen Dienst enthält (z. B. eine Website).

Daher ist es wichtig, drei grundlegende Aspekte im Auge zu behalten:

- Die „Black Box“ muss sich „vor“ der zu schützenden Maschine befinden
- Die „Blackbox“ muss mit dem Internet verbunden sein
- Die „Black Box“ muss eingehende Pakete filtern

Diese Art der Konfiguration scheint für unseren Fall perfekt zu sein, also eine virtuelle Maschine, die zu unserer „Black Box“ wird.

Die Tatsache, dass VirtualBox Open Source ist, hilft uns, keine unerwarteten Kosten zu verursachen, und um „böse Überraschungen“ zu vermeiden, werden wir das „Extension Pack“ von VirtualBox nicht installieren.

Hier werden tatsächlich zwei Lösungen mit relativen Vor- und Nachteilen vorgeschlagen:
- Lösung basierend auf Windows 7 (ja, genau auf Windows 7)
- Lösung basierend auf OPNSense

Die auf Windows 7 basierende Lösung bietet den Vorteil eines minimalen Ressourcenverbrauchs und einer Verbindungsgeschwindigkeit, die der des „Host“-Computers entspricht, der direkt mit dem Internet verbunden ist.
Der Nachteil von Windows 7 besteht darin, dass es standardmäßig über kein Intrusion Prevention System verfügt (ein System, das schädliche Pakete automatisch erkennt und blockiert).

Die auf OPNSense basierende Lösung hat den Vorteil, dass sie über viele Kontrolltools verfügt und einfach als Intrusion Prevention System (IPS) konfiguriert werden kann.
Der Nachteil von OPNSense sind seine eigenen Tools, d. h. die Auswirkungen auf die Hardwareressourcen sind größer, und da das IPS den Datenfluss steuern muss, wird auch die Auswirkung auf die Verbindungsgeschwindigkeit spürbar sein.

Für sein Analysesystem wurde OPNSense gegenüber pfSense (einem OPNSense-ähnlichen System) ausgewählt.
PfSense verwendet eine Komponente namens „Snort“, die Pakete während der Übertragung analysiert und ziemlich umfangreich ist, insbesondere wenn sie auf einer virtuellen Maschine installiert ist.
OPNSense verwendet Suricata, ein weiteres Paketanalysesystem, das Multithreading verwendet, eine Technik, die es dem Prozessor ermöglicht, mehrere Berechnungsprozesse gleichzeitig durchzuführen.
Bisher ist Suricata ein NIDPS-System, also ein Network Intrusion Detection and Prevention System (genau das, was wir brauchen, da es Bedrohungen verhindert und nicht nur identifiziert), während Snort ein NIDS, also ein Network Intrusion Detection System, ist.
Diese Kombination ist vorzuziehen, insbesondere in einer virtuellen Maschine, wo besonderes Augenmerk auf die Auswirkungen dieser Systeme auf die Gesamtleistung gelegt werden muss.

Das zu verteidigende System ist Metasploitable, eine virtuelle Maschine, die speziell für die Angreifbarkeit entwickelt wurde.

Stellen wir uns in diesem Fall vor, dass Metasploitable das zu schützende System ist:

Lassen Sie uns daher analysieren, wie diese beiden Lösungen installiert und betriebsbereit gemacht werden.
Im Ausgangsszenario ist unser System wehrlos.

Analysieren wir es mit Kali Linux, einer Distribution, die speziell entwickelt wurde, um Penetrationstestern, also Menschen, die beruflich in Systeme einbrechen, dabei zu helfen, Schwachstellen zu finden und zu beheben.
Führen wir zunächst einen schnellen Scan mit nmap durch (ein sehr effektives Tool, mit dem Sie offene Ports und andere Informationen zum Zielsystem entdecken können):

Wie Sie sehen, ist die Lage unseres Systems katastrophal.
Die zahlreichen offenen Ports legen die Dienste der Maschine offen, von denen viele anfällig sind.
Versuchen wir, einen Angriff gegen die Maschine zu starten. Da es sich für diesen Test nur um einen Test handelt, verwende ich „db_autopwn“, einen Metasploit-Befehl, der das Starten von Exploits gegen das Ziel vereinfacht.
Der Befehl „db_autopwn“ ist veraltet (d. h. nicht empfohlen) und für diesen Test haben wir ein externes Modul verwendet, das den Befehl in der neuesten Version von Metasploit neu implementiert.

Wie Sie sehen, gelang es Metasploit, zwei Sitzungen auf dem Computer zu öffnen:

Für die erste Lösung steht uns Windows 7 zur Verfügung, installiert auf einer virtuellen Maschine.
Wir öffnen VirtualBox und konfigurieren zwei Netzwerkkarten wie folgt:

Wir benötigen zwei Netzwerkkarten, die im Bridge-Modus mit der aktuell mit dem Internet verbundenen Netzwerkkarte verbunden sind.
Wir haben also zumindest auf der Hardware-Ebene eine „Black-Box“-Situation geschaffen.

Sehen wir uns an, wie die Maschine auf Softwareebene konfiguriert wird

Zunächst müssen wir die tatsächliche Verbindung auf der ersten Netzwerkkarte konfigurieren, d. h. die IP-Adresse und das Netzwerk-Gateway (wir müssen daher sicherstellen, dass die erste Netzwerkkarte funktioniert und mit dem Internet verbunden ist).

Offensichtlich ist diese Konfiguration nur ein Beispiel, und in diesem Fall ist Windows nicht wirklich mit dem Internet verbunden.
Sobald die IP-Adresse für die erste Karte festgelegt wurde, müssen wir die gemeinsame Nutzung der Internetverbindung auf derselben Karte aktivieren

Wenn wir nun Dienste (z. B. die Website) im Internet verfügbar machen möchten, klicken Sie auf „Einstellungen“ und stellen Sie „Webserver (HTTP)“ ein.

Warum diese Konfiguration?

Durch die Aktivierung der Internetverbindungsfreigabe legt Windows auf der zweiten Netzwerkkarte ein fiktives Subnetz „192.168.137.x“ fest.
Unsere zu schützende Maschine ist in diesem Fall auf die IP-Adresse „192.168.137.143“ eingestellt, daher muss diese Adresse in der Maske „Service Settings“ wie in der vorherigen Abbildung dargestellt eingestellt werden.
Nun bestätigen wir alles, indem wir auf den verschiedenen Masken auf „OK“ klicken.
Nach der Bestätigung öffnen wir „secpol.msc“
Über das Symbol „IP-Sicherheitsrichtlinie“ können Sie per Rechtsklick eine neue IP-Sicherheitsrichtlinie erstellen.

Im Assistenten geben wir unserer Konfiguration einen Namen und gehen immer weiter, bis wir den Filter erstellen.
An diesem Punkt befinden wir uns vor einem neuen Bildschirm, klicken also auf „Hinzufügen“ und fahren mit dem Bildschirm „IP-Filterlisten“ fort.
Hier klicken wir auf „Hinzufügen“

Wir müssen die erste Regel erstellen, das heißt, wir müssen jede Verbindung an jedem Port blockieren.
Dazu klicken wir auf „Hinzufügen“ und fahren fort. Auf diese Weise haben wir eine Regel erstellt, die auf jeder Verbindung und für jedes Protokoll funktioniert.
Wir wählen die gerade erstellte Regel aus und fahren fort.

Im nächsten Bildschirm (Filteroperationen) klicken wir auf „Hinzufügen“, geben den Namen „Block“ ein und klicken auf „Block“.

Sobald der Filtervorgang erstellt wurde, wählen wir ihn aus und fahren fort, um die Erstellung der vollständigen Regel zu bestätigen.
Jetzt haben wir einfach alle Ports für alle Maschinenverbindungen blockiert. Da wir in unserem Fall die Website auf Port 80 verfügbar machen wollen, müssen wir eine weitere Regel erstellen, die die Weitergabe von Daten auf Port 80 ermöglicht.

Beim Erstellen des IP-Filters geben wir, sobald wir auf der Seite „Protokolle“ angekommen sind, „TCP“ an und bei den Ports klicken wir im zweiten Textfeld auf die Option „zu diesem Port“ und geben Port 80 an.

Während der Filtervorgänge müssen wir dieses Mal „Autorisieren“ angeben.

Sobald die Konfiguration abgeschlossen ist, klicken wir mit der rechten Maustaste auf den erstellten Filter und dann auf „Zuweisen“

An diesem Punkt können wir unsere Tests erneut ausführen:

Die Seite funktioniert

Die Ports werden auch von der „Black Box“ abgedeckt, die wir zwischen dem Internet und unserer Maschine eingefügt haben.

Lassen Sie uns unsere Maschine erneut angreifen, um zu testen, ob sich an der Konfiguration etwas geändert hat:

Wie wir sehen können, konnte Metasploit keine Sitzungen öffnen.

Warum kommt es zu dieser abrupten Verhaltensänderung, obwohl wir das System nicht geändert/aktualisiert haben?

Der Grund liegt in der Art der Konfiguration, die wir eingerichtet haben.
Diese Art der Konfiguration beinhaltet die Verwendung der Verbindungsfreigabe, um ein Subnetz zu erstellen, über das eine Verbindung zu unserem Computer hergestellt wird.

Wenn wir nur Verbindungsfreigabe genutzt hätten, hätte Metasploit immer noch eine Sitzung eröffnen können, denn obwohl die Portweiterleitung auf 80 eingestellt war (um die Website von außen verfügbar zu machen), hätte sie „umgekehrte Verbindungen“ immer noch nicht verhindert. “, d. h. eine Verbindung zu einem Port, der von einem Client innerhalb des Netzwerks geöffnet wird, um die Verbindung zu einem Remote-Server zu ermöglichen.

Wenn wir eine Maschine angreifen, ist es die „Payload“, die es dem Ziel ermöglicht, mit unserer Maschine zu kommunizieren, d Ziel.

Da die „klassischen“ Ports bereits von den normalen Diensten des Ziels verwendet werden, kann die Nutzlast diese Ports nicht zur Kommunikation nutzen.
Folglich aktiviert die Nutzlast eine Verbindung auf einem zufälligen Port, der im Allgemeinen höher als 10000 ist, was durch die Verbindung mit unserem Computer den Aufbau einer Kommunikation zwischen uns und dem Ziel ermöglicht.

Um dieses Problem zu lösen, das dadurch entsteht, dass ausgehende Verbindungen in der Regel nicht durch Firewalls blockiert werden, haben wir den oben beschriebenen Filter verwendet, um unerwünschte Verbindungen zu verhindern.
Selbst wenn das System veraltet ist oder eine ausnutzbare Sicherheitslücke besteht, kann der Angreifer auf diese Weise keine verfügbaren Exploits ausnutzen, da die Nutzlasten nicht kommunizieren können.

Offensichtlich verhindert diese Lösung nicht die Ausnutzung von SQL-Injection oder anderen Schwachstellen, die keine Nutzlast für die Kommunikation mit unserer Maschine benötigen.
Tatsächlich möchte ich Sie daran erinnern, dass eine Paketanalyse mit dieser Lösung nicht verfügbar ist.

Um eine Paketanalyse zu ermöglichen, müssen wir uns zwangsläufig auf die Software „Intrusion Prevention“ verlassen.
Für diese Situation wurde OPNSense identifiziert, das wie zuvor beschrieben Suricata als Paketanalysesystem und Netmap verwendet, um die Belastung der CPU zu reduzieren und die Netzwerkkarten zu optimieren.

Ich möchte darauf aufmerksam machen, dass sich weder an dem von uns erstellten „logischen“ Schema noch an der virtualisierten Infrastruktur etwas ändert.
Lediglich das Betriebssystem der „Black Box“ ändert sich, um die Analyse von Paketen in Echtzeit zu ermöglichen.

Damit OPNSense optimal funktioniert, stellen wir der virtuellen Maschine 2 GB RAM zur Verfügung (im Gegensatz zur ersten Lösung, bei der bereits ein GB ausreichte).

Hier ist eine Beispielkonfiguration für OPNSense:

Wenn Sie die Maschine starten, erscheint der Anmeldebildschirm:

Die Maschine, die wir schützen müssen, hat in unserem Fall daher „192.168.2.2“ als IP-Adresse und „192.168.2.1“ als Gateway.
Wir können die OPNSense-Konfiguration aufrufen, indem wir ein Gerät an das LAN anschließen und mit einem normalen Browser auf den Link „https://192.168.2.1"

Das folgende Panel wird geöffnet:

Sobald wir angemeldet sind, befinden wir uns vor dem Hauptfenster von OPNSense:

Gehen wir zu „Dienste“ → „Intrusion Detection“ → „Verwaltung“ und überprüfen Sie alle Optionen:

Wir klicken auf „Bewerben“ und gehen auf „Download“:

Wir klicken auf das Häkchen, um alles auszuwählen, dann klicken wir auf „Ausgewählte aktivieren“, dann wählen wir alles erneut aus und klicken auf „Aktivieren (Filter fallen lassen)“.

Abschließend klicken wir unten auf der Seite auf „Regeln herunterladen und aktualisieren“.

Anschließend überprüfen wir, ob alle Regeln korrekt aktualisiert sind, und richten dann die Paketanalyse ein.
Um jeden Fall abzudecken, richten wir „Proxy-Caching“ ein.

Proxy-Caching ist eine Komponente, die bereits in OPNSense vorhanden ist und es Ihnen ermöglicht, die Intrusion-Detection-Funktion von Suricata zu erweitern.
Dies liegt daran, dass Suricata bei verschlüsselten Protokollen wie HTTPS nicht in der Lage wäre, Daten während der Übertragung in Echtzeit zu entschlüsseln.
Um dieses Problem zu vermeiden, können Sie durch Proxy-Caching als Brücke zwischen dem externen Netzwerk und der besuchten Website fungieren.
Als Brücke werden die Pakete vom Proxy entschlüsselt, der sie anschließend erst wieder an den eigentlichen Dienst weiterleitet.
Offensichtlich erfolgt dieser Vorgang auch spiegelbildlich.
Dadurch können Pakete von Suricata überwacht werden.

Die Software, die das alles ermöglicht, heißt „Squid“.
Um Squid auf OPNSense zu aktivieren, gehen Sie zu „Dienste“ → „Web-Proxy“ → „Verwaltung“ und aktivieren Sie „Proxy aktivieren“:

Wir gehen dann auf „Forward Proxy“ und aktivieren die drei Häkchen wie in der Abbildung.

Obwohl diese Lösungen eine sinnvolle Alternative für diejenigen darstellen, die keine hardwarebasierten Tools erwerben können, empfehle ich dennoch die Verwendung der Hardwarelösung.

Abschließend empfehle ich, wenn wir wirklich ruhig schlafen wollen, immer die neuesten Updates für die verwendeten Betriebssysteme zu installieren, Code zu schreiben und gleichzeitig die verschiedenen Schwachstellen mit automatischen und nichtautomatischen Tools zu testen, und schließlich empfehle ich, Ihre Mentalität in Richtung Sicherheit zu ändern: Sicherheit ist kein Produkt, das hat es nie gegeben und wird es auch nie geben, sondern es ist ein Prozess und als solcher muss er befolgt, standardisiert, angewendet und kontrolliert werden.

Um mehr zu erfahren:
https://www.offensive-security.com/metasploit-unleashed/requirements/
https://en.wikipedia.org/wiki/Internet_Connection_Sharing
https://wiki.opnsense.org/
https://it.wikipedia.org/wiki/Squid
https://it.wikipedia.org/wiki/IPsec
https://it.wikipedia.org/wiki/Virtualizzazione
https://www.virtualbox.org/wiki/Documentation

Foto: US Marine Corps