Log In
Or create an account ->
Imperial Library
Home
About
News
Upload
Forum
Help
Login/SignUp
Index
Titel
Impressum
Inhaltsübersicht
Vorwort
Danksagungen
Einführung
Inhaltsverzeichnis
1 Netzwerk-Grundlagen
1.1 Netzwerkarchitekturen und -protokolle
1.2 Die Internet-Protokoll-Suite
1.3 Datenkapselung
1.3.1 Header, Footer und Adressen
1.3.2 Datenübertragung
1.4 Netzwerk-Routing
1.5 Mein Modell für die Analyse von Netzwerkprotokollen
1.6 Am Ende dieses Kapitels
2 Capturing von Anwendungsverkehr
2.1 Passives Capturing von Netzwerkverkehr
2.2 Eine kurze Einführung in Wireshark
2.3 Alternative passive Capturing-Techniken
2.3.1 Tracing von Systemaufrufen
2.3.2 Das strace-Utility unter Linux
2.3.3 Netzwerkverbindungen mit DTrace verfolgen
2.3.4 Process Monitor unter Windows
2.4 Vor- und Nachteile passiven Capturings
2.5 Aktives Capturing von Netzwerkverkehr
2.6 Netzwerk-Proxys
2.6.1 Port-Forwarding-Proxy
2.6.2 SOCKS-Proxy
2.6.3 HTTP-Proxys
2.6.4 Forwarding eines HTTP-Proxys
2.6.5 HTTP-Reverse-Proxy
2.7 Am Ende dieses Kapitels
3 Strukturen von Netzwerk-Protokollen
3.1 Binäre Protokollstrukturen
3.1.1 Numerische Daten
3.1.2 Boolesche Werte
3.1.3 Bit-Flags
3.1.4 Binäre Bytereihenfolge (Endianness)
3.1.5 Text und menschenlesbare Daten
3.1.6 Binärdaten variabler Länge
3.2 Datum und Uhrzeit
3.2.1 POSIX/Unix-Zeit
3.2.2 Windows FILETIME
3.3 TLV-Muster
3.4 Multiplexing und Fragmentierung
3.5 Netzwerk-Adressinformationen
3.6 Strukturierte Binärformate
3.7 Strukturen textbasierter Protokolle
3.7.1 Numerische Daten
3.7.2 Boolesche Werte in Textform
3.7.3 Datum und Uhrzeit
3.7.4 Daten variabler Länge
3.7.5 Formate für strukturierten Text
3.8 Codierung binärer Daten
3.8.1 Hex-Codierung
3.8.2 Base64
3.9 Am Ende dieses Kapitels
4 Fortgeschrittenes Capturing von Anwendungsverkehr
4.1 Rerouting von Verkehr
4.1.1 Traceroute nutzen
4.1.2 Routing-Tabellen
4.2 Konfiguration eines Routers
4.2.1 Routing unter Windows aktivieren
4.2.2 Routing unter *nix aktivieren
4.3 Network Address Translation
4.3.1 SNAT aktivieren
4.3.2 SNAT unter Linux konfigurieren
4.3.3 DNAT aktivieren
4.4 Verkehr an ein Gateway weiterleiten
4.4.1 DHCP-Spoofing
4.4.2 ARP-Poisoning
4.5 Am Ende dieses Kapitels
5 Analyse auf der Datenleitung
5.1 Die Verkehr produzierende Anwendung: SuperFunkyChat
5.1.1 Den Server starten
5.1.2 Clients starten
5.1.3 Kommunikation zwischen Clients
5.2 Ein Crashkurs zur Analyse mit Wireshark
5.2.1 Netzwerkverkehr generieren und Pakete erfassen
5.2.2 Grundlegende Analyse
5.2.3 Inhalte einer TCP-Session lesen
5.3 Die Paketstruktur mit Hex Dump identifizieren
5.3.1 Einzelne Pakete betrachten
5.3.2 Die Protokollstruktur ermitteln
5.3.3 Unsere Annahmen überprüfen
5.3.4 Das Protokoll mit Python sezieren
5.4 Einen Wireshark-Dissector in Lua entwickeln
5.4.1 Den Dissector entwickeln
5.4.2 Sezieren mit Lua
5.4.3 Parsen eines Nachrichtenpakets
5.5 Einen Proxy zur aktiven Verkehrsanalyse nutzen
5.5.1 Den Proxy einrichten
5.5.2 Protokollanalyse mittels Proxy
5.5.3 Grundlegendes Parsen von Protokollen hinzufügen
5.5.4 Das Protokollverhalten ändern
5.6 Am Ende dieses Kapitels
6 Reverse Engineering einer Anwendung
6.1 Compiler, Interpreter und Assembler
6.1.1 Interpretierte Sprachen
6.1.2 Kompilierte Sprachen
6.1.3 Statisches und dynamisches Linking
6.2 Die x86-Architektur
6.2.1 Instruction Set Architecture
6.2.2 CPU-Register
6.2.3 Ablaufsteuerung
6.3 Betriebssystem-Grundlagen
6.3.1 Dateiformate für Executables
6.3.2 Abschnitte
6.3.3 Prozesse und Threads
6.3.4 Netzwerkschnittstelle des Betriebssystems
6.3.5 Application Binary Interface
6.4 Statisches Reverse Engineering
6.4.1 Kurzanleitung für die Nutzung der IDA Pro Free Edition
6.4.2 Stackvariablen und Argumente analysieren
6.4.3 Schlüsselfunktionalitäten identifizieren
6.5 Dynamisches Reverse Engineering
6.5.1 Breakpunkte setzen
6.5.2 Debugger-Fenster
6.5.3 Wo setzt man Breakpunkte?
6.6 Reverse Engineering von Managed Code
6.6.1 .NET-Anwendungen
6.6.2 ILSpy nutzen
6.6.3 Java-Anwendungen
6.6.4 Mit Verschleierungstaktiken umgehen
6.7 Reverse-Engineering-Ressourcen
6.8 Am Ende dieses Kapitels
7 Sicherheit von Netzwerkprotokollen
7.1 Verschlüsselungsalgorithmen
7.1.1 Substitutionschiffre
7.1.2 XOR-Verschlüsselung
7.2 Zufallszahlengeneratoren
7.3 Symmetrische Verschlüsselung
7.3.1 Blockchiffre
7.3.2 Blockchiffre-Modi
7.3.3 Blockchiffre-Padding
7.3.4 Padding Oracle Attack
7.3.5 Stromchiffre
7.4 Asymmetrische Verschlüsselung
7.4.1 RSA-Algorithmus
7.4.2 RSA-Padding
7.4.3 Schlüsselaustausch nach Diffie-Hellman
7.5 Signaturalgorithmen
7.5.1 Kryptografische Hash-Algorithmen
7.5.2 Asymmetrische Signaturalgorithmen
7.5.3 Message Authentication Codes
7.6 Public-Key-Infrastruktur
7.6.1 X.509-Zertifikate
7.6.2 Verifikation einer Zertifikatskette
7.7 Fallbeispiel: Transport Layer Security
7.7.1 Der TLS-Handshake
7.7.2 Initiale Aushandlungen
7.7.3 Endpunkt-Authentifizierung
7.7.4 Die Verschlüsselung aufbauen
7.7.5 Sicherheitsanforderungen erfüllen
7.8 Am Ende dieses Kapitels
8 Implementierung des Netzwerkprotokolls
8.1 Replay von erfasstem Netzwerkverkehr
8.1.1 Verkehr mit Netcat erfassen
8.1.2 Replay von UDP-Verkehr mittels Python
8.1.3 Unseren Analyse-Proxy wiederverwenden
8.2 Ausführbaren Code wiederverwenden
8.2.1 Code in .NET-Anwendungen wiederverwenden
8.2.2 Code in Java-Anwendungen wiederverwenden
8.2.3 Unmanaged Executables
8.3 Verschlüsselung und der Umgang mit TLS
8.3.1 Die verwendete Verschlüsselung ermitteln
8.3.2 TLS-Verkehr entschlüsseln
8.4 Am Ende dieses Kapitels
9 Die Hauptursachen für Sicherheitslücken
9.1 Vulnerabilitätsklassen
9.1.1 Remote Code Execution
9.1.2 Denial-of-Service
9.1.3 Offenlegung von Informationen
9.1.4 Authentifizierung umgehen
9.1.5 Autorisierung umgehen
9.2 Verfälschung des Speichers
9.2.1 Speichersichere und speicherunsichere Programmiersprachen
9.2.2 Pufferüberlauf
9.2.3 Out-of-Bounds-Indexierung
9.2.4 Datenexpansion
9.2.5 Fehler bei der dynamischen Speicherallozierung
9.3 Voreingestellte oder festcodierte Anmeldedaten
9.4 Offenlegung von Benutzernamen
9.5 Fehlerhafter Zugriff auf Ressourcen
9.5.1 Kanonisierung
9.5.2 Fehlermeldungen mit zu viel Information
9.6 Speicherüberlastung
9.7 Massenspeicherüberlastung
9.8 CPU-Überlastung
9.8.1 Algorithmische Komplexität
9.8.2 Konfigurierbare Kryptografie
9.9 Formatstrings
9.10 Befehlsinjektion
9.11 SQL-Injektion
9.12 Zeichenersetzung bei Textcodierung
9.13 Am Ende dieses Kapitels
10 Sicherheitslücken aufspüren und ausnutzen
10.1 Fuzzing
10.1.1 Der einfachste Fuzzing-Test
10.1.2 Mutations-Fuzzer
10.1.3 Testdatensätze generieren
10.2 Sicherheitslücken untersuchen
10.2.1 Debugging von Anwendungen
10.2.2 Die Chancen erhöhen, um die Hauptursache für einen Absturz zu ermitteln
10.3 Gängige Sicherheitslücken ausnutzen
10.3.1 Exploit von Speicherlücken
10.3.2 Willkürliche Schreiboperationen
10.4 Shell-Code entwickeln
10.4.1 Erste Schritte
10.4.2 Einfache Debugging-Technik
10.4.3 Systemaufrufe ausführen
10.4.4 Andere Programme ausführen
10.4.5 Shell-Code mit Metasploit generieren
10.5 Maßnahmen gegen Speicherlücken
10.5.1 Data Execution Prevention
10.5.2 Return-Oriented Programming
10.5.3 Address Space Layout Randomization (ASLR)
10.5.4 Stacküberläufe durch Canaries erkennen
10.6 Am Ende dieses Kapitels
Anhang
A Toolkit für die Netzwerkprotokoll-Analyse
A.1 Tools zum passiven Capturing und zur Analyse von Netzwerkprotokollen
A.1.1 Microsoft Message Analyzer
A.1.2 TCPDump und LibPCAP
A.1.3 Wireshark
A.2 Aktives Netzwerk-Capturing und Analyse
A.2.1 Canape
A.2.2 Canape Core
A.2.3 Mallory
A.3 Netzwerkkonnektivität und Protokolltests
A.3.1 Hping
A.3.2 Netcat
A.3.3 Nmap
A.4 Webanwendungen testen
A.4.1 Burp Suite
A.4.2 Zed Attack Proxy (ZAP)
A.4.3 Mitmproxy
A.5 Frameworks zum Fuzzing, zur Paketgenerierung und zur Entwicklung von Exploits
A.5.1 American Fuzzy Lop (AFL)
A.5.2 Kali Linux
A.5.3 Metasploit-Framework
A.5.4 Scapy
A.5.5 Sulley
A.6 Netzwerk-Spoofing und -Umleitung
A.6.1 DNSMasq
A.6.2 Ettercap
A.7 Reverse Engineering von Executables
A.7.1 Java Decompiler (JD)
A.7.2 IDA Pro
A.7.3 Hopper
A.7.4 ILSpy
A.7.5 .NET Reflector
Fußnoten
Index
← Prev
Back
Next →
← Prev
Back
Next →