Create the pentestlab
organization and pentester
user on the chef server. Copy the generated key to secrets/pentester.pem
chef-server-ctl org-create pentestlab "Pentestlab organization"
chef-server-ctl user-create pentester Pentester
chef-server-ctl org-user-add pentestlab pentester -a
This key will be used to encrypt data bags and will be deployed on all nodes.
openssl rand -base64 2048 > .chef/encrypted_data_bag_secret
All nodes will be configured with eliot
user with authorized keys defined in ssh_keys
data bag.
Create a data bag data_bags/ssh_keys/h4x0r.json
and put SSH public keys that will be allowed to connect to the lab:
{
"id": "h4x0r",
"keys": [
{
"id": "my-id-rsa",
"pub": "ssh-rsa AAAA.....",
"priv": [""]
},
etc..
]
}
Define SSH keys for root user data_bags/ssh_keys/root.json
(empty):
{
"id": "root",
"keys": []
}
Create an encrypted data bag for our lab user eliot
with the knife command:
knife data bag create ssh_keys eliot --secret-file .chef/encrypted_data_bag_secret
And put the public and private SSH keys (generate a key pair if needed):
{
"id": "eliot",
"keys": [
{
"id": "id_rsa",
"pub": "ssh-rsa AAAA...",
"priv": [
"-----BEGIN RSA PRIVATE KEY-----",
"...",
"-----END RSA PRIVATE KEY-----"
]
}
]
}
The lab will be provisioned with an openvpn server.
To generate client keys, you need to define each user in the users
data bag. The node that includes the openvpn-server
role will look for all item in this data bag and generate user's key & certificate to access to the vpn.
To add an user, create data_bags/users/name.json
:
{
"id": "name"
}
That's all!
Beef database is managed by encrypted data bag, create it with knife:
knife data bag create pentester beef --secret-file .chef/encrypted_data_bag_secret
With content like:
{
"id": "beef",
"db": {
"db_user": "beef",
"db_passwd": "beefpass",
"db_name": "beef"
}
}
Gitrob database is managed by encrypted data bag:
knife data bag create pentester gitrob --secret-file .chef/encrypted_data_bag_secret
With:
{
"id": "gitrob",
"gh_auth_token": "your_github_auth_token",
"db": {
"user": "gitrob",
"pass": "gitrob",
"db": "gitrob"
}
}
Metasploit database is managed by encrypted data bag, create it with knife:
knife data bag create pentester msf --secret-file .chef/encrypted_data_bag_secret
And configure database:
{
"id": "msf",
"db": {
"user": "msf",
"pass": "msf",
"db": "msf"
}
}
Etherpad database is managed by encrypted data bag like setup above:
knife data bag create lab etherpad --secret-file .chef/encrypted_data_bag_secret
with:
{
"id": "etherpad",
"db": {
"user": "etherpad",
"pass": "etherpad",
"db": "etherpad"
}
}
All defaults data bags are located in data_bags
directory, they should be uploaded during the provisioning step.