Einstein 2 fick mig att fundera runt IDS:er. Jag har så dåliga kunskap om mjukvaruarkitektur för hur signaturbaserade IDS:er som lyssnar på nätverkstrafik snarare än säg applikationshändelser (inte ens att jag minns rätt termer). Men låt oss fundera väldigt löst här steg för steg hur de kan tänkas fungera där jag tar pusslar in lite allt eftersom jag ev. hittar det när jag söker det.
1. IDS:er identifierar ofta angrepp från signaturer. Jag tror säkert det stämmer men jag är tveksam till att det är "hela" sanningen på samma sätt som för välkända lösningar i det här segmentet.
2. Låt oss gissa (och jag gissar verkligen) att man gör detta man också i vissa fall aggregerar data uppåt även när ingenting i det datat i sig indikerar ett problem. D.v.s. man håller något form av tillstånd. En mix av de förr vanliga typerna av nätverksbaserade IDS:er.
3. Säg att noden också aggregerar data uppåt.
4. Så först har vi ett nätverkskort som lyssnar och det lär inte vara något problem.
5. Sedan har vi tolkningen av signaturen och det kan ju verkligen vara trivial look-up. D.v.s. ta MD5 på det och slå upp i databas. Så det är inget problem.
6. Men aggregerar man vissa saker till kontext som kanske inte indekerar angrepp i sig antar jag att någon form av parsning sker. Custom-built så klart.
7. Det där med kommunikationsprotokoll är komplexa saker. Nu för tiden har ju alla glömt det och jag var väl den sista generationen som behövde lära mig ASN.1 (inte riktigt den sista kanske men mer eller mindre - implementerade delar av SPKM i C med OpenSSL som krypteringsbibliotek och sådant behöver ingen göra numera).
8. NSA är ju dock en entitet om någon som kan det området att härda mot overflows.
9. Vad har vi nu för indata? Nätverkstrafiken givetvis och den är man självklart väldigt "försiktig" med.
10. Något i övrigt? Attack-signaturerna så klart.
11. Varifrån kommer signaturerna? Jag fick för mig när jag surfade runt nu att de skapas hos US-CERT och är opublicerade.
12. Vad gör man med signaturerna? Åker de in i någon protokoll-stack? Eller matchar man bara?
Här sitter man dock och gissar i varje steg. Helt klart är dock att den här typen av parsning och matching särskilt när den sker i realtid är komplexa saker. Jag vet heller inte hur noderna kan kommunicera ut. Rimligen kan de det men det kanske endast kan ske på separerade linor?
Oerhört tråkigt område hur som helst och knappast vad jag lär bry mig en gång till i. Allmänt gillar jag väldigt lågt hela dom där gamla C implementationerna som vilar under så mycket. Givet att jag stegat dem ett antal tusen gånger om än år tillbaka vet jag hur koden ser ut men det gör ju många andra också. Inte ett okänt problem. Det gäller att programmera defensivt och aldrig lita på indata.
Kommentera