2009-12-16 15 views
7

Wie gehe ich vor, um eine Fuzzing-Strategie auszuführen, um einen Netzwerkstapel zu beanspruchen, speziell auf der dritten und vierten Ebene (Netzwerk und Transport)? Ich habe mir Frameworks angeschaut, um Fuzzers wie SPIKE zu erzeugen, aber es scheint mir, dass sie sich hauptsächlich auf die Anwendungsschicht und darüber konzentrieren? Gibt es irgendwelche bekannten Techniken da draußen, um wohlbekannte Protokolle in diesen Schichten zu verwirbeln, zum Beispiel TCP?Netzwerk- oder Transportschicht-Fuzzing

Danke.

Antwort

8

Betrachten Sie Scapy. Es ermöglicht Ihnen, auf den Netzwerk- und Transportschichten zu fuzzieren. Die Funktion fuzz fuzziert alles, was Sie nicht explizit in den IP- oder TCP-Schichten angegeben haben (Sie können es für jede Anwendung separat anwenden). Dies bietet Ihnen eine Reihe von Fähigkeiten, von der zufälligen Generierung von IP-Adressen und Port-Paaren bis hin zum Erstellen und Senden von Nonsense-Paketen.

Sie können auch sehen, Fragroute. Dies wird TCP/IP dazu bringen, alle Arten von Ausweichtechniken zu verwenden, könnte aber möglicherweise versteckte Fehler/Sicherheitslücken in Ihrem Netzwerkstapel enthüllen.

Wenn Ihre Organisation keine Einwände dagegen erhebt, können Sie einen Exit-Knoten Tor einrichten und Datenverkehr von diesem erfassen. Ich habe es für das Testen der korrekten TCP-Verbindungsstatusverfolgung nützlich gefunden. Obwohl Ihr Ende der Verbindungen bekannt und unveränderlich ist, gibt es eine riesige Auswahl an Servern sowie Spaß an Netzwerk-Engpässen. Es ist im Grunde eine endlose Quelle des Verkehrs. Achten Sie darauf, dass Sie sich bei Ihren Vorgesetzten erkundigen, da Ihre Organisation möglicherweise eine potentielle Quelle böswilligen Datenverkehrs ablehnt (obwohl es einen starken Präzedenzfall für Haftungsausschluss gibt). Ich habe dieses Problem gelöst, indem ich es zu Hause ausgeführt habe, und dann die Kapseln eingebracht habe.

3

Wenn Sie die IP, UDP oder TCP fuzz machen möchten, leiten Sie Ihre Pakete von Ihren High-Level-Diensten per Loopback zu einem Prozess, der sie liest, fuzziert und weiterleitet. Sie benötigen einen Treiber, mit dem Sie mit rohen Sockets sprechen können, und Sie müssen lesen/lernen, was die anwendbaren RFCs für diese Protokolle sagen.

Es gibt eine einfache Möglichkeit, dies zu tun. Genau wie Justdelegard es empfiehlt, ist Scapy im Allgemeinen wahrscheinlich das Beste.

Werfen Sie einen Blick auf Releasing ICMPv4/IP fuzzer prototype von Laurent Gaffié. Sein Python-Code, den er zufällig in more readable Mode bei pastebin.com re-postete, importiert von scapy und verwendet einige Methoden, die er definiert, um ein paar Arten von Fuzzing zu machen. IP- und ICMP-Pakete werden in seinem Beispielcode behandelt. Das klingt also genau nach dem, was Sie suchen.

Momentan scheint es eine Menge Unternehmen zu geben, die Tcl/Expect to do custom automated testing von Netzwerken verwenden. SIP, H.323, Schicht 2 & 3 Protokolle, etc.

Also, wenn Scapy Ihre Bedürfnisse nicht erfüllt, können Sie möglicherweise etwas in Tcl mit Expect, um die Arbeit zu erledigen, zu machen oder zu finden. Oder Sie möchten einige Dinge in Python tun, indem Sie Scapy - und andere Dinge in Tcl - mit Expect verwenden.

Tcl wurde lange Zeit für Netzwerk-Test- und -Management-Anwendungen verwendet. In den 1990er Jahren gab es ein Buch darüber, wie man mit Tcl SNMP-basiertes Netzwerkmanagement betreiben kann.

Syntax von Tcl ist entschieden ungerade, aber die Bibliotheken sind sehr mächtig. Es bietet eine Framework-ähnliche Möglichkeit, das Verhalten von benutzerdefiniertem Netzwerkverhalten auf Sockets zu definieren, ähnlich wie bei den Standardbibliotheken für die Python-Programmiersprache. Im Gegensatz zu Python und anderen Skriptsprachen gibt es ein extrem leistungsfähiges Werkzeug für Tcl-Programme namens Expect (siehe expect man page).

Erwarten Sie eine handliche Fähigkeit. Es kann automatisch ein Tcl-Testscript generieren. Das generierte Skript führt Aufrufe von Expect-Funktionen aus. Bei dieser Aufnahme fungiert er als passiver Man-in-the-Middle und zeichnet beide Seiten der Konversation auf. So wie Sie Makros aufnehmen, während Sie in MS Word oder Emacs bearbeiten.

Anschließend können Sie das automatisch generierte Expect-Skript bearbeiten, um es fein abzustimmen, es anders zu gestalten oder mehrere Variationen davon zu erstellen. Es ist sehr praktisch für die Erstellung von Regressionstests. Sie sollten in der Lage sein, dies zu verwenden, um höhere Protokolltests zu schreiben, falls Sie welche benötigen. Beats von Grund auf neu.

Ich denke, dass Sie Tcl/Expect verwenden können, um Standard-TCP-Anwendungen (FTP, HTTP, SMTP usw.) zu testen, die string-basierte Befehle verwenden. Es eignet sich gut zum Testen von zeichenbasierten Anwendungen wie TELNET, die Eingaben von stdin lesen und Ausgaben auch zu stdout generieren.