On Python, Ruby and dangling handlers
Last time
we saw how to build a fuzzing engine with
Python
and
vtrace.
Unfortunately the implementation I presented in that post generated certain issues once a decent amount of iterations were completed. Apparently Python doesn't like simultaneous thread's launching and finishing every 5 seconds. Analysis with
Process Explorershowed
that although past threads aren't used anymore the garbage collector fails coping with them. This ultimately lead to handle exhaustion (+10000
danglingthread+file
handles) and subsequent fuzzer crash.
A change in the approach failed as well. In this case the second tree architecture tested looked like so:
-
Main fuzz controller
-
Iteration monitor
- Debuggee
-
Iteration monitor
- Download the latest package from the FFI branch (0.2.0.pre2 right now).
- Install any ruby release from the 1.8 branch.
- Install dependencies (CMD.exe commands):
And that's about it. In this incarnation of the fuzzing engine I followed a slightly different approach to the one described in the beginning:
- gem install rake
- cd tduehr-ragweed/
- gem build ragweed.gemspec
- gem install ragweedXXXXX.gem
-
Main fuzz controller
- Debuggee
- Iteration Monitor
- win32-process from Win32Utils.
- sys-proctable from Sys Utils.
- ragweed on github.
- ruby fuzzing engine.