View
1
Download
0
Embed Size (px)
DHCP, Security undNetzwerkboot
Konstantin Agouros
SLAC 06/Berlin
bersicht
DHCP Geschichte Wie funktioniert DHCP? Implementierungen ISC-DHCP-Daemon Details Sicherheitsaspekte Netzwerkboot Sun/Jumpstart PXE Live-Demo
DHCP-Geschichte
Am Anfang war die statische Adresse RARP
RPC-Bootparam
Bootp DHCP
RFCs
RFC 951 Bootp RFC 1541 1. DHCP RFC RFC 1542 DHCP Klarstellungen RFC 2131 aktueller DHCP RFC RFC 2132 offizielle DHCP Optionen und Bootp
Vendoroptionen RFC 2485 DHCP und Open Group Authentisieung RFC 2489 Verfahren zur Verabschiedung neuer Optionen RFC 3670 Unbenutzte Optionen
Sinn und Zweck
Client sucht seine Netzwerkkonfiguration IP-Adresse Router DNS Konfiguration Bootfile LDAP-Server ...
Server stellt diese bereit Abhngig vom Teilnetz Abhngig vom Clienttyp Abhngig vom Host
Funktionsweise
Discover
Offer
Request
Ack
Funktionsweise 3
Verkrzter Verlauf (Renewal): REQUEST ACK
Verweigerung des Servers: DISCOVER/REQUEST NAK
Verweigerung des Clients OFFER DECLINE
Ordentliches Herunterfahren RELEASE
Relaying
Implementierungen
ISC-DHCP-Daemon Sun Solaris DHCP Daemon udhcpd Windows
ISC-DHCP-Daemon
Flexibelster Daemon Bestandteil der meisten Linux Distributionen Datenhaltung in ASCII Gruppierung von Clients aufgrund von
Netz in dem sie stehen Mitgesendeter VendorID Hardwaretyp Frei definierbare Gruppen aufgrund von Hardware Prefixen
HA-Modus DNS-Updates Authoritative
Security
Grundproblem: Wer bekommt eine Adresse und wer darfberhaupt an das Netzwerk
Kontrolle im DHCP-Daemon ber HW-Whitelist Problem: MAC-Adressen knnen geflscht werden Hoher Verwaltungsaufwand, da jede MAC-Adresse eingepflegt
werden muss
Monitoring mit arpwatch Fhrt Buch ber alle erscheinenden MAC-Adressen Fhrt Buch ber MAC-zu-IP Bindung Gibt Warnmeldungen aus oder schickt Emails
Security 2
DoS durch Adresspool Erschpfung berlast durch viele Request/Release Pakete
Man in the Middle Angriffe
Sichere Konfiguration im ISC-DHCP-Daemon
subnet 192.168.1.0 netmask 255.255.255.0 { authoritative; pool 192.168.1.10 192.168.1.20; deny unknown clients;}
host host1 { hardware ethernet 00:11:22:33:44:55; fixed-address 192.168.1.10;}
IEEE 802.1X
Zugang zum Netz ist Zertifikats Authentisiert 802.1X beschreibt ein Protokoll, wie auf Ethernet Ebene
der Client seinen Zugang zum (W)LAN mit einem lokalinstallierten Zertifikat berechtigt
Erfordert Untersttzung auf dem Client OS und demSwitch/WLAN-AP
Bentigt Radius-Server bei dem die Netzwerk-HWnachfragt
DNS-Updates vs. Sicherheit
DHCP-Clients knnen dynamisch auf dem DNS-Servereingetragen werden Dies geschieht entweder durch den Server oder Client macht dies
selbst Forward und Reverse RRs werden eingetragen
Der DNS-Server mu dies erlauben Durch IP-Adress-basierende ACL unsicher Durch Shared Secret mit dem Updater sicherer
Sicherste Variante: Updates durch den DHCP-Server derein Shared Secret mit dem DNS-Server teilt.
Bei Microsoft ADS Umgebungen macht alles der Client
DNS-Updates und Risiken
Wird ohne berprfung berschrieben sind Man in themiddle Attacken mglich
ISC-DHCP-Daemon prft nur, ob der Name existiert,nicht, ob der erzeugte Eintrag RFC konform ist Die falschen Sonderzeichen im Hostnamen fhren zu einer
illegalen Zone Beim Restart des Nameservers wird die Zone nicht geladen
ISC-DHCP-Konfiguration fr DNS-Update
key DHCP-KEY \{ algorithm hmac-md5; secret "pjGqiQBjQUXELdUyP4lPzA=="; \}
In dhcpd.conf und named.conf
In Forward und Reversezone:
allow-update { key DHCP-KEY; };
ISC-DHCP-Konfiguration fr DNS-Update 2
In dhcpd.conf: zone example.com.de { primary 127.0.0.1; key DHCP-KEY; };
zone 1.168.192.in-addr.arpa { primary 127.0.0.1; key DHCP-KEY;; }; ddns-update-style interim;
Weitere Steuerung mglich.
Netzwerkboot allgemein
Im einfachsten Fall nur das Bootimagefilename vmlinux;
Wenn ein anderer Bootserver notwendig ist, diesenangeben
next-server 192.168.1.2;
Netzwerkboot Jumpstart
Jedes OS mit DHCP und NFS-Server kann JumpstartServer sein Linux bentigt einen Kernel-Patch im NFS-Daemon, fr
Schreibzugriff auf Char-Device Files
Die Notwendigen Optionen knnen auch im ISC-DHCPdgesetzt werden
Aufsetzen des Dateibaumes am einfachsten unter Solarisund dann kopieren
Netzwerkboot Jumpstart 2
Benutzt den Vendor-Option-Space SUNW Sun Zur Erkennung schicken die Systeme eine Vendor-
Client-ID SUNW mit Jedes SUN-Modell hngt eine Hardwarekennung an
(Ultra1, Ultra30 etc) uname -i zeigt die richtige Schreibweise
Standardoptionen die notwendig sind: filename
Ggfs. next-server
Netzwerkboot Jumpstart Vendor Options
Definition des Vendorspaces und der Optionen darunter: option space SUNW; option SUNW.root-mount-options code 1 = text; option SUNW.root-server-ip-address code 2 = ip-address; option SUNW.root-server-hostname code 3 = text; option SUNW.root-path-name code 4 = text; option SUNW.boot-file-path code 7 = text; option SUNW.posix-timezone-string code 8 = text; option SUNW.boot-read-size code 9 = unsigned integer 16; option SUNW.install-server-ip-address code 10 = ip-
address; option SUNW.install-server-hostname code 11 = text; option SUNW.install-path code 12 = text; option SUNW.sysid-config-file-server code 13 = text; option SUNW.terminal-name code 15 = text;
Netzwerkboot Jumpstart Vendor Options
Filtern der Clients:Vendor-Client-ID beginnt mit SUNW:
class "sun-clients" { match if substring (option vendor-class-identifier,
0, 4) = "SUNW"; vendor-option-space SUNW;
...
Netzwerkboot Jumpstart Vendor Options
Setzen der Werte: option SUNW.sysid-config-file-server
"192.168.1.8:/export/jumpstart/sysidcfg"; option SUNW.install-server-ip-address 192.168.1.8; option SUNW.install-path "/export/jumpstart/install"; option SUNW.root-server-ip-address 192.168.1.8; option SUNW.root-path-name "/export/jumpstart/boot"; option SUNW.posix-timezone-string "MET"; option SUNW.terminal-name "xterm"; next-server 192.168.1.8; if option vendor-class-identifier = "SUNW.Ultra-1" { filename "inetboot.32"; } else { filename "inetboot.64"; }
Netzwerkboot PXE einfach
filename und next-server gengen Bootloader mglich PXEGRUB
Abhngig von Netzwerkkarte
PXELINUX Bootet berall Erweiterungen vorhanden, um beliebige Floppyimages zu booten memtest86 lsst sich direkt starten
Erkennung von PXE-Clients aufgrund der VendorID:PXEClient:Arch:00000:UNDI:002001
Netzwerkboot PXE einfach Beispielconfig
class "PXE-Clients" { match if substring (option vendor-class-identifier, 0, 9) ="PXEClient";
filename pxelinux.0; next-server 192.168.1.5;
}
PXE fr Fortgeschrittene
Preboot eXecution Environment Spezifikation von Intel Handshakes und Bootmenus mglich Proxy-DHCP-Server auf Port 4011 Erfordert hohe Flexibilitt des DHCP-Daemons
PXE Funktionsweise
Discover
Offer
Request
Ack
Boot Service Discover
Boot Service Reply
TFTP
PXE Konfiguration mit Bootmenu
Bentigt ein Array mit Eintrgen die mehrere Typen haben ISC-DHCP-Daemon kann dies im Prinzip aber nicht beim
Typ String Daher Konfiguration in HEX-Strings fr das Menu
PXE Bootmenu
option vendor-encapsulated-options 06: 01: 06: 08: 1c: 00:00: 01: 0a:0a:FF:FB: 00:03: 01: 0A:0A:FF:FB: 00:01: 01: 0A:0A:FF:FB: 00:02: 01: 0A:01:FF:FB: 09: 29: 00:00: 0a: 4c:6f:63:61:6c:20:62:6f:6f:74: 00:03: 07: 53:6F:6c:61:72:69:73: 00:01: 05: 4c:69:6e:75:78: 00:02: 07: 57:69:6e:64:6f:77:73: 0A: 44: 1E: 50:72:65:73:73:20:3c:46:38:3e:20:6f:72:20:3c:4d: 3e:20:66:6f:72:20:6d:65:6e:75:2e:20:20:50:72:65:
PXE Bootmenu Auswertung
Die Eingabe des Benutzers muss verarbeitet werden Darber erfolgt dann die Angabe des zu bootenden
Images Daten stehen im Vendor Option Space der vom Client
gesendeten Anfrage Auswertung in HEX
PXE Bootmenu Auswertung
if option vendor-encapsulated-options =47:04:00:01:00:00:FF {
filename "pxelinux.0"; ...} elsif option vendor-encapsulated-options =
47:04:00:03:00:00:FF { filename "/pxegrub-solaris"; ...}
PXE Bootmenu Probleme
PXE in Netzwerkkarten ist Buggy PXEGRUB von Solaris 10 kommt in der Regel nicht damit
zurecht.
Q&A
Live Demo