Archive for november, 2009

Weekend Challenge

27 november 2009

Her er en annen utfordring å teste litt wienie ferdigheter:

Skriv en tcpdump eller Windump filter som vil fange opp all trafikk med en kilde IPv6 adresse 2001: DB8:: 10 til og med 2001: DB8:: 20. Ganske enkelt, ikke sant? Hvis du ikke har prøvd det, du kommer til å finne at tcpdump / Windump kaster noen kurver på deg.

For å sjekke arbeidet ditt, her er en fange fil:

IPv6-ICMP

Filen inneholder en blanding av kilde IPv6-adresser. Tydeligvis filteret skal bare vise det angitte området av adresser.

Vinneren får å inspirere ærefrykt og beundring i mindre geeks. ;)

Jeg vet ikke alt, og det er OK

21 november 2009

I løpet av de siste dagene kjørte jeg en utfordring å se hvem som kunne skrive en tcpdump / Windump filter for å hente pakker med vinduet Scale alternativet satt. Det var litt av en hjerne twister. Det var en av de problemene som du begynner å tenke er lett, men så innser er svært vanskelig. Du kan deretter begynne å stille spørsmål hvis du er på rett spor, fordi det umulig kan være så komplisert som det ser ut til å være. Jeg ble spesielt prøvde å skyve konvolutten litt på denne.

I utfordringen uttalte jeg at folk skulle legge ut sine tanker / svar i kommentarfeltet. Bare én person var villig til å gjøre det, mens alle andre kontaktet meg via e-post. Først trodde jeg det var en personvernet bekymring, men så husket jeg at jeg lar brukerne plukke noen alias de ønsker for en skjerm navn. Folk hadde noen virkelig gode ideer, men jeg tror de var redd for å komme over så altfor mye av en "nybegynner" i et offentlig forum. Jeg har sett det samme i klasserommet innstillinger hvor jeg skal undervise i et tema, spør hvis det er spørsmål, ingen vil heve sin hånd, men på slutten av dagen har jeg en linje foran pulten min.

Jeg traff litt av en milepæl i år at jeg innså at jeg har vært i bransjen i over 20 år. For å gi deg en idé om hvor lang tid som er i Internett-tid, var en av mine første konserter bidrar til å konvertere en regjering entreprenør over fra "host file system" i denne splitter nye teknologien kalles "Domain Name Services". Jeg husker da Gopher var slickest kid på blokken. Erfarne første hånd hvordan AOL tilkobling til Internett dramatisk forandret landskapet i datasikkerhet. Jeg har jobbet med slike storheter som Robert Morris sr og Alan Paller. Jeg har handlet tips og triks med tusener av de skarpeste hodene gjennom SANS Institute. Jeg har brukt tid på rådgivning til Det hvite hus samt en rekke andre offentlige etater.

Og med alt som sagt, jeg er den første til å innrømme at jeg på ingen måte vet alt. Faktisk, jeg fullt ut kjenner jeg fortsatt har langt mer å lære enn jeg allerede har squirreled bort i små grå celler. Personlig, jeg likevel kjøre over ting (som filtrering for WScale alternativet) som jeg ser på og sier "Hvor pokker har jeg savnet at alle disse årene?".

En av de tingene den besettende siden av meg elsker om nettverkssikkerhet er at det er en avgrunn. Du kan tilbringe hvert våkne øyeblikk lesing blog / list innlegg, nedlasting av verktøy, testing i laboratoriet, og fortsatt ikke være i stand til å vikle hjernen din rundt alle av det. Nettverkssikkerhet er subtile og full av nyanser. Alles hjerne er kablet forskjellig, så noen av disse nyansene er åpenbare, og andre ikke så mye. En av de kule tingene som stikker deg ut det er får du nytte av andres hjernens kjemi. Klart en av de største problemene på den hvite hatten siden av gjerdet, er at vi ikke utveksle ideer / perspektiver ofte nok. Jeg tror altfor ofte ego holder oss tilbake.

Er det folk som tror de vet alt? Absolutt. Igjen kan ego være en vanskelig mester. Jeg minnes de gamle t-skjorter og plakater som leser: "tenåringer! Leave hjemme mens du fortsatt vet alt". Med nettverkssikkerhet, som de fleste ting i livet, det er en barriere av opplysning. På den ene siden av barrieren, synes dammen små og du tror du har et håndtak på det hele. Når du bryte gjennom uansett hvordan du gjenkjenne den enorme galaksen, og bare hvor langt foran at veien fremdeles strekninger.

