%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 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 isolierte 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 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 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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
