Hvad er en Netværkstrafikstrøm?

traffic_wide

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.

flow2

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.

flow3

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:

flow4

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:

flow5

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:

flow6

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.

flow7

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:

flow8

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:

flow9

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:

flow10

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:

flow11a

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:

flow12

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:

flow13

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.

flow14

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