diff --git a/07-Kittelberger_Carl_ARP.md b/07-Kittelberger_Carl_ARP.md new file mode 100644 index 0000000..0fbd132 --- /dev/null +++ b/07-Kittelberger_Carl_ARP.md @@ -0,0 +1,226 @@ +--- +author: Carl Kittelberger +date: 2018-03-22 +title: "ITS: Ethernet und ARP" +institute: "Ferdinand-von-Steinbeis Berufsschule" +lang: de-DE +babel-lang: ngerman +babel-otherlangs: +- english +polyglossia-lang: + name: german + options: + - spelling=new +classoption: oneside +colorlinks: true +documentclass: report +fontsize: 12pt +logo: img/steinbeis.png +mainfont: Arial +papersize: a4 +sansfont: Arial +tables: true +template: template.tex + +toc: true + +header-includes: + # For \pageref{LastPage} + - \usepackage{lastpage} + + # For \textcolor + - \usepackage{xcolor} + + # Long tables (used by pandoc latex template itself) + #- \usepackage{longtable} + + # Localization to German for all package injections + #- \usepackage[ngerman]{babel} + + # Fancy header! + - \usepackage{fancyhdr} + - \usepackage{graphicx} + - \pagestyle{fancy} + - \fancyhf{} + - \fancyhead[L]{\large{\textit{\textbf{ITS} \\ Ethernet und ARP}}} + - \fancyhead[R]{\raisebox{-0.1\height}{\includegraphics[height=32pt]{img/steinbeis.png}}} + - \fancyfoot[L]{\textcolor{gray}{Carl Kittelberger}} + - \fancyfoot[R]{\textcolor{gray}{\bfseries{Seite \thepage{}/\pageref*{LastPage}}}} + - \renewcommand{\headrulewidth}{0.4pt} + - \renewcommand{\footrulewidth}{0.4pt} + - \setlength\headheight{36pt} + - \fancypagestyle{plain}{} + + # monospace + - \lstset{basicstyle=\footnotesize\ttfamily,breaklines=true} + - \lstset{framextopmargin=50pt} +--- + +\newpage + +# Aufzeichnen und Analysieren von Ethernet-Frames + +Statt der IP-Addresse, die in der Aufgabe vorgegeben wurde, wird während der +Analyse die IP-Addresse `212.83.173.97` verwendet. Auf der IP-Addresse läuft +der gleiche Webserver wie bei der zuvor genutzten URL http://test.icedream.tech, +außer dass der Webserver hier mit HTTP-Fehler 404 antwortet. + +Zuerst die Ansicht mit aktiviertem IPv4-Protokollmodul: + +![](img/07-arp/wireshark_a_http.png) + +Frame `44453` ist der Frame in dem unsere Anfrage abgeschickt wird, und Frame +`45270` enthält unsere Antwort, den `404 Not Found` HTTP-Status. + +\clearpage + +## Anfrage + +Nach Deaktivieren des IPv4-Moduls sieht der Anfrageframe wie folgt aus: + +![](img/07-arp/wireshark_b_eth.png) + +Der Inhalt ist wie folgt: + +![](img/07-arp/wireshark_c_data.png) + +### MAC-Adresse des eigenen Rechners + +Die MAC-Adresse lässt sich aus dem `Source` Feld des `Ethernet II` Frames auslesen. +In diesem Fall ist die eigene MAC-Adresse `00:0c:29:d6:b4:3d`. + +### MAC-Adresse des Zielrechners + +Die MAC-Adresse lässt sich aus dem `Destination` Feld des `Ethernet II` Frames auslesen. +In diesem Fall ist die MAC-Adresse des Zielservers `38:10:d5:64:53:ed`. +Tatsächlich ist dieser Frame nicht der einzige bei dem diese MAC-Addresse als +Ziel gesetzt ist. So gut wieder jeder weitere Frame der ins Internet geht enthält +diese MAC-Adresse als Ziel. Das Ziel ist tatsächlich der lokal installierte +AVM Fritz!Box Router, der die Pakete ins Internet leitet, auch erkennbar am +angezeigten Herstellernamen, den Wireshark daneben anzeigt (`AvmAudio_64:53:ed`). + +### Typ-Feld + +Der Hexwert ist auf den Wert `0x0800` gesetzt. + +### Offset in Daten + +Der Buchstabe `G` der `GET`-Anfrage kann in den Rohdaten des Frames am Byte-Offset +`0x0042` (dezimal `66`) gefunden werden. + +## Antwort + +![](img/07-arp/wireshark_d_answer.png) + +### MAC-Adresse des Quellrechners + +Im `Source`-Feld des Antwortframes ist nun die MAC `38:10:d5:64:53:ed` und damit +wie oben auch identifizierbar unser Router gesetzt. + +### MAC-Adresse des Zielrechners + +Als `Destination` MAC ist jetzt unsere eigene MAC, `00:0c:29:d6:b4:3d` gesetzt. + +### Typ-Feld + +Der Hexwert ist wieder auf den Wert `0x0800` gesetzt. + +### Offset in Daten + +In diesem Fall ist die Antwort leider keine `200 OK`-Antwort. Hier wird +stattdessen nun nach den Buchstaben `N` und `F` der `404 Not Found`-Nachricht +gesucht. + +Der Buchstabe `N` findet sich an Position `0x004f` (dezimal `79`). Der Buchstabe +`F` findet sich danach an Position `0x0053` (dezimal `83`). + +\clearpage + +# ARP-Datagramme + +## Cache + +Beim Ausführen des Befehls `arp -a` gibt der Rechner wie folgt seinen Cache aus: + +![](img/07-arp/cmd_arp_a.png) + +Sichtbar sind der Router (`_gateway`/`192.168.188.1`), der Host-PC der virtuellen +Maschine in dem die Analysen stattfinden (`Icedream-HomePC.fritz.box`/`192.168.188.21`) +und die virtuelle Maschine selbst (`vm-dev-archlinux.fritz.box`/`192.168.188.33`). + +## Protokollanalyse + +Vor der Analyse wird der ARP-Cache gelöscht. Gelöscht wird mit dem Befehl `ip -s -s neigh flush` mit `root`-Rechten: + +![](img/07-arp/cmd_arp_flush.png) + +Jetzt wird Firefox gestartet und http://bild.de aufgerufen und folgende ARP-Anfrage +und dazugehörige Antwort werden sichtbar: + +![](img/07-arp/arp_request.png) + +![](img/07-arp/arp_response.png) + +\clearpage + +### Request + +#### Adressen + +- Die Ziel-MAC ist `00:00:00:00:00:00` (Alias für *unbekannte MAC*) +- Die Quell-MAC ist `00:0c:29:d6:b4:3d`, die der analysierenden Maschine + +#### Typ + +Das Typenfeld für das Protokoll ist auf `0x0800` (*IPv4*) gesetzt. + +### RFC 826 + +#### Offset des `opcode`-Felds + +Das `opcode`-Feld beginnt nach 16 + 16 + 8 + 8 = **48 Bits** im ARP-Payload. + +#### IP-Adresse in ARP-Message + +Eine ARP-Message beinhaltet grundsätzlich Verweise auf MAC-Adressen und IP-Adressen +von Sender und Empfänger (oder sie werden auf null gesetzt wenn die Daten dafür +nicht verfügbar sind). Die des Senders ist in der Anfrage dabei definitiv enthalten. + +#### `opcode` für Anfragen + +Das `opcode`-Feld wird für Anfragen in Ethernetframes laut RFC auf den Wert +von `ares_op$REQUEST` bzw. `1` oder binär `01` gesetzt. + +#### Platzierung der "Frage" + +Im ARP-Paket wird die "Frage" durch das `opcode` Feld und den genullten Wert der +Ziel-MAC und -IP dargestellt. + +### Reply + +#### Offset des `opcode`-Felds + +In der Antwort beginnt das `opcode`-Feld `0x14 - 0x0e = 20 - 14 = 6` Bytes +und damit wieder nach **48 Bits** im ARP-Payload. + +#### `opcode` für Anfragen + +Das `opcode`-Feld wird für die Antwort auf `2` (*reply*) gesetzt. + +#### Platzierung der "Frage" + +Die Frage selbst ist nicht mehr wirklich im Paket enthalten bis auf die Tatsache, +dass als Empfänger dieser Antwort exakt der Sender der Anfrage eingetragen ist. + +#### MAC-Adressen + +- Ziel-MAC: `00:0c:29:d6:b4:3d` +- Quell-MAC: `38:10:d5:64:53:ed` + +\clearpage + +# Quellenangaben + +Alle Quellen zuletzt abgerufen am 21.03.2018. + +- RFC 826: https://tools.ietf.org/html/rfc826 diff --git a/img/07-arp/arp_request.png b/img/07-arp/arp_request.png new file mode 100644 index 0000000..2901c4e Binary files /dev/null and b/img/07-arp/arp_request.png differ diff --git a/img/07-arp/arp_response.png b/img/07-arp/arp_response.png new file mode 100644 index 0000000..3b7f118 Binary files /dev/null and b/img/07-arp/arp_response.png differ diff --git a/img/07-arp/cmd_arp_a.png b/img/07-arp/cmd_arp_a.png new file mode 100644 index 0000000..22b327d Binary files /dev/null and b/img/07-arp/cmd_arp_a.png differ diff --git a/img/07-arp/cmd_arp_flush.png b/img/07-arp/cmd_arp_flush.png new file mode 100644 index 0000000..3668d09 Binary files /dev/null and b/img/07-arp/cmd_arp_flush.png differ diff --git a/img/07-arp/wireshark_a_http.png b/img/07-arp/wireshark_a_http.png new file mode 100644 index 0000000..48b5d47 Binary files /dev/null and b/img/07-arp/wireshark_a_http.png differ diff --git a/img/07-arp/wireshark_b_eth.png b/img/07-arp/wireshark_b_eth.png new file mode 100644 index 0000000..8e07e16 Binary files /dev/null and b/img/07-arp/wireshark_b_eth.png differ diff --git a/img/07-arp/wireshark_c_data.png b/img/07-arp/wireshark_c_data.png new file mode 100644 index 0000000..0153a84 Binary files /dev/null and b/img/07-arp/wireshark_c_data.png differ diff --git a/img/07-arp/wireshark_d_answer.png b/img/07-arp/wireshark_d_answer.png new file mode 100644 index 0000000..4ffeddb Binary files /dev/null and b/img/07-arp/wireshark_d_answer.png differ