Så jeg foreslår en 12 trinn geek program og jeg skal være den første til å klatre opp på en talerstol og innrømmer: "Jeg vet ikke alt, og jeg er OK med det". En del av grunnen til at jeg ga Jeff andreplassen er han kom på problemet fra en helt annen tilnærming og utviklet en løsning jeg ikke tenke på. Med andre ord, ved å sette meg der ute fikk jeg nytte av hans hjernens kjemi.

Som Jeff trekker alle som leser dette på sine egne unike livserfaring og er fullt i stand til å komme opp med unike og innovative løsninger i tillegg. Du vil aldri vite sikkert imidlertid mindre du sjekke ego gremlin og stikke deg ut der.

</ Soapbox>

Chris

Oh der, oh hvor kan WScale være?

20.11.2009

Hvis denne utfordringen virket vanskeligere enn det burde være, er du på rett spor. ;)

Jeg kjørte over dette problemet ved å skrive min Packet Dekode verktøyet. Jeg må si, det var en kul øvelse for meg, som jeg egentlig aldri tenkt på å lage tcpdump og wireshark filtre for alle mulige IP, TCP, UDP og ICMP felt og / eller verdi. Den klart TCP alternativene feltet er det mest "brutt" fra en pakke dekode perspektiv enn noen annen IP-feltet.

Først la oss snakke om hvordan TCP alternativene burde vært gjennomført. Hvis du ser på IPv4 alternativene feltet, begynner det med en "Type" identifikator. Hvis du er interessert i en bestemt IP-alternativet, er det bare et spørsmål om å sjekke dette feltet for retten bit kombinasjonen. Hadde TCP alternativene er gjennomført på denne måten, ville denne utfordringen har vært ganske rett frem.

Omtrent alle TCP alternativer har en "Kind" og en "Length" feltet, som begge er en byte i størrelse. Unntakene er "End of Option List" og "No-Operation" som bare har en slags felt, og dermed er en byte i størrelse. Her er en liste over vanlige TCP alternativer:

tcp-options

Side 15 av RFC 793 forteller oss "The TCP header (selv en inkludert opsjoner) er en integrert antall 32 bits lang." Med andre ord må TCP header størrelsen i byte være delelig med fire (20 byte, 24 bytes, etc.). Hvis du ser på listen av TCP alternativer, bare "Maximum Segment Size" er delelig med fire. Så bruk av noen andre alternativer kommer til å kreve padding.

Hvordan padding bør påføres er litt uklart. Hvis vi ser på side 26 av RFC 1323 finner vi dette:

  VEDLEGG A: GJENNOMFØRING FORSLAG

    Følgende oppsett er anbefalt for sendingsvalg på ikke-SYN
    segmenter, for å oppnå maksimal mulig justering av 32-bit og 64-bit
    maskiner.

        +--------+--------+--------+--------+
        | NOP ​​| NOP ​​| TSopt | 10 |
        +--------+--------+--------+--------+
        | TSval timestamp |
        +--------+--------+--------+--------+
        | TSecr timestamp |
        +--------+--------+--------+--------+ 

Legg merke til NOP padding vises før timestamp alternativet, ikke på slutten som du kanskje forventer. Også merke til RFC sier spesifikt dette er for "non-SYN segmenter", og at det er "anbefalt", ikke påkrevet. Synes imidlertid at de fleste operativsystemer følger denne anbefalingen og alltid plass padding før Kind og Lengde bytes. Jeg har sjekket Windows, Linux, Mac, diverse hardware, osv., og de alle sette padding i begynnelsen.

Så vi kan regne med at dette er den "standard", ikke sant? Ikke helt. Side 17 av RFC 793 beskriver NOP på denne måten:

  Dette alternativet koden kan brukes mellom alternativer, for eksempel til
         justere begynnelsen av påfølgende opsjon på et ord grense.
         Det er ingen garanti for at avsenderne vil bruke dette alternativet, så
         mottakere må være forberedt på å behandle alternativer selv om de gjør
         ikke begynne på et ord grense. 

