Ergebnis 1 bis 2 von 2

Thema: [NYC10] - 07 - Routing to Hell

  1. #1
    Moderator
    Nothing is unbreakable!

    Registriert seit
    Jul 2003
    Beiträge
    622
    Renommee
    819

    [NYC10] - 07 - Routing to Hell

    Hallo,
    meine Challenge richtet sich ehr an IPTABLES - Neulinge. Aber auch alte Hasen werden ihren Spass haben. Also um Grunde sind es Übungen um mit iptables warm zu werden.

    Aufgabe 1 - Pakete im Kreis zu Tode routen

    Es geht darum ein (ICMP (Ping))-Paket von Rechner A nach B zu senden. Und B sendet es nach A und A wieder nach B u.s.w. Bei jedem Rechnerdurchlauf wird die TTL des Paketes um eins erniedrigt bis es irgendwann verstorben ist.
    Eure Aufgaben ist es nun mit Hilfe von iptables, route, ifconfig, ping oder was ihr sonst noch dafür braucht zwei Rechner so zu konfigurieren, dass eben dieses Szenario durchgespielt werden kann. (2 Punkte)

    Aufgabe 2 - Das selbe in grün

    Hier sollt ihr Aufgabe 1 erweitern, so dass das Paket erst verworfen wird, wenn seine TTL kleiner 3 ist. (1 Punkt)

    Aufgabe 3 - Das Selbe in bunt

    Hier sollt ihr Aufgabe 1 erweitern, so dass die TTL um eins erhöht wird, wenn die TTL kleiner 3 ist. Es empfiehlt sich das nur auf einem Rechner zu machen sonst haben wir ein GOD-Mode Paket. (1 Punkt)

    Aufgabe 4 - Was ganz anderes

    Hier soll das Paket mittels iptables in den Userspace geleitet werden. Dort kann dann das Programm mit einem kleinen Perl Programm in Empfang genommen werden [1]. Dabei muss es nicht Perl sein. Eine Lösung in C habe ich auch schon gesehen. Vllt. kennt jemand noch eine 3. Sprache mit der das geht, dann darf er die natürlich auch benutzen.

    Was soll man nun mit dem Paket machen? Hier gibt es unendlich viele Möglichkeiten. Man könnte eine komplette Firewall im Userspace realisieren. Aber wird wollen es ja nicht gleich Übertreiben.

    Ich dachte mir, vllt. ist es ganz interessant die Sequenznummern der Pakete zu analysieren.

    Also, konfiguriert einen Rechner so, dass er von euch ausgewählte Pakete in den Userspace schiebt (1Punkt) und dort mit einem Programm entgegen nimmt (1 Punkt) und erstellt eine Statistik der Sequenznummern (2 Punkte). Wer seine Statistik auch noch auswertet, also z.B. in welchen Zahlenraum ein OS (Win, Lin, MAC, Nix) diese Nummern vergibt, ob sie Zufällig sind oder nicht. etc., bekommt noch mehr Punkte (2 Punkte)

    Abgabe

    Eure Ergebnisse bitte per PN an mich. Schreibt mir eine kleine Anleitung wie ihr die Aufgaben gelöst habt. Also, dass ich die Befehle 1:1 in meinen Rechner eintippe und es dann auch funktioniert. Falls ihr irgendwelche besonderen Tools oder Kernelmodule benutzt habt, erwähnt sie auch, damit ich die mir installieren kann.

    Bei Aufgabe 3 hätte ich natürlich auch gern das Programm. Und bitte kommentiert das Programm auch damit ich euren Gedankengang nachvollziehen kann.


    So, das wäre es erstmals. Wer noch Fragen hat der frage.
    Tipp: Aufmerksame buha Leser sollten keine Probleme mit Aufgabe 1 haben.

    [1] http://michael.toren.net/slides/ipqueue/slide001.html

  2. #2
    Moderator
    Nothing is unbreakable!

    Registriert seit
    Jul 2003
    Beiträge
    622
    Renommee
    819

    Re: [NYC10] - 07 - Routing to Hell

    Hallo,
    hier nun die Auflösung.

    Wie schon angekündigt war ein Teil der Lösung in meinen vorherigen Posts versteckt. Man hätte ihn also leicht finden können http://www.buha.info/board/showthread.php?t=56157

    Ich möchte hier auch die Lösung von destructor vorzeigen
    Zitat Zitat von destructor
    Hi,

    Hier meine Lösung:
    Ich habe keine besonderen Tools verwendet. Bei den Kernelmodulen bin ich mir nicht sicher, was da nun standard ist oder nicht. Ich habe jedenfalls hier bei mir unter anderm folgendeKernel-Optionen aktiv. Keine Ahnung, was davon jetzt tatsächlich benötigt wird. Um das zu testen fehlt mir leider die Zeit - ich denke jedenfalls, dass das alles Standard ist:
    Spoiler:
    CONFIG_IP_ADVANCED_ROUTER
    CONFIG_IP_MULTIPLE_TABLES
    CONFIG_NETFILTER
    CONFIG_NETFILTER_ADVANCED
    CONFIG_NF_CONNTRACK
    CONFIG_NETFILTER_XTABLES
    CONFIG_NETFILTER_XT_TARGET_HL
    CONFIG_NETFILTER_XT_MATCH_CONNTRACK
    CONFIG_NETFILTER_XT_MATCH_HL
    CONFIG_NETFILTER_XT_MATCH_LIMIT
    CONFIG_NETFILTER_XT_MATCH_STATE
    CONFIG_NF_DEFRAG_IPV4=y
    CONFIG_NF_CONNTRACK_IPV4=y
    CONFIG_NF_CONNTRACK_PROC_COMPAT
    CONFIG_IP_NF_IPTABLES
    CONFIG_IP_NF_MATCH_TTL
    CONFIG_IP_NF_FILTER
    CONFIG_IP_NF_TARGET_REJECT
    CONFIG_IP_NF_TARGET_LOG
    CONFIG_NF_NAT
    CONFIG_NF_NAT_NEEDED
    CONFIG_IP_NF_TARGET_MASQUERADE
    CONFIG_IP_NF_TARGET_NETMAP
    CONFIG_IP_NF_TARGET_REDIRECT
    CONFIG_NF_NAT_SNMP_BASIC
    CONFIG_IP_NF_MANGLE
    CONFIG_IP_NF_TARGET_TTL
    CONFIG_IP_NF_RAW



    Hier nun meine Antworten:

    Aufgabe 1:
    Auf beiden Hosts folgende Befehle ausführen. Danach wird ein Ping ständig im Kreis geroutet bis er aufgrund seiner TTL stirbt.
    Code:
    // Erst forwarding aktivieren
    # echo 1 > /proc/sys/net/ipv4/ip_forward
    
    // Pakete von host 10.0.0.1 auf 10.0.0.2 weiterleiten:
    // auf dem Host 10.0.0.2 müssen natürlich die IP-Adressen vertauscht werden
    # iptables -t nat -A PREROUTING -p ICMP -j DNAT --to-destination 10.0.0.2
    # iptables -t nat -A POSTROUTING -p ICMP -j SNAT --to-source 10.0.0.1
    Das ganze sieht dann so aus:
    Code:
    # ping -c 1 10.0.0.2
    PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
    From 10.0.0.2 icmp_seq=1 Time to live exceeded
    
    --- 10.0.0.2 ping statistics ---
    1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms
    
    #
    Das ganze sieht mit tcpdump auf dem Host 10.0.0.2 beobachtet dann so aus:
    Code:
    # tcpdump -v 'icmp[icmptype] == icmp-echo or icmp[icmptype] == icmp-echoreply'
    tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
    18:56:18.689120 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
        10.0.0.1 > 10.0.0.2: ICMP echo request, id 43015, seq 1, length 64
    18:56:18.689187 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
        10.0.0.2 > 10.0.0.1: ICMP echo request, id 43015, seq 1, length 64
    
    [...]
    
    18:56:18.693372 IP (tos 0x0, ttl 2, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
        10.0.0.2 > 10.0.0.1: ICMP echo request, id 52877, seq 1, length 64
    18:56:18.693491 IP (tos 0x0, ttl 1, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
        10.0.0.1 > 10.0.0.2: ICMP echo request, id 52878, seq 1, length 64

    Aufgabe 2:
    Alle Kommandos aus Aufgabe 1 plus das folgende:
    Code:
    # iptables -A FORWARD -p ICMP -m ttl --ttl-lt 4 -j DROP
    Das ganze sieht mit tcpdump auf dem Host 10.0.0.2 beobachtet dann so aus:
    Code:
    # tcpdump -v 'icmp[icmptype] == icmp-echo or icmp[icmptype] == icmp-echoreply'
    tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
    18:56:18.689120 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
        10.0.0.1 > 10.0.0.2: ICMP echo request, id 43015, seq 1, length 64
    18:56:18.689187 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
        10.0.0.2 > 10.0.0.1: ICMP echo request, id 43015, seq 1, length 64
    
    [...]
    
    18:56:18.693372 IP (tos 0x0, ttl 5, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
        10.0.0.2 > 10.0.0.1: ICMP echo request, id 52877, seq 1, length 64
    18:56:18.693491 IP (tos 0x0, ttl 4, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
        10.0.0.1 > 10.0.0.2: ICMP echo request, id 52878, seq 1, length 64

    Aufgabe 3:
    Alle Kommandos aus Aufgabe 1 plus das folgende:
    Code:
    # iptables -t mangle -A FORWARD -p icmp -m ttl --ttl-lt 4 -j TTL --ttl-inc 2
    Das Paket läuft endlos im Kreis.
    Das ganze sieht mit tcpdump auf dem Host 10.0.0.2 beobachtet dann so aus:
    Code:
    # tcpdump -v 'icmp[icmptype] == icmp-echo or icmp[icmptype] == icmp-echoreply'
    tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
    18:56:18.689120 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
        10.0.0.1 > 10.0.0.2: ICMP echo request, id 43015, seq 1, length 64
    18:56:18.689187 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
        10.0.0.2 > 10.0.0.1: ICMP echo request, id 43015, seq 1, length 64
    
    [...]
    
    18:56:18.693372 IP (tos 0x0, ttl 5, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
        10.0.0.2 > 10.0.0.1: ICMP echo request, id 52877, seq 1, length 64
    18:56:18.693491 IP (tos 0x0, ttl 4, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
        10.0.0.1 > 10.0.0.2: ICMP echo request, id 52878, seq 1, length 64
    18:56:18.693372 IP (tos 0x0, ttl 5, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
        10.0.0.2 > 10.0.0.1: ICMP echo request, id 52877, seq 1, length 64
    18:56:18.693491 IP (tos 0x0, ttl 4, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
        10.0.0.1 > 10.0.0.2: ICMP echo request, id 52878, seq 1, length 64
    
    [...]
    Vielen Dank an destructor.

    Für Aufgabe 4 gibt es leider keinen Code... habe aus versehen zwei mal meine Musterlösung gelöscht
    Aber natürlich gibt es Informationen in Form eines Links http://lcamtuf.coredump.cx/oldtcp/tcpseq.html

    Ich hatte dazu auch mal einen kürzeren deutschsprachigen Artikel aber leider ist momentan alles verschwunden. Aber sobald er wieder auftaucht liefere ich ihn gerne nach.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. [NYC10] - 01 - Weltreise
    Von nait im Forum Contest Forum
    Antworten: 5
    Letzter Beitrag: 14.02.2010, 02:06
  2. [NYC10] - 08 - Know the UNIX
    Von octogen im Forum Contest Forum
    Antworten: 6
    Letzter Beitrag: 31.01.2010, 12:58
  3. [NYC10] - 09 - Quiz & More
    Von Rodnox im Forum Contest Forum
    Antworten: 30
    Letzter Beitrag: 30.01.2010, 22:48
  4. [NYC10] - 06 - MD5 checker
    Von dexcs im Forum Contest Forum
    Antworten: 5
    Letzter Beitrag: 19.01.2010, 20:56
  5. Loader error (0025): cannot initialize >> what the hell?!?
    Von [elix] im Forum Systemnahe Programmierung
    Antworten: 0
    Letzter Beitrag: 20.10.2000, 17:06

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •