Faraday agent dispatcher to communicate an agent to faraday
Project description
Faraday Agents Dispatcher helps user develop integrations with Faraday written in any language.
Installation
Just run pip3 install faraday_agent_dispatcher
and you should see the
faraday-dispatcher
command in your system.
To setup a development environment (this is, to change code of the dispatcher
itself, not to write your own integrations), you should clone this repo and run
pip install -e .
.
Running Faraday Agent Dispatcher for first time
-
Generate a configuration file running
faraday-dispatcher config-wizard
. -
Run the agent with
faraday-dispatcher run
command. The config file that it creates will be located in~/.faraday/config/dispatcher.ini
if you do not pass a custom path.
You should complete the agent configuration with your registration token, located at http://localhost:5985/#/admin/agents. Check that the server section has the correct information about your Faraday Server instance. Then, complete the agent section with the desired name of your agent. Finally, add the executors
Executors
Creating your own executors
An executor is a script that prints out single-line JSON data to stdout. Remember that if you print any other data to stdout, the dispatcher will trigger an error. If you want to print debugging or logging information you should use stderr for that.
Every line written to stdout by the executor will be decoded by the dispatcher and sent to Faraday using the Bulk Create endpoint. Therefore, the JSON you print must have the schema that the endpoint requires (this schema is detailed below). Otherwise, the dispatcher will complain because you supplied invalid data to it.
If you want to debug your executor, the simplest way to do it is by running it directly instead of running with the Dispatcher. Since the executor just prints JSON data to stdout, you will be able to see all information it wants to send to Faraday, but without actually sending it.
Configuring a executor
After writing your executor, you have to add it with the
faraday-dispatcher config-wizard
within the executor section, adding
its name, command to execute and the max size of the JSON to send to
Faraday Server. Additionally, you can configure the Environment
variables and Arguments in their proper section.
Running a executor
To run an executor use the faraday-dispatcher config-wizard
command,
and play it from the Faraday Server. The executor will use the
environment variables set and ask for the arguments.
Bulk Create JSON format
The data published to faraday must correspond to the
bulk_create
endpoint of the Faraday's REST API
Running multiple dispatchers
If you want to have more than one dispatcher, each one runninng its own
executors, the preferred of doing this is to create different
configuration files for each one (for example,
~/.faraday/config/dispatcher-1.ini
and
~/.faraday/config/dispatcher-2.ini
). Then, you can run two different
Dispatcher instances with faraday-dispatcher --config-file PATH_TO_A_CONFIG_FILE
.
Executors
Inside the executors directory you can find the already created executors.
Official
The official executors are the collection of ready-to-go executors (with minimum configuration with the wizard). They have a manifest JSON file, which gives details about the uses of the executor and helps with the configuration of them.
The current official executors are:
Development
The development executors are the collection of executors we do not fully maintain, we have examples of use, conceptual, and in development executors. The most important of them are:
basic_example.py
: The Hello World of Faraday executors. It will create a host with an associeted vulnerability to itheroku_discovery_agent.py
: Load host and service information from your Heroku accountprowlerSample.py
: Run the prowler command and send its output to Faradaybrainfuck.sh
: A proof-of-concept to demonstrate you can create an executor in any programming language, including Brainfuck!
Roadmap
We are currently working on new executors, apart from improving the experience using the agents.
We would like to give some agents read access to their workspace, so they can benefit of the existing data in order to find more valuable information.
Documentation
For more info you can check our documentation
1.3.0 [Sep 3rd, 2020]:
- An Agent can post data to multiples workspaces
- The
run
command tries to migrate the configuration to the latest version from others as theconfig-wizard
does - Improve agent signal management and server disconnection, affecting the exit code
- The wizard page size can be customized (See:
faraday-dispatcher config-wizard --help
) - The new official executors are:
- burp
- crackmapexec
- Arachni executor generates reports in /tmp now
- Nmap executor updates use of nmap plugin (byte-string to string response)
- Faraday versions: 3.12.0
1.2.1 [Jun 22nd, 2020]:
- Now the dispatcher runs the check commands before running an executor
- Fix error when connects with faraday fails when trying to access with SSL to not SSL server
- Fix error when connects with faraday fails when server does not respond
- Fix error when connects with faraday fails when SSL verification fails
- Fix error attempting to create an executor with a comma in the name
- Now the wizard ask if you want use the default SSL behavior
- Started the process of documentation
- The new official executors are:
- arachni
- openvas
- zap
- Nmap executor now acepted multi target
- Fix W3af executor now uses python2
- Escape user-controlled executor parameters in order to prevent OS argument injection (not command injection)
- Faraday versions: 3.11, 3.11.1, 3.11.2
1.2 [May 27th, 2020]:
- Now we have official executors, packaged with the dispatcher
- Fix error when killed by signal
- Fix error when server close connection
- Fix error when ssl certificate does not exists
- Fix error when folder
~/.faraday
does not exists, creating it - The new official executors are:
- nessus
- nikto
- nmap
- sublist3r
- wpscan
- w3af
- Faraday versions: 3.11, 3.11.1, 3.11.2
1.1 [Apr 22th, 2020]:
- The dispatcher now runs with a
faraday-dispatcher run
command faraday-dispatcher wizard
command added which generates configuration .ini file- Manage execution_id within WS and API communication
- The route of Faraday ws comunication change from / to /websockets
- Better error management, now shows error and exceptions depending on log levels
- Better management of invalid token errors
- Add ssl support
- Faraday versions: 3.11, 3.11.1, 3.11.2
1.0 [Dec 17th, 2019]:
- You can add fixed parameters than shouldn't came by the web (e.g. passwords) are set in the dispatcher.ini
- Now its possible to manage multiple executors within one agent
- Now is possible to receive params from the Faraday server
- Faraday versions: 3.10, 3.10.1, 3.10.2
0.1 [Oct 31th, 2019]:
- First beta version published
- Basic structure implemented, with executor with fixed values
- Faraday versions: 3.9.2, 3.9.3
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file faraday_agent_dispatcher-1.3.0.tar.gz
.
File metadata
- Download URL: faraday_agent_dispatcher-1.3.0.tar.gz
- Upload date:
- Size: 372.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.4.2 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0c9b5ce70b79764c4e5fc0f44155909b056b40ce7ca3700388bf1380a7e8a567 |
|
MD5 | dd2ac09dc5502b75f58201eb09298e6a |
|
BLAKE2b-256 | daefd9bc627dffc547f6ad71eaff1c9ef56d88f7d07aca855d7a95692ec72ace |
File details
Details for the file faraday_agent_dispatcher-1.3.0-py2.py3-none-any.whl
.
File metadata
- Download URL: faraday_agent_dispatcher-1.3.0-py2.py3-none-any.whl
- Upload date:
- Size: 61.7 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.4.2 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f5a4b359456c053a174bb7de386aec1854c96f23ecd05c9a48dc7c9fc012804d |
|
MD5 | ad3c684cd676eabcb3ec31d4c2f5fd71 |
|
BLAKE2b-256 | d81a87fafa6f779b40453a5fceb462b37a179a6ef08514836ecdf93501ed9566 |