Inleiding
Dit document beschrijft de nieuwe technieken die vanaf 7.4 in Snort 3 zijn toegevoegd.
Achtergrondinformatie
- De Snort 3 detectiemodule werkt in blokmodus. Hoewel die aanpak (relatief) een prestatievoordeel en implementatieeenvoud biedt, heeft het enkele beperkingen voor het detecteren van handtekeningen die meerdere gegevensblokken omvatten.
- Om de gebruikerservaring te vergemakkelijken, zijn er al enkele verbeteringen geïmplementeerd in Snort, namelijk:
- Met Flowbits kan de regelschrijver de netwerkstroom markeren met een door de gebruiker gedefinieerde eigenschap; die eigenschap kan worden ingesteld, gewist en getest op elk pakket uit de stroom (het biedt een manier om te concluderen over een grotere handtekening over pakketten).
- Een stream-module accumuleert draadpakketten in een opnieuw opgebouwd pakket, wat een groter en zinvoller blok is dan een onbewerkt pakket; het evalueren van IPS-regels tegen het opnieuw gebouwde pakket geeft meer kansen om het hele beeld te zien en een groter patroon te matchen (handtekening).
- In sommige gevallen bevat het opnieuw gebouwde pakket niet alleen nieuwe gegevens, maar ook een deel van eerdere gegevens die al door detectie zijn verwerkt; opnieuw laat dat blok van geaccumuleerde gegevens handtekeningen toe die (tot op zekere hoogte) achterwaarts op de stroom worden gedetecteerd.
- Een stroomsplitter snijdt de stroom in blokken, maar het snijpunt is mogelijk een zwak punt dat de aanvaller kan gebruiken om patroondetectie te voorkomen; dus Snort heeft een jittering-mechanisme geïmplementeerd om het splitsen onvoorspelbaarder te maken. Dit bemoeilijkt de analyse voor de aanvaller.
Wat is nieuw
Stateful signature evaluation is een nieuwe techniek die aan de lijst kan worden toegevoegd. Het breidt detectiemogelijkheden uit door IPS-regelevaluatie over meerdere blokken mogelijk te maken. Een regel komt dus niet onmiddellijk niet overeen als het huidige blok geen gegevens heeft, maar wacht in plaats daarvan op meer gegevens.
Ondersteunde platforms
Minimale software- en hardwareplatforms
|
Min. ondersteunde beheerdersversie
|
Beheerde apparaten
|
Min. ondersteunde versie van beheerde apparaten vereist
|
Opmerkingen
|
|
Beheerscentrum 7.4.0
|
FTD
|
7.4.0
|
Alleen snuiven 3
|
|
Apparaatbeheer 7.4.0
|
Elke FTD die FDM-beheer ondersteunt
|
7.4.0
|
Alleen snuiven 3
|
Kenmerken en details
Functionele functiebeschrijving
Hoe werkt het?
De werkstroom van de detectiemodule wordt weergegeven in het diagram. In de fase van de verkeersverwerking heeft de module al alle regels geladen en accepteert het gegevensblokken op een een-voor-een manier, evalueert het regels en definieert het de acties die moeten worden ondernomen voor het proces stateful signature evaluation block.

