Elessar schrieb:
snort verwendet die libpcap (wie zB auch tcpdump), die es auf BSD Systemen gibt.Snort-Inline bekommt seine Pakete nicht über libpcap, sondern von iptables, überprüft sie, und erzeugt dann gegebenenfalls dynamische Regeln im iptables Paketfilter um diese abzuweisen.
Also mein Ansatz für FreeBSD mit ipfw2 waere folgender:
Snort ist dahingehend zu aendern, dass es die Pakete nicht mehr via pcap, sondern ueber einen divert socket von ipfw liest (analog natd).
Wenn das Paket keine Regel matcht, wird es zurueckgeschrieben. Wenn das Paket einen Alarm ausloest, wird es nicht zurueckgeschrieben. Das Setzen dynamischer IPFW Regeln koennte hier lediglich noch der Optimierung dienen, um bei wiederkehrenden Angriffen nicht immer wieder das Paket pruefen zu muessen. Wirklich notwendig ist es nicht mehr, da der daemon an einem divert socket das Paket schlichtweg dadurch blockieren kann, dass er es nicht zurueckschreibt.
Ganz nebenbei loest divert auch noch das Problem von fragmentierten Paketen.
Snort liest die Pakete in snort.c in der Funktion InterfaceThread(). Diese muss modifiziert werden. Code faende sich hierzu quasi mundgerecht bei natd.
Ein Problem was ich sehe, ist die Rueckmeldung. Im Idealfall muesste ProcessPacket einen Wert zurueckliefern, der ueber das Ergebnis der Detektion Aufschluss gibt und anhand dessen man dann entscheiden kann, ob das Paket zurueckgeschrieben oder gedropt wird. Dort muesste man mal weiter suchen, wie schwierig es da ist, sowas zu implementieren.
Weiterhin muessten, wenn die Geschichte sauber sein soll, auch noch allerhand Aenderungen am UI von Snort vorgenommen werden. Eine ganze Reihe Features passen dann ja nicht mehr, so dass man die deaktiveren müsste.
Ueber die Performance wage ich nicht wirklich nachzudenken.
Evtl. ist es sogar einfacher, lediglich die Detection Engine aus Snort zu extrahieren und damit sauber eine Scanfunktion mit einem boolean Rueckgabewert zu implementieren.
Wer sich die Arbeit machen will, sollte evtl. auch noch bedenken, dass Snort unter GPL steht.
PS: Obiger Text hat den Anspruch "Brainstorming". Ich bitte das beim Zerpfluecken zu bedenken ;-). Danke.