
Creating attacks paths across management and data planes

Cirro is an extensible security research platform that enables researchers and penetration testers to collect, analyze, and visualize cloud environments and identity relationships through graph databases. Built with a modular architecture, Cirro can be extended to support multiple platforms and data sources.
You can check out the Documentation for more info.
Cirro has two main functional areas:
cirro collect): Gathers information from various platforms and APIscirro graph): Manages graph database operations including data ingestion and exportThe modular architecture uses feature flags to enable platform-specific functionality, allowing users to build only the components they need.
Cirro uses a hierarchical command structure organized by function and platform:
cirro <function> <platform> <command> [options]
Azure (collect az)
# Available authentication methods:
cirro collect az azcli # Azure CLI authentication
cirro collect az client-secret # Client ID and secret
cirro collect az client-cert # Client certificate
cirro collect az access-token # Pre-obtained access token
cirro collect az user-pass # Username and password
Tailscale (collect ts)
# Tailscale data collection
cirro collect ts <auth-method> [options]
Data Ingestion (graph ingest)
# Ingest collected data into graph database
cirro graph ingest --type <platform> --file <data-file> [database options]
Data Export (graph export)
# Export graph data to various formats
cirro graph export --format <format> [options]
Download the latest release for your platform from the releases page. The releases are built with all features enabled.
git clone https://github.com/bishopfox/cirro.git
cd cirro
cargo build --release
NOTE: BUILDING WITH --RELEASE IS IMPORTANT FOR GRAPH FUNCTIONALITY SINCE IT EMBEDS YAML CONFIGURATION FILES IN THE BINARY!
The binary will be available at target/release/cirro.
By default, Cirro includes all available functionality. To build with specific features:
# Build with only collection features
cargo build --release --no-default-features --features collector
# Build with only graph features
cargo build --release --no-default-features --features graph
# Build with specific platform support
cargo build --release --no-default-features --features "azure"
cargo build --release --no-default-features --features "tailscale"
Cirro uses Neo4j as the backend database. There are docker-compose files in the tools directory to assist with containerized databases.
After collecting data, ingest it into your graph database:
# Ingest data for specific platforms
cirro graph ingest --type az --file cirro_output.db # Azure data
cirro graph ingest --type ts --file cirro_ts_socket.json # Tailscale data
# Specify custom database connection
cirro graph ingest --type az --file cirro_output.db \
--server bolt://localhost:7687 \
--user neo4j \
--password password
Preview what would be ingested and post-processed without writing any data to the graph database:
# Preview Azure ingestion and see which resource types have no implemented specs
cirro graph ingest --type az --file cirro_output.db --dry-run
# Preview Tailscale ingestion
cirro graph ingest --type ts --file cirro_ts_socket.json --dry-run
In dry-run mode, Cirro will:
CirroDash can be located here: https://github.com/bishopfox/cirrodash
Enable debug logging for detailed information:
# Collection debug mode
cirro collect az azcli --debug
# Ingestion debug mode
cirro graph ingest --type az --file cirro_output.db --debug
Note: Cirro is designed for authorized security testing and research. Ensure you have proper permissions before running against any cloud or network environment.