garoeda gegroet iedereen , dit is de laatste presentatie van de openingsdag van Umeet 2002
garoeda als laatste is Dan Kaminsky, hij werkte 2 jaar als securityeengineer bij cisco
garoeda vandaag presenteert hij enkele netwerk tools geheten paketto keiretsu
garoeda welkom Dan,
garoeda (exit sarnold)
garoeda DanKamin
garoeda hallo iedereen
garoeda zoals Seth zei, onlangs heb ik een serie tools vrijgegeven die ik Paketto Keiretsu heet
garoeda ze kunnen op volgende url gevonden worden
garoeda http://www.doxpara.com/paketto/paketto-1.0.tar.gz
garoeda versie 1.01 zal snel gereleased worden daar ik een vervelende compilatie fout heb :-)
garoeda ik heb het volgende onderzocht
garoeda als ik directe controle neem over het netwerk, mijn eigen packets maak, mijn eigen stack maak en de oorspronkelijke betekenis van de datavelden niet respecteer
garoeda wat kan ik dan doen?
garoeda machines crashen is niet echt het belangrijskte voor me
garoeda Maar er zijn heel wat interessante functionaliteiten die netwerken nog niet kunnen voorzien
garoeda wel, niet alles wat ik wilde doen is gelukt (bij voorbeeld, er is geen goede manier om snel UDP poorten te scannen) maar ik vond heel wat onontdekt potentieel in de bestaande tcp/ip netwerken
garoeda hierover ga ik vandaag wat vertellen
garoeda de handigste tool is van Keiretsu is scanrand.
garoeda scanrand is een stateless TCP  scanner met de bijkomstiheid dat ie routes en eindpunten kan ontdekken
garoeda het kan heel snel itereren over hosts,ports en hops om een gedetaileerd beeld van de beschikbare services en routes van een netwerk te geven
garoeda door de stateless opbouw, krijgt 'heel snel' een nieuwe betekenis
garoeda tijdens het testen,was scanrand geconfigureerd om een klasse B netwerk van een grote multinational te onderzoeken
garoeda ze waren hiervan volledig op de hoogte natuurlijk :-)
garoeda 65k hosts ontvingen een 'probe' op hun http poort
garoeda 83000 hosten antwoorden positief, nog meer anderen antwoorden negatief
garoeda de scan duurde ongeveer 4 seconden
garoeda de architectuur van scanrand is eigenlijk vrij simpel
garoeda tijdens de instantiatie splitst de applicatie in 2: een die een enorme hoeveelheid connecties aanmaakt , of SYNs, en het andere deel ontvangt deze SYNs en doet de parsing van van de hosts die up en down zijn (of dat zo doorgeven)
garoeda er is geen inter-proces communicatie tussen deze 2 processen
garoeda en, alles wat geweten moet worden van een scan wordt uitgevist door de reply op het eindpunt
garoeda dit betekent dat één machine 65k eindpunten kan scannen, zelfs veel meer, zonder een steeds groter worden hoeveelheid geheugen bij te houden voor alle antwoorden
garoeda dit is de reden waarom vroegeren scantechnieken stopten bij 100 scans per seconde
garoeda het probleem met een stateless aanpak is dat wanneer we niet bijhouden met wie we praten, iemand zou kunnen zien:
garoeda hé, ze zijn ons aan het scannen, doelloos zelfs, laat hem valse antwoorden sturen
garoeda (Dan bedankt de vertalers :-))
garoeda nu, dit is misschien vervelend maar afhankelijk van het gebruik van scanrand (de backend bijvoorbeeld, eg een database) kan dit een serieus security gevaar worden
garoeda ik kom vanuit de security wereld (ik werkte namelijk met OpenSSH) dus dit was onaanvaardbaar voor mij
garoeda de oplossing is door (zoals ik ze noem) inverse SYN Cookies te gebruiken
garoeda in TCP, wanneer je een SYN stuurt om een connectie te vragen ontvang je a SYN|ACK(the port is up) or a RST|ACK(the port is down)
garoeda Beide SYN|ACKs and RST|ACKs
garoeda hebben meer mogelijkheden dan "Up" of "Down"  ze bevatten onder andere addresserings informatie die we nodig hebben om stateless te bepalen wie we een request stuurden en naar welke poort we kijken
garoeda maar, ook ze bevatten een 32 bit nummer dat we kunnen kiezen van de SEQ#
garoeda euh
garoeda van de SYN
garoeda dit nummer is gekend als het Sequence Number of SEQ#
garoeda en dat is 'gereflecteerd' in het Ackowledgement Number or ACK# van eender welke geldige SYN|ACK or RST|ACK
garoeda 32 bis is genoeg om cryptografisch sterke variable te bevatten die een antwoord aan een geldige scan linkt
garoeda in technische termen, we gebruiken SHA-1 in the HMAC, or Hashed Message Authentication Code, om een 160 bit waarde te construeren die een combinatie is van : source ip, source port, destionation ip, destination port
garoeda dan worden de eerste 32 bits eraf gehaald en worden ze in de SEQ# gegooid
garoeda wanneer de SYN|ACK or RST|ACK terugkomt, keren we het proces om (verminder ACK# met 1, want reflectie stijgt) om te kijken of de host echt wel een scan van ons ontvangen heeft
garoeda HMAC houdt een geheime waarde in die enkel voor de scanner geweten is
garoeda dit laat de host met keuze: reply met geldig antwoord of niet antwoorden
garoeda (eender welk geldig ding kan genegeerd worden)
garoeda http://www.doxpara.com/read.php/docs/scanrand_logs.html
garoeda hier vind je logs van Scanrand in gebruik
garoeda zoals je kan zien, 254*20 poorten zijn gescanned op een 100 mbit Lan en de resultaten zijn gekend in 0.182 seconden
garoeda dit is een simpele techniek en heel succesvol
garoeda veronderstel dat dat remote hosts packets zenden met een waarde modulo 32 -- 64, 128, 255
garoeda dan een der welk verschil je krijgt van die waarde, dat is het aantal hops dat het packet nodig had om bij jou te geraken
garoeda dus wanneer ik slashdot scan is het zo'n 12 hops verder
garoeda laat ons dat nagaan, statelessly :-)
garoeda Scanrand's stateless traceroute neemt voordeel van een hiervoor vergeten feit
garoeda ICMP fouten kunnen meerdere fouten bevatten
garoeda ze bevatten een volledige copy van de conflicteredende IP header en de eerste 8 bytes van de laag 4 data van het packet
garoeda TCP/UDP/ICMP
garoeda traceroute werkt als volgt:
garoeda er bestaat een ip  in een waarde geheten TTL
garoeda dit staat voor Time To Live
garoeda TTL is *verondersteld* naar seconden te verwijzen maar dit is geevolueerd naar het het aantal hops dat een packet mag doorreizen voor het gedumpt wordt
garoeda met een TTL van 5 gaat een packet na 5 stappen verdwijnen
garoeda door een ICMP Time Exceeded Message tte sturen (met een IP en TCP header , hint)
garoeda dus traceroute zend enkel een packet met TTL van 1,2,3,4 of 5 enzovoort tot het op zijn doel raakt
garoeda a stateless traceroute  stuurt zijn iteraties in een keer, in het voorbeeld van 1 tot 13 die verzonden worden
garoeda wanneer het antwoord terug komt, kijken we naar IP en TCP headers om uit te vinden wie we probeerden te scannen
garoeda in dit geval keken we naar  66.35.250.150
garoeda op het einde van de scan ontdekken we dat het 13 hops zijn ipv 12
garoeda maar zoals we later zullen zien, de schatting blijft nuttig
garoeda latere voorbeelden demonstreren geavanceerdere toepassingen van scanrand
garoeda DNS resolution is redelijk synchroon dus het vertraagt de werken, ideaal zou je een tool gebruiken dat http logs neemt en automatisch alle ip's vervangt door hostnames
garoeda en zo zijn er heel veel
garoeda (noot vertaler: vertraagt de werking)
garoeda Dan verdwijnt eventjes wegens kleine technische problemen
garoeda een van de meer interessantere dingen van een gecombineerde poort scanner en tracerouter is dat we beiden op hetzelfde moment kunnen doen
garoeda dit wordt aangetoond door de volgende entry in de scanrand logs (opnieuw zie http://www.doxpara.com/read.php/docs/scanrand_logs.html )
garoeda de terugkeren zijn 'out-of-order' maar zoals je kan zien, de eerste hops zijn gelijke maar hoe verder we gaan, hoe meer onze scan divergeert
garoeda dit is natuurlijk wat we verwachten
garoeda toekomstige versies van scanrand gaan expliciet 'remote mesh' ontdekking ondersteunen
garoeda dit gaat inhouden: source routting tot een bekend punt, n hops verder, zet de TTL naar n+1, probeer dan verschillende adressen  te bereiken die verwacht zijn zo ver mogelijk van elkaar verwijderd te zijn in remote route tabellen
garoeda de snelheid van de stateless aanpak zou de meeste netwerken traceerbaar kunnen maken in verbazingwekkend weinig tijd
garoeda maar dat zullen we nog zien :-)
garoeda een belangrijk ding is dat het zeer doenbaar is het scan en ontvang proces te verspeiden over verschillende machines
garoeda bijvoorbeeld, een systeem kunnen we als scan verzamelaaar beschouwen  terwijl alle andere hun resultaten ernaar doorsturen
garoeda dit is de meest 'alternate' methode van source routing :-)
garoeda en het is gedemonstreerdt in de allerlaatste log entry
garoeda het volgende dat ik ga bespreken is een paratrace, eigenlijk een afsplitsing van scanrand
garoeda een afsplitsing omdat het iets geheel anders doet dan scanrand
garoeda http://www.doxpara.com/read.php/docs/paratrace_logs.html
garoeda terwijl scanrand nieuwe connecties opent om netwerken te zoeken gebruikt paratrace bestaande connecties
garoeda dit is de enige effectieve manier om policy routes en door statefull firewalls te raken
garoeda het idee is simpel: traceroute is volledig op Laag 3 gebaseerd, itereer over de TTL , bekijk de ICMP Time Exceeded reply.
garoeda het maakt niet uit wat we op Laag 4 hebben
garoeda dus als Laag 4 geldig TCP verkeer is geeft Traceroute er niet om
garoeda nu, TCP heeft de mogelijk om redundante packets te ondersteunen, het maakt deel uit van (en is voorzien voor) het onbetrouwbare netwerk dat IP aanbiedt
garoeda eigenlijk, deze eigenschap is gebruikt als een soort 'in-session' TCP ping, "tcp keepalive"
garoeda in essentie gebruikt paratrace keepalives als transport voor een IP traceroute
garoeda de resulaten zijn zichtbaar in de logs
garoeda passieve hoptelling schatting wordt gebruikt om te ontdekken hoeveel je parasitic traceroute moet iterernen
garoeda laat ons over Minewt spreken
garoeda zoals ik zei, het oorpsronkelijke design doel van Paketto was om te onderzoeken wat we kunnen doen door de draad fysisch te benaderen
garoeda Minewt is een NAT gateway die volledig werkt in software, de draad direct manipuleert om zichzelf te instantieren
garoeda het gebruikt geen kernel resources, behalve dan de pure netwerk verbinding aangeboden door ibnet/libpcap's manipulation of sockets and bpf
garoeda sarnold: BPF ?
garoeda inderdaad, zelfs het MAC adres wordt niet gedeeld met de kernel, het lijkt echt alsof een nieuw device op de draad is gekomen
garoeda sarnold: gebruikt linux BPF? ik dacht dathet netlink of gelijkaardig gebruikt ipv bpf
garoeda BPF is the Berkeley Packet Filter: een standaard interface om netwerk verkeer op te vragen dat een bepaalde vorm matched/overeen komt
garoeda zoals sarnold al toonde, bpf zelf is niet direct geimplementeerd door alle kernels
garoeda libcpcap implementeerdt bpf in userspace wanneer nodig, alhoewel ik geloof dat ze hun eigen kernel interface hebben voor linux
garoeda het belangrijkste is dat Paketto in het algemeen vrij goed afgeschermd is van de verschillende kernel netwerk interfaces, met een frame kan ik al werken
garoeda laat ons kijken naar minewt logs at http://www.doxpara.com/read.php/docs/minewt_logs.html
garoeda dit wordt gedaan
garoeda ./minewt -i 10.0.1.180 -I 10.0.1.190 -r 10.0.1.254 -v
garoeda -i 10.0.1.180  == het ip waar machines op mijn netwerk mee moeten communiceren is 10.0.1.180
garoeda -I 10.0.1.190  == het ip dat de buitenwerld verwacht 10.0.1.190
garoeda -r 10.0.1.254  == het ip dat packets naar (the default gateway) zal sturen is 10.0.1.254
garoeda -v voor verbose
garoeda merk op dat minewt  zal heel snel verkeer opvangen het en het correct NATten
garoeda Minewt is een stateful programma, mar het is flexibel, eender welk uitgaand packet (SYN, TCP, Keepalive etc) bevat de state om een nieuwe sessie te starten
garoeda tussen dat en het feit dat minewt zijn eigen MAC addressen beheert
garoeda is het mogelijk minewt te starten op een machine, het af te sluiten en het op een andere machine te starten zonder dat hosts hun verbinding verliezen
garoeda minewt is vrij snel, sub-ms dealy
garoeda FreeBSD is waarschijnlijk het snelste platform, maar ik heb problemen gehad op andere vlakken
garoeda In termen van queso/xprobe identification, minewt biedt enkel volgende service:  ICMP Echo -> ICMP Echo Reply
garoeda het gebuikt de incomende ping om een uitgaande ping te construeren, dus ik verwacht een soort ping die *alleen* minewt kan genereren
garoeda ik heb dit nog niet getest
garoeda wanner minewt een ping ontvangt dumpt het programma de huidige state tabel, dit zie je naar het einde van de logs
garoeda Minewt heeft 2 features die redelijk interessant zijn
garoeda ten eerste, Minewt implementeert wat ik noem MAC Address Translation
garoeda dit feature krijg je gratis als deel van de infrastructuur
garoeda sinds ik geen kernel interface gebruik kan ik ook geen gebruik maken van aardigheidjes zoals de ARP cache
garoeda nu, hier is iets interessant
garoeda ARP bestaat om  L3(IP) naar  L2(MAC) te mappen
garoeda nu, hier is iets interessant:
garoeda de manier waarop NAT werkt is om de lokale poort naar een uitgaande connectie te mappen naar het interne IP addres die ze creerde
garoeda effectief
garoeda NAT mapt L4(Port) naar L3(IP)
garoeda en ARP mapt L3(IP) naar L2(MAC)
garoeda dus transitief: we kunen MAT mappen L4(Port) naar de combinatie van L3(IP) en L2(MAC)
garoeda en sinds we geen kernel ARP cache gebruiken moeten we wel :-)
garoeda dit is een interessant bij-effect
garoeda we hoeven ons nu geen zorgen te maken om het IP adres dat de backend client neemt
garoeda als ze een 10.x ip willen ,geen probleem
garoeda als ze het exterieure IP willen , het *echte* ip, eigenlijk ook geen probleem
garoeda als er 10 zijn die het exteren IP willen hebben
garoeda nog altijd geen probleem
garoeda omdat de MACS's allemaal verschillend zijn
garoeda dit betekent: in een beperkt aantal gevallen kan men de packet integriteit bewaren
garoeda een interessante vraag dook op
garoeda "dus, met minewt kan je jezelfd verstoppen achter een virtuele router zonder teruggevonden te worden?  want als je afsluit is de router weg..of blijven er toch sporen achter?"
garoeda Minewt is even effectief als je MAC en IP adres te veranderen, als dat de traceerbaarheid bemoeilijkt, zal minewt dat ook doen
garoeda je zal vrijwel altijd traceerbaar zijn tot in je subnet daar  minewt naar iets moet  routen
garoeda een andere interessante eigenschap van minewt is Guerilla Multicast
garoeda dit zal meer onderzocht worden in de volgende versie van Paketto
garoeda maar het basisidee is om rond een van de grote moeilijkheden van moderne netwerk te geraken: één packet, één bestemming
garoeda als ik een packet wil versturen naar verschillende bestemmingen, met het huidige internet
garoeda in het geval het je nog niet opgevallen is: het internet ondersteunt multicast niet te goed
garoeda voor zover het al multicast ondersteunt :-)
garoeda het Internet, het IP routeerbare universum, is geblokkeerd op unicast
garoeda maar we maken niet direct een verbinding op IP niveau, we neigen ernaar om ethernet te gebruiken als interface met IP en ARP vertaalt Ethernet MACS naar Internet IP's
garoeda Ethernet ondersteunt broadcast en multicast perfect,  MAC of FF:FF:FF:FF:FF:FF of 01:00:5E:??:??:??, respectively
garoeda laat ons ARP gebruiken om een *unicast* IP , perfect voor het internet, naar een *broadcast/multicast* IP adres te linken, perfect voor iedereen op ons LAN
garoeda daarom dat, wanneeer de router verderop packets terugstuurd, ze zullen ARP'enen  BC/MC zien en dat naar de switch sturen, die de frame naar iedereen zal splitten
garoeda er is weinig wat we hier mee kunnen doen, behalve alle uitgaande verkeer van minewt sniffen,er is VEEL interessanter werk met deze techniek komende in toekomstige versies
garoeda de Helix Community Source gaat een workout krijgen
garoeda een IP op een LAN zal bestempeld worden als het unicast IP waar al de gedeelde verbindingen over gerouteeerd zullen worden
garoeda en elke oplettende client zal zijn deel van het antwoord werk op zich nemen, UDP als nodig, TCP als het moet
garoeda maar dat is voor versie 1.1/2.0 :-D
garoeda er zijn nog veel meer mogelijkheden met laag niveau netwerking
garoeda heel wat waar ik hoop dat ik er niet over zal moeten schrijven
garoeda C heeft goede ondersteuning om rechtstreeks op laag niveau te werken, andere talen hebben dat niet
garoeda ik zou willen programmeurs van die talen 'in the fold' willen brengen
garoeda dat is het doel van Linkcat or IC
garoeda Ic is eigenlijk een netcat op Laag 2, geef me data, ik gooi het op de draad
garoeda netcat maakt er een TCP sessie van
garoeda linkcat gooit het echt op het ethernet
garoeda http://www.doxpara.com/read.php/docs/lc_logs.html
garoeda deze logs tonen hoe ik een ICMP echo kan copy pasten met linkcat
garoeda text-mode etherreal bewijst dat we echt een geldig packet versturen
garoeda linkcat ondersteunt zowel een bijna raw  netwerk modus gebaseerd op libpcap (je kan tcpdump logs aan linkcat geven voor herversturing alhoewel tcprealy hierveer een beter tool is
garoeda let op de ASCII modus in de logs
garoeda er is ondersteuning voor HMAC's in Ethernet TRailers
garoeda Ip heeft een expliciet lengte veld dat vertelt over hoeveel data het zich bekommert
garoeda maar Ethernet laat je toe om meer toe te voegen, met als limiet the Maximum Transmission Unit(MTU) size
garoeda dus je kan gewoon extra data toevoegen, zelfs een optionele geparste cryptovariabele die de data authenticeert
garoeda dus als je ooit je ARP's wou ondertekenen
garoeda dit is de manier om het te doen :-)
garoeda in volgende versies zal er meer rond Ethernet Trailers gedaan zijn, dit is juist een een proof of concept
garoeda Linkcat ondertekent willekeurige frames met een 'shared secret'
garoeda en uiteindelijk, last but not least
garoeda fototjes
garoeda http://www.doxpara.com/pics/index.php?album=phentropy/
garoeda gebaseerd op de exellente research van Michel Zalewski (http://razor.bindview.com/publish/papers/tcpseq.html), phentropy geeft een 3 dimensionale visualisatie van de willekeur (het random zijn) van willekeureige datasets
garoeda gebuik is simpel
garoeda phentropy data
garoeda wanneer de data in ascii formaat staat
garoeda phentropy -a data
garoeda de output is heel interessant
garoeda bash_rand1 is waarschijnlijk het meest handige, dit is een plot van de Bash $RAND variabele
garoeda het toont opvallende stijgingen en dalingen, niet direct wat je zou verwachten van random data
garoeda bash_rand2 toont de dataset geroteerd
garoeda de tool om deze renderings te doen is enorm snel,  vrijgegeven op SIGGRAPH 2002 en nu beschikbaar op openqvis.sourceforge.net, OpenQVIS rendert *willekeurige* 3dimensionale datasets in realtime, gebruik makende van de pixel shaders in moderne 3D kaarten
garoeda het is goed om meer met 3D te doen dan dingen opblazen :-)
garoeda opzettelijke random input is *heel* interessant
garoeda de BSD kernel lijkt op een Borg Cube
garoeda de default achtergrond van windows XP lijkt op 3 driehoeken
garoeda een vergelijking tussen het linker en rechterkanaal van muziek die ik schreek bleek heel interessant te zijn: het werd een buis, met schijnbaar hol 'hollow' binnenste
garoeda zie ook  stereo_r_vs_l_8
garoeda linkcat kan met '-o m-n ' data generen die phentropy kan visualiseren
garoeda het zal heel interessant zijn om te zien wat phentropy/openqvis zal doen met verschillende datasets
garoeda wat representeert phentropy: neem 4 waarden an de data: a, b , c;d . tussen die 4 zijn er 4 deltas, b-a, c-b, d-c, Maak hiervan een XYZ en teken ze
garoeda dat is wat elk punt is
garoeda nu, de verzameling van alle punten kan gezien worden als een cluster, dit zijn de secties waar de delta's, onafhankelijk van hoe ze gedistribueerd zijn over de totale range van values , gelijkaardig beginnen te zijn
garoeda volledige random data zou geen clusters mogen hebben
garoeda niet random data (zoals, slashdot comments) focussen op bepaalde zones
garoeda dus dat is het
garoeda in 2003 gaan er verschillende nieuwe dingen in Paketto komen
garoeda maar daar zijn we nu nog volop mee bezig :-)
garoeda (einde presentatie)

Generated by irclog2html.pl by Jeff Waugh - find it at freshmeat.net!