RustHound
Summary
- Limitation
- Description
- How to compile it?
- How to build documentation?
- Usage
- Demo
- Statistics
- Roadmap
- Links
Limitations
Not all SharpHound features are implemented yet but some are existing in RustHound and do not in SharpHound or BloodHound-Python. Please refer to the roadmap for more information.
Description
RustHound is a cross-platform BloodHound collector tool, written in Rust. (Linux,Windows,MacOS)
No anti-virus detection and cross-compiled.
RustHound generate users,groups,computers,ous,gpos,containers,domains json files to analyze it with BloodHound application.
💡 If you can use SharpHound.exe, use it. Rusthound is a backup solution if SharpHound.exe is detected by AV or if SharpHound.exe isn't executable from the system where you have access to.
How to compile it?
Using Makefile
You can use make command to install Rusthound or to compile it for Linux or Windows.
More command in the Makefile:
Using Dockerfile
Use RustHound with docker to make sure to have all dependencies.
Using Cargo
You need to install rust on your system (Windows/Linux/MacOS).
https://www.rust-lang.org/fr/tools/install
RustHound support Kerberos/GSSAPI but this means that it needs Clang and its development libraries, as well as the Kerberos development libraries. On Debian/Ubuntu, that means clang-N, libclang-N-dev and libkrb5-dev.
For example:
#Debian/Ubuntu
Here is how to compile the "release" and "debug" versions from "cargo" command.
#or debug version
The result can be found in "target/release" or in "target/debug" folder.
Below you can find the compilation methodology for each of the OS from Linux. If you need another compilation system, please consult the list in this link : https://doc.rust-lang.org/nightly/rustc/platform-support.html
Manually for Linux x86_64 static version
#Install rustup and cargo in Linux
|
#Add Linux deps
#Static compilation for Linux
CFLAGS="-lrt";LDFLAGS="-lrt";RUSTFLAGS='-C target-feature=+crt-static';
The result can be found in "target/x86_64-unknown-linux-gnu/release" folder.
Manually for Windows static version from Linux
#Install rustup and cargo in Linux
|
#Add Windows deps
#Static compilation for Windows
RUSTFLAGS="-C target-feature=+crt-static"
The result can be found in "target/x86_64-pc-windows-gnu/release" folder.
Manually for MacOS static version from Linux
Amazing documentation: https://wapl.es/rust/2019/02/17/rust-cross-compile-linux-to-macos.html
#Install rustup and cargo in Linux
|
#Add MacOS tool chain
#Cargo needs to be told to use the correct linker for the x86_64-apple-darwin target, so add the following to your project’s .cargo/config file:
#Static compilation for MacOS
#Uncomment line 32 and comment line 34 in Cargo.toml
RUSTFLAGS="-C target-feature=+crt-static"
The result can be found in "target/x86_64-apple-darwin/release" folder.
How to build the documentation?
Usage
()
Demo
Examples are done on the GOADv2 implemented by mayfly:
Simple usage
# Linux with username:password
# Linux with username:password and ldapip
# Linux with username:password and ldaps
# Linux with username:password and ldaps and custom port
# Tips to redirect and append both standard output and standard error to a file > /tmp/rh_output 2>&1
# Windows with GSSAPI session
# Windows simple bind connection username:password (don't use simple quote or double quote with cmd.exe)
Module FQDN resolver
# Linux with username:password and FQDN resolver module
# Linux with username:password and ldaps and FQDN resolver module and TCP DNS request and custom name server
# Windows with GSSAPI session and FQDN resolver module
# Windows simple bind connection username:password and FQDN resolver module and TCP DNS request and custom name server (don't use simple quote or double quote with cmd.exe)
Module ADCS collector
Example is done with the @ly4k BloodHound version.
# Linux with username:password and ADCS module for @ly4k BloodHound version
# Linux with username:password and ADCS module and dconly flag (will don't check webenrollment)
# Linux with username:password and ADCS module using "--old-bloodhound" argument for official @BloodHoundAd version
# Windows with GSSAPI session and ADCS module
# Windows with GSSAPI session and ADCS module and TCP DNS request and custom name server
# Windows simple bind connection username:password (don't use simple quote or double quote with cmd.exe)
You can find the custom queries used in the demo, in the resource folder.
Use the following command to install it:
:rocket: Statistics
In order to make statistics on a DC with more LDAP objects, we run the BadBlood project on the domain controller ESSOS.local from GOAD. The DC has now around 3500 objects. An execution average time has been done and here are the output:
Tool | Environment | Objects | Time | Command line |
---|---|---|---|---|
SharpHound.exe | Windows | ~3500 | ~51.605s | Measure-Command { sharphound.exe -d essos.local --ldapusername 'khal.drogo' --ldappassword 'horse' --domaincontroller '192.168.56.12' -c All } |
BloodHound.py | Linux | ~3500 | ~9.657s | time python3 bloodhound.py -u khal.drogo -p horse -d essos.local -ns 192.168.56.12 --zip -c all |
RustHound.exe | Windows | ~3500 | ~5.315s | Measure-Command { rusthound.exe -d essos.local -u khal.drogo@essos.local -p horse -z } |
RustHound | Linux | ~3500 | ~3.166s | time rusthound -d essos.local -u khal.drogo@essos.local -p horse -z |
🚥 Roadmap
Authentification
- ldap (389)
- ldaps (636)
-
BIND
-
NTLM
-
GSSAPI
for Windows ok but not tested for Linux
Outputs
- users.json
- groups.json
- computers.json
- ous.json
- gpos.json
- containers.json
- domains.json
- cas.json
- templates.json
- args and function to zip json files --zip
Modules
- Retreive LAPS password if your user can read them automatic
- Resolve FQDN computers found to IP address --fqdn-resolver
- Retrieve certificates for ESC exploitation with Certipy --adcs
- Kerberos attack module (ASREPROASTING,KERBEROASTING) --attack-kerberos
- Retrieve datas from trusted domains --follow-trust (Currently working on it, got beta version of this module)
Bloodhound v4.2
-
Parsing Features
- Users & Computers
-
HasSIDHistory
-
- Users
-
Properties
:sfupassword
-
- Users & Computers
-
DCERPC (dependencies)
- Computers
-
Sessions
-
- OUs & Domains
-
LocalAdmins
-
RemoteDesktopUsers
-
DcomUsers
-
PSRemoteUsers
-
- CAs
-
User Specified SAN
-
Request Disposition
-
- Computers
:link: Links
- Blog post: https://www.opencyber.com/rusthound-data-collector-for-bloodhound-written-in-rust/
- BloodHound.py: https://github.com/fox-it/BloodHound.py
- SharpHound: https://github.com/BloodHoundAD/SharpHound
- BloodHound: https://github.com/BloodHoundAD/BloodHound
- BloodHound docs: https://bloodhound.readthedocs.io/en/latest/index.html
- GOAD: https://github.com/Orange-Cyberdefense/GOAD
- ly4k BloodHound version: https://github.com/ly4k/BloodHound
- Certipy: https://github.com/ly4k/Certipy