Network Intro

Eine Reise durch die Schichten des Internets

Unter slides.netintro.alinkbetweennets.de gibt es diese Slides.

Ursprünglich von Gina Muuss

Abgeändert und geupdated von ALinkBetweenNets und Felix Roth

Layer Idee

Physical & Data Link Layer

  • Physical: Verschickt einzelne Bits zwischen einzelnen Computern.
  • Data Link: Verschickt Daten zwischen Nodes im gleichen lokalen Netzwerk.

Beispiele:

  • LAN (Ethernet / 802.3)
  • W-LAN (802.11)

Für uns netterweise größtenteils egal.

Layer Idee: Aktueller Stand

Wir können jetzt also zu einzelnen Devices in direkter Netzwerkumgebung einzelne Datenpakete schicken.

Layer Idee

Network Layer

Diese Layer bietet Forwarding inklusive Routing durch Router in der Mitte.

IPv4

  • Bietet Adressierung und Routing im Internet.
  • Jede Netzwerkkarte* erhält eine 32-bit Zahl als Adresse
  • Subnetze werden viel verwendet
  • Wie Routing im Detail funktioniert ist für uns netterweise meist irrelevant
Private Netzbereiche (können lokal verwendet werden)

							10.0.0.0/8
							172.16.0.0/12
							192.168.0.0/16
						

IPv6

  • Problem: IPv4 Adressraum ist voll
  • 128 bit Adressen, jedes Device bekommt eine eindeutige
  • Leider noch nicht so viel verbreitet
  • Beispieladresse
    2001:0db8::ff00:0042:8329

Layer Idee: Aktueller Stand

Wir haben jetzt Routing und Adressierung, können also an beliebige Geräte, zu denen wir eine Route haben einzelne Pakete schicken.
Um diese Pakete zu schicken werden diese Geräte mit Ihrer IP-Adresse angesprochen

Layer Idee

Interlude: Tools

Virtual Private Network

Stellt eine sichere Verbindung über einen unsicheren Kanal her.

Typische Anwendungsszenarien:

  • Erweiterung eines privaten Netzwerks
  • Abgesichertes Senden von Daten über öffentliche Netzwerke

Wir setzen also einen Tunnel, der typischerweise wieder ein Layer implementiert, auf einen bestehenden Netzwerkstack auf.

Wireguard

Eine moderne VPN-Implementierung, die auf den meisten Plattformen läuft.
  • unter Windows und MacOS: GUI
  • unter Linux:
						
							sudo cp ~/Downloads/peern.conf /etc/wireguard
							wg-quick up peern.conf
						
					

Wireshark

Tool zum Aufzeichnen / Ansehen von Netzwerkverkehr.

Zum Aufzeichnen ggf. mit sudo starten.

Ein Beispiel

Pcap files

Man kann den Output speichern. Das Format heißt Pcap.

TCPDump

Commandline Tool zum Erstellen von Pcap files.

Challenge 0: Baby Hai?

Wireguard configs gibts unter: vpnconfig.netintro.alinkbetweennets.de/peerx Wobei x deine Zufallszahl ist

Bitte nur die Config für deine Zahl verwenden, sonst ist das System verwirrt

Verbindet euch mit dem VPN und versucht (z.B. per Browser) auf chal0.internal.netintro.alinkbetweennets.de Port 80 zuzugreifen, beobachtet dabei den Traffic mit Wireshark.

Wir sehen uns in 20 min

Transport Layer

Bietet Ende-zu-Ende Verbindungen und (teilweise) Redundanz.
Typischerweise werden hier Ports verwendet um pro Adresse mehrere Verbindungen zu erlauben

TCP

  • Verbindungsorientiert
  • Duplex
  • Zuverlässig, Sortiert, Error-corrected
  • Oft mit TLS als Verschlüsselungsebene kombiniert

UDP

  • Verbindungslos
  • Simplex

Netcat/Socat

  • Tools um Verbindungen aufzumachen / auf Ports zu lauschen
						
			nc -l -p 1337           # auf port 1337 nach TCP Verbindungen hören
			nc -l -u -p 1337        # auf port 1337 nach UCP Paketen hören
			nc example.org 1337     # auf port 1337 über TCP mit example.org verbinden
			nc -u example.org 1337 	# auf port 1337 über UDP mit example.org verbinden
						
					
  • Socat ist eine moderne Alternative
							
			socat - tcp-l:1337           # auf port 1337 nach TCP Verbindungen hören
			socat - udp-l:1337           # auf port 1337 nach UDP Paketen hören
			socat - tcp:example.org:1337 # auf port 1337 über TCP mit example.org verbinden
			socat - udp:example.org:1337 # auf port 1337 über UDP mit example.org verbinden

							
						