Med andre ord, det er ikke bare at NOP kan eller ikke kan vise opp på begynnelsen kan NOP ikke bli brukt i det hele tatt! Det er helt lovlig å layout TCP alternativet feltet med ingen NOP polstring og bare bruke End of Option List som fyllstoff på slutten for å oppnå riktig grense.

Så hva ender vi opp med et filter? Hvis vi regner på NOP før valget vi ender opp med et filter som ser slik ut:

tcp [13] og 2 = 2 og tcp [12] og 240> 80 og ((tcp [20] = 1 og tcp [21:02] = 0 × 0303) eller (tcp [24] = 1 og tcp [25:2 ] = 0 × 0303) eller (tcp [28] = 1 og tcp [29:2] = 0 × 0303) eller (tcp [32] = 1 og tcp [33:2] = 0 × 0303) eller (tcp [ 36] = 1 og tcp [37:2] = 0 × 0303) eller (tcp [40] = 1 og tcp [41:2] = 0 × 0303) eller (tcp [44] = 1 og tcp [45:2 ] = 0 × 0303) eller (tcp [48] = 1 og tcp [49:2] = 0 × 0303) eller (tcp [52] = 1 og tcp [53:2] = 0 × 0303) eller (tcp [ 56] = 1 og tcp [57:2] = 0 × 0303))

Å bryte ned hva dette filteret gjør:

  • Bare sjekke SYN & SYN / ACK pakker: tcp [13] og 2 = 2
  • TCP header er større enn 20 bytes (alternativer er satt): tcp [12] og 240> 80
  • Kontroller den første byte i hver fire byte grense for NOP: tcp [20] = 1, tcp [24 = 1, ...
  • Sjekk de to neste byte for å se om Kind = 3 og Lengde = 3: tcp [21:02] = 0 × 0303 TCP [25:2] = 0 × 0303 ...

Hvis derimot vi ønsker å sikre at vi fange alle muligheter i tilfelle et system som ikke gjennomfører NOP vi ender opp med:

tcp [13] og 2 = 2 og tcp [12] og 240> 80 og (tcp [20:02] = 0 × 0303 eller tcp [21:02] = 0 × 0303 eller tcp [22:02] = 0 × 0303 eller tcp [23:02] = 0 × 0303 eller tcp [24:2] = 0 × 0303 eller tcp [25:2] = 0 × 0303 eller tcp [26:2] = 0 × 0303 eller tcp [27:2] = 0 × 0303 eller tcp [28:2] = 0 × 0303 eller tcp [29:2] = 0 × 0303 eller tcp [30:2] = 0 × 0303 eller tcp [31:2] = 0 × 0303 eller tcp [32:2] = 0 × 0303 eller tcp [33:2] = 0 × 0303 eller tcp [34:2] = 0 × 0303 eller tcp [35:2] = 0 × 0303 eller tcp [36:2] = 0 × 0303 eller tcp [37:2] = 0 × 0303 eller tcp [38:2] = 0 × 0303 eller tcp [39:2] = 0 × 0303 eller tcp [40:2] = 0 × 0303 eller tcp [ 41:2] = 0 × 0303 eller tcp [42:2] = 0 × 0303 eller tcp [43:2] = 0 × 0303 eller tcp [44:2] = 0 × 0303 eller tcp [45:2] = 0 × 0303 eller tcp [46:2] = 0 × 0303 eller tcp [47:2] = 0 × 0303 eller tcp [48:2] = 0 × 0303 eller tcp [49:2] = 0 × 0303 eller tcp [50 : 2] = 0 × 0303 eller tcp [51:2] = 0 × 0303 eller tcp [52:2] = 0 × 0303 eller tcp [53:2] = 0 × 0303 eller tcp [54:2] = 0 × 0303 eller tcp [55:2] = 0 × 0303 eller tcp [56:2] = 0 × 0303 eller tcp [57:2] = 0 × 0303 eller tcp [58:2] = 0 × 0303)

Forskjellen med dette filteret er at vi sjekker Kind = 3 og Lengde = 3 hele veien gjennom alternativene feltet (som Elizabeth foreslått).

Kan noen av disse filtrene generere falske positiver? Absolutt! To muligheter:

  1. Verdien av Tidsstempel kan matche det mønsteret vi leter etter.
  2. Filteret forutsetter en 40 byte alternativ feltet. Det kan være mindre med disse verdiene i nyttelasten.

Så hvilke filter bør du bruke? Den første vil generere færre falske positiver, men savner systemer som er RFC-kompatibel, men forskjellig fra normen. Det andre vil alltid fange Vindu Scale om det har blitt satt, men sjansen for en falsk positiv er høyere.

Jeg kommer til å utpeke Elizabeth som vinner av utfordringen. Et par andre ble like tett, men hun var den eneste med guts til å legge sin tankerekke i kommentarfeltet. Jeg kommer til å utdele en andrepris til Jeff som kom opp med denne løsningen delvis tuller rundt:

tcpdump-nn | grep 'wscale'> wscale-matches.txt

Dette vil ikke generere en faktisk pakke fange, men du kunne gjøre en:

tcpdump-nn-X-s 0 | grep 'wscale'> wscale-matches.txt

Og deretter kjøre ut gjennom txt2cap å få det tilbake i pcap format. Han fulgte ikke utfordringen spesifikt, men du har må gi kudos for å tenke utenfor boksen da dette fikser alle falske positive saker. ;)

