One place for hosting & domains

      Sysadmin eBook: Server zum Laufen bringen


      Das komplette eBook herunterladen!

      Server zum Laufen bringen: Ein praktischer Leitfaden für Systemadministrator eBook im EPUB-Format

      Server zum Laufen bringen: Ein praktischer Leitfaden für Systemadministrator eBook im PDF-Format

      eBook-Vorwort

      Dieses Buch behandelt praktische Fähigkeiten von Systemadministratoren, gängige Architekturen, denen Sie begegnen werden, und bewährte Verfahren, die für die Automatisierung und den Betrieb von Systemen jeder Größenordnung gelten, von einem Laptop oder Server bis hin zu 1.000 oder mehr. Es soll Ihnen helfen, sich innerhalb des Fachgebiets zu orientieren, und ermutigt Sie hoffentlich dazu, mehr über Systemadministration zu lernen.

      Dieses Buch basiert auf dem Lehrplan Server zum Laufen bringen: Ein praktischer Leitfaden für die Linux-Systemadministration in der DigitalOcean Community. Es ist nach einigen Hauptthemen gegliedert:

      1. Einführende Themen

      2. LAMP- und LEMP-Technologie-Stapel

      3. Sicherung Ihrer Server

      4. Automatisierung mit Ansible

      5. Versionskontrolle und kontinuierliche Integration

      Suchen Sie sich in diesem Buch Themen aus, die Sie interessieren, und erkunden Sie sie anhand dieser Kapitel als Leitfaden. Beim Durcharbeiten dieses Buches werden Sie mit einer Vielzahl von Technologien, technischen Begriffen und konzeptionellen Ansätzen zur Verwaltung von Linux-Servern konfrontiert. Sie können jedes Kapitel oder jeden Abschnitt in Ihrem eigenen Tempo und in der von Ihnen gewählten Reihenfolge durcharbeiten.

      eBook herunterladen

      Sie können das eBook im EPUB- oder PDF-Format unter den nachstehenden Links herunterladen.

      Das komplette eBook herunterladen!

      Server zum Laufen bringen: Ein praktischer Leitfaden für Systemadministrator eBook im EPUB-Format

      Server zum Laufen bringen: Ein praktischer Leitfaden für Systemadministrator eBook im PDF-Format

      Wenn Sie zusätzliche Sysadmin-Ressourcen benötigen, die Ihnen den Einstieg erleichtern, und wenn Sie an der DigitalOcean-Community anderer Entwickler und Administratoren teilnehmen möchten, sehen Sie sich unsere wachsende Bibliothek mit Tutorials, Fragen und Projekten mit dem Tag Erste Schritte an.



      Source link

      So installieren und verwenden Sie Radamsa zum Fuzz-Testen von Programmen und Netzwerkdiensten unter Ubuntu 18.04


      Der Autor wählte die Electronic Frontier Foundation Inc, um eine Spende im Rahmen des Programms Write for DOnations zu erhalten.

      Einführung

      Sicherheitsbedrohungen werden immer ausgefeilter, sodass Entwickler und Systemadministratoren bei der Verteidigung und dem Testen der Sicherheit ihrer Anwendungen einen proaktiven Ansatz verfolgen müssen.

      Eine gängige Methode zum Testen der Sicherheit von Client-Anwendungen oder Netzwerkdiensten ist das Fuzzing, bei dem wiederholt ungültige oder fehlerhafte Daten an die Anwendung gesendet und deren Antwort analysiert wird. Dies ist nützlich zum Testen, wie widerstandsfähig und robust die Anwendung gegenüber unerwarteten Eingaben ist, zu denen beschädigte Daten oder tatsächliche Angriffe gehören können.

      Radamsa ist ein Open-Source-Fuzzing-Werkzeug, das Testfälle auf der Grundlage von benutzerdefinierten Eingabedaten generieren kann. Radamsa ist vollständig skriptfähig und hat bisher erfolgreich Schwachstellen in realen Anwendungen, wie z. B. Gzip, gefunden.

      In diesem Tutorial werden Sie Radamsa installieren und verwenden, um Fuzz-Tests von Befehlszeilen- und netzwerkbasierten Anwendungen mit Ihren eigenen Testfällen durchzuführen.

      Warnung: Radamsa ist ein Penetrationstesttool, mit dem Sie möglicherweise Schwachstellen oder Schwächen in bestimmten Systemen oder Anwendungen identifizieren können. Sie dürfen die mit Radamsa gefundenen Schwachstellen nicht für fahrlässiges Verhalten, Schädigung oder böswillige Ausnutzung verwenden. Schwachstellen sollten dem Betreuer der betroffenen Anwendung auf ethische Weise gemeldet und nicht ohne ausdrückliche Genehmigung öffentlich bekannt gegeben werden.

      Voraussetzungen

      Bevor Sie diesen Leitfaden beginnen, benötigen Sie Folgendes:

      • Einen Ubuntu-18.04-Server, der gemäß Ersteinrichtung des Servers mit Ubuntu 18.04 eingerichtet wurde, einschließlich eines sudo-Benutzers ohne Rootberechtigung und einer aktivierten Firewall, die weniger wichtige Ports blockiert.
      • Eine befehlszeilen- oder netzwerkbasierte Anwendung, die Sie testen möchten, z. B. Gzip, Tcpdump, Bind, Apache, jq oder eine andere Anwendung Ihrer Wahl. Als Beispiel für die Zwecke dieses Tutorials verwenden wir jq.

      Warnung: Radamsa kann dazu führen, dass Anwendungen oder Systeme instabil laufen oder abstürzen. Führen Sie Radamsa daher nur in einer Umgebung aus, in der Sie darauf vorbereitet sind, z. B. auf einem dedizierten Server. Bitte stellen Sie auch sicher, dass Sie die ausdrückliche schriftliche Genehmigung des Eigentümers eines Systems haben, bevor Sie Fuzz-Tests gegen dieses System durchführen.

      Sobald Sie diese zur Verfügung haben, melden Sie sich zunächst als Benutzer ohne Rootberechtigung auf Ihrem Server an.

      Schritt 1 – Installation von Radamsa

      Zuerst werden Sie Radamsa herunterladen und kompilieren, um es auf Ihrem System zu verwenden. Der Radamsa-Quellcode ist im offiziellen Repository von GitLab verfügbar.

      Beginnen Sie damit, den lokalen Paketindex zu aktualisieren, um alle neuen Änderungen im Upstream zu berücksichtigen:

      Installieren Sie dann die Pakete gcc, git, make und wget, die zum Kompilieren des Quellcodes in eine ausführbare Binärdatei benötigt werden:

      • sudo apt install gcc git make wget

      Nach der Bestätigung der Installation lädt apt die angegebenen Pakete und alle erforderlichen Abhängigkeiten herunter und installiert sie.

      Als Nächstes laden Sie eine Kopie des Quellcodes für Radamsa herunter, indem Sie ihn aus dem Repository, das auf GitLab gehostet wird, klonen:

      • git clone https://gitlab.com/akihe/radamsa.git

      Dadurch wird ein Verzeichnis namens radamsa erstellt, das den Quellcode für die Anwendung enthält. Wechseln Sie in das Verzeichnis, um mit der Kompilierung des Codes zu beginnen:

      Als Nächstes können Sie den Kompilierungsprozess mit make starten:

      Schließlich können Sie die kompilierte Radamsa-Binärdatei in Ihren $PATH installieren:

      Sobald dies abgeschlossen ist, können Sie die installierte Version überprüfen, um sicherzustellen, dass alles funktioniert:

      Ihre Ausgabe wird ähnlich wie die folgende aussehen:

      Output

      Radamsa 0.6

      Wenn Sie einen Fehler radamsa: command not found sehen, überprüfen Sie noch einmal, ob alle erforderlichen Abhängigkeiten installiert wurden und ob es beim Kompilieren keine Fehler gab.

      Nachdem Sie nun Radamsa installiert haben, können Sie damit beginnen, einige Beispieltestfälle zu generieren, um zu verstehen, wie Radamsa funktioniert und wofür es verwendet werden kann.

      Schritt 2 – Generieren von Fuzzing-Testfällen

      Nachdem Radamsa jetzt installiert wurde, können Sie damit einige Fuzzing-Testfälle generieren.

      Ein Testfall ist ein Datenteil, der als Eingabe für das zu testende Programm verwendet wird. Wenn Sie beispielsweise einen Fuzz-Test für ein Archivierungsprogramm wie Gzip durchführen, kann ein Testfall ein Dateiarchiv sein, das Sie zu dekomprimieren versuchen.

      Anmerkung: Radamsa manipuliert Eingabedaten auf eine Vielzahl unerwarteter Arten, einschließlich extremer Wiederholungen, Bit-Flips, Einfügen von Steuerzeichen und so weiter. Dies kann dazu führen, dass Ihre Terminal-Sitzung abbricht oder instabil wird. Seien Sie sich dessen bewusst, bevor Sie fortfahren.

      Geben Sie zunächst ein einfaches Textstück an Radamsa weiter, um zu sehen, was passiert:

      • echo "Hello, world!" | radamsa

      Dadurch werden die eingegebenen Daten manipuliert (oder gefuzzt) und ein Testfall ausgegeben, wie beispielsweise:

      Output

      Hello,, world!

      In diesem Fall hat Radamsa ein zusätzliches Komma zwischen Hello und world eingefügt. Dies mag nicht wie eine wesentliche Änderung erscheinen, aber in einigen Anwendungen kann dies dazu führen, dass die Daten falsch interpretiert werden.

      Versuchen wir es noch einmal, indem wir den gleichen Befehl ausführen. Sie werden eine andere Ausgabe sehen:

      Output

      Hello, '''''''wor'd!

      Dieses Mal wurden mehrere einfache Anführungszeichen (') in die Zeichenfolge eingefügt, darunter eines, das das l in world überschrieb. Dieser spezielle Testfall führt mit größerer Wahrscheinlichkeit zu Problemen für eine Anwendung, da einfache/doppelte Anführungszeichen oft verwendet werden, um verschiedene Datenteile in einer Liste zu trennen.

      Versuchen wir es noch einmal:

      Output

      Hello, $+$PATHu0000`xcalc`world!

      In diesem Fall fügte Radamsa eine Shell-Injektionszeichenfolge ein, die zum Testen auf Befehlsinjektions-Schwachstellen in der zu testenden Anwendung nützlich sein wird.

      Sie haben Radamsa dazu verwendet, eine Eingabezeichenfolge zu fuzzen und eine Reihe von Testfällen zu erstellen. Als Nächstes werden Sie Radamsa zum Fuzzen einer Befehlszeilenanwendung verwenden.

      Schritt 3 – Fuzzing einer Befehlszeilenanwendung

      In diesem Schritt werden Sie Radamsa verwenden, um eine Befehlszeilenanwendung zu fuzzen und über alle auftretenden Abstürze zu berichten.

      Die genaue Technik für das Fuzzing jedes Programms variiert erheblich und verschiedene Methoden werden für verschiedene Programme am effektivsten sein. In diesem Tutorial werden wir jedoch das Beispiel von jq verwenden, das ein Befehlszeilenprogramm zur Verarbeitung von JSON-Daten ist.

      Sie können jedes andere ähnliche Programm verwenden, solange es dem allgemeinen Prinzip folgt, eine Form von strukturierten oder unstrukturierten Daten zu nehmen, etwas damit zu tun und dann ein Ergebnis auszugeben. Dieses Beispiel würde zum Beispiel auch mit Gzip, Grep, bc, tr usw. funktionieren.

      Wenn Sie jq nicht bereits installiert haben, können Sie es mit apt installieren:

      jq wird nun installiert.

      Um mit dem Fuzzing zu beginnen, erstellen Sie eine JSON-Beispieldatei, die Sie als Eingabe für Radamsa verwenden:

      Fügen Sie dann die folgenden JSON-Beispieldaten in die Datei ein:

      test.json

      {
        "test": "test",
        "array": [
          "item1: foo",
          "item2: bar"
        ]
      }
      

      Sie können diese Datei mit jq parsen, wenn Sie überprüfen wollen, ob die JSON-Syntax gültig ist:

      Wenn die JSON gültig ist, wird jq die Datei ausgeben. Andernfalls wird ein Fehler ausgegeben, mit dem Sie die Syntax bei Bedarf korrigieren können.

      Als nächstes fuzzen Sie die JSON-Testdatei mit Radamsa und übergeben diese dann an jq. Dadurch liest jq den gefuzzten/manipulierten Testfall und nicht die ursprünglich gültigen JSON-Daten:

      Wenn Radamsa die JSON-Datei auf eine Art und Weise fuzzt, dass sie syntaktisch noch gültig sind, gibt jq die Daten aus, jedoch mit den Änderungen, die Radamsa daran vorgenommen hat.

      Wenn Radamsa bewirkt, dass die JSON-Daten ungültig werden, zeigt jq alternativ einen entsprechenden Fehler an. Beispiel:

      Output

      parse error: Expected separator between values at line 5, column 16

      Das alternative Ergebnis wäre, dass jq nicht in der Lage ist, die gefuzzten Daten korrekt zu verarbeiten, was zu einem Absturz oder Fehlverhalten führt. Genau das ist es, was Sie beim Fuzzing wirklich suchen, da dies auf eine Sicherheitsschwachstelle wie einen Pufferüberlauf oder eine Befehlsinjektion hindeuten könnte.

      Um effizienter auf solche Schwachstellen zu testen, kann ein Bash-Skript verwendet werden, um den Fuzzing-Prozess zu automatisieren, einschließlich der Generierung von Testfällen, der Übergabe an das Zielprogramm und der Erfassung aller relevanten Ausgaben.

      Erstellen Sie eine Datei namens jq-fuzz.sh:

      Der genaue Inhalt des Skripts hängt von der Art des Programms, das Sie fuzzen, und den Eingabedaten ab, aber im Fall von jq und anderen ähnlichen Programmen reicht das folgende Skript aus.

      Kopieren Sie das Skript in Ihre jq-fuzz.sh-Datei:

      jq-fuzz.sh

      #!/bin/bash
      while true; do
        radamsa test.json > input.txt
        jq . input.txt > /dev/null 2>&1
        if [ $? -gt 127 ]; then
          cp input.txt crash-`date +s%.%N`.txt
          echo "Crash found!"
        fi
      done
      

      Dieses Skript enthält ein while, um den Inhalt in einer Schleife zu wiederholen. Bei jedem Durchlaufen der Skript-Schleife generiert Radamsa einen Testfall auf der Basis von test.json und speichert ihn in input.txt.

      Der input.txt-Testfall wird dann durch jq ausgeführt, wobei alle Standard- und Fehlerausgaben zu /dev/null umgeleitet werden, um zu vermeiden, dass der Terminal-Bildschirm überfüllt wird.

      Schließlich wird der Exit-Wert von jq überprüft. Wenn der Exit-Wert größer als 127 ist, was auf einen fatalen Abbruch (einen Absturz) hindeutet, werden die Eingabedaten zur späteren Überprüfung in einer Datei mit dem Namen crash- gespeichert – gefolgt vom aktuellen Datum in Unix-Sekunden und -Nanosekunden.

      Markieren Sie das Skript als ausführbar und führen Sie es aus, um mit dem automatischen Fuzz-Test jq zu beginnen:

      • chmod +x jq-fuzz.sh
      • ./jq-fuzz.sh

      Um das Skript zu beenden können Sie jederzeit STRG+C drücken. Sie können dann überprüfen, ob Abstürze gefunden wurden, indem Sie mit ls eine Verzeichnisliste mit den erzeugten Absturzdateien anzeigen.

      Vielleicht möchten Sie Ihre JSON-Eingabedaten verbessern, da die Verwendung einer komplexeren Eingabedatei wahrscheinlich die Qualität Ihrer Fuzzing-Ergebnisse verbessert. Vermeiden Sie die Verwendung einer großen Datei oder einer Datei, die viele sich wiederholende Daten enthält – eine ideale Eingabedatei ist eine Datei, die klein ist, aber dennoch so viele „komplexe“ Elemente wie möglich enthält. Eine gute Eingabedatei enthält beispielsweise Datenproben, die in allen Formaten gespeichert sind, einschließlich Zeichenfolgen, Ganzzahlen, Boolesche, Listen und Objekte, sowie, wenn möglich, verschachtelte Daten.

      Sie haben Radamsa zum Fuzzen einer Befehlszeilenanwendung verwendet. Als Nächstes werden Sie Radamsa zum Fuzzen von Anfragen an Netzwerkdienste verwenden.

      Schritt 4 – Fuzzing von Anfragen an Netzwerkdienste

      Radamsa kann auch zum Fuzzen von Netzwerkdiensten verwendet werden, wobei es entweder als Netzwerk-Client oder als Server fungiert. In diesem Schritt verwenden Sie Radamsa zum Fuzzen eines Netzwerkdienstes, wobei Radamsa als Client fungiert.

      Der Zweck des Fuzzings von Netzwerkdiensten besteht darin, zu testen, wie belastbar ein bestimmter Netzwerkdienst gegenüber Clients ist, die ihm fehlerhafte und/oder bösartige Daten senden. Viele Netzwerkdienste wie Web- oder DNS-Server sind in der Regel dem Internet ausgesetzt, was bedeutet, dass sie ein häufiges Ziel für Angreifer sind. Ein Netzwerkdienst, der nicht ausreichend widerstandsfähig gegen den Empfang fehlerhafter Daten ist, kann abstürzen oder – schlimmer noch – in einem offenen Zustand ausfallen, sodass Angreifer sensible Daten wie Verschlüsselungsschlüssel oder Benutzerdaten lesen können.

      Die spezifische Technik zum Fuzzing von Netzwerkdiensten variiert je nach dem betreffenden Netzwerkdienst enorm. In diesem Beispiel werden wir jedoch Radamsa zum Fuzzing eines einfachen Webservers verwenden, der statische HTML-Inhalte anbietet.

      Zuerst müssen Sie den Webserver für die Tests einrichten. Sie können dies mit dem integrierten Entwicklungsserver tun, der mit dem php-cli-Paket geliefert wird. Zum Testen Ihres Webservers benötigen Sie auch curl.

      Wenn Sie php-cli und/oder curl nicht installiert haben, können Sie sie mit apt installieren:

      • sudo apt install php-cli curl

      Als Nächstes erstellen Sie ein Verzeichnis, in dem Sie Ihre Webserver-Dateien speichern, und wechseln zu diesem:

      Erstellen Sie dann eine HTML-Datei, die einen Beispieltext enthält:

      Fügen Sie der Datei Folgendes hinzu:

      index.html

      <h1>Hello, world!</h1>
      

      Nun können Sie Ihren PHP-Webserver ausführen. Sie müssen in der Lage sein, das Webserver-Protokoll einzusehen, während Sie noch eine andere Terminal-Sitzung verwenden. Öffnen Sie dazu eine weitere Terminal-Sitzung und SSH zu Ihrem Server:

      • cd ~/www
      • php -S localhost:8080

      Sie erhalten eine Ausgabe, die der folgenden ähnelt:

      Output

      PHP 7.2.24-0ubuntu0.18.04.1 Development Server started at Wed Jan 1 16:06:41 2020 Listening on http://localhost:8080 Document root is /home/user/www Press Ctrl-C to quit.

      Sie können jetzt wieder zu Ihrer ursprünglichen Terminalsitzung zurückwechseln und mit curl testen, ob der Webserver funktioniert:

      Dies wird die Beispieldatei index.html ausgeben, die Sie zuvor erstellt haben:

      Output

      <h1>Hello, world!</h1>

      Ihr Webserver muss nur lokal erreichbar sein, Sie sollten also keine Ports auf Ihrer Firewall dafür öffnen.

      Nachdem Sie Ihren Testwebserver eingerichtet haben, können Sie nun damit beginnen, einen Fuzz-Test mit Radamsa durchzuführen.

      Zuerst müssen Sie eine HTTP-Beispielanfrage erstellen, die als Eingabedaten für Radamsa verwendet werden soll. Erstellen Sie eine neue Datei, in der diese gespeichert wird:

      Kopieren Sie dann die folgende HTTP-Beispielanfrage in die Datei:

      http-request.txt

      GET / HTTP/1.1
      Host: localhost:8080
      User-Agent: test
      Accept: */*
      

      Als Nächstes können Sie Radamsa verwenden, um diese HTTP-Anfrage an Ihren lokalen Webserver zu senden. Dazu müssen Sie Radamsa als TCP-Client verwenden, was durch die Angabe einer IP-Adresse und eines Ports für die Verbindung möglich ist:

      • radamsa -o 127.0.0.1:8080 http-request.txt

      Anmerkung: Beachten Sie, dass die Verwendung von Radamsa als TCP-Client möglicherweise die Übertragung von fehlerhaften/bösartigen Daten über das Netzwerk verursacht. Dies kann zu Problemen führen. Achten Sie daher sehr darauf, nur auf Netzwerke zuzugreifen, die Sie testen dürfen, oder halten Sie sich vorzugsweise an die Adresse localhost (127.0.0.1).

      Wenn Sie sich die ausgegebenen Protokolle für Ihren lokalen Webserver ansehen, werden Sie feststellen, dass er die Anfragen erhalten, sie aber höchstwahrscheinlich nicht verarbeitet hat, da sie ungültig/fehlerhaft waren.

      Die ausgegebenen Protokolle werden in Ihrem zweiten Terminalfenster sichtbar sein:

      Output

      [Wed Jan 1 16:26:49 2020] 127.0.0.1:49334 Invalid request (Unexpected EOF) [Wed Jan 1 16:28:04 2020] 127.0.0.1:49336 Invalid request (Malformed HTTP request) [Wed Jan 1 16:28:05 2020] 127.0.0.1:49338 Invalid request (Malformed HTTP request) [Wed Jan 1 16:28:07 2020] 127.0.0.1:49340 Invalid request (Unexpected EOF) [Wed Jan 1 16:28:08 2020] 127.0.0.1:49342 Invalid request (Malformed HTTP request)

      Für optimale Ergebnisse und um sicherzustellen, dass Abstürze aufgezeichnet werden, sollten Sie ein Automatisierungsskript ähnlich dem in Schritt 3 verwendeten schreiben. Sie sollten außerdem in Betracht ziehen, eine komplexere Eingabedatei zu verwenden, die möglicherweise Zusätze wie zusätzliche HTTP-Header enthält.

      Sie haben einen Netzwerkdienst mit Radamsa als TCP-Client gefuzzt. Als Nächstes werden Sie einen Netzwerk-Client mit Radamsa als Server fuzzen.

      Schritt 5 – Fuzzing von Netzwerk-Client-Anwendungen

      In diesem Schritt werden Sie Radamsa zum Fuzz-Test einer Netzwerk-Client-Anwendung verwenden. Dies wird erreicht, indem die Antworten eines Netzwerkdienstes abgefangen und gefuzzt werden, bevor sie vom Client empfangen werden.

      Der Zweck dieser Art des Fuzzings besteht darin, zu testen, wie belastbar Netzwerk-Client-Anwendungen gegenüber dem Empfang von fehlerhaften oder bösartigen Daten von Netzwerkdiensten sind. Zum Beispiel das Testen eines Webbrowsers (Client), der fehlerhaftes HTML von einem Webserver (Netzwerkdienst) empfängt, oder das Testen eines DNS-Clients, der fehlerhafte DNS-Antworten von einem DNS-Server empfängt.

      Wie beim Fuzzing von Befehlszeilenanwendungen oder Netzwerkdiensten variiert die genaue Technik für das Fuzzing jeder Netzwerk-Client-Anwendung erheblich. In diesem Beispiel wird jedoch whois verwendet, eine einfache TCP-basierte Sende-/Empfangsanwendung.

      Die whois-Anwendung wird verwendet, um Anfragen an WHOIS-Server zu stellen und WHOIS-Datensätze als Antworten zu erhalten. WHOIS arbeitet im Klartext über den TCP-Port 43 und ist somit ein guter Kandidat für netzwerkbasierte Fuzz-Tests.

      Wenn Sie noch nicht über whois verfügen, können Sie es mit apt installieren:

      Zunächst müssen Sie eine Probe der whois-Antwort erwerben, die Sie als Eingabedaten verwenden können. Sie können dies tun, indem Sie eine whois-Abfrage stellen und die Ausgabe in einer Datei speichern. Sie können hier jede beliebige Domäne verwenden, da Sie das whois-Programm lokal mit Beispieldaten testen:

      • whois example.com > whois.txt

      Als Nächstes müssen Sie Radamsa als Server einrichten, der gefuzzte Versionen dieser whois-Antwort liefert. Sie müssen in der Lage sein, Ihr Terminal weiter zu benutzen, sobald Radamsa im Servermodus läuft. Es wird daher empfohlen, eine weitere Terminalsitzung und eine SSH-Verbindung zu Ihrem Server zu öffnen:

      • radamsa -o :4343 whois.txt -n inf

      Radamsa läuft nun im TCP-Server-Modus und stellt bei jedem Verbindungsaufbau zum Server eine gefuzzte Version von whois.txt zur Verfügung, unabhängig davon, welche Anfragedaten empfangen werden.

      Sie können nun mit dem Testen der whois-Client-Anwendung fortfahren. Sie müssen eine normale whois-Abfrage für eine beliebige Domäne Ihrer Wahl stellen (es muss nicht dieselbe sein, für die die Beispieldaten bestimmt sind), aber mit whois, das auf Ihren lokalen Radamsa-Server verweist:

      • whois -h localhost:4343 example.com

      Die Antwort wird aus Ihren Beispieldaten bestehen, die jedoch von Radamsa gefuzzt wurden. Solange Radamsa ausgeführt wird, können Sie weiterhin Anfragen an den lokalen Server stellen, und es wird jedes Mal eine andere gefuzzte Antwort ausgegeben.

      Wie beim Fuzzing von Netzwerkdiensten können Sie, um die Effizienz dieses Netzwerk-Client-Fuzz-Tests zu verbessern und sicherzustellen, dass alle Abstürze erfasst werden, ein Automatisierungsskript schreiben, das dem in Schritt 3 verwendeten ähnelt.

      In diesem letzten Schritt haben Sie Radamsa zur Durchführung von Fuzz-Tests einer Netzwerk-Client-Anwendung verwendet.

      Zusammenfassung

      In diesem Artikel richteten Sie Radamsa ein und verwendeten es zum Fuzzen einer Befehlszeilenanwendung, eines Netzwerkdienstes und eines Netzwerk-Clients. Sie verfügen nun über die grundlegenden Kenntnisse, die für das Fuzz-Testen Ihrer eigenen Anwendungen erforderlich sind, hoffentlich mit dem Ergebnis, ihre Robustheit und Widerstandsfähigkeit gegen Angriffe zu verbessern.

      Wenn Sie Radamsa weiter erkunden möchten, sollten Sie sich die Radamsa README-Datei im Detail ansehen, da sie weitere technische Informationen und Beispiele für die Verwendung des Tools enthält:

      Vielleicht möchten Sie sich auch einige andere Fuzzing-Tools ansehen, wie z. B. American Fuzzy Lop (AFL), ein fortschrittliches Fuzzing-Tool, das für das Testen von binären Anwendungen mit extrem hoher Geschwindigkeit und Genauigkeit entwickelt wurde:



      Source link

      Empfohlene Schritte zum Härten von Apache unter FreeBSD 12.0


      Der Autor wählte den Free and Open Source Fund, um eine Spende im Rahmen des Programms Write for DOnations zu erhalten.

      Einführung

      Die standardmäßige Installation eines Apache-HTTP-Servers ist zwar bereits sicher, seine Konfiguration kann jedoch mit einigen Änderungen erheblich verbessert werden. Sie können bereits vorhandene Sicherheitsmechanismen ergänzen, indem Sie z. B. Schutzmechanismen für Cookies und Header einrichten, damit Verbindungen auf der Client-Ebene des Benutzers nicht manipuliert werden können. Dadurch können Sie die Möglichkeiten mehrerer Angriffsmethoden wie Cross-Site Scripting (auch als XSS bezeichnet) drastisch reduzieren. Sie können auch andere Arten von Angriffen verhindern, wie z. B. Cross-Site Request Forgery, Session Hijacking und Denial-of-Service-Angriffe.

      In diesem Tutorial werden Sie einige empfohlene Schritte implementieren, um die Informationen zu reduzieren, die auf Ihrem Server verfügbar sind. Sie werden die Verzeichnislisten verifizieren und die Indizierung deaktivieren, um den Zugriff auf Ressourcen zu überprüfen. Außerdem ändern Sie den Standardwert der Anweisung timeout, um das Risiko von Angriffen wie Denial of Service zu verringern. Des Weiteren deaktivieren Sie die TRACE-Methode, damit Sitzungen nicht zurückverfolgt und gehackt werden können. Abschließend sichern Sie Header und Cookies.

      Die meisten Konfigurationseinstellungen werden auf die Hauptkonfigurationsdatei des Apache HTTP angewendet, die sich in /usr/local/etc/apache24/httpd.conf befindet.

      Voraussetzungen

      Bevor Sie diese Anleitung beginnen, benötigen Sie Folgendes:

      Mit diesen Voraussetzungen haben Sie ein FreeBSD-System mit einem Stack, der Webinhalt mit allem in PHP Geschriebenen, wie wesentliche CMS-Software, bereitstellen kann. Außerdem haben Sie sichere Verbindungen über Let’s Encrypt verschlüsselt.

      Reduzieren der Serverinformationen

      Das Betriebssystem-Banner ist eine Methode, die von Computern, Servern und Geräten aller Art zur Präsentation in Netzwerken verwendet wird. Bösartige Akteure können diese Informationen verwenden, um relevante Systeme anzugreifen. In diesem Abschnitt reduzieren Sie die Menge an Informationen, die von diesem Banner veröffentlicht werden.

      Anweisungssätze​​​ kontrollieren, wie diese Informationen angezeigt werden. Zu diesem Zweck ist die Anweisung ServerTokens wichtig: Sie zeigt standardmäßig dem Client, zu dem die Verbindung hergestellt wird, alle Details über das Betriebssystem sowie die kompilierte Module an.

      Sie verwenden ein Netzwerk-Scanning-Tool um zu prüfen, welche Informationen derzeit angezeigt werden, bevor Sie alle Änderungen vornehmen. Um nmap zu installieren, führen Sie den folgenden Befehl aus:

      Um die IP-Adresse Ihres Servers zu erhalten, können Sie den folgenden Befehl ausführen:

      • ifconfig vtnet0 | awk '/inet / {print $2}'

      Sie können die Antwort des Webservers mit dem folgenden Befehl überprüfen:

      • nmap -sV -p 80 your-server-ip

      Rufen Sie zum Ausführen eines Scans nmap auf (folglich das Flag -s), um die Version (das Flag -V) auf Port 80 (das Flag -p) auf der gegebenen IP oder Domäne anzuzeigen.

      Sie erhalten Informationen über Ihren Webserver, ähnlich wie die folgenden:

      Output

      Starting Nmap 7.80 ( https://nmap.org ) at 2020-01-22 00:30 CET Nmap scan report for 206.189.123.232 Host is up (0.054s latency). PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.4.41 ((FreeBSD) OpenSSL/1.1.1d-freebsd Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 7.59 seconds

      Diese Ausgabe zeigt, dass Informationen wie das Betriebssystem, die Apache-HTTP-Version und OpenSSL sichtbar sind. Damit können Angreifer Informationen über den Server erhalten (zum Beispiel ein Sicherheitsrisiko in der Software, die auf dem Server ausgeführt wird) und die richtigen Tools für den Angriff auswählen.

      Platzieren Sie die Anweisung ServerTokens in die Hauptkonfigurationsdatei, da sie nicht standardmäßig konfiguriert ist. Weil diese Konfiguration fehlt, zeigt Apache HTTP die vollständigen Informationen über den Server als Dokumentationszustand an. Um die Informationen zu begrenzen, die über Ihren Server und Ihre Konfiguration preisgegeben werden, platzieren Sie die Anweisung ServerTokens in die Hauptkonfigurationsdatei.

      Platzieren Sie diese Anweisung nach der ServerName-Eingabe in die Konfigurationsdatei. Führen Sie den folgenden Befehl aus, um die Anweisung zu suchen:

      • grep -n 'ServerName' /usr/local/etc/apache24/httpd.conf

      Danach können Sie die Zeilennummer mit vi suchen:

      Output

      226 #ServerName www.example.com:80

      Führen Sie den folgenden Befehl aus:

      • sudo vi +226 /usr/local/etc/apache24/httpd.conf

      Fügen Sie die folgende hervorgehobene Zeile hinzu:

      /usr/local/etc/apache24/httpd.conf

      . . .
      #ServerName www.example.com:80
      ServerTokens Prod
      

      Speichern und schließen Sie die Datei mit :wq und der EINGABETASTE.

      Durch die Einstellung der Anweisung ServerTokens auf Prod wird lediglich angezeigt, dass dies ein Apache-Webserver ist.

      Damit dies in Kraft tritt, starten Sie den Apache-HTTP-Server neu:

      Um die Änderungen zu testen, führen Sie den folgenden Befehl aus:

      • nmap -sV -p 80 your-server-ip

      Sie sehen eine ähnliche Ausgabe wie die folgende, mit weniger Informationen über Ihren Apache-Webserver:

      Output

      Starting Nmap 7.80 ( https://nmap.org ) at 2020-01-22 00:58 CET Nmap scan report for WPressBSD (206.189.123.232) Host is up (0.056s latency). PORT STATE SERVICE VERSION 80/tcp open http Apache httpd Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 7.59 seconds

      Sie haben gesehen, welche Informationen der Server vor der Änderung preisgegeben hat, und Sie haben dies nun auf ein Minimum reduziert. Dadurch geben Sie einem externen Akteur weniger Hinweise über Ihren Server. Im nächsten Schritt verwalten Sie die Verzeichnislisten für Ihren Webserver.

      Verwalten von Verzeichnislisten

      In diesem Schritt stellen Sie sicher, dass die Verzeichnisliste korrekt konfiguriert ist, damit die gewünschten Informationen über das System öffentlich verfügbar und die übrigen geschützt sind.

      Anmerkung: Wenn ein Argument deklariert ist, ist es aktiv, aber das + kann visuell untermauern, dass es tatsächlich aktiviert ist. Wenn ein Minuszeichen - eingegeben wird, wird das Argument verweigert, z. B. Options -Indexes.

      Argumente mit + und/oder - können nicht kombiniert werden – dies wird als schlechte Syntax in Apache HTTP erachtet und könnte beim Starten verweigert werden.

      Durch Hinzufügen der Anweisung Options -Indexes wird der Inhalt im Datenpfad /usr/local/www/apache24/data so eingestellt, dass (read listed) nicht automatisch indiziert wird, wenn keine .html-Datei vorhanden ist, sowie nicht gezeigt wird, wenn eine URL diesem Verzeichnis zugeordnet ist. Dies gilt auch bei der Verwendung von virtuellen Host-Konfigurationen wie z. B. jener, die für das Tutorial über Voraussetzungen für das Let’s-Encrypt-Zertifikat verwendet werden.

      Sie richten die Anweisung Options mit dem Argument -Indexes und der Anweisung +FollowSymLinks ein, wodurch symbolische Links besucht werden können. Sie verwenden das Symbol +, um die Konventionen von Apache HTTP zu befolgen.

      Führen Sie den folgenden Befehl aus, um die Zeile zu suchen, die in der Konfigurationsdatei bearbeitet werden soll:

      • grep -n 'Options Indexes FollowSymLinks' /usr/local/etc/apache24/httpd.conf

      Sie werden eine Ausgabe ähnlich der folgenden sehen:

      Output

      263 : Options Indexes FollowSymLinks

      Führen Sie diesen Befehl aus, um direkt auf die Zeile zur Bearbeitung zuzugreifen:

      • sudo vi +263 /usr/local/etc/apache24/httpd.conf

      Bearbeiten Sie nun die Zeile gemäß der Konfiguration:

      /usr/local/etc/apache24/httpd.conf

      . . .
      #
      Options -Indexes +FollowSymLinks
      
      #
      . . .
      

      Speichern und schließen Sie die Datei mit :wq und der EINGABETASTE.

      Starten Sie Apache HTTP zur Implementierung dieser Änderungen neu:

      Auf Ihrer Domäne im Browser sehen Sie eine „Zugriff verboten“-Nachricht, auch als Fehler 403 bekannt. Grund dafür sind Ihre Änderungen. Durch die Eingabe von -Indexes in die Anweisung Options wurde die Funktion Auto-Index von Apache HTTP deaktiviert und daher gibt es im Datenpfad keine index.html-Datei.

      Das können Sie lösen, indem Sie eine index.html-Datei im VirtualHost ablegen, den Sie im Tutorial​​​ über Voraussetzungen für das Let’s-Encrypt-Zertifikat aktiviert haben. Verwenden Sie den Standardblock innerhalb von Apache HTTP und legen Sie ihn im gleichen Ordner wie die DocumentRoot ab, die Sie im virtuellen Host deklariert haben.

      /usr/local/etc/apache24/extra/httpd-vhosts.conf

      <VirtualHost *:80>
          ServerAdmin your_email@your_domain.com
          DocumentRoot "/usr/local/www/apache24/data/your_domain.com"
          ServerName your_domain.com
          ServerAlias www.your_domain.com
          ErrorLog "/var/log/your_domain.com-error_log"
          CustomLog "/var/log/your_domain.com-access_log" common
      </VirtualHost>
      

      Verwenden Sie hierzu den folgenden Befehl:

      • sudo cp /usr/local/www/apache24/data/index.html /usr/local/www/apache24/data/your_domain.com/index.html

      Jetzt sehen Sie die Nachricht It works! beim Besuch Ihrer Domäne.

      In diesem Abschnitt haben Sie der Anweisung Indexes Beschränkungen hinzugefügt, um nicht automatisch unbeabsichtigten Inhalt einzutragen und anzuzeigen. Wenn nun keine index.html-Datei im Datenpfad ist, erstellt Apache HTTP nicht automatisch ein Verzeichnis des Inhalts. Im nächsten Schritt gehen Sie über das Verbergen von Informationen hinaus und passen verschiedene Anweisungen an.

      Den Wert der Timeout-Anweisung verringern

      Die Anweisung Timeout legt das Limit für die Zeit fest, die Apache HTTP auf eine neue Eingabe/Ausgabe wartet, bevor die Verbindungsanforderung fehlschlägt. Dieser Fehler kann aufgrund von verschiedenen Umständen auftreten, wie z. B. Pakete, die nicht beim Server ankommen, oder Daten, die vom Client nicht als empfangen bestätigt werden.

      Standardmäßig ist das Zeitlimit auf 60 Sekunden eingestellt. In Umgebungen, in denen das Internet langsam ist, kann dieser Standardwert sinnvoll sein. Eine Minute ist jedoch ziemlich lange, insbesondere dann, wenn der Server Benutzer mit schnellerem Internet abdeckt. Außerdem kann die Zeit, in der der Server die Verbindung nicht schließt, für Denial-of-Service-Angriffe (DoS) ausgenützt werden. Wenn es zu einer Vielzahl dieser schädlichen Verbindungen kommt, gerät der Server ins Stolpern und könnte gesättigt werden und nicht mehr reagieren.

      Um den Wert zu ändern, finden Sie die Timeout-Einträge in der Datei httpd-default.conf:

      • grep -n 'Timeout' /usr/local/etc/apache24/extra/httpd-default.conf

      Sie sehen eine ähnliche Ausgabe wie die folgende:

      Output

      8 # Timeout: The number of seconds before receives and sends time out. 10 Timeout 60 26 # KeepAliveTimeout: Number of seconds to wait for the next request from the 29 KeepAliveTimeout 5 89 RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500

      In der Ausgabezeile legt 10 den Wert der Timeout-Anweisung fest. Um direkt auf diese Zeile zuzugreifen, führen Sie den folgenden Befehl aus:

      • sudo vi +10 /usr/local/etc/apache24/extra/httpd-default.conf

      Stellen Sie ihn zum Beispiel auf 30 Sekunden ein, wie nachfolgend gezeigt:

      /usr/local/etc/apache24/extra/httpd-default.conf

      #
      # Timeout: The number of seconds before receives and sends time out.
      #
      Timeout 30
      

      Speichern und schließen Sie die Datei mit :wq und der EINGABETASTE.

      Der Wert der Anweisung Timeout muss groß genug sein, damit eine legitime und erfolgreiche Verbindung hergestellt werden kann, und klein genug, um unerwünschte Verbindungsversuche zu verhindern.

      Anmerkung: Denial-of-Service-Angriffe können die Ressourcen des Servers ziemlich effektiv erschöpfen. Eine komplementäre und sehr fähige Gegenmaßnahme ist die Verwendung eines Threaded MPM, um für die Verbindungen und Prozesse von Apache HTTP die beste Leistung zu erzielen. Im Tutorial So konfigurieren Sie Apache HTTP mit MPM Event und PHP-FPM unter FreeBSD 12.0 finden Sie Schritte zur Aktivierung dieser Fähigkeit.

      Damit diese Änderung in Kraft tritt, starten Sie den Apache-HTTP-Server neu:

      Sie haben den Standardwert der Timeout-Anweisung geändert, um das Risiko von DoS-Angriffen teilweise zu reduzieren.

      Deaktivieren der TRACE-Methode

      Das Hypertext-Übertragungsprotokoll wurde nach einem Client-Server-Modell entwickelt und als solches hat das Protokoll Anforderungsmethoden, um Informationen vom Server abzurufen oder im Server abzulegen. Der Server muss diese Methodensätze und die Interaktion zwischen ihnen verstehen. In diesem Schritt konfigurieren Sie die mindestens erforderlichen Methoden.

      Die Methode TRACE, die als harmlos angesehen wurde, wurde für die Durchführung von Cross-Site-Tracing-Angriffen genutzt. Diese Art von Angriffen ermöglicht bösartigen Akteuren, Benutzersitzungen mithilfe dieser Methode zu stehlen. Die Methode wurde zum Zwecke des Debugging konzipiert, wobei der Server die gleiche Anfrage zurückgibt, die ursprünglich vom Client gesendet wurde. Da das Cookie aus der Sitzung des Browsers an den Server gesendet wird, wird es erneut zurückgesendet. Das könnte jedoch eventuell von einem bösartigen Akteur abgefangen werden, der dann die Verbindung eines Browsers zu einer Website umleiten kann, über die er die Kontrolle hat, anstatt zum ursprünglichen Server.

      Aufgrund des potenziellen Missbrauchs der TRACE-Methode wird empfohlen, sie nur für das Debugging und nicht in einer Produktivumgebung zu verwenden. In diesem Abschnitt deaktivieren Sie diese Methode.

      Bearbeiten Sie die Datei httpd.conf mit dem folgenden Befehl und drücken Sie dann G, um das Ende der Datei zu erreichen:

      • sudo vi /usr/local/etc/apache24/httpd.conf

      Fügen Sie am Ende der Datei folgenden Einstiegspfad hinzu:

      /usr/local/etc/apache24/httpd.conf

      . . .
      TraceEnable off
      

      Eine bewährte Vorgehensweise ist die Angabe der Methoden, die Sie auf Ihrem Apache-HTTP-Webserver verwenden. Dadurch werden potenzielle Einstiegspunkte für bösartige Akteure begrenzt.

      LimitExcept kann für diesen Zweck nützlich sein, da es keine anderen Methoden zulässt als die in ihm deklarierten. So kann beispielsweise eine Konfiguration wie diese erstellt werden:

      /usr/local/etc/apache24/httpd.conf

      DocumentRoot "/usr/local/www/apache24/data"
      <Directory "/usr/local/www/apache24/data">
          Options -Indexes +FollowSymLinks -Includes
          AllowOverride none
           <LimitExcept GET POST HEAD>
             deny from all
          </LimitExcept>
          Require all granted
      </Directory>
      

      Wie in der Anweisung LimitExcept deklariert, sind nur die Methoden GET, POST und HEAD in der Konfiguration erlaubt.

      • Die GET-Methode ist Teil des HTTP-Protokolls und dient zum Abrufen von Daten.
      • Die POST-Methode ist auch Teil des HTTP-Protokolls und dient dazu, Daten an den Server zu senden.
      • Die HEAD-Methode ist ähnlich wie GET, hat jedoch keinen Antworttext.

      Verwenden Sie den folgenden Befehl und legen Sie den LimitExcept-Block in der Datei ab:

      • sudo vi +272 /usr/local/etc/apache24/httpd.conf

      Um diese Konfiguration einzustellen, legen Sie den folgenden Block im Anweisungseintrag DocumentRoot ab, aus dem der Inhalt gelesen wird, genauer gesagt im Eintrag des Verzeichnisses:

      /usr/local/etc/apache24/httpd.conf

      . . .
      <LimitExcept GET POST HEAD>
         deny from all
      </LimitExcept>
      . . .
      

      Starten Sie Apache HTTP neu, damit die Änderungen übernommen werden:

      Die neuere Anweisung AllowedMethods​​​ hat eine ähnliche Funktionalität, ihr Status ist jedoch noch experimentell.

      Sie kennen nun HTTP-Methoden, ihre Verwendung und den Schutz, den sie vor bösartigen Aktivitäten mithilfe der TRACE-Methode bieten. Des Weiteren wissen Sie, wie man deklariert, welche Methoden verwendet werden sollen. Als Nächstes arbeiten Sie mit weiteren Schutzmaßnahmen für HTTP-Header und Cookies.

      In diesem Schritt richten Sie spezifische Anweisungen ein, um die Sitzungen zu schützen, die die Client-Rechner beim Besuch Ihres Apache-HTTP-Webservers öffnen. So lädt Ihr Server keinen unerwünschten Inhalt, die Verschlüsselung wird nicht heruntergeladen und Sie vermeiden Content Sniffing.

      Header sind Bestandteile der Anforderungsmethoden. Es gibt Header zum Anpassen der Authentifizierung, für die Kommunikation zwischen Server und Client, Zwischenspeicherung, Inhaltsaushandlung usw.

      Cookies sind Informationen, die vom Server an den Browser gesendet werden. Diese Informationen ermöglichen es dem Server, den Client-Browser von unterschiedlichen Computern zu unterscheiden. Außerdem ermöglichen sie Servern, Benutzersitzungen zu erkennen. Sie können beispielsweise den Einkaufswagen eines angemeldeten Benutzers, Zahlungsinformationen, den Verlauf etc. verfolgen. Cookies werden im Webbrowser des Clients verwendet und gespeichert, da HTTP ein zustandsloses Protokoll ist. Das bedeutet, sobald die Verbindung geschlossen wird, erinnert sich der Server nicht mehr an die Anfragen der einzelnen Clients.

      Es ist wichtig, sowohl Header als auch Cookies zu schützen, da sie eine Kommunikation zwischen Webbrowser-Client und Webserver bereitstellen.

      Das Modul Header ist standardmäßig aktiviert. Überprüfen Sie mit dem folgenden Befehl, ob es geladen wurde:

      • sudo apachectl -M | grep 'headers'

      Sie sehen die folgende Ausgabe:

      Output

      headers_module (shared)

      Wenn Sie keine Ausgabe sehen, überprüfen Sie, ob das Modul in der Apache-Datei httpd.conf aktiviert ist:

      • grep -n 'mod_headers' /usr/local/etc/apache24/httpd.conf

      Als Ausgabe sehen Sie eine unkommentierte Zeile, die auf das spezifische Modul für Header verweist:

      /usr/local/etc/apache24/httpd.conf

      . . .
      122  LoadModule headers_module libexec/apache24/mod_headers.so
      . . .
      

      Entfernen Sie den Hashtag am Anfang der Zeile mod_headers.so, falls vorhanden, um die Anweisung zu aktivieren.

      Durch die Verwendung der folgenden Apache-HTTP-Anweisungen schützen Sie Header und Cookies vor bösartigen Aktivitäten, um das Risiko für Clients und Server zu verringern.

      Jetzt richten Sie den Schutz des Headers ein. Legen Sie all diese Header-Werte in einen Block ab. Sie können diese Werte nach eigenem Ermessen anwenden, es werden jedoch alle empfohlen.

      Bearbeiten Sie die Datei httpd.conf mit dem folgenden Befehl und drücken Sie dann G, um das Ende der Datei zu erreichen:

      • sudo vi /usr/local/etc/apache24/httpd.conf

      Legen Sie den folgenden Block am Ende der Datei ab:

      /usr/local/etc/apache24/httpd.conf

      . . .
      <IfModule mod_headers.c>
        # Add security and privacy related headers
        Header set Content-Security-Policy "default-src 'self'; upgrade-insecure-requests;"
        Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"
        Header always edit Set-Cookie (.*) "$1; HttpOnly; Secure"
        Header set X-Content-Type-Options "nosniff"
        Header set X-XSS-Protection "1; mode=block"
        Header set Referrer-Policy "strict-origin"
        Header set X-Frame-Options: "deny"
        SetEnv modHeadersAvailable true
      </IfModule>
      
      • Header Strict-Transport-Security "max-age​​, includeSubDomains": HTTP Strict Transport Security (HTSTS) ist ein Mechanismus für Webserver und Clients (hauptsächlich Browser) zur Einrichtung von Kommunikationen mit ausschließlich HTTPS. Durch die Implementierung vermeiden Sie Man-in-the-middle-Angriffe, bei denen ein Dritter in der Kommunikation potenziell auf Informationen zugreifen und diese manipulieren kann.

      • Header always edit Set-Cookie (. *) "$1; HttpOnly; Secure": Die Flags HttpOnly and Secure auf den Headern verringern das Risiko von Cross-Site-Scripting-Angriffen (XSS). Cookies können von Angreifern missbraucht werden, um sich als legitime Besucher bzw. als eine andere Person auszugeben (Identitätsdiebstahl), oder sie können manipuliert werden.

      • Header set Referrer-Policy "strict-origin​​": Der Header Referrer-Policy legt fest, welche Informationen im Header-Feld als Verweiser-Information enthalten sind.

      • Header set Content-Security-Policy "default-src 'self'; upgrade-insecure-requests;": Der Content-Security-Policy header (CSP) verhindert, dass Inhalt geladen wird, der in den Parametern nicht angegeben ist. Das ist hilfreich, um Cross-Site-Scripting-Angriffe (XSS) zu verhindern. Es gibt viele Parameter für die Konfiguration der Richtlinie dieses Headers. Entscheidend ist die Konfiguration zum Laden von Inhalt derselben Site und das Aktualisieren jedes Inhalts mit HTTP-Ursprung.

      • Header set X-XSS-Protection "1; mode=block": Dies unterstützt ältere Browser, die mit Content-Security-Policy nicht fertig werden. Der Header ‘X-XSS-Protection’ bietet Schutz vor Cross-Site-Scripting-Angriffen. Sie müssen diesen Header nicht einrichten, außer Sie müssen alte Browser-Versionen unterstützen, was selten ist.

      • Header set X-Frame-Options: "deny": Das verhindert clickjacking-Angriffe. Der Header ‘X-Frame-Options’ teilt einen Browser mit, wenn eine Seite in ein <frame>, <iframe>, <embed> oder <object> gerendert werden kann. So kann Inhalt von Sites nicht in andere eingebettet werden, wodurch Clickjacking-Angriffe verhindert werden. Hier verweigern Sie jegliches Frame-Rendering, damit die Webseite nicht irgendwo anders eingebettet werden kann, nicht einmal innerhalb derselben Website. Sie können dies Ihren Bedürfnissen anpassen, wenn Sie z. B. das Rendering bestimmter Seiten autorisieren müssen, da es sich um Anzeigen oder Kooperationen mit spezifischen Websites handelt.

      • Header set X-Content-Type-Options "nosniff": Der Header ‘X-Content-Type-Options’ steuert MIME types, damit sie nicht geändert und gefolgt werden können. MIME types sind Dateiformat-Standards: Sie funktionieren mit Text, Audio, Video, Image usw. Dieser Header hält bösartige Akteure von Content Sniffing der Dateien ab sowie vor dem Versuch, Dateitypen zu ändern.

      Starten Sie Apache neu, damit die Änderungen wirksam werden:

      Um die Sicherheitsebenen Ihrer Konfigurationseinstellungen zu überprüfen, besuchen Sie die Website Security Headers. Nach Ausführung der Schritte in diesem Tutorial wird Ihre Domäne die Note A erhalten.

      Anmerkung: Wenn Sie Ihre Header auf https://securityheaders.com/ überprüfen und ein F erhalten, könnte das daran liegen, dass in der DocumentRoot Ihrer Website kein index.html ist, wie am Ende von Schritt 2 beschrieben. Wenn Sie Ihre Header überprüfen und eine andere Note als A oder F erhalten, prüfen Sie jede Header set-Zeile auf Tippfehler, die zu der Herabstufung geführt haben könnten.

      In diesem Schritt haben Sie mit bis zu sieben Einstellungen gearbeitet, um die Sicherheit Ihrer Header und Cookies zu verbessern. Dadurch wird das Risiko von Cross-Site-Scripting, Clickjacking und anderen Arten von Angriffen verhindert.

      Zusammenfassung

      In diesem Tutorial haben Sie sich mit verschiedenen Sicherheitsaspekten befasst, wie der Preisgabe von Informationen, dem Schutz von Sitzungen sowie mit alternativen Konfigurationseinstellungen für wichtige Funktionen.

      Weitere Ressourcen zum Härten von Apache finden Sie hier:

      Weitere Tools zum Schutz von Apache HTTP:



      Source link