Arkiv för november, 2009

Weekend Challenge

27 november 2009

Här är en annan utmaning att testa dina kunskaper lite wienie:

Skriv en tcpdump eller Windump filter som kommer att fånga all trafik med en källa IPv6-adress 2001: DB8:: 10 till 2001: DB8:: 20. Ganska enkelt, eller hur? Om du inte har provat det, du kommer att finna att tcpdump / Windump kastar ett par kurvor på dig.

För att kontrollera ditt arbete, här är en capture-fil:

ipv6-ICMP

Filen innehåller en blandning av källa IPv6-adresser. Självklart ditt filter ska bara visa det angivna intervallet för adresser.

Vinnaren får att inspirera vördnad och beundran i mindre nördar. ;)

Jag vet inte allt och det är OK

21 november 2009

Under de senaste dagarna jag sprang en utmaning att se vem som kunde skriva en tcpdump / Windump filter för att fånga paket med fönstret Skala inställt. Det var lite av en hjärna twister. Det var ett av de problem som du börjar tänka är lätt, men sedan inser är mycket svårt. Du börjar då ifrågasätta om du är på rätt väg eftersom det inte kan möjligen vara så komplicerat som det verkar vara. Jag var just att försöka tänja på gränserna lite på den här.

I utmaningen jag konstaterade att folk ska skriva sina tankar / svar i kommentarerna. Endast en person var villig att göra det, medan alla andra kontaktade mig via e-post. Först trodde jag att det var ett privatliv oro, men sedan kom jag ihåg att jag låter användarna välja någon alias de vill ha för ett smeknamn. Folk hade några riktigt bra idéer, men jag tror att de var rädda för att framstå som alltför mycket av en "nybörjare" i ett offentligt forum. Jag har sett samma sak i klassrummet där jag kommer att lära ett ämne, fråga om det finns frågor, ingen kommer att höja sin hand, men vid slutet av dagen har jag en linje framför mitt skrivbord.

Jag slog lite av en milstolpe i år som jag insåg att jag har varit i branschen i över 20 år. För att ge dig en aning om hur länge det är i Internet tid, var en av mina första spelningar hjälper till att omvandla en regering entreprenör över från "host filsystemet" på denna helt nya teknik som kallas "Domain Name Services". Jag minns när Gopher var den smartaste killen på blocket. Erfarna första hand hur AOL ansluter till Internet förändrats dramatiskt landskap datorsäkerhet. Jag har arbetat med sådana storheter som Robert Morris Sr och Alan Paller. Jag har handlas tips och tricks med tusentals av de skarpaste hjärnorna via SANS Institute. Jag har tillbringat tid hört till Vita huset samt ett antal andra statliga myndigheter.

Och med allt detta sagt, är jag den första att erkänna att jag inte alls vet allt. I själva verket, inser jag till fullo jag fortfarande har mycket mer att lära än jag redan har squirreled bort i den lilla grå celler. Personligen kör jag fortfarande över saker (som filtrering för WScale tillval) som jag tittar på och säger "Hur i hela friden har jag missat att alla dessa år?".

En av de saker de tvångsmässiga sida av mig älskar om nätverkssäkerhet är att det är ett bottenlöst hål. Du kan spendera varje vaken stund att läsa blogg / list inlägg, ladda ner verktyg, tester i labbet, och ändå inte kunna linda din hjärna runt alla av det. Nätverkssäkerhet är subtil och full av nyanser. Allas hjärna är fast på olika sätt, så några av dessa nyanser är uppenbara, och andra inte så mycket. En av de coolaste sakerna sticker dig själv där ute är får du nytta av andra människors hjärnans kemi. Helt klart en av de största problemen på den vita hatten sida av staketet är att vi inte utbyta idéer / perspektiv tillräckligt ofta. Jag tror alltför ofta egot håller oss tillbaka.

Finns det folk som tror att de vet allt? Absolut. Återigen kan ego vara en knepig herre. Jag påminns om de gamla t-shirts och affischer där det stod: "Tonåringar: Lämna hemmet medan du fortfarande vet allt". Med nätverkssäkerhet, som de flesta saker i livet, det finns en barriär av upplysning. På ena sidan av barriären, verkar dammen liten och du tror att du har ett handtag på det hela. När du bryta igenom men du inser vidden av galaxen och hur långt fram den vägen fortfarande sträckor.

Så jag föreslår en 12 steg nörd programmet och jag kommer vara den första att klättra på en folktalare och erkänna "jag vet inte allt och jag är OK med det." En del av anledningen till att jag gav Jeff andra plats kom han på problemet från ett helt annat synsätt och utvecklat en lösning som jag inte tänker på. Med andra ord, genom att sätta ut mig själv där jag fick nytta av hans hjärna kemi.