Elizabeth og Jeff, vil jeg kontakte deg både via e-post. Gratulerer!

TCP Options - Final holdepunkt

19 november 2009

Jeg har hatt en tråd post og fire e-poster som er soooooo nær det riktige svaret. Her er en siste holdepunkt for å forhåpentligvis få folk over det siste hinderet.

Jeg nevnte den hjelpsomme tshark kommandoen. Her er output:

C: \ testing> tshark-n-r linux-syn.cap-T felt-e tcp.options
02:04:05: b4: 04:02:08:0 a: 02:47:04 a: A8: 00:00:00:00:01:03:03:05

Så hva du har ovenfor er det TCP alternativene delen (byte 20 og høyere) av testen pakken. The Window Scale alternativet er det siste alternativet i listen.

Jeg vet skriver dette filteret er ikke lett. Faktisk det er derfor jeg snudde det til en utfordring. Det er mulig likevel. ;)

TCP Options Challenge - ledetråder

18 november 2009

Jeg har tidligere postet en utfordring å skrive en tcpdump / Windump filter som skulle fange opp pakker som har TCP alternativet "Window Scale" set. Noen folk er nære, men jeg ønsket å poste noen hint. Også har jeg ingen problemer med deg e-post til meg direkte, men å vinne utfordringen du har til å legge svaret på kommentarfeltet. På den måten er det ingen tvil om hvem som fant svaret først.

Alle TCP alternativene er angitt av en "Registry Kind" verdi (ligner på ICMP "Type"-feltet). I tilfelle av Window Scale, er at verdi 3. Også alle TCP alternativer bortsett NOP inneholder en sekundær felt kalt "lengde". Dette definerer hvor mange byte alternativene bruker, inkludert "Registry Kind" byte. I tilfelle av vinduet Scale lengden verdi er alltid tre. Så vi har:

  • 1 byte for Registry Kind
  • 1 byte for lengde
  • 1 byte for den faktiske WScale verdi

Tips 2: Hvis du aldri har boret inn i TCP Options feltet, har tshark et kult alternativ:

tshark-n-r fange-file.cap-T felt-e tcp.options

Dette vil ut hele TCP alternativene feltet i Hex så du kan i hvert fall se hvordan det ser ut.

Endelig ledetråd, har jeg postet en Linux SYN pakke som setter WScale til 5 for deg å bruke for å sjekke filteret.

linux-syn

Good luck!

Chris

TCP Options Challenge

18 november 2009

Jeg har hatt litt å gå på blant annet utgivelsen av en ny referanse verktøy for Apple iPhone og iPod. Verktøyet er å ringe Packet Dekoding og jeg har setup en alternativ side for å opprettholde den.

Jeg føler meg dårlig på å forsømme dette området i løpet av de siste ukene, så jeg har besluttet å kaste ut en annen utfordring. Vinneren vil motta et gratis eksemplar av ovennevnte Packet Dekode verktøyet. OK, så du vil ikke kunne pensjonere seg på inntektene, men forhåpentligvis verktøyet vil gjøre livet litt enklere. ;)

Så her er utfordringen:

Skriv en tcpdump eller Windump filter som bare vil fange opp pakker som har TCP "Window Scale" alternativet sett. Alle andre TCP alternativet innstillinger kan ignoreres.

Ganske enkelt, ikke sant? Første personen til å legge ut svaret i kommentarfeltet får prisen.