- Web UI
- Statistics now auto-update.
- Test case logs now stream on the main page.
- Cool left & right arrow buttons to move through test case
- New
Sessionparameterreceive_data_after_fuzz. Controls whether to execute a receive step after sending fuzz messages. Defaults to False. This significantly speeds up tests in which the target tends not to respond to invalid messages.
- Text log output would include double titles, e.g. "Test Step: Test Step: ..."
- Web UI
- Test case numbers are now clickable and link to test case detail view.
- Test case details now in color!
FuzzLoggerDB- Added FuzzLoggerDB to allow querying of test results during and after test run. Saves results in a SQLite file.
- Added
Session.open_test_run()to read test results database from previous test run.
New
Session.feature_check()method to verify protocol functionality before fuzzing.- Process Monitor
- Unify process monitor command line interface between Unix and Windows.
- Added procmon option
proc_nameto support asynchronously started target processes. - procmon is now checked for errors before user
post_send()is called, reducing redundant error messages. - Improved procmon logging.
- Process monitor gives more helpful error messages when running 64-bit application (unsupported) or when a process is
killed before being attached
- Logging Improvements
Targetopen()andclose()operations are now logged.- Added some optional debug output from boofuzz runtime.
- Improve capability and logging of messages'
callbackmethods.
- New
Session& Connection Options - Add
Sessionreceive_data_after_each_requestoption to enable disabling of data receipt after messages are sent. Sessionskipargument replaced withindex_startandindex_end.Sessionnow has separate crash thresholds for elements/blocks and nodes/messages.- Give
SocketConnectionseparate timeouts forsend()/recv().
- Add
- New
- Ease of Use
Target.recv()now has a defaultmax_bytesvalue.- Added
DEFAULT_PROCMON_PORTconstant. Session.post_send()'ssockparameter now deprecated (usetargetinstead).
- Fixed bug in which failures were not recognized.
BitFieldblocks with ASCII format reported incorrect sizes.- Fixed bug in
s_update. - Handle socket errors that were getting missed.
- Fixed process monitor logging when providing more or less than 1 stop/start commands.
- Show graceful error on web requests for non-existent test cases.
get_max_udp_size()was crashing in Windows.Stringpadding was not always being applied.Stringwas not accepting unicode strings invalueparameter.Stringwas skipping valid mutations and reporting wrongnum_mutations()whensizeparameter was used.- Unix and Windows process monitors now share much more code.
- Added unit tests for
BitField. - Cleaned up CSS on web pages.
- Added a unit test to verify restart on failure behavior
- Test cases now have descriptive names
- Added Session methods to fuzz a test cae by name:
fuzz_by_nameandfuzz_single_node_by_path
- Fixed test case numbers when using
fuzz_single_case
- Set Session
check_data_received_each_requestto False to disable receive after send.
- Dosctring format fixes.
- Add Session ignore_connection_reset parameter to suppress ECONNRESET errors.
- Add Session ignore_connection_aborted parameter to suppress ECONNABORTED errors.
- Fix Session class docstring formats.
s_sizeis now fuzzable by default.- Add new s_fuzz_list primitive to read fuzz value from files.
- Add new FuzzLoggerCsv to write log in CSV format
- Fixed: Add missing dummy value for custom checksum, allowing recursive uses of length/checksum (issue #107)
- Console output - now with colors!
- process_monitor_unix.py: added option to move coredumps for later analysis.
- The process monitor (procmon) now tracks processes by PID by default rather than searching by name. Therefore, stop_commands and proc_name are no longer required.
- SIGINT (AKA Ctrl+C) now works to close both boofuzz and process_monitor.py (usually).
- Made Unix procmon more compatible with Windows.
- Improved procmon debugger error handling, e.g., when running 64-bit apps.
- Windows procmon now runs even if pydbg fails.
- Added
--helpparameter to process monitor. - Target class now takes
procmonandprocmon_optionsin constructor. - Added example fuzz scripts.
- SIGINT (AKA Ctrl+C) now works to close both boofuzz and process_monitor.py (usually).
- Fixed: The pedrpc module was not being properly included in imports.
- Made process_monitor.py
--crash_binoptional (as documented). - Improved procmon behavior when certain parameters aren't given.
- Improved procmon error handling.
- Fixed a bug in which the procmon would not properly restart a target that had failed without crashing.
- Added several command injection strings from fuzzdb.
- Blocks can now be created and nested using
with s_block("my-block"):
- Fixed pydot import error message
- Added
Request.original_value()function to render the request as if it were not fuzzed. This will help enable reuse of a fuzz definition to generate valid requests. SocketConnectioncan now send and receive UDP broadcast packets using theudp_broadcastconstructor parameter.Target.recv()now logs an entry before receiving data, in order to help debug receiving issues.
- Maximum UDP payload value was incorrect, causing crashes for tests running over UDP. It now works on some systems, but the maximum value may be too high for systems that set it lower than the maximum possible value, 65507.
SocketConnectionclass now handles more send and receive errors:ECONNABORTED,ECONNRESET,ENETRESET, andETIMEDOUT.- Fixed setup.py to not include superfluous packages.
- Added two exceptions:
BoofuzzTargetConnectionResetandBoofuzzTargetConnectionAborted. - These two exceptions are handled in
sessions.pyand may be thrown by anyITargetConnectionimplementation.
- Boofuzz now properly reports crashes detected by the process monitor. It was calling log_info instead of log_fail.
- Boofuzz will no longer crash, but will rather give a helpful error message, if the target refuses socket connections.
- Add utils/crash_binning.py to boofuzz/utils, avoiding import errors.
- Fix procmon argument processing bug.
- Fix typos in INSTALL.rst.
- Add Gitter badge to README.
- Add default sleep_time and fuzz_data_logger for Session to simplify boilerplate.
- Fixed deployment from 0.0.2.
- Simplify CONTRIBUTING.rst for automated deployment.
- tox no longer runs entirely as sudo. The sudo has been moved into tox.ini and is more fine-grained.
- Reduced default
Session.__init__restart_sleep_timefrom 5 minutes to 5 seconds.
Continuous deployment with Travis.
- Added build and PyPI badges.
- Added CONTRIBUTING.rst.
- check-manifest now runs in automated build.
- Travis now deploys to PyPI!
- Tests now run on tox.
- Added Google Groups and Twitter link.
- Missing property setters in
boofuzz.request.Requestnow implemented. - Unit tests now pass on Windows.
- Fixed wheel build issue; boofuzz subpackages were missing.
- Session constructor param
session_filenameis now optional.
- Now on PyPI!
pip install boofuzz - API is now centralized so all classes are available at top level
boofuzz.*- This makes it way easier to use. Everything can be used like
boofuzz.MyClassinstead ofboofuzz.my_file.MyClass.
- This makes it way easier to use. Everything can be used like
- Added
EzOutletResetclass to support restarting devices using an ezOutlet EZ-11b.
- Target now only takes an
ITargetConnection. This separates responsibilities and makes our code more flexible with different kinds of connections.
- Bugs fixed:
helpers.udp_checksumwas failing with oversized messages.- Missing install requirements.
- Grammar and spelling.
setup.pywas previously installing around five mostly unwanted packages. Fixed.- Removed deprecated unit tests.
- Removed overly broad exception handling in Session.
Checksum.render()for UDP was not handling dependencies properly.
This section took the most work. It has the least visible impact, but all of the refactors enable new features, fixes, and unit tests.
- Primitives and Blocks:
- Created
IFuzzablewhich properly defines interface forBlock,Request, and allBasePrimitiveclasses. - Made effectively private members actually private.
- Eliminated
exhaust()function. It was used only once and was primarily a convoluted break statement. Now it's gone. :) - Split all block and primitive classes into separate files.
- Created
- Many Unit tests added.
- Continuous integration with Travis is running!
- Doc organization improvements.
- Can now install with extras
[dev]
- Much easier install experience!
- Support for arbitrary communications mediums.
- Added serial communications support.
- Improved sockets to fuzz at Ethernet and IP layers.
- Extensible instrumentation/failure detection.
- Better recording of test data.
- Records all sent and received data
- Records errors in human-readable format, in same place as sent/received data.
- Improved functionality in checksum blocks.
- Self-referential size and checksum blocks now work.
post_sendcallbacks can now check replies and log failures.- Far fewer bugs.
- Numerous refactors within framework code.