Dieses Projekt zielt darauf ab, ein benutzerfreundliches Tool zu erstellen, das eine pcap
Datei analysiert, um alle in den TCP-Paketen gefundenen Mehrdeutigkeiten zurückzugeben. Wir arbeiten derzeit auch an der Implementierung der UDP- und ARP-Analyse.
Gliederung:
Mitwirken: Jeder Kommentar/Idee/Beitrag ist willkommen.
make
./p2a -v ./pcap_files/some_pcap_file.pcap -s results.json
$ ./p2a -h
Usage: ./p2a [OPTIONS] FILE
-h,--help: display this help message
-v,--verbose: verbose option
-d,--debug: debug option
-x,--exclude OPTIONS: exclude some possible ambiguities from analysis
--exclude ret,mac,ttl
ret: exclude retransmission analysis
mac: exclude MAC addresses analysis
ttl: exclude TTL analysis
-s,--save FILENAME: saves results to file FILENAME
JSON format - FILENAME should contain the JSON extension
Examples:
./p2a -v ./pcap_files/some_pcap_file.pcapng
./p2a --exclude mac,ttl --verbose my-pcap-file.pcap -s results.json
Ich habe gerade die Option hinzugefügt, alle Ergebnisse in einer JSON-Datei zu speichern. Dazu kann man die Option --save file.json
verwenden. Es speichert alle Sitzungen in dieser Datei, unabhängig davon, ob darin Unklarheiten gefunden wurden oder nicht. Ich arbeite derzeit an einer Möglichkeit, die JSON-Datei schön in einer HTML-Datei darzustellen (mit etwas JavaScript).
SHA(IP, Port)
Wir haben das sha
-Skript für Debug-Zwecke zur Verfügung gestellt. Als Argument werden eine IP-Adresse und eine Portnummer verwendet und der SHA1-Hash von (IP|Port) zurückgegeben. Dieser Wert wird als Sitzungskennung im p2a
Skript verwendet.
make sha
./sha -h
Usage:
./sha IP PORT
./sha 127.0.0.1 12345
IP: 127.0.0.1
Port: 12345
SHA1: 21bf549a8095063f49cff573e689b6b10365f4c8
IP-Adressen und whois
Wenn eine Sitzung verdächtig ist, kann es hilfreich sein zu wissen, worauf sie sich bezieht. Dazu kann man Wireshark verwenden und einen Anzeigefilter anwenden, um nur die jeweilige Sitzung anzuzeigen.
Ein einfacherer Ansatz kann darin bestehen, mithilfe von whois
herauszufinden, wem die IP-Adresse gehört.
So verwenden Sie whois
mit allen IP-Adressen aus der Erfassungsdatei:
for ip in $( tshark -r file.pcapng -T fields -e ip.dst -e ip.src | egrep -o " [0-9]+.[0-9]+.[0-9]+.[0-9]+ " | sort | uniq ) ; do whois $ip | egrep " ^[Oo]rgani[sz]ation " ; done
Wenn
tshark
nicht funktioniert, finden Sie hier ein C-Skript, das dasselbe tut.
Das Feld „Time To Live “ (TTL) für ein IP-Paket gibt an, wie lange das Paket durch das Netzwerk „wandern“ darf, bevor es von Routern verworfen wird. Es handelt sich um einen 8-Bit-Wert, der normalerweise bei jedem Hop um eins reduziert wird.
Laut der Seite von Cisco zum TTL Expiry Attack:
„Wenn ein IOS-Gerät ein Paket mit einem TTL-Wert kleiner oder gleich eins empfängt, wird eine ICMPv4-Nachricht vom Typ 11, Code 0 von einem IOS-Gerät gesendet, was zu entsprechenden Auswirkungen auf die CPU führt. Diese Auswirkungen treten auf, weil mehr CPU vorhanden ist.“ Es ist eine Verarbeitung erforderlich, um auf Pakete mit TTL-Werten kleiner als eins zu reagieren (unter Verwendung von Paketen mit TTL-Überschreitung), anstatt einfach ein Paket mit einem TTL-Wert größer als eins weiterzuleiten.
„Das TTL-Ablaufverhalten erzeugt einen Denial-of-Service (DoS)-Angriffsvektor gegen Netzwerkgeräte. Netzwerkgeräte sind speziell dafür konzipiert, gewöhnliche Pakete so schnell wie möglich weiterzuleiten. Wenn Ausnahmepakete auftreten, beispielsweise solche mit ablaufenden TTL-Werten, variieren die Mengen.“ Der Aufwand, den ein Router aufwendet, um angemessen zu reagieren.“
Analyse/Code:
In utils.c
haben wir einen TTL_THRESHOLD
definiert (vorerst = 10). Wenn die TTL für ein Paket niedriger als dieser Wert ist, wird ein Flag gesetzt, um anzuzeigen, dass die TTL niedrig ist. Wenn zu viele solcher Flags gesetzt werden, könnte es sich um einen TTL-Ablaufangriff handeln.
Die Beispiel-PCAP-Datei (die ein Paket mit einer niedrigen TTL enthält) wurde mit den Skripten erfasst, die sich im Verzeichnis ./attack_scripts/low_ttl
befinden.
Bei der ARP-Vergiftung wird einem Host vorgetäuscht, wir seien das Standard-Gateway . Das Opfer fragt das Standard-Gateway regelmäßig nach seiner MAC-Adresse (ARP-Protokoll). Ein Angreifer kann dem Opfer jedoch Pakete senden, die besagen, dass sich das Standard-Gateway an einer anderen MAC-Adresse befindet (z. B. der MAC-Adresse des Angriffs). Der Angreifer muss diese Pakete lediglich „regelmäßig genug“ senden, damit das Opfer die echten Nachrichten vom Standard-Gateway „ verwirft“.
Dies kann es dem Angreifer ermöglichen, auf viele Arten vorzugehen und das Opfer anzugreifen: Man-in-the-Midde, DoS, Black-Hole, ...
Beispiel:
Die IP-Adresse des Opfers lautet 192.168.10.2
und das Standard-Gateway ist 192.168.1.1
:
sudo arpspoofing -i wlan0 -t 192.168.10.2 192.169.1.1
Der Angreifer wird dem Opfer weiterhin ARP-Pakete senden, die ihm mitteilen, dass sich 192.168.1.1
an der MAC-Adresse des Angreifers befindet. Auf diese Weise sendet das Opfer seine Pakete (die für das Internet bestimmt sind) an den Angreifer, der sie nicht umleitet (Option -r
zum Umleiten).
Analyse/Code:
Da wir für die Analyse (vorerst) nur IP-Pakete betrachten, speichert p2a
in einer verknüpften Liste alle Paare (MAC address, IP address)
, auf die es trifft. Bei der Überprüfung eines neuen gegebenen Paares durchsucht es die verknüpfte Liste und gibt einen Fehler zurück, wenn die IP-Adresse bereits einer anderen MAC-Adresse zugeordnet ist.
Für das obige Beispiel würde unser Skript erkennen, dass 192.168.1.1
( Standard-Gateway ) mit zwei verschiedenen MAC-Adressen verknüpft ist: der echten, bis der Angreifer hereinkommt und dem Opfer mitteilt, dass es sich um das Standard-Gateway handelt und dass es seine MAC-Adresse erhält dem Standard-Gateway zugeordnet (aus der Sicht des Opfers).
Jedem in einer TCP-Verbindung gesendeten Datenbyte ist eine Sequenznummer zugeordnet. Dies wird im Sequenznummernfeld des TCP-Headers angezeigt.
Wenn der empfangende Socket ein eingehendes Datensegment erkennt, verwendet er die Bestätigungsnummer im TCP-Header, um den Empfang anzuzeigen. Nach dem Senden eines Datenpakets startet der Absender einen Neuübertragungs-Timer variabler Länge. Wenn er vor Ablauf des Timers keine Bestätigung erhält, geht der Absender davon aus, dass das Segment verloren gegangen ist, und sendet es erneut.
Wir können eine erneute TCP-Übertragung beobachten, wenn ein anderes Paket dieselben Bestätigungs- und Sequenznummern wie das aktuelle Paket besitzt.
TCP-Neuübertragungen kommen recht häufig vor und können völlig normal sein (wenn ein Paket erneut übertragen wird, weil es rechtmäßig verloren gegangen ist), können aber auch ein Zeichen für ein Problem im Netzwerk oder bei einer Kommunikation sein.
Der Exploit überlappende IP-Fragmente tritt auf, wenn zwei im selben IP-Paket enthaltene Fragmente Offsets aufweisen, die darauf hinweisen, dass sie sich in der Positionierung innerhalb des Pakets überlappen . Dies könnte bedeuten, dass entweder Fragment A vollständig von Fragment B überschrieben wird oder dass Fragment A teilweise von Fragment B überschrieben wird. Einige Betriebssysteme verarbeiten Fragmente, die sich auf diese Weise überlappen, nicht ordnungsgemäß und können Ausnahmen auslösen oder sich auf andere unerwünschte Weise verhalten nach Erhalt überlappender Fragmente. Dies ist die Grundlage für den Teardrop-Angriff . ( aus Wikipedia )
Überlappende Fragmente können auch dazu verwendet werden, Intrusion-Detection-Systeme zu umgehen . Bei diesem Exploit wird ein Teil eines Angriffs in Fragmenten zusammen mit zusätzlichen Zufallsdaten gesendet; Zukünftige Fragmente können die zufälligen Daten mit dem Rest des Angriffs überschreiben. Wenn das fertige Paket am IDS nicht ordnungsgemäß wieder zusammengesetzt wird, bleibt der Angriff unentdeckt.
Teardrop-Angriff: Dabei werden verstümmelte IP-Fragmente mit überlappenden, übergroßen Nutzlasten an den Zielcomputer gesendet.
NOCH NICHT UMGESETZT
Wenn wir für eine bestimmte Sitzung mehrere TTL-Werte beobachten, könnte dies bedeuten, dass sich die Route geändert hat, was bedeutet, dass die Pakete am Ende der Verbindung nicht mehr demselben Pfad folgen wie am Anfang. Dies kann auf echte Änderungen von außen zurückzuführen sein, könnte aber auch bedeuten, dass ein Angreifer die Route der Pakete ändert (z. B. um einen MiTM-Angriff durchzuführen).
Meistens hat eine Sitzung jedoch während der gesamten Verbindung zwei oder drei unterschiedliche TTL-Werte: Meistens verwenden der Client und der Server nicht dieselben anfänglichen TTL-Werte.
Das Skript gibt einen Fehler zurück, wenn für eine bestimmte Sitzung mehr als zwei unterschiedliche TTL-Werte vorhanden sind.
Verzeichnis | Beschreibung/Inhalt |
---|---|
./attack_scripts | Einfache Skripte zum Testen und Aufzeichnen einiger TCP-Mehrdeutigkeiten (Spoofing, niedrige TTL) |
./pcap_files | PCAP-Dateien zum Testen p2a |
./tests_libpcap | Zwei Skripte zum Testen und Starten von libpcap |
libpcap
pcap
Appspcap
Beispieldateien am Ende der Webseitetcpdump
Filterlibpcap
Tutoriallibpcap
in Cpcap.h
Handbuchseite