A Caldera plugin to execute scripts from the attack-macOS library.
| Agent | Platform | Compatibility | Notes |
|---|---|---|---|
| Sandcat | macOS | β Supported | Primary agent for macOS operations |
| Manx | macOS | β Not tested | May work but untested |
| Ragdoll | macOS | β Not tested | May work but untested |
Plugin Dependencies: None
Target System Requirements:
| Component | Requirement | Notes |
|---|---|---|
| Operating System | macOS 13+ (Ventura) | Tested on Darwin 22.6.0 |
| Native Tools | LOLBins only | Uses built-in macOS commands |
| Additional Software | None | Living Off The Land approach |
π caldera-plugin-attack-macos
cd /path/to/caldera
curl -sSL https://raw.githubusercontent.com/armadoinc/caldera-plugin-attack-macos/main/install.sh | bash# Standard installation
curl -sSL https://raw.githubusercontent.com/armadoinc/caldera-plugin-attack-macos/main/install.sh | bash
# Use local attack-macOS directory
curl -sSL https://raw.githubusercontent.com/armadoinc/caldera-plugin-attack-macos/main/install.sh | bash -s -- --local-path /path/to/attack-macOS
# Use custom repository
curl -sSL https://raw.githubusercontent.com/armadoinc/caldera-plugin-attack-macos/main/install.sh | bash -s -- --remote-repo user/fork-attack-macOS
# Use private repository
curl -sSL https://raw.githubusercontent.com/armadoinc/caldera-plugin-attack-macos/main/install.sh | bash -s -- --auth-token ghp_xxxxxThe sync script automatically manages dependencies and performs a two-phase sync process: updating plugin infrastructure files and transforming attack-macOS scripts into Caldera abilities with MITRE ATT&CK metadata.
- Virtual Environment: Creates isolated Python environment with required dependencies (PyGithub, PyYAML)
- Path Detection: Auto-detects Caldera installation from script location
- Dependency Management: Installs/updates requirements automatically
cd /path/to/caldera/plugins/attackmacos
python sync_plugin.py# Default: Updates plugin files from plugin repo AND syncs abilities from attack-macOS repo
python sync_plugin.py
# Specify custom Caldera path (otherwise auto-detected)
python sync_plugin.py --caldera-path /path/to/caldera
# Use local attack-macOS directory instead of downloading from GitHub
python sync_plugin.py --local-path /path/to/attack-macOS
# Use different GitHub repository (default: armadoinc/attack-macOS)
python sync_plugin.py --remote-repo user/fork-attack-macOS
# Use authentication token for private repositories
python sync_plugin.py --auth-token ghp_xxxxx
# Sync abilities only (skip plugin infrastructure updates)
python sync_plugin.py --abilities
# Update plugin files only (skip abilities sync)
python sync_plugin.py --plugin
# Show help
python sync_plugin.py --helpPlugin Files (from caldera-plugin-attack-macos repository):
hook.py- Plugin initialization and registrationplugin-init.py- Plugin configurationsync_plugin.py- This sync scriptrequirements.txt- Python dependencies
Abilities (from attack-macOS repository):
- Shell Scripts: Copied from built script directories to
data/payloads/ - YAML Abilities: Auto-generated from YAML configurations in
attackmacos/core/config/ - MITRE ATT&CK Mapping: Technique IDs, tactics, and descriptions extracted from YAML configs
- Full Commands: Complete command examples with realistic options
- YAML-First Discovery: Starts with YAML configurations in
attackmacos/core/config/ - Script Mapping: Finds corresponding built scripts in
attackmacos/ttp/[tactic]/shell/ - Command Generation: Extracts options from YAML to build full command examples
- Ability Creation: Creates Caldera abilities with proper MITRE ATT&CK metadata
- Payload Deployment: Scripts become deployable payloads via Caldera's payload system
- Installation: Initial sync during plugin setup
- Manual: Run
sync_plugin.pyto update after attack-macOS changes - Development: Sync after modifying attack-macOS scripts or YAML configs
All abilities use complete, ready-to-execute commands:
command: ./browser_history.sh --safari --chrome --firefox --brave --format json
payloads:
- browser_history.sh
cleanup:
- rm -f #{location}/browser_history.sh
timeout: 300
delete_payload: trueEach attack-macOS script becomes a Caldera ability with:
- Complete commands: Full option examples ready for execution
- No fact dependencies: Self-contained commands
- Direct editing: Operators modify commands in Caldera UI
- MITRE ATT&CK mapping: Proper technique IDs and names from YAML configs
- Select ability from attack-macOS abilities in adversary profile
- Review command with pre-built realistic options
- Edit command directly in Caldera UI operation panel
- Execute customized command on target
- Create operation in Caldera
- Add attack-macOS ability to adversary profile
- Review and modify command in operation panel as needed
- Execute on target
Example Command Modification:
# Original generated command
./screen_capture.sh --screenshot --hidden --format json
# Modified by operator
./screen_capture.sh --all-methods --format csv --verboseimport requests
# Execute ability with custom command
ability_data = {
"paw": "target-agent-paw",
"ability_id": "3b366584-63de-4b56-87fa-46eb2dd0f1e5",
"command": "./modify_preferences.sh --login-hook --extend-sophos --format json"
}
response = requests.post(
"https://caldera-server:8888/api/v2/operations/operation-id/potential-links",
headers={"KEY": "your-api-key"},
json=ability_data
)Each script supports comprehensive options accessible via:
./script_name.sh --helpCommon patterns:
--format json|csv- Output format--verbose- Detailed execution information--log- Enable logging- Technique-specific options (documented per script)