Installation
Gremlin must be installed on each host you wish to attack. In order for your hosts (and containers within the hosts) to be targetable, the installed gremlin must be registered with the Gremlin Control Plane.
Gremlin can be deployed into bare-metal environments running either Linux or Windows, into container-based infrastructure environments running on Linux, and into virtual infrastructure environments.
General steps deploying to Virtual Machine:
- Get credentials - Team ID with secret or certificates
- Install Gremlin packages:
gremlin
andgremlind
- Register to the Control Plane
General steps deploying to Kubernetes:
- Get Credentials - Team ID with secret or certificates
- Create Kubernetes secret
- Deploy Helm Chart
Virtual machine
Before installing look at our caveats page to see if there are additional steps needed for your distribution during installation.
Ubuntu, Debian, etc.
For DEB-based Linux distributions (DEB packages)
1# Add packages needed to install and verify gremlin (already on many systems)2sudo apt update && sudo apt install -y apt-transport-https dirmngr34# Add the Gremlin repo5echo "deb https://deb.gremlin.com/ release non-free" | sudo tee /etc/apt/sources.list.d/gremlin.list67# Import the GPG key8sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 9CDB294B29A5B1E2E00C24C022E8EF3461A50EF6910# Install Gremlin client and daemon11sudo apt update && sudo apt install -y gremlin gremlind
List older versions of gremlin via: apt list -a gremlin
and install them via apt install gremlin=x.x.x-x
Amazon Linux, RHEL, CentOS, etc.
For RPM-based Linux distributions (RPM packages)
1# Install dependencies2sudo yum install -y iproute-tc34# Add the Gremlin repo5sudo curl https://rpm.gremlin.com/gremlin.repo -o /etc/yum.repos.d/gremlin.repo67# Install Gremlin client and daemon8sudo yum install -y gremlin gremlind
List older versions of gremlin via: yum list available gremlin --showduplicates
and install them via yum install gremlin-x.x.x-x
Docker image
Alternatively, instead of installing Gremlin directly on the host operating system, you can deploy Gremlin from the Docker image on DockerHub.
For gremlind
to attack Docker containers, you need to add the gremlin
user to the docker
group after installing Gremlin and Docker.
1sudo adduser gremlin docker
Kubernetes
Gremlin allows targeting objects within your Kubernetes clusters. After selecting a cluster, you can filter the visible set of objects by selecting a namespace. Select any of your Deployments
, ReplicaSets
, StatefulSets
, DaemonSets
, or Pods
. When one object is selected, all child objects will also be targeted. For example, when selecting a DaemonSet, all of the pods within will be selected.
Only parent Kubernetes objects are available to target. Pods will be listed only if they don't belong to a Set or Deployment.
Installation
The Gremlin Kubernetes client can be installed in place of—or in addition to—installing the Gremlin client on a host. You can install the Kubernetes client using either kubectl
or helm
. Both methods are outlined here.
Create a Kubernetes secret from Gremlin certificates
When using signature-based authentication, we recommend storing your certificates as a Kubernetes secret. This section will walk you through this process.
A Kubernetes secret is different from the secret used for secret-based Gremlin authentication. If you are using secret-based authentication, you can skip this step.
Download the Gremlin certificates (your role must either be Team Manager or Team Credential Manager).
Unzip certificates.zip.
Rename the files in the certificates folder.
Team Name.pub_cert.pem
becomesgremlin.cert
.Team Name.priv_key.pem
becomesgremlin.key
.Create a gremlin namespace:
bash1kubectl create namespace gremlinCreate a kubernetes secret by running the following:
bash1kubectl -n gremlin create secret generic gremlin-team-cert --from-file=/path/to/gremlin.cert --from-file=/path/to/gremlin.key
kubectl
Download the Gremlin configuration manifest by running the following:
bash1wget https://k8s.gremlin.com/resources/gremlin-conf.yamlOpen the file and update the following:
- Replace
<YOUR TEAM ID GOES HERE>
with your Gremlin team ID. - Replace
<YOUR TEAM SECRET GOES HERE>
with your Gremlin team secret (If you are using certificate-based authentication, remove this line.) - Replace
<YOUR UNIQUE CLUSTER NAME GOES HERE>
with a unique name for your cluster. This can be any name you want, and will appear in Gremlin in the Kubernetes client list.
- Replace
Apply the manifest with this command:
bash1kubectl apply -f gremlin-conf.yaml
If you are using certificate-based authentication, download and apply the gremlin client manifest for your Kubernetes cluster by running the following:
1kubectl apply -f https://k8s.gremlin.com/resources/gremlin-client.yaml2kubectl apply -f https://k8s.gremlin.com/resources/gremlin-chao.yaml
If you are using secret-based authentication, download and apply the gremlin client manifest for your Kubernetes cluster by running the following:
1kubectl apply -f https://k8s.gremlin.com/resources/gremlin-client-secret.yaml2kubectl apply -f https://k8s.gremlin.com/resources/gremlin-chao-secret.yaml
Helm
To deploy Gremlin using Helm, first add the Gremlin Helm chart repository:
1helm repo remove gremlin2helm repo add gremlin https://helm.gremlin.com
Next, create a new gremlin
namespace. The Helm chart will be deployed to this namespace:
1kubectl create namespace gremlin
Create three environment variables: one for your Gremlin team ID, another fir your Gremlin secret key, and a third for your Kubernetes cluster name. If you are using certificate-based authentication or are managing your secrets in Kubernetes, see the Chart readme for more information.
1GREMLIN_TEAM_ID="my_gremlin_team_id"2GREMLIN_CLUSTER_ID="my_cluster_name"3GREMLIN_TEAM_SECRET="my_gremlin_team_secret"
Lastly, deploy the Helm chart:
1helm install gremlin/gremlin \2 --name gremlin \3 --namespace gremlin \4 --set gremlin.secret.managed=true \5 --set gremlin.secret.type=secret \6 --set gremlin.hostPID=true \7 --set gremlin.secret.teamID=$GREMLIN_TEAM_ID \8 --set gremlin.secret.clusterID=$GREMLIN_CLUSTER_ID \9 --set gremlin.secret.teamSecret=$GREMLIN_TEAM_SECRET
The Gremlin helm chart also supports certificate-based authentication, and manually managed Kubernetes secrets, as well as several other configuration options. For the most complete, up-to-date instructions for installing from the Gremlin helm chart, see the README.
To verify that the installation was successful, or to learn about additional configuration options, see the Kubernetes page.
Running an attack
Once you select the Kubernetes objects to be targeted, select and configure your desired Gremlin attack. When the attack is run, the underlying containers within the objects selected will be impacted.
Containers share resources with their hosts. Running resource attacks on Kubernetes objects will impact the hosts where the targeted containers are running, including the host's full set of containers.
ECS, Swarm, Mesos
Additional installation tutorials are available in our community site.
Windows
For Microsoft Windows run the following from an elevated command prompt.
1msiexec /quiet /package https://windows.gremlin.com/installer/latest/gremlin_installer.msi
After installation, you need to authenticate the agent.
After installation
After installation, the next step is to authenticate the agent with the Gremlin Control Plane. See Authentication for more information.
For additional configuration options, such as using the Gremlin configuration file and environment variables, see Advanced Configuration.
Other considerations
Customize Gremlin's Linux user and group
By default on Linux, Gremlin installs a gremlin
Linux user and group, and sets the suid
bit on /usr/bin/gremlin
so that all users can run the Gremlin executable. These defaults can be overridden at installation time by supplying
environment variables to the installer.
For example, to run Gremlin as root and restrict executable access to root:root
, you would run:
1GREMLIN_INSTALL_USER=root GREMLIN_INSTALL_GROUP=root GREMLIN_INSTALL_BIN_MODE=0770 \2 sudo -E yum install gremlin gremlind
The full list of variables available at install time, and their defaults are as follows:
Variable | Default | Description |
---|---|---|
GREMLIN_INSTALL_USER | gremlin | The Linux user to own all file installed by Gremlin. This user is created if it does not exist |
GREMLIN_INSTALL_GROUP | gremlin | The Linux group to own all file installed by Gremlin. This group is created if it does not exist |
GREMLIN_INSTALL_BIN_MODE | 6111 | The file mode for executable files installed by Gremlin. |