User's Guide


   1.	Basic description
   2.	Background information
   3.	Installation guide
      3.1 Requirements
      3.2 Windows installation
   4.   Usage
      4.1 Setting up proxy server and recording protocol traces
      4.2 Building a Finite State Automaton
      4.3 Constructing Generic Messages Sequences
      4.4 Specifying fuzzing functions
      4.5 Automating a communication node
      4.6 Fuzzing

   1.	Basic Description
	  AutoFuzz is an open-source framework which provides core functionality to
	  automatically understand network protocol and test/fuzz it for implementation flaws. The framework 
	  is divided into two main parts: protocol specification's extraction and fuzzing. Protocol 
	  specification's extraction is the approach to understand the network protocol by constructing its 
	  Finite State Automaton (FSA) and extracting individual message syntax information from samples of 
	  network traces. Traces can be imported externally or recorded using built-in proxy server. The FSA 
	  is used to guide the fuzzer through the communication process between two nodes and to keep an 
	  overall "picture" of the fuzzing progress. The fuzzer stores individual message syntax information 
	  in Generic Message Sequences (GMSs). GMSs are constructed using using algorithms of bioinformatics 
	  such as global and local alignment. GMS separates static data fields from dynamic values where each 
	  dynamic value has an associated type information. The FSA together with the GMSs can be used 
	  to improve the quality of the test cases, and reduce the run-time of overall testing. The framework
	  allows adding support to "learn" new protocols, as well as to extend the existing fuzzing functions.
   2. Background information
   	  * AutoFuzz fuzzes protocol implementation by modifying traffic between the communication nodes. To do that, 
	  AutoFuzz has a built-in SOCKS v5 proxy server. The proxy server is based on Java Socks Server, 
	  but has been modified to allow recording and editing of the traffic. Currently, AutoFuzz supports only 
	  plain-text protocols. 
	  * AutoFuzz framework allows users to specify which fuzzing functions to use from the available set. 
	  One can also add new fuzzing functions (Refer to the Developer's Guide for more details).
	  * In order for AutoFuzz to fuzz all transitions and perform all chosen fuzzing functions, it needs a lot 
	  of traffic from the client side (assuming the server side is being fuzzed). Although it is not always
	  necessary to automate a communication node (See section 4.5), it is a common practice. For example, 
	  consider a case where one chooses to fuzz a server node of the SMTP communication. In this case, 
	  the author's preferred method would be to write a small automated smtp client in python. 
	  See section 4.5 for other suggestions or '[MainDrive]:\[ProgramFiles]\AutoFuzz\Samples\' 
	  for an example, if you have AutoFuzz installed. 
	  * A successful fuzzing is identified by application's unepected behaviour in forms of the system or 
	  the application crash, unexpected output or state change. Once the unexpected behavoir occurs you 
	  will able to trace the sequence of transitions taken by the fuzzer as well as the fuzzed message 
	  from the fuzzing log files. Please refer to [MainDrive]:\[ProgramFiles]\AutoFuzz\Logs\
   3. Installation Guide

   3.1 Requirements
	  * JRE 1.6+
	  * Jung graph framework jar file

   3.2 Windows Installation
	  * Right click on WindowsIntallAutoFuzz.bat and select "run as administrator"
	  * Add the jung *.jar to the java classpath
	  * Right click on "[MainDrive]:\[ProgramFiles]\AutoFuzz\AutoFuzz.jar" and "run as administrator"
   4. Usage
   4.1	Setting up proxy server and recording protocol traces

	  1. Specify a proxy port and click on "Start proxy". Make sure to allow inbound traffic on the firewall
	  on the port specified.
	  2. Click on "Start Recording Traffic" to start a new protocol trace.
	  3. Once sufficient traffic has been recorded click "Stop Recording Traffic". Collect as many protocol 
	  traces as you think is sufficient in order to cover the protocol functionality that will be tested.
	  4. You can save the traffic that is recorded by clicking "Export App. Traffic" or re-import it 
	  later by clicking "Load App. Traffic".
   4.2 Building a Finite State Automaton
	  1. Choose the abstraction function.
	  2. Click "Construct FSM".
	  3. Click "Minimize FSM" to minimize the FSA and to restore loops from the protocol traces (Note, that 
	  loops are not included in the original representation of the FSM).
	  4. Verify that the FSA has been successfully minimized by viewing "Minimized FSA".
   4.3 Constructing Generic Message Sequences (GMS)

	  1. To generate GMSs click on "Init. Fuzzing Engine".
	  2. Once the process is complete you can view the resulting GMSs under "Fuzzing Engine" tab. 
	  (Note, that a considerable amount of algorithms is involved in constructing GMSs. Therefore, initialization 
	  might take anywhere from a few minutes to half-hour or more).
   4.4 Specifying fuzzing functions

	  1. Please refer to [MainDrive]:\[ProgramFiles]\AutoFuzz\fuzzingFunctions.txt
   4.5 Automating a communication node
	  If needed, it is possible to automate one of the communication nodes using various techniques: 
	  1. Write an automated node using standard python or other libraries 
	  (see [MainDrive]:\[ProgramFiles]\AutoFuzz\Samples).
	  2. Replay previously recorded traffic.
	  3. Forward real traffic from a life network.
   4.6 Fuzzing
	  1. First, open up a Command and Control Socket so that the automated node can reset the fuzzing state. 
	  Confirm that the firewall is not block incoming connections on it.
	  2. Click on "Start Fuzzing" (Make sure the proxy server is running).