Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/leesoh/yams
A collection of Ansible roles for automating infosec builds.
https://github.com/leesoh/yams
ansible penetration-testing security security-automation
Last synced: 27 days ago
JSON representation
A collection of Ansible roles for automating infosec builds.
- Host: GitHub
- URL: https://github.com/leesoh/yams
- Owner: leesoh
- License: mit
- Archived: true
- Created: 2017-07-16T16:17:23.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2017-12-15T15:38:11.000Z (almost 7 years ago)
- Last Synced: 2024-08-03T09:05:51.680Z (4 months ago)
- Topics: ansible, penetration-testing, security, security-automation
- Language: Python
- Size: 65.4 KB
- Stars: 94
- Watchers: 11
- Forks: 16
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
- awesome-list-ansible - yams
- awesome-security-collection - **98**星
README
# Project Abandoned
While working through YAMS, I discovered Ansible Galaxy. This does essentially what YAMS aimed to do, but with the full force of RedHat behind it. I've moved most of the roles [there](https://galaxy.ansible.com/list#/roles?page=1&page_size=10&users=leesoh) but will be leaving this project up for the time being.# YAMS Framework
Welcome to Yet Another Modular Security Framework. YAMS is a collection of Ansible roles, some hacky scripts, and a large amount of standing on the shoulders of giants.# Thanks
YAMS is very much inspired by [The Penetration Tester's Framework](https://github.com/trustedsec/ptf) but attempts to build on the great work done there by adding strong support for environment-specific targeting (OS type, architecture, etc.), leveraging Ansible's solid module support for common tasks (git, apt, yum, etc.), and adding the ability to define a build script for easy deploy/rebuild.## More Thanks
* https://leucos.github.io/ansible-files-layout for role layouts
* @pixel8ed for opening my eyes to the glory of automation with Ansible and sanity checking# Getting Started
Getting started with YAMS is pretty straightforward. First, you're going to need to [install Ansible](https://docs.ansible.com/ansible/intro_installation.html#installing-the-control-machine) on your control machine. This is the system you'll use to configure your targets.YAMS doesn't require any special configuration on the target - if you can SSH to it, you can configure it.
Once you've cloned the YAMS repo, you'll need to make a couple of changes:
1. Copy `templates\hosts.template` to `hosts`.
2. Update `hosts` with the appropriate IP/port for your target.
3. Update any `CHANGEME` values in `\defaults\main.yml` for modules you plan on using.That's it! You can either tweak the sample `sample.yml` playbook to provision your first machine, or build your own.
Once you're happy with it, you can deploy your configuration using `ansible-playbook .yml [--ask-become-pass]`.
## Keeping Things Current
Ansible makes it pretty simple to keep a role up to date. Once you've got things the way you want them, just make sure that you're making good use of `update: yes` and `state: latest` and then just re-run the playbook.```
---
- name: Clone Empire
become: true
git:
repo: https://github.com/EmpireProject/Empire.git
dest: "{{ git_location }}/empire-git"
update: yes---
- name: Install pip
become: true
when: ansible_os_family == "Debian"
apt:
name: python-pip
update_cache: yes
state: latest
```# The Plumbing
YAMS uses Ansible [roles](https://docs.ansible.com/ansible/playbooks_roles.html#roles) to define configurations for a host. A playbook is just a grouping of these roles to define the configuration of a system. YAMS provides the roles, you provide the targets.Playbooks contain roles, roles contain plays, plays perform actions, and all of a sudden a box gets provisioned.
You can include a role in a playbook by adding it to the `roles` section:
```
---
- hosts: that_host
remote_user: that_guy
roles:
- metasploit
- sslscan
- ...
- kismet
```Roles contain all the modular goodness we use to build playbooks. A role should define everything that needs to happen for the role to be succesfully provisioned on a target, including:
* Dependency on other roles
* Environment variables
* Service configurations
* Packages to install
* Files created (and contents edited!)Roles can be simple:
```
# Installs Medusa
---
- name: Install Medusa
become: true
when: ansible_os_family == "Debian"
apt:
name: medusa
update_cache: yes
```Or a bit more involved:
```
---
# Installs and configures Metasploit
- name: Download Metasploit installer
become: true
get_url:
url: https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb
dest: /tmp/msfinstall
mode: 0755- name: Install Metasploit
become: true
command: /tmp/msfinstall- name: Initialize Metasploit database
command: msfdb init
```Packaging tools as roles allows us to reuse them in different playbooks. That's the magic of YAMS. Build once, use all over the damn place.
## Role Structure
Here's how a basic role is structed in YAMS:```
your-role/
├── docs.json # Contains documentation for the role
├── defaults
│ └── main.yml # Stores role-specific variables
├── files # Stores any required files for your role
├── handlers
│ └── main.yml
├── meta
│ └── main.yml # Declare dependencies here
└── tasks
└── main.yml # Imports and tags your role
└── your-role.yml # Contains all required plays for the role
```The `main.yml` file under `tasks` is what is run when a role is added to a playbook. Rather than store all functionality in that, however, we just use it to import and tag actual role file — `your-role.yml`.
This may seem a bit silly but doing it this way allows us to selectively run roles from the playbook using `ansible-playbook your-playbook.yml --tags "your-role,another-role"`.
## Common Plays
Here's how to do some common operations using Ansible. You can get a full list of supported modules [here](https://docs.ansible.com/ansible/list_of_all_modules.html).### Install a Package Using apt
```
- name: Install my-package
become: true
when: ansible_os_family == "Debian"
apt:
name: my-package
update_cache: yes
state: latest
```The above command is the same as running `sudo apt update && sudo apt install my-package`. Re-running the task will update it (state: latest).
### Clone a Git Repository
```
- name: Clone my-repo
become: true
git:
repo: https://github.com/foo/bar.git
dest: /opt/bar-git
update: yes
```This is the same as running `sudo git clone https://github.com/foo/bar.git /opt/bar-git`. Re-running the task will perform a `git pull` operation (update: yes).
### Download Files
```
- name: Download my-file
get_url:
url: https://my.site/my-file.sh
dest: /tmp/my-file.sh
mode: 0755
```The above command is the same as `wget https://my.site/my-file.txt -P /tmp && chmod 755 /tmp/my-file.txt`
### Run Commands
```
- name: Initialize Metasploit database
command: msfdb init
```
This one is pretty straightforward.## Targeting Using Conditionals
When adding distro-specific commands (e.g. `apt`, `yum`) to a play, make use of Ansible's [conditionals](https://docs.ansible.com/ansible/playbooks_conditionals.html) to target the commands appropriately.For example:
```
- name: Install foo
when: ansible_os_family == "Debian"
apt:
name: foo
update_cache: yes
state: latest
```## Dependencies
You can easily implement a role dependency by defining that in `your-role/meta/main.yml` like so:```
---
dependencies:
- { role: autossh }
```# Module Documentation
All module documentation can be found in [module_docs.md](module_docs.md) until a better place is found.# Contributing
See [CONTRIBUTING.md](CONTRIBUTING.md)