LLM+AI Cyber Reasoning Security System. This repositories contains SIFT's LACROSSE, the adaptive Cyber Reasoning System (CRS) as submitted to the AIxCC Final Competition (AFC).
LACROSSE is a multi-agent CRS combining fuzzing and symbolic reasoning to find and patch bugs across various C and Java software codebases.
- Azure Subscription
- Azure CLI
- Terraform
The Lacrosse source code the following important directories:
crscontaining everything needed to run the Lacrosse system including Dockerfiles, testing suites, tools, and agents.terraformcontaining everything needed for terraform to deploy the Lacrosse CRS on Azure.
Before starting the Lacrosse CRS, please ensure all necessary keys and tokens are stored inside of a reachable Azure vault and azure-bashrc. For steps on how to do this, see Azure Tokens and azure-bashrc.
-
Clone the afc-crs-lacrosse repository.
-
Login to Azure
az login --tenant aixcc.techNOTE: in the CLI you might needaz login --tenant aixcc.tech --use-device-code -
Add the following environment variables to your
.bashrcto allow Terraform to log in to Azure:
export ARM_CLIENT_ID="<appID-value>"
export ARM_CLIENT_SECRET="<password-value>"
export ARM_TENANT_ID="<tenant-id>"
export ARM_SUBSCRIPTION_ID="<subscription-id>"
See Authentication using the Azure CLI for more information.
-
Navigate within the afc-crs-lacrosse repository to
terraform/VM-deploy. -
Run
make up.
Within the lacrosse terraform/VM-deploy directory, there are the following terraform configuration files:
main.tfprovisions 3 VMs (a CRS VM, and 2 fuzzing (FB) VMs) under machine class "Standard_D128ds_v6" for a multi-host Lacrosse CRS.data.tfhighlights secrets and tokens required from the azure key vault for initializing Lacrosse.backend.tfhighlights the backend storage account. Optional change this to a storage account for your backups.outputs.tfsaves the resource group and the bastion ip.providers.tfterraform/azure providers (i.e hashicorp).ssh.tfextra azure ssh configurations.variables.tfextra azure variable configurations.
Inside of main.tf, a setup-script.sh is executed to configure everything needed for the VMs and start
an instance of the lacrosse CRS that will begin initializing it agents.
Once the terraform apply has completed Lacrosse will take roughly 15 minutes to setup and
connect agents. After the agents are up and connected, lacrosse will begin working on tasks.
data.tf details various keys with values stored in an Azure key vault for servicing the Lacrosse CRS.
- Create a new Azure Key Vault with the following keys:
The following keys are AIxCC specific:
CompetitionApiTeamEndpoint,CompetitionApiEndpointSet to the endpoint of the competition API.CompetitionApiKeyId,CompetitionApiTeamIDSet to the ID of the competition server.CompetitionApiTeamSecret,CompetitionApiKeyTokenSet to the secret of the compeition server.CrsApiKeyIDSet to the ID of the Lacrosse CRS Api.CrsApiKeyTokenSet to the secret of the Lacrosse CRS Api.TailscaleAuthKeySet to the authorization key for the TailScale network.TailscaleHostnameSet to the hostname expected of the TailScale network.LacrosseGitHubPatGitHub PAT token used to pull AIxCC Finals images.OtelExporterOtlpHeadersSet to the authentication headers (base64) for Telemetry.
The following keys are Lacrosse specific:
ServicePrincipalAppIdSet to ID for pulling from Azure Container Registry.ServicePrincipalSecretSet to Secret for pulling from Azure Container Registry.VmdPublicSSHKeySSH public key for remote access and multi-host comms within Lacrosse.VmdPrivateSSHKeySSH private key for remote access and multi-host comms within Lacrosse.
The following keys are LLM specific:
GeminiKeySet to the API key for Gemini.AnthropicKeySet to the API key for Anthropic.OpenAIKeySet to the API key for OpenAI.
Keys need to be set in the Azure Key Vault (as described in the section above)
and included in crs/code/tools/azure-bashrc so that every lacrosse VM can access these shared values.
Review the azure-bashrc template at crs/code/tools/azure-bashrc-template.
The Terraform setup will replace the placeholder "<values>" defined inside the template.
Any hardcoded values including endpoints, azure api base, otlp protocol, and the lacrosse release tag may be changed to match user preferences.
The Lacrosse CRS copies from crs/code/tools/azure-bashrc into its VM(s) and agent(s) for use on system startup.
Terraform has all the necessary initialization material for spinning up Lacrosse's rootless-docker images.
Currently, the images used for the Lacrosse CRS are built and added to the Azure Registry.
During AIxCC, these images are pulled from the Azure Registry within the Terraform init.
These docker images have been added to the afc-crs-lacrosse GitHub Registry as well and will be pulled by the Lacrosse setup system.
To build the docker images locally, instead of pulling,
-
From the lacrosse parent directory (parent to
crs/), runmake build -
Navigate to
crs/code/docker/afc-crs-serverand runDOCKER_TAG=latest make
For more information about these images, see the code/docker/afc-crs-server and code/docker/neo-fuzz-ccl Dockerfiles.
Run terraform plan -destroy -out main.destroy.tfplan followed by a terraform apply main.destroy.tfplan to preview and commit to destroying the active CRS.
Otherwise, run terraform destroy.