Hvad er en Netværkstrafikstrøm?
Netværkstrafikstrømme (strømme) er nyttige til opbygning af en grovkornet forståelse af trafik på et computernetværk, hvilket giver en bekvem enhed til måling og/eller behandling af trafik.
strømme kan måles for at forstå, hvad værter taler på netværket, med detaljer om adresser, mængder og typer af trafik. Denne visning af netværket kan være nyttig til fejlfinding, registrering af sikkerhedshændelser, planlægning og fakturering
men hvad er en strøm, og hvordan defineres den?
dette spørgsmål lyder trivielt at besvare, men når vi graver dybere, finder vi nuancer og hjørnesager, der gør Strømme interessante og i sidste ende vanskelige at definere.
baggrund
for virkelig at forstå strømme skal vi starte med en vis baggrund.
netværk startede som kredsløbskoblet. Når en vært ønskede at kommunikere med en anden vært det spurgte netværket oprette et kredsløb. Efter at informationsstrømmen var afsluttet, blev kredsløbet revet ned.
Figur 1-eksempel kredsløbskoblet netværk
kredsløbskoblede netværk har deres arv i telefonnetværk. De har en række ulemper, herunder dårlig skalerbarhed og lav kapacitetsudnyttelse.
et alternativ var nødvendigt for at opbygge det, der i sidste ende blev Internet – pakkekoblede netværk. Meddelelser er hugget op i stykker af variabel størrelse, der adresseres individuelt og sendes som pakker på tværs af netværket.
figur 2-eksempel pakkekoblet netværk
den modtagende vært samler nyttelasten fra pakkerne tilbage i meddelelsen. Bemærk: pakker kan også indeholde kontroloplysninger, såsom strømningskontrol og stier behøver ikke at være symmetriske.
det er let at definere strømme i et kredsløbskoblet netværk, da kredsløbet er en strømning og følger en protokol til etablering og nedlukning (kredsløb = strømning); men i et pakkekoblet netværk er tingene mindre indlysende.
Forestil dig et sekund, at du er ved observationspunkt A i det kredsløbskoblede netværk af figur 1, du ville se:
figur 3-Forstør på kredsløbskoblet netværk
to strømme ville blive observeret – kredsløb mellem værter 3 & 4 og værter 5 & 6. Det er relativt let at observere strømme i et kredsløbskoblet netværk, fordi netværket er involveret i Opsætning af kredsløbene, så kender deres tilstand og slutpunkterne.
Forestil dig nu, at du er ved observationspunkt A i det pakkekoblede netværk af figur 2 i stedet, ville du se:
figur 4-Forstør på pakkekoblet netværk
pludselig er tingene mindre klare. Der er en pakke, der kommer ind fra vært 5 bestemt til vært 6. Forudsat at vi observerer i en periode, ser vi flere pakker ankomme og afgår. Det tager tid at observere strømme på et pakkekoblet netværk og kræver registrering og analyse af pakkeinformation.
første (Naive) forsøg på at definere en strøm
ved hjælp af vores viden om pakkekoblede netværk kan et første forsøg på at svare ‘Hvad er en strøm’ være:
en strøm er en sekvens af pakker, der bærer information mellem to værter
denne definition ligner:
figur 5 – første forsøg på at definere en strøm
der er dog et problem. Hvad sker der, hvis der sker mere end en type kommunikation mellem værterne, for eksempel har A en SSH-og HTTPS-forbindelse til B? Er SSH-og HTTPS-pakkerne en del af den samme strøm? Intuitivt siger vi Nej, de er forskellige sessioner, og endda helt forskellige protokoller. Vi kan gøre det bedre…
andet forsøg på at definere
hvad med at vi bruger protokoloplysninger fra pakkehoveder som fælles egenskaber til at identificere pakker i Strømme? Dette adskiller forskellige typer forbindelser i forskellige strømme.
en stor del af pakkerne på et netværk er sandsynligvis IP layer-3-protokollen, med TCP eller UDP som layer-4-transportprotokollen. Det er derfor rimeligt at overveje at bruge TCP-og UDP-parametre som strømningstaster fra pakkeoverskrifterne.
vi bruger 5 parametre fra pakkeoverskrifterne; kilde IP, destination IP, protokol, TCP eller UDP kildeport og TCP eller UDP destinationsport som en ordnet liste, almindeligvis kendt som 5-tuple, som de fælles egenskaber til at kortlægge pakkerne til strømme.
figur 6-eksempel 5-tuple
her går forsøg 2:
en strøm er en sekvens af pakker, der bærer information mellem to værter, hvor pakker har fælles egenskaber:
- alle pakker i strømmen deler den samme 5-tuple
vores scenarie ser nu sådan ud:
Figur 7-andet forsøg på at definere en strøm
perfekt du siger. Livet er godt. Vi har en definition for en strøm, intet mere at se her… men hænge på, hvad med retningen af pakkerne?
tredje forsøg – tovejs
en 5-tupel er ensrettet (envejs). Som standard vil det kun matche pakker, der kører i en retning, da pakker i omvendt retning har transponeret IP-adresser og portnumre og dermed en anden 5-tuple hash.
der er gode grunde til at betragte strømme som tovejs i modsætning til ensrettet, herunder evne til at bestemme klient/serveradfærd og beregne rundrejsetider samt forbedre detektering af sikkerhedshændelser såsom scanning.
overvej en simpel TCP-forbindelse i figur 8, Hvor pakker hopper frem og tilbage mellem vært a & B:
figur 8-Stigediagram over en simpel TCP-strøm
vi ser et klassisk TCP 3-vejs håndtryk (SYN, SYN+ACK, ACK) efterfulgt af udveksling af data. Envejs strømningsanalyse på et observationspunkt i netværket ville se to separate strømme, en pr. retning, som pr. figur 9:
figur 9-envejs stiger til simpel TCP-strømning
problemet med envejs strømningsmåling er, at vi savner muligheden for at fange nogle vigtige metadata om strømmen. Sikker på, at hver envejs strøm kan gemme retningsbestemte metadata for bytes og pakker i den retning. Dette kan omfatte inter-pakke timing (se mærkede prikker i figur 9). Men vi går glip af muligheden for at samle metadata, der kræver måling af trafikparametre på tværs af begge retninger.
overvej tovejs observation i Figur 10:
Figur 10-stige af Tovejsobservationer for simpel TCP-strømning
vi kan nu observere og måle TCP 3-vejs håndtryk (punkterne F1, B1, F2) og se på andre målinger som svartider.
for tovejsstrømme har vi brug for to 5-tupler, hvoraf den anden vender tupelrækkefølgen for både IP-adresserne og portnumrene. Nedenfor er et eksempel på SSH-strømning fremad og omvendt 5-tupler:
Figur 11-vende en 5-tuple
højre, det var ikke for svært. Men vent, en lille detalje lurer, der kræver yderligere opmærksomhed. Hvordan ved vi, hvad der er fremadgående retning af strømmen? Vi bestemmer retningen baseret på den første observerede pakke, som antages at rejse i klient til serverretning, men dette vil ikke være 100% pålideligt, da pakker kunne være ude af drift og/eller observationen kunne starte delvist gennem en strømning. Vi bruger med denne metode, men skal huske, når vi ser på resultater, at det ikke er perfekt.
en alternativ metode er inspektion af transportprotokolfelter. I TCP er tilstedeværelsen af bare SYN-flag en rimelig indikator for, at pakken er den første i strømmen.
vores definition for en strøm er nu:
en strøm er en sekvens af pakker, der bærer information mellem to værter, hvor pakker har fælles egenskaber:
- alle pakker i strømmen deler den samme 5-tuple eller transponerede 5-tuple
fjerde forsøg-herunder ikke-TCP IP-trafik
indtil dette tidspunkt har vi antaget, at transportprotokollen er TCP. Hvad med andre IP-transportprotokoller?
UDP er det oplagte valg for den næstmest almindelige transportprotokol, især med stigningen i realtidstrafik over UDP samt nye protokoller som f.eks. UDP passer let ind i den samme model, som den har kilde-og destinationsportnumre, som pr. eksempel nedenfor:
Figur 12-reversering af en UDP 5-tuple (samme som TCP)
Stream Control Transmission Protocol (SCTP) er en anden transportprotokol, der bruger portnumre og således fungerer med en 5-tuple.
men hvad med andre protokoller, IPsec for eksempel?
IPsec ESP (Encapsulating Security Payload) er en protokol, der ikke inkluderer kilde/destinationsportnumre, så vi er nødt til at falde tilbage til en 3-tuple, da det ikke er praktisk at forstå protokollens nyttelast.
figur 13-tovejs 3-Tuple
vores definition for en strøm er nu:
en strøm er en sekvens af pakker, der bærer information mellem to værter, hvor pakker har fælles egenskaber:
- til transportprotokoller med portnumre (dvs.TCP / UDP / SCTP):
alle pakker i strømmen deler den samme 5-tuple eller transponerede 5-tuple
else:
alle pakker i strømmen deler den samme 3-tuple eller transponerede 3 – tuple
der er dog endnu en faktor at overveje-tid.
femte forsøg – Strømningsudløb
en strømning eksisterer kun i en vis tid. Det er muligt, at den samme 5-tuple (eller 3-tuple) kunne genbruges på et andet tidspunkt til en anden strømning mellem de samme værter.
overvej to værter, hvor den ene initierer mange nye TCP-forbindelser til den anden. Hver ny TCP-forbindelse får en ny kildeport, som generelt øges med 1 fra den tidligere tildeling. IANA tildele området 49152 til 65535 for disse flygtige havne, hvilket giver 16384 porte. Over tid vil TCP-Kildeporten rulle gennem området, og den originale kildeport genbruges, og denne strømning vil have den samme 5-tupel som den oprindelige strømning. Dette udgør et problem, da det ikke er den samme strøm!
for at løse dette har vi brug for strømme, der skal udløbe, hvor der ikke ses pakker i mere end et bestemt tidsrum. Her går vi igen:
en strøm er en sekvens af pakker, der bærer information mellem to værter, hvor pakker har fælles egenskaber:
- til transportprotokoller med portnumre (dvs.TCP/UDP/SCTP):
alle pakker i strømmen deler den samme 5-tuple eller transponerede 5-tuple
else:
alle pakker i strømmen deler den samme 3-tuple eller transponerede 3-tuple
- alle Inter-pakketider er mindre end vilkårlig udløbstidsværdi for strømmen
sjette forsøg-vilkårlige parametre
nogle gange vil du måske have forskellige parametre til at identificere strømme, eller disse kan blive tvunget på dig af typen af udstyr/programmer i netværket.
i en Cisco-router identificeres strømme for eksempel ved hjælp af en 7-Tuple, der tilføjer type Service (ToS) og input-undergrænseflade til standard 5-Tuple. Der kan også være situationer, hvor lag-2 felter, såsom kilde eller destination MAC-adresse, kan give mening som strømningstaster (selvom bemærk, at de kun er lokalt signifikante).
der er andre parametre, der kan bruges som fælles egenskaber til strømningsidentifikation; det er i sidste ende op til operatøren at beslutte og udstyrets muligheder. Baseret på dette forfiner vi definitionen yderligere:
en strøm er en sekvens af pakker, der bærer information mellem to værter, hvor pakker har fælles egenskaber:
- til transportprotokoller med portnumre (dvs.TCP / UDP / SCTP):
alle pakker i strømmen deler den samme 5-tuple eller transponerede 5-tuple
else:
alle pakker i strømmen deler den samme 3-tuple eller transponerede 3-tuple
- alle Inter-pakketider er mindre end vilkårlig strømningsudløbstidsværdi
- kan bruge vilkårlige parametre som strømningstaster, inklusive ToS, interface osv.
indpakning det hele op
vi har vist, at producere en enkelt altomfattende strøm definition er et vanskeligt problem. Strømningsdefinition er implementeringsspecifik, afhængig af brugerkrav samt mulighederne for netværksudstyr, der måler strømmen.
i del 2 af dette blogindlæg vil vi gå ind i yderligere overvejelser for strømme som IPv6 strømningsetiketter, fragmentering (IPv4 og IPv6 problem..), kryptering, ikke-IP-pakker og hvordan strømme måles og bruges i andre systemer såsom SDN.
se: https://www.eecs.yorku.ca/course_archive/2015-16/W/3214/CSE3214_01_PacketCircuitSwitching_2016_posted_part2.pdf
for nogle relaterede papirer, se: https://www.researchgate.net/profile/Brian_Trammell/publication/245587221_Bidirectional_Flow_Measurement_IPFIX_and_Security_Analysis/links/0f3175331dd3b49103000000/Bidirectional-Flow-Measurement-IPFIX-and-Security-Analysis.pdf og https://is.muni.cz/th/hilnn/cse2009.pdf
for relevant RFC, se: https://tools.ietf.org/html/rfc5103
For mere om standardisering af KVIC, se: https://datatracker.ietf.org/wg/quic/about/
se: https://www.cisco.com/en/US/tech/tk812/technologies_white_paper09186a008022bde8.shtml
Leave a Reply