Repository navigation
Usage Guide
Bull works two ways: an interactive TUI menu, and a direct CLI. Both call the same underlying functions, so anything you can do in the menu you can script.
sudo ./bull.sh # interactive menu
sudo ./bull.sh <command> # direct CLIBull must run as root (it manages the hypervisor, iptables, and encrypted storage). After bull init you can use the bull alias.
sudo bull create kali-lab --os kali --ram 4096 --cpu 2 --resolution 2560x1440What happens:
- Bull resolves the username (your
--username, or the OS default such askali). - It resolves the password (see below), then generates the Vagrantfile and boots the box.
- Provisioning runs inside the VM as root: it creates your user, encrypts
/homewith ecryptfs, sets the keyboard layout and resolution, locks the default OS accounts, and applies hardening. - The password is encrypted with GPG and stored on the host, never in plaintext.
- If you have saved toolkits, Bull offers to install them.
- The VM is recorded in the inventory.
Bull never wants a password on the command line if it can avoid it. In order of preference:
| Method | Behavior |
|---|---|
| (nothing) | Bull generates a strong 24-char password. Reveal it later with bull show-pass <name>. |
--password-file <path> |
Reads the first line, then wipes the file (one-time use). |
--password <pass> |
Deprecated — visible in ps aux. Avoid. |
Reveal a stored password at any time:
sudo bull show-pass kali-lab| Option | Default | Meaning |
|---|---|---|
--os <kali|parrot> |
kali |
Guest OS |
--ram <MB> |
4096 |
Memory |
--cpu <N> |
2 |
vCPUs |
--resolution <WxH> |
1920x1080 |
Display resolution (prompted if omitted) |
--username <user> |
OS default | Login user inside the VM |
--password-file <path> |
— | Read password from a file (then wiped) |
--keyboard <layout> |
prompted | Keyboard layout (us, fr, de, …) |
Parrot OS downloads a ~9 GB OVA on first use. Budget time and disk accordingly.
sudo bull list # all VMs and their status
sudo bull start kali-lab # boot
sudo bull stop kali-lab # graceful halt
sudo bull connect kali-lab # SSH in
sudo bull view kali-lab # open the graphical console (alias: gui)
sudo bull destroy kali-lab # remove permanently (irreversible, asks to confirm)Take a snapshot before anything risky, then roll back if it goes wrong:
sudo bull snapshot kali-lab pre-exploit
# ... do something destructive ...
sudo bull restore kali-lab pre-exploitThe label is optional on snapshot (a timestamped one is generated) but required on restore.
Route the VM's traffic through OpenVPN or WireGuard, and drop everything that is not the tunnel:
sudo bull vpn kali-lab ~/vpn/config.ovpnBull auto-detects OpenVPN vs WireGuard, installs the client inside the VM, brings the tunnel up, and applies an iptables kill switch. Verify after connecting:
sudo bull connect kali-lab
curl ifconfig.me # should show the VPN exit IPDetails in VPN and Kill Switch.
Install a security tool from a Git URL onto a running VM:
sudo bull toolkit kali-lab https://github.com/owner/tool.gitSave tools to the registry so every new VM can get them automatically. See Toolkit Manager.
sudo bull status # global overview
sudo bull sync # reconcile the inventory with the hypervisor's real stateUse sync if a VM was changed outside Bull (e.g. stopped directly via virsh or VBoxManage).
For the exhaustive flag-by-flag list, see the CLI Reference.
Bull · MIT License · Technical hardening only — see the Security Model.
Getting started
Features
Internals
Help