Som Jeff, drar alla som läser detta på sina egna unika livserfarenhet och är fullt kapabel att komma upp med unika och innovativa lösningar också. Du kommer aldrig veta säkert men om du inte kontrollera egot gremlin och hålla dig där ute.

</ Soapbox>

Chris

Åh där, oh var kan WScale vara?

20 november, 2009

Om den här utmaningen verkade svårare än det borde vara, är du på rätt väg. ;)

Jag sprang över det här problemet när du skriver min Packet Decode verktyg. Jag måste säga, det var en cool övning för mig, eftersom jag aldrig riktigt tänkt på att skapa tcpdump och Wireshark filter för alla möjliga IP, TCP, UDP och ICMP område och / eller värde. Den överlägset TCP optioner fältet är den mest "trasiga" från ett paket avkoda perspektiv än någon annan IP-området.

Först ska vi prata om hur TCP optioner skulle ha varit genomfört. Om du tittar på IPv4 alternativ fältet, börjar det med en "Typ" identifierare. Om du är intresserad av en specifik IP-alternativ, det är bara en fråga om att kontrollera detta fält för rätt lite kombination. Hade TCP optioner genomförts på detta sätt skulle den här utmaningen har varit ganska rakt framåt.

Bara om alla TCP Optionerna har en "snäll" och "Längd"-fältet, som båda är 1 byte i storlek. Undantagen är "End of Option List" och "No-Operation" som bara har en sort konkurrensvillkor, och därmed är en byte i storlek. Här är en lista över vanliga TCP optioner:

tcp-options

Sidan 15 av RFC 793 berättar för oss "TCP-huvudet (även ett inklusive optioner) är ett helt antal 32 bitar långa." Med andra ord måste TCP-huvudet storlek i byte vara jämnt delbart med fyra (20 byte, 24 byte, etc.). Om man tittar på listan över TCP optioner, bara "Maximum Segment Size" är delbart med fyra. Så användning av andra alternativ kommer att kräva stoppning.

Hur stoppning bör tillämpas är lite oklart. Om vi tittar på sidan 26 i RFC 1323 finner vi detta:

  BILAGA A: GENOMFÖRANDE FÖRSLAG

    Följande layouter rekommenderas för sändningsalternativ på icke-SYN
    segment, för att uppnå högsta möjliga anpassning av 32-bitars och 64-bitars
    maskiner.

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

Notera NOP stoppning visas före tidsstämpel, inte i slutet som du kanske tror. Observera även RFC uttryckligen säger att detta är för "icke-SYN segment" och att det är "rekommenderat", krävs inte. Verkar dock att de flesta operativsystem följa denna rekommendation och alltid plats stoppning innan Kind och bytes längd. Jag har kollat ​​Windows, Linux, Mac, olika hårdvara, osv, och de alla lägger stoppning i början.

Så vi kan räkna med att detta är "standard", eller hur? Inte riktigt. Sidan 17 av RFC 793 beskriver NOP så här:

  Detta alternativ kod får användas mellan alternativ, till exempel för att
         anpassa början av en efterföljande alternativ på en ordgräns.
         Det finns ingen garanti för att avsändare kommer att använda detta alternativ, så
         mottagare måste vara beredd att bearbeta alternativ även om de inte
         inte börja på en ordgräns. 

Med andra ord, det är inte bara att NOP kan eller inte kan dyka upp i början, kanske NOP inte användas alls! Det är helt lagligt att layouten TCP alternativet fältet utan NOP stoppning och bara använda Slut på Alternativlista som fyllmedel i slutet för att uppnå den rätta gränsen.

Så vad hamnar vi med för ett filter? Om vi ​​räknar på NOP innan det alternativ vi sluta med ett filter som ser ut så här:

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

