Haasteena oli: "Kirjoita tcpdump / windump suodatin joka poimii ICMPv6 Multicast Listener paketteja." Minulla on laaja kirjoittaa ylös mitä tekee vastata niin monimutkaisia. Jos tiedät IPv6 ja haluavat vain vastauksen, siirry loppuun.
Ensinnäkin eräät Tausta
Steinar teki muutamia kommentteja edelliseen virkaa ja oli 100% raiteilleen. Jos luet niitä ja ajattelin "Vau, se kuulostaa todella sotkuinen", ymmärrät ongelman laajuutta samoin. ![]()
Pöytäkirja Vs. Seuraava ylätunnistekenttien
IPv4: n kanssa meillä oli vaihtoehtoja kenttään. Tämä voi aiheuttaa IP-otsikko kasvavan 20 tavua yhtä suuri kuin 60 tavua. IPv6 ei ole enää vaihtoehtoja kenttä ja otsikko on vahvistettu 40 tavua. Kun vaihtoehdot ovat tarpeen, käytämme laajennus otsikot tunnistamisessa. Tämä heittää mielenkiintoinen käyrä pallo meille koska IPv4 protokollan kenttä (byte 9) olisi (melkein) aina tunnistaa ylemmän tason liikenteen (TCP, UDP, jne.). Kanssa IPv6 seuraavaan otsikkoon kenttään (tavu 6) voitaisiin nimetä ylempi kerros kuljetus, tai se saattaa tunnistaa laajennus otsikko, joka sisältää joitakin useita vaihtoehtoja.
Tässä lista muutamista IPv6 laajennus otsikot saatat törmätä sekä RFC jotka määrittävät heille:
| Vaihtoehto # | Vaihtoehto Kuvaus | RFC |
| 0 | Hop-by-Hop | 2460 |
| 6 | TCP | 793 |
| 17 | UDP | 768 |
| 43 | Reititys | 5095 |
| 44 | Hajanaisuus | 2460 |
| 50 | ESP | 4303 |
| 51 | AH | 4302 |
| 58 | ICMPv6 | 4443 |
| 59 | Ei seuraavaa otsikkoa | 2460 |
| 60 | Destination Options | 2460 |
| 135 | Liikkuvuus | 3775 |
IPv6 ei määrää rajoitetaan laajennus otsikoita voit käyttää yhden packet.There on kuitenkin julkaistu "suositeltava", miten otsikoita olisi vahvistettava ulos. Järjestys on:
- IPv6 Header
- Hop-by-Hop Options
- Reititys Header
- Fragment Header
- AH
- ESP
- Destination Options
- Mobility Header
- TCP/UDP/ICMPv6
Huomautus Tämä luettelo on "suositeltava" mutta ei pakollista. IPv6 isäntä on pystyttävä käsittelemään otsikot mitä ikinä jotta ne on saatu. Tämä tarkoittaa, huomaat todennäköisesti toimittajat seuraavat tässä luettelossa mutta ei hyökkääjät. Olen henkilökohtaisesti nähnyt laitteita alkaa käyttäytyä todella outoa, kun sotku otsikon järjestyksessä. Itse olen törmännyt aika vähän "IPv6-yhteensopiva koodi", jota ei käsitellä, jos haluttuun järjestykseen ei käytetä.
Chasing pöytäkirja Header
Joten IPv6 voimme olla useita otsikoita takana IPv6 header. Jos tämä kuulostaa uusi käsite, se ei oikeastaan ole. Itse olet luultavasti tehnyt sen kanssa jo. Kun IPSeciä kaksi mahdollista suojausprotokollia ovat ESP ja AH. Nämä olivat todella lainattu IPv6 ja hierotaan työskennellä IPv4. Sekä AH ja ESP sisältyy seuraavaan otsikkoon kentän tunnistaa millaista paketin ne protecting.This kutsutaan pöytäkirjan ketjuttamalla kun tosiasiassa useita otsikoita istuu takana Layer 3 protokollaa otsikkoa.
Joten selvittää, mitä ylemmälle tasolle kuljetus (TCP, UDP, jne.) on käytössä, saatat joutua etsiä useita otsikoita ennen kuin löydät vastauksen. Tämä kutsutaan "jahtaavat header", ja tcpdump / Windump meille suodin tähän tehtävään. Saatat olla fimiliar kanssa proto suodatin. Vuonna IPv4 maailmassa, jos sanon:
IP proto tcp
Tämä suodatin lukee "check tavu 9 IPv4 otsikon ja jos arvo on 6 (protokolla vastinetta TCP), ottelun paketti". Tämä suodatin ei ole yhtä tehokas IPv6 maailmassa tietenkin koska tavun 6 IPv6 header voisi tunnistaa ylemmän kerroksen liikennettä, tai se voi vain tunnistaa Valinnainen laajennettu otsikko, jota käytetään. Tämän ongelman ratkaisemiseksi, protochain suodatin otettiin käyttöön. Kirjoittaminen:
ip6 protochain tcp
Kuuluu "Check tavu 6 IPv6 header nähdä, jos arvo on yhtä kuin 6. Jos sen sijaan löytää arvo, joka tunnistaa Valinnainen laajennettu otsikko, tarkista laajennus otsikon seuraava otsikko-kenttään arvo 6. Jos löydät valinnainen laajennettu otsikot, toistamaan viimeisen testin kunnes löydät viimeinen laajennus otsikon ".
Melko helppo kirjoittaa Englanti, mutta tämä on painajainen toteuttaa koodia. Useimmat valinnainen laajennettu otsikot vaihteleva pituus, joka vain lisää monimutkaisuutta. Olen tehnyt joitakin kokeita Scapy ja voit itse nähdä ero suorituskyvyssä, kun protochain saa vedota. Itse voisit ehkä tehdä melko hyvää työtä annostelun IDS / IPS pakottamalla sitä prosessia paljon hyödytön laajennus otsikot.
Kirjoitamme myös suodatin
Niinpä meidän ensimmäinen ongelma kirjallisesti haaste suodatin on, että ICMPv6 otsikko ei välttämättä näy heti IPv6 header. Meidän täytyy varoa Valinnainen laajennettu otsikot. Itse RFC 2710 todetaan: "Kaikki MLD viestejä tässä asiakirjassa lähetetään kanssa paikallisesti linkitetty IPv6-Source Address, IPv6 Hop raja on 1, ja IPv6-reitittimen Alert vaihtoehto [RTR-alert] in Hop-by-Hop Vaihtoehdot header. "Tämä tarkoittaa meidän multicast kuuntelija paketti vaaditaan Hop-by-Hop laajennus otsikon reitittimen Alert vaihtoehto asetettu. Tässä mielessä, ensimmäinen tarkastus olisi:
ip6 protochain icmp6
Varmistaa, että olemme vain katsot ICMPv6 paketteja. Nyt on vain kysymys tarkistaa, onko tyyppi kentän (tavu 0) on asetettu 130 (Multicast Listener Query) tai 131 (Multicast Listener Report). Tämä tuo meidät toiseen ongelmaan kuitenkaan. Vuonna IPv4 maailmassa voin tehdä:
ICMP [0] = <Kirjoita arvo interest>
Jos yritän tätä icmp6 saan:
[Root @ Fubar ~] # tcpdump-nn icmp6 [0] = 130
tcpdump: IPv6 ylemmän kerroksen protokolla ei tue proto [x]
Toisin sanoen, en voi käyttää vastikkeiden kanssa icmp6 etsiä tiettyjä arvoja. Windump ja tcpdump mainostetaan IPv6-yhteensopivia, mutta älä odota saada kaikki samat toiminnot sinulla on IPv4: n kanssa. Yäk!
Joten mitä me teemme? Meidän täytyy turvautua viitataan arvon ip6 offset. Toisin sanoen meidän täytyy mitata läpi IPv6 header kautta vaaditut Hop-by-Hop header, ja osaksi ICMPv6 otsikon nähdä, jos kenttä ei ole asetettu 130 tai 131. Jotkut asiat otettava huomioon:
- IPv6 header on vahvistettu 40 tavua
- Hop-by-Hop otsikko vaihtelee, mutta 4 tavua reititin Alert asetettu
- Kenttä ei ole tavu 0 sisällä ICMPv6 header
Joten tässä on mitä päädymme:
ip6 protochain icmp6 ja (ip6 [44] = 130 tai ip6 [44] = 131)
Vau! Olemme vihdoin sain sen! Tai emmehän?
K: Mitä tapahtuu, jos paketti on ylimääräinen pääte otsikot?
: Meidän suodatin ei toimi.
Kysymys: Entä jos Hop-by-Hop header on enemmän vaihtoehtoja, kuin reititin Alert?
: Meidän suodatin ei toimi.
Kysymys: Voimmeko korjata edellä kaksi ongelmaa?
: Vasta tcpdump / Windump suodatus lisää IF / sitten silmukka tukea.
Joten jos haluamme kaapata normaali ML liikenne, edellä suodatin toimii hienosti. Jos kuitenkin haluamme vakuuttaa olemme kiinni hyökkääjän trickiness samoin, suodatin ei aio lentää.
Mitä jos yritämme jotenkin näin:
tcpdump-nn-s 1500-x ip6 protochain icmp6 | grep-i multicast> multicast.txt
ja sitten vain käyttää Wireshark n text2cap työkalu muuntaa sen libpcap muotoon? Ongelmana tässä on saamme vasta header tiedot. Grep täsmää yhteenvetorivillä joka sisältää sanan "Multicast" Mutta sitten ohittaa kaikki Hex sen alla, joka on todellinen paketin sisällön.
Joten lopullinen vastaus on: "ei voi saada theya mistä Haya" ![]()
Entä jos todella täytyy pystyä näkemään tätä liikennettä? Kunnes tuki IPv6 kypsyy, vain 100% tapa on napata kaikki ICMPv6 liikenne ja sitten manuaalisesti lajitella sen.
Ainakin se on minun käsitys. Jos joku voi todella keksiä 100% käyttöliuos, haluaisin kuulla sen.



