All Projects → ChrisCooney → fuzz-monkey

ChrisCooney / fuzz-monkey

Licence: ISC License
Fuzzing tool written in Golang. Insane monkey not included.

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to fuzz-monkey

dizzy-legacy
Network and USB protocol fuzzing toolkit.
Stars: ✭ 35 (+169.23%)
Mutual labels:  fuzzing
healer
Kernel fuzzer inspired by Syzkaller.
Stars: ✭ 194 (+1392.31%)
Mutual labels:  fuzzing
go-sqlancer
go-sqlancer
Stars: ✭ 61 (+369.23%)
Mutual labels:  fuzzing
katnip
Extension library for the Kitty fuzzing framework
Stars: ✭ 73 (+461.54%)
Mutual labels:  fuzzing
resilience4clj-circuitbreaker
Resilience4Clj circuit breaker lets you decorate a function call (usually with a potential of external failure) with a safety mechanism to interrupt the propagation of failures.
Stars: ✭ 40 (+207.69%)
Mutual labels:  resilience
Kirenenko
Super Fast Concolic Execution Engine based on Source Code Taint Tracing
Stars: ✭ 84 (+546.15%)
Mutual labels:  fuzzing
evine
Interactive CLI Web Crawler
Stars: ✭ 140 (+976.92%)
Mutual labels:  fuzzing
emmutaler
A set of tools for fuzzing SecureROM. Managed to find and trigger checkm8.
Stars: ✭ 126 (+869.23%)
Mutual labels:  fuzzing
res-eng-short-course-notes
Notes on David Woods's Resilience Engineering short course
Stars: ✭ 38 (+192.31%)
Mutual labels:  resilience
ML4Sec-papers
Research papers on ML for security
Stars: ✭ 27 (+107.69%)
Mutual labels:  fuzzing
sandsifter
The x86 processor fuzzer
Stars: ✭ 21 (+61.54%)
Mutual labels:  fuzzing
fuzzuf
Fuzzing Unification Framework
Stars: ✭ 263 (+1923.08%)
Mutual labels:  fuzzing
activist
activist.js is a drop-in library for resilience to network interference
Stars: ✭ 26 (+100%)
Mutual labels:  resilience
fuzza
Customizable TCP fuzzing tool to test for remote buffer overflows.
Stars: ✭ 29 (+123.08%)
Mutual labels:  fuzzing
kong-circuit-breaker
Kong plugin for wrapping all proxy calls with a circuit-breaker
Stars: ✭ 27 (+107.69%)
Mutual labels:  resilience
AEGPaper
Automatic Exploit Generation Paper
Stars: ✭ 30 (+130.77%)
Mutual labels:  fuzzing
FuSeBMC
FuSeBMC is a novel Energy-Efficient Test Generator that exploits fuzzing and BMC engines to detect security vulnerabilities in real-world C programs.
Stars: ✭ 26 (+100%)
Mutual labels:  fuzzing
srcinv
source code audit tool
Stars: ✭ 45 (+246.15%)
Mutual labels:  fuzzing
pyradamsa
Python bindings for calling radamsa mutators
Stars: ✭ 16 (+23.08%)
Mutual labels:  fuzzing
fuzzing-tutorial
Curated list of classic fuzzing books, papers about fuzzing at information security top conferences over the years, commonly used fuzzing tools, and resources that can help us use fuzzer easily.
Stars: ✭ 74 (+469.23%)
Mutual labels:  fuzzing

Fuzz Monkey

Build Status Coverage Codacy Badge

Fuzz Monkey is a bit like chaos monkey only with more fur and instead of tearing down infrastructure like some kind of crazed baboon in a shoe shop, it carefully and surgically flings its poop at specific http endpoints. It ain't pretty, but it's damn sure fuzzy.

CLI

Building the Binary

Check out this project and, from the app folder run

go build -o monkey .

Priming the Monkey for all out war

The "Chaos Monkey" way

The Monkey is a chaotic but loyal warrior. You tell it where to fling and by the grace of God, it'll fling. The Monkey's instructions come in the form of a JSON file. When you send the Monkey off into battle, you can either target it's wrath like this:

./monkey path/to/config.json

or you can simply run the script and it will automatically root around for a file named fuzz-monkey.json.

The Configuration file has a specific format, otherwise the Monkey gets confused. In the root of the config file is the endpoints field. This specifies the targets for the monkey to attack.

{
  endpoints: []
}

In endpoints, you specify details for each of the endpoints you want the monkey to attack. For example:

{
  endpoints: [
    {
      "name": "Chris",
      "host": "localhost",
      "port": "80",
      "path": "/orders/1",
      "protocol": "http",
      "attacks": [ ]
    }
  ]
}

Each endpoint must have at least one attack registered against it. An attack requires a type field and the config parameters for that type of attack. The current attack types are:

Attack Type Description
HTTP_SPAM Goes to town on an endpoint with randomly selected HTTP requests.
CORRUPT_HTTP Opens a TCP connection and makes corrupt HTTP requests at the endpoint.
URL_QUERY_SPAM Takes a provided list of parameters and tries known dangerous values

For example, in your config, your attack might look something like:

{
  endpoints: [
    {
      "name": "Chris",
      "host": "localhost",
      "port": "80",
      "path": "/orders/1",
      "protocol": "http",
      "attacks": [
        {
          "type": "CORRUPT_HTTP",
          "expectedStatus": "400"
        },
        {
          "type": "HTTP_SPAM",
          "expectedStatus": "200",
          "concurrents": 20,
          "messagesPerConcurrent": 100
        },
        {
          "type": "URL_QUERY_SPAM",
          "expectedStatus": "400",
          "parameters": "a,b,c"
        }
      ]
    }
  ]
}

The following will randomly run two attacks at the endpoint. The first will randomly fire corrupted HTTP requests over TCP at the endpoint. The second will randomly open up 20 concurrent connections and they will each fire 100 requests at the endpoint.

If you don't specify a method in your config, then the Monkey will randomly select one for you because it enjoys a wide and varied diet. If, however, you wish to specify a HTTP method to use then simply include the method field in your attack config:

{
  "type": "HTTP_SPAM",
  "expectedStatus": "200",
  "concurrents": 20,
  "messagesPerConcurrent": 100,
  "method": "GET"
}

CI Mode

CLI

If you just want to run a single test through, you can do this by simply adding the -c switch to your command, for example:

./monkey -c

This will cause the application to run in CI mode. This will go through each of the attacks once and return with an error code if any of the attacks fail.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].