Att bryta ner vad detta filter gör:

  • Bara kolla SYN & SYN / ACK-paket: tcp [13] & 2 = 2
  • TCP-huvud är större än 20 byte (alternativ anges): tcp [12] & 240> 80
  • Kontrollera den första byten i varje fyra byte gräns för NOP: tcp [20] = 1, tcp [24 = 1, ...
  • Kontrollera de kommande två byte för att se om Kind = 3 och längd = 3: tcp [21:02] = 0 × 0303, tcp [25:2] = 0 × 0303, ...

Men om vi vill se till att vi fångar alla möjligheter om ett system inte genomför NOP vi sluta med:

tcp [13] & 2 = 2 och tcp [12] & 240> 80 och (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)

Skillnaden med detta filter är att vi kontrollerar Typ = 3 och längd = 3 hela vägen igenom alternativen området (som Elizabeth föreslår).

Kan någon av dessa filter genererar falsklarm? Absolut! Två möjligheter:

  1. Värdet av Timestamp kan matcha det mönster vi letar efter.
  2. Filtret tar en 40 fält byte alternativ. Det kan vara mindre med dessa värden i nyttolasten.

Så vilket filter bör du använda? Den första kommer att generera färre falsklarm, men missar system som är RFC-kompatibla, men skiljer sig från normen. Den andra kommer alltid att fånga Fönster Skala om den har ställts in, men chansen till ett falskt positivt är högre.

Jag ska utse Elizabeth som vinnare av utmaningen. Några andra var lika nära men hon var den enda med modet att lägga sin tankegång i kommentarerna. Jag kommer att dela ut ett andrapris till Jeff som kom upp med den här lösningen delvis skojar runt:

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

Detta kommer inte att generera en faktisk fånga paket, men du kunde göra en:

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

Och kör sedan ut genom txt2cap att få den tillbaka in pcap format. Han följde inte utmaningen specifikt, men du har måste ge beröm för att tänka utanför boxen eftersom detta fixar alla falska positiva frågor. ;)

Elizabeth och Jeff, jag kommer att kontakta dig både via e-post. Grattis!

TCP Alternativ - Final ledtråd

Nov 19, 2009

Jag har haft en tråd post och fyra e-postmeddelanden som såååå är nära det rätta svaret. Här är en sista ledtråd för att förhoppningsvis få folk över sista hindret.

Jag nämnde den hjälpsamma tshark kommandot. Här är resultatet:

C: \ test> tshark-n-r linux-syn.cap-T fält-e tcp.options
02:04:05: B4: 04:02:08:0 en: 02:47:04 A: A8: 00:00:00:00:01:03:03:05

Så vad du har ovan är TCP Alternativ (byte 20 och högre) av testet paketet. Fönster Skala alternativet är det sista alternativet i listan.

Jag vet att skriva detta filter är inte lätt. Faktum är att det är därför jag gjort det till en utmaning. Det är möjligt dock. ;)

TCP Alternativ Challenge - ledtrådar

18 november 2009

Tidigare Jag skrev en utmaning att skriva en tcpdump / Windump filter som skulle fånga upp paket som har TCP alternativet "Window Scale" set. Vissa folk är nära, men jag ville skriva ett par tips. Dessutom har jag inga problem med att du e-posta mig direkt, men att vinna utmaningen måste du lägga upp svaret på kommentarerna. På så sätt är det inte fråga om vem som fann svaret först.

Alla TCP alternativ anges av en "Registry Kind" värde (liknande ICMP "Typ"-fältet). I fallet Window Scale, är det värdet 3. Även alla TCP alternativ utom för NOP innehåller ett sekundärt område som kallas "Längd". Detta definierar hur många byte alternativen använder, inklusive "Registry Kind" byte. I fallet Window Skala längden värdet är alltid 3. Så vi har:

  • 1 byte för Registry Kind
  • 1 byte för längd
  • 1 byte för det faktiska WScale värde

Tips 2: Om du aldrig har borrat in i TCP Alternativ området har tshark en cool alternativ:

tshark-n-r capture-file.cap-T fält-e tcp.options

Detta kommer ut hela TCP optioner fält i Hex så att du kan åtminstone se hur det ser ut.

Final ledtråd, jag har postat en Linux-SYN paket som sätter WScale till 5 för dig att använda för att läsa dina filter.

linux-syn

Lycka till!

Chris

TCP Alternativ Challenge

18 november 2009

Jag har haft lite på gång även att släppa en ny referens verktyg för Apple iPhone och iPod. Verktyget är ringa Packet Decode och jag har inställningen en annan plats för att hjälpa till att upprätthålla den.

Jag känner mig dålig på att försumma denna webbplats under de senaste veckorna, så jag har beslutat att kasta ut en annan utmaning. Vinnaren får en gratis kopia av ovan nämnda Packet Decode verktyg. OK, så du kommer inte att kunna gå i pension på intäkterna, men förhoppningsvis verktyget kommer att göra ditt liv lite lättare. ;)

Så här är utmaningen:

Skriv en tcpdump eller Windump filter som bara kommer att fånga paket som har TCP "Window Scale" inställt. Alla andra TCP-option-inställningar kan ignoreras.

Ganska enkelt, eller hur? Första personen att lägga svaret i kommentarerna får priset.