SS/Netstat

Beides Tools um Ports, auf denen gelauscht wird anzuzeigen. SS ist das neuere, aber manchmal hat man eben nur netstat.

Pwntools

					
						from pwn import *

						# Wir wollen den ganzen output
						context.log_level = 'debug'

						# Verbindung über TCP & IPv4 zu challenge.ctf.example.org auf Port 1337 herstellen
						io = remote('challenge.ctf.example.org', 1337, typ='tcp', fam='ipv4')
						# Alternativ kann eine lokale Binary gestartet werden (nützlich zum Debuggen)
						# io = process('locale_binary')

						# Wir senden Daten über die geöffnete Verbindung
						io.send('GET /\r\n\r\n')
						# Wir empfangen bis eine neue Zeile kommt
						io.recvline()

						# Wir gehen in den interaktiven Modus über (macht nur auf dem Terminal Sinn)
						io.interactive()
					
				
Mehr Details gibt es hier.

Challenge 1: Kleiner Hai?

Verbindet euch per TCP mit chal1.internal.netintro.alinkbetweennets.de auf Port 1337 und tut, was der Computer euch sagt.

Wir sehen uns in 20 min

Layer Idee: Aktueller Stand

Wir haben jetzt auch Transport Möglichkeiten, können also Datagrame verschicken und/oder Verbindungen aufbauen.

TCP-Streams ermöglichen uns, Text an einen anderen Computer zu verschicken, ohne uns über den Weg dorthin Gedanken zu machen

Layer Idee

nmap

Tool für Portscans: probiert Ports durch und sagt euch, ob diese offen sind. Scan-Methode, Ports und Target-IP Adressen können spezifiziert werden

Mehr Infos hier

In der echten Welt nicht einsetzen, außer ihr wisst, was ihr tut!

Application Layers

  • Hier wohnen die Anwendungen
  • Technisch gesehen 3 Layer, aber naja.

HTTP(S)

  • Hypertext Transfer Protocol
  • HTTP/1.1 und HTTP/2 über TCP
  • HTTP/3 über QUIC (ein Protokoll über UDP)
  • Für so Webseiten, Standard Port 80
  • HTTPS nutzt TLS Verschlüsselung, Standard Port 443

Interlude HTML/JS/CSS

  • HTML: Skelett für Webseiten
  • Javascript: Code für Webseiten
  • CSS: Macht Dinge schick
  • Liegen in einzelnen Dateien vor und werden (typischerweise) über HTTP geladen.

Example HTTP/1.1 Request

						
GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Host: localhost:8888
User-Agent: HTTPie/3.2.1

Example HTTP/1.1 Response

						
							
						
					

Methods

  • Gibt es diverse, die wichtigesten zwei sind
  • GET, ey Server, gib mal die Resource rüber
  • POST, ey Server, mach mal was mit den Infos, die ich dir schicke

Header

  • Zusatzinfos zur Request Zeile
  • Gibt es auch analog für Response
						
GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Host: localhost:8888
User-Agent: HTTPie/3.2.1

Cookies

  • Kleine Datenblöcke, die der Server dem User gibt
  • Der User schickt diese Datenblöcke bei weiteren Requests als Header mit

SSH

  • Application Layer Protokoll um remote auf Rechner zuzugreifen
  • Gleichnamiges commandline Tool (auch für Windows) ist sehr praktisch
							
								ssh felix@server.example.org
							
						

SSH Tunneling

Wir wollen, dass unsere TCP Pakete an einem anderen Ort auftauchen.

	# make it look like packets are coming from the ssh server,
	# for all packets arriving at some port on your machine
	ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER

	# make it look to the outside, that they are talking to the server,
	# while in fact, packets are forwarded to you
	ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER
					

Challenge 2: Großer Hai?

Verbindet euch über HTTP mit chal2.internal.netintro.alinkbetweennets.de auf Port 80 und tut, was der Computer euch sagt.

Wir sehen uns in 20 min

Zusammenfassung

OpenVPN

Der alte de-facto Standard für VPNs, funktioniert auf den meisten Plattformen OK und es gibt eigentlich immer eine GUI.

DNS

Domain Name System

Übersetzt Domain Namen in IP Adressen.