152 lines
9.7 KiB
TeX
152 lines
9.7 KiB
TeX
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%% Descr: Vorlage für Berichte der DHBW-Karlsruhe, Ein Kapitel
|
|
%% Author: Prof. Dr. Jürgen Vollmer, vollmer@dhbw-karlsruhe.de
|
|
%% $Id: kapitel1.tex,v 1.24 2020/03/13 16:02:34 vollmer Exp $
|
|
%% -*- coding: utf-8 -*-
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\chapter{Grundlagen}
|
|
|
|
\section{Einführung in die Problematik}
|
|
|
|
Um im Falle eines \ac{DDoS} Angriffs schnell reagieren zu können, muss es eine bequeme und einfache Möglichkeit geben, Routen zu manipulieren.
|
|
Hierfür wurde das Projekt Remote Triggered Blackholing gestartet.
|
|
Im Falle eines \ac{DDoS}-Angriffs könnten somit IP Präfixe des Angreifers gezielt in ein Blackhole geroutet werden.
|
|
Eine Belastung der Zielsysteme könnte somit verhindert werden, da die boshaften Pakete des Angreifers somit nicht beim Zielsystem ankommen würden, sondern in das schwarze Loch (Blackhole) weitergeleitet werden.
|
|
Um die Routen in Routern manipulieren zu können, müssen diese über Injektoren in die Router injiziert werden.
|
|
Im Verlaufe dieser Projektarbeit wird die Entwicklung der Injektoren Komponente und der Aufbau einer Staging(Testing) Umgebung genauer dargelegt.
|
|
Der Aufbau und die Entwicklung der \ac{API} Komponente wurde bereits zu einem großteil in der T1000 erläutert, jedoch wurde im Rahmen der T2000 diese um einen Delete-Endpunkt erweitert.~\cite{Schoch.2022}
|
|
|
|
\newpage
|
|
|
|
|
|
\section{Technologie Selektion}
|
|
|
|
\subsection{Django Rest Framework}
|
|
|
|
\glqq Django ist ein Web-Framework, dessen Ziel es ist, die Entwicklung von Web Applikationen schnell, einfach und übersichtlich zu machen.
|
|
Das Django \ac{REST} Framework, hier nachfolgend als \ac{DRF} bezeichnet, ist ein \ac{REST} Framework welches auf Django basiert.
|
|
Mit \ac{DRF} lassen sich \ac{REST}-ful \ac{API}s schnell und einfach gestalten.
|
|
Hierfür bietet Django eine Reihe an vorgefertigten Hilfestellung an, welche im Verlaufe dieser Projektarbeit näher erläutert werden.
|
|
Datenbankmodelle werden hier einfach programmatisch deklariert und anschließend von Django automatisch verwaltet.
|
|
Über Objekte können somit einzelne Werte aus der Datenbank entnommen werden, ohne sich mühsam mit \ac{SQL} Queries auseinandersetzen zu müssen.
|
|
Sowohl Django als auch \ac{DRF} basieren auf der Programmiersprache Python.\grqq~\cite[Vgl.][S. 8]{Schoch.2022}
|
|
|
|
\subsection{Hashicorp Consul}
|
|
|
|
\glqq Consul, entwickelt von Hashicorp, ist eine Netzwerk Service Lösung, welche eine sichere Kommunikation zwischen Services und Applikation erlaubt.
|
|
Consul kann sowohl redundant mit mehreren Nodes, als auch standalone genutzt werden.
|
|
Für diese Projektarbeit, wird eine standalone Lösung eingesetzt und es wird lediglich die Key-Value Store Funktion genutzt.
|
|
Mit dieser Funktion können Key-Value [\ldots] Paare über das Netzwerk in Consul gespeichert werden.\grqq~\cite{Schoch.2022}
|
|
|
|
\subsection{Docker}
|
|
|
|
Docker ist Platform zur Containerisierung von Anwendungen.
|
|
Hierdurch wird die Möglichkeit geschaffen eine isoliertes und leichtgewichtige Umgebung zu schaffen, welche sonst lediglich mittels \acp{VM} möglich wäre.
|
|
Durch Docker wird auf produktiven System durch die zusätzliche Isolationsschicht der Containerisierung eine weitere Sicherheitsstufe hinzugefügt, welche potenziellen Angreifern den Zugriff auf das Hostsystem erschwert.
|
|
|
|
\subsection{Bird}
|
|
|
|
Der Bird Internet Routing Daemon (Bird) ist eine Open-Source-Routing-Software, die als Router fungiert.
|
|
Bird implementiert unter anderem \ac{BGP}, um Routing-Informationen zwischen Routern auszutauschen und optimale Routenentscheidungen zu treffen.
|
|
Bird arbeitet neben anderen \ac{BGP}-Routern, um \ac{BGP}-Sessions aufzubauen, Routing-Updates auszutauschen und Routing-Informationen zu speichern.
|
|
Bird kann \ac{BGP}-Routen exportieren und an andere Router weitergeben, indem es \ac{BGP}-`Update`-Messages verwendet und Exportregeln in seiner Konfigurationsdatei folgt.
|
|
Diese Regeln definieren, welche Routen exportiert werden sollen und können durch Filter und Richtlinien gesteuert werden.
|
|
Durch den Export von \ac{BGP}-Routen ermöglicht Bird eine effiziente und zuverlässige Kommunikation und Weiterleitung in großen Netzwerken.
|
|
|
|
\newpage
|
|
|
|
\section{Stand der Technik}
|
|
|
|
Das \ac{BGP} ist ein Protokoll des Internet-Routings, das die \emph{besten} Wege für den Datenverkehr zwischen \acp{AS} bestimmt.
|
|
Im ursprünglichen Sinne war mit einem \ac{AS} eine Organisation mit einem Standort gemeint, welche intern über ein internes routing Protokoll verfügte.
|
|
Mit der Zeit hat sich die Bedeutung eines \ac{AS} abgewandelt und eine \ac{ASN} kann von einer Organisation Standortübergreifend verwendet werden bzw. eine Organisation kann über mehrere \acp{ASN} verfügen.
|
|
Es verwendet Peering-Verbindungen zwischen Routern, um Informationen über erreichbare Netzwerke auszutauschen und die optimalen Pfade für den Datenaustausch zu ermitteln.
|
|
Anders als bei herkömmlichen Routing Protokollen wie dem \ac{RIP} oder \ac{OSPF}, wird hier eine direkte \ac{TCP} Verbindung zwischen Routern(Neighbours/Nachbarn) hergestellt.
|
|
Eine weitere Unterscheidung besteht darin, dass es sich bei \ac{BGP} um 'Policy'-basiertes Routing, im Vergleich zu `Metrik` basierten Routing handelt.
|
|
Konkret bedeutet dies, dass ein \ac{AS} selbst bestimmen kann, wie Datenverkehr geroutet werden soll, sollte das \ac{AS} über mindestens zwei Uplinks verfügen.
|
|
|
|
|
|
\vspace{1cm}
|
|
Wenn zwei \ac{BGP} Nachbarn eine \ac{TCP} Verbindung aufgebaut haben, beginnen diese \ac{BGP} Informationen in Form von Nachrichten auszutauschen.
|
|
Jede Nachricht besteht aus einem Header, und dem tatsächlichen Inhalt.~\cite[Vgl.][S. 19 f.]{beijnum.2002a}
|
|
Um eine \ac{BGP} Verbindung herzustellen, müssen sich Router über eine `Open`-Message verbinden.
|
|
Diese wird direkt nach dem Aufbau der \ac{TCP} Verbindung ausgetauscht.~\cite[Vgl.][S. 20 f.]{beijnum.2002a}
|
|
|
|
\begin{table}[H]
|
|
\begin{center}
|
|
\begin{tabular}{ |c|c|c|c|c|c| }
|
|
\hline
|
|
Version & My AS & Hold time & Identifier & Parlen & Optional parameters \\
|
|
1 byte & 2 bytes & 2 bytes & 4 bytes & 1 byte & 0-255 bytes \\
|
|
\hline
|
|
\end{tabular}
|
|
\end{center}
|
|
\caption{\label{open-message}Aufbau der 'Open'-Message}
|
|
\centering{Quelle: \cite[RFC4271][]{rfc4271} in Anlehnung an~\cite[S. 20]{beijnum.2002a}}
|
|
\end{table}
|
|
|
|
Sollte die Open-Message erfolgreich vom Gegenstück angenommen worden sein, sendet dieser eine 'Keepalive'-Message zurück.
|
|
Anschließend wird die BGP-Routentabelle über 'Update'-Messages ausgetauscht.~\cite[Vgl.][S. 20]{beijnum.2002a}
|
|
|
|
|
|
\begin{table}[H]
|
|
\begin{center}
|
|
\begin{tabular}{ |c|c|c|c|c| }
|
|
\hline
|
|
UR length & Withdrawn routes & PA length & Path attributes & NLRI \\
|
|
2 bytes & Variable & 2 bytes & Variable & Variable \\
|
|
\hline
|
|
\end{tabular}
|
|
\end{center}
|
|
\caption{\label{update-message}Aufbau der 'Update'-Message}
|
|
\centering{Quelle:~\cite[RFC4271][]{rfc4271} in Anlehnung an~\cite[S. 20]{beijnum.2002a}}
|
|
\end{table}
|
|
|
|
|
|
Durch die `Update`-Message werden die eigentlichen Informationen übertragen.
|
|
Hierdurch können neue Routen hinzugefügt, oder alte Routen zurückgezogen werden.
|
|
Ein nicht optionales Attribute ist der `AS\_PATH`, welcher beschreibt, über welche \ac{AS} bestimmte Präfixe zu erreichen sind.
|
|
|
|
\newpage
|
|
|
|
%Routepropagation: %TODO Explain how routes are propageted in BGP
|
|
%
|
|
%
|
|
%\begin{figure}[H]
|
|
% \centering
|
|
% \fbox{\includegraphics[width=\textwidth]{images/BGP_Example}}
|
|
% \caption{\label{bgp-network-structure}Struktur eines beispielhaften BGP-Netzwerks}
|
|
% \centering{Quelle: Eigene Abbildung}
|
|
%\end{figure}
|
|
|
|
|
|
\ac{BGP}-Communities sind ein Mechanismus, mit welchem Netzwerkbetreiber spezifische Gruppen oder Kategorien von Präfixen markieren können.
|
|
Diese Markierungen, als \glqq Communities\grqq~bezeichnet, können verwendet werden, um Routen zu identifizieren und zu beeinflussen, wie sie von anderen \acp{AS} interpretiert werden.
|
|
Durch die Verwendung von Communities können Netzwerkbetreiber das Routing auf feinere Weise steuern und anpassen, ohne die Kernstruktur des \ac{BGP}-Netzwerks zu verändern.
|
|
Die Manipulation von Routen mittels \ac{BGP} Communities erfolgt, indem einem bestimmten Präfix eine oder mehrere \ac{BGP}-Communities zugewiesen werden.
|
|
Andere \ac{AS} können dann diese Community-Markierungen verwenden, um spezifische Aktionen auszuführen, wie z.B.:
|
|
|
|
\begin{itemize}
|
|
\item Pfadwahl beeinflussen: Durch das Zuweisen von Communities zu bestimmten Präfixen können Netzwerkbetreiber festlegen, wie andere \ac{AS} ihre Routen interpretieren sollen.
|
|
Dies kann dazu verwendet werden, den bevorzugten Weg für den Datenverkehr zu beeinflussen.
|
|
|
|
\item Traffic-Engineering: Netzwerkbetreiber können Communities verwenden, um den Datenverkehrsfluss zu steuern.
|
|
Durch Markieren von Präfixen können sie bestimmte \ac{AS} dazu anleiten, den Datenverkehr auf bestimmten Wegen zu leiten, um Netzwerkressourcen effizienter zu nutzen.
|
|
|
|
\item Blackhole-Routing: \ac{BGP} Communities können dazu genutzt werden, bestimmte Präfixe zu markieren und den Datenverkehr über Blackholes zu lenken, um Angriffe oder Überlastungen zu bewältigen.
|
|
Spezielle für Blackholing wurde eine eigene Community definiert: \verb|65535:666|~\cite[Vgl.][]{rfc7999}
|
|
|
|
\item Routenfilterung: \ac{AS} können Community-Markierungen verwenden, um präzise Routenfilterung durchzuführen.
|
|
Damit können sie bestimmte Routen von bestimmten Quellen oder für bestimmte Zwecke filtern oder akzeptieren.
|
|
|
|
\end{itemize}
|
|
Die Verwendung von \ac{BGP} Communities ermöglicht eine flexiblere und zielgerichtete Steuerung des Internet-Routings.
|
|
Netzwerkbetreiber können so gezielt auf unterschiedliche Anforderungen reagieren und gleichzeitig die Integrität und Stabilität des \ac{BGP}-Netzwerks aufrechterhalten.
|
|
|
|
\newpage
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\endinput
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|