Opmerkingen over het schema:
- Zodra een subset van regels is gedefinieerd voor het huidige gegevensblok, wordt elke regel ervan onafhankelijk van andere regels geëvalueerd.
- Elk gegevensblok wordt onafhankelijk van andere blokken geëvalueerd.
- Het gegevensblok is een abstractie voor een reeks IPS-buffers die worden geëvalueerd voor het huidige pakket.
- Actie is een lijst met acties die voor het huidige pakket zijn geëvalueerd; het definitieve vonnis wordt later bepaald.
Om te begrijpen hoe stateful handtekening evaluatie werkt, neem een kijkje op hoe een gemeenschappelijke IPS-regel wordt geëvalueerd en hoe gegevensblokken een stroom kunnen vormen.
evaluatie van gemeenschappelijke regels
Een IPS-regel kan in deze vorm worden gepresenteerd:
action protocol source → destination ( option_1: parameters; option_2: parameters;
option_3: parameters; gid: 1; sid: 1; meta_option_1; meta_option_2; meta_option_3; )
Waarbij:
actie - IPS-actie op het pakket als de regel vuurt
protocol-overeenkomend protocol
bron, bestemming - IP-adres en poort
optie_1, optie_2, optie_3 - IPS-opties die deel uitmaken van de evaluatie van regels
GID, SID - een uniek paar dat de regel identificeert (ze zijn als metagegevensopties)
Meta_Option_1, Meta_Option_2, Meta_Option3 - Metagegevens over regels, zoals een bericht, een klassetype of een verwijzing, nemen deze opties niet deel aan de evaluatie van regels.
- Protocol, bron en bestemming vormen een regelkop. Het fungeert als een filter voor een netwerkstroom (die stroomt om te accepteren voor evaluatie). Alles tussen haakjes is een regellichaam. IPS-opties (behalve regelmetagegevens) van de regelinstantie zijn de opties die worden geëvalueerd voor het gegevensblok. Ze voldoen aan deze verklaringen:
- Opties worden strikt in links-naar-rechts volgorde geëvalueerd.
- Dit kan een van de twee belangrijkste types zijn.
- bufferinstelling, selecteert de optie de IPS-buffer voor het huidige pakket.
- Andere (patroonzoekopdracht, wiskundige bewerking, cursormanipulatie, flowbitbewerking)
- een cursor wordt gebruikt om de positie in de geselecteerde IPS-buffer te volgen.
- Een optie kan zijn:
- 'Absoluut', wat betekent dat het niet afhankelijk is van de positie van de cursor
- 'Relatief', wat betekent dat de evaluatie begint vanaf de positie van de cursor
- Als een optie probeert de cursor uit de geselecteerde IPS-buffer in te stellen, mislukt deze en komt de hele regel niet overeen (vanwege een gebrek aan gegevens)
- Het laatste punt is een beperking van de detectiemodule. Als Snort onbeperkte bronnen zou kunnen hebben, zou het alle gegevens opslaan die worden gezien om regels steeds opnieuw te evalueren wanneer gegevens beschikbaar komen (meer wirespakketten arriveren).
Gegevensstroom en IPS-buffers
- De datastroom is een stroom van bytes in een aaneengesloten vorm van dezelfde bron. Het is een nieuw concept dat wordt gepresenteerd ter ondersteuning van een stateful evaluatie. Regel evaluatie tussen blokken moet worden gedaan binnen dezelfde logische gegevens (of het nu gaat om een bestand, pure TCP stream, of JavaScript tekst).
- In het algemeen kan een gegevensblok dat door de detectiemodule wordt ontvangen:
- Een andere IPS-buffer gebruiken (bijvoorbeeld pkt_data en file_data zijn niet hetzelfde)
- Behoren tot een andere stroom
- Geen stroom vormen (buffers gegenereerd uit een rauw pakket)
- Geen aaneengesloten stroom vormen (ICMP, UDP)
- Niet in orde zijn (HTTP Partial Response)
- Bevat herhaalde gegevens (een geaccumuleerd blok, zoals in http_inspect.script_detection of HTTP Chunked Response)
- De detectiemodule kan dingen uitzoeken om alleen blokken uit dezelfde stroom samen te voegen, anders zou het evaluatieproces ongewenste interferentie van tussenliggende blokken zien.

Opmerking: Het voorbeeld hier presenteert een geval waarin een HTTP-client meerdere bestanden tegelijk uploadt en downloadt.
- Momenteel kunnen slechts twee IPS-buffers een stream vertegenwoordigen: pkt_data en file_data, waarbij:
- pkt_data vormen twee streams voor het TCP-protocol (client-naar-server en server-naar-client richtingen)
- file_data moet streams vormen voor bestanden, MIME-bijlagen en andere protocolgegevens (zoals HTTP HTML-pagina en/of andere Content-Type)
- Stateful evaluatie wordt strikt binnen de datastroom uitgevoerd.
Regelvoortzetting
- De sectie eerder eindigt met een instructie dat de IPS-optie niet overeenkomt als de cursor uit de huidige IPS-buffer wordt geplaatst. Maar wanneer de IPS-buffer een gegevensstroom vormt, stapt de stateful signature evaluation-functie in en slaat de regelevaluatiecontext op in het Snort-stroomobject. De opgeslagen evaluatiecontext (status) wordt regelvoortzetting genoemd. Stateful signature evaluation stelt het definitieve oordeel van de regel uit totdat meer gegevens beschikbaar komen.
- Regelvoortzetting bestaat uit drie hoofdonderdelen: IPS-buffernaam, bufferbron en beoogde cursorpositie (bufferbron is een unieke identificator voor de gegevensstroom).
- Wanneer een gegevensblok wordt verwerkt door de detectiemodule, vinden de volgende acties plaats:
- Stateful signature evaluation maakt een regelvoortzetting en koppelt deze aan de flow als:
- De IPS-optie (byte_jump, content, pcre of iets anders dat de positie van de cursor bijwerkt) stelt de cursor in na de huidige IPS-buffer
- De huidige IPS-buffer ondersteunt de gegevensstroom.
- De huidige IPS buffer vormt op dit moment een datastroom.
- Stateful signature evaluation trekt zojuist gemaakte regelvoortzetting in en verwijdert deze uit de stroom als:
- De IPS-regel heeft op het huidige gegevensblok geschoten (de regel komt overeen met andere plaatsen van het blok)
- Stateful signature evaluation wijst lopende regelvoortzetting af en verwijdert deze uit de stroom als:
- IPS buffer vormt geen aaneengesloten stroom (de blokken hebben bijvoorbeeld herhaalde gegevens in hen, of er is een gat (een deel van de gegevens werd gemist of het blok is niet in orde).
- Stateful signature evaluation werkt de beoogde positie van de cursor bij met nieuwe gegevens die beschikbaar zijn wanneer:
- De bufferbron van de regelvoortzetting is dezelfde als de geselecteerde bufferbron
- IPS buffer vormt een aaneengesloten stroom
- Stateful signature evaluation stuurt de regelvoortzetting terug naar de IPS-regelengine wanneer:
- Gerichte positie van de cursor in de geselecteerde IPS-buffer (wat betekent dat het uiteindelijk alle gegevens heeft ontvangen die nodig zijn om de regelevaluatie te voltooien).
Gebruikersconfiguraties
- Omdat regelcontinuaties geheugen in beslag nemen, kan Snort er geen onbeperkt aantal opslaan. Er is een configuratieoptie om de limiet te regelen:
- Detectie.max_continuations_per_flow = 1024: maximaal aantal continuaties dat gelijktijdig op de stroom is opgeslagen { 0:65535 }
- Wanneer stateful signature evaluation de limiet bereikt, vervangt het de oudste regel voortzetting door een nieuwe.
- De oudste regel voortzetting die zich op de stroom bevindt, is er te lang, wat betekent dat het nog steeds niet voldoet aan een voorwaarde om de evaluatie van de regel te hervatten.
- Bovendien zijn er tal van PEG-tellingen beschikbaar om IPS-regels (die de belangrijkste focus moeten zijn) en de limiet (indien nodig) te verfijnen:
- Detectie.cont_creations: totaal aantal gemaakte continuaties (som)
- Detectie.cont_recalls: totaal aantal teruggeroepen continuaties (som)
- Detectie.cont_flows: totaal aantal stromen bij voortzetting (som)
- Detectie.cont_evals: totaal aantal continuaties waaraan voorwaarde is voldaan (som)
- detection.cont_matches: totaal aantal overeenkomende continuaties (som)
- detection.cont_mismatches: totaal aantal niet-overeenkomende continuaties (som)
- Detectie.cont_max_num: piekaantal gelijktijdige continuaties per stroom (max)
- Detectie.cont_match_distance: totaal aantal bytes dat is overgesprongen door overeenkomende continuaties (som)
- Detectie.cont_mismatch_distance: totaal aantal bytes dat is overgesprongen door niet-overeenkomende continuaties (som)
Probleemoplossing
De functie is een verbetering van het bestaande detectieproces en kan dus niet expliciet worden gebruikt om problemen op te lossen. In het geval van fouten in detectie, regels, configuratie of verkeer moet worden onderzocht.
Voorbeeldprobleem
Probleem: beschrijving
Probleem: Oplossing
De regel zou op deze manier worden geëvalueerd:
Op het 1e pakket (van 8kB grootte), dat een bestands header en een deel van het lichaam draagt:
- IPS buffer file_data is geselecteerd. De cursor wijst naar de 0e byte e1.
- De snelle patroonoptie komt overeen en stelt de positie van de cursor direct na het magische getal in, wijzend op byte 7f.
- De byte_jump optie leest twee bytes van de bestandsgrootte. De cursor wordt bijgewerkt met deze twee bytes. Vervolgens berekent byte_jump een sprong voor meer dan 32768 bytes.
- stateful signature evaluation creëert een regelvoortzetting, waarbij het 24578 bytes meer nodig heeft ( 32768 - (8 kB - 4 bytes header - 2 bytes van body size) ).
- De hele regel komt niet overeen, omdat de optie byte_jump de positie van de cursor niet zo ver kan instellen.
Op het 2e pakket (van 16kB grootte), dat het bestandsdeel draagt:
- bij de evaluatie van de stateful signature wordt de regel voortgezet.
- Het selecteert de buffer bij zijn naam en ziet dat file_data beschikbaar is en de nieuwe gegevensgrootte 16384 is.
- Uit de bijgewerkte cursor blijkt dat er nog 8194 bytes nodig zijn ( 24578 - 16384 )
- De regel wordt niet hervat.
Op het 3e pakket (van 8198 maten), dat het bestandsdeel en de metagegevens bevat:
- bij de evaluatie van de stateful signature wordt de regel voortgezet.
- Het selecteert de buffer bij zijn naam en ziet dat file_data beschikbaar is en de nieuwe gegevensgrootte 8198 is.
- De bijgewerkte cursor geeft aan dat de buffer voldoende gegevens heeft, de positie van de cursor is 8194.
- stateful signature evaluation verwijdert de regel en de voortzetting.
- Stateful Signature Evaluation hervat de evaluatie van de regel vanuit de optie 2e inhoud met de cursor die naar byte 01 wijst.
- De inhoudsoptie vindt een overeenkomst op de 2e doorzochte byte.
- Eindelijk schiet de hele regel.
Beperkingen, details en veelvoorkomende problemen
Beperkingen en andere overwegingen
- Vanwege de stateful signature evaluation-implementatie laat Snort alle wachtende regelcontinuaties vallen wanneer het de configuratie opnieuw laadt. Houd er rekening mee dat de voortzetting van de regel, ondanks het feit dat deze is gevallen, nog steeds het geheugen van Snort bezet totdat het volgende gegevensblok naar de detectiemodule wordt verzonden.
- De regel latentie functie voor de IPS regel in stateful evaluatie werkt hetzelfde als wanneer het een gemeenschappelijke regel evaluatie. De evaluatietijd voor regelonderdelen van verschillende gegevensblokken wordt samengevat. Als de tijd de limiet overschrijdt, sluit regelevaluatie kortsluiting uit en wordt eerder afgesloten.
- Flowbits-bewerkingen behouden hun betekenis, hoewel ze nog steeds als 'statische' opties werken.
Een flowbit set/clear/test operatie wordt uitgevoerd binnen een momenteel bekende context. Dus als de flowbit-optie wordt geëvalueerd in een regelvoortzetting, zou deze rekening houden met de huidige omgeving (flowbits-set), niet met de omgeving waarin de regel met de evaluatie is begonnen.
Ook moet een regelschrijver aandacht besteden aan de snelle patroonlocatie.
Zelfs als het in een deel van de regel kan zijn, wordt de optie voor het snelle patroon geëvalueerd vóór de hele regel. Het leidt tot regelevaluatie. Voor stateful signature-evaluatieregel betekent dit dat het vervolgpunt van de regel na de optie met het snelle patroon moet zijn.
Bovendien kan de IPS-regel meerdere regelcontinuaties hebben in de evaluatie (de ene na de andere, niet tegelijkertijd). Omdat elke optie van de hoofdtekst van de regel kan worden voortgezet, kan de regelschrijver extra controles uitvoeren op verschillende plaatsen van de gegevensstroom met dezelfde IPS-regel.