Данная статья вольное рассуждение о том, как можно использовать инструменты из разных областей для проведения автоматизации рутинных задач, в том числе и для проведения отдельных действий при пентесте. В статье будет описан процесс создания проекта на Ansible, который можно использовать для масштабирования и адаптации под другие задачи.
Ansible
Один из популярных инструментов для автоматизации развертывания систем. Реализация на языке программирования Python. Предоставляет DevOPS инженерам возможность работать с инфраструктурой через написание сценариев. В общем это называется IaC (Infrastructure as Code). Сценарии для инструмента пишутся с использованием языка yaml. Чтобы наиболее полно можно было познакомиться с инструментом, в сети есть большое количества мануалов, но как всегда, лучше начать знакомство с документации.
На момент написания статьи использовалась бесплатная версия Community Edition, она позволяет запускать ansible из консоли и производить отладку уже работающего сценария. В платных версиях есть свой веб-интерфейс, который позволяет ускорять разработку новых сценариев развертывания, но для задач этой статьи он избыточен.
Установим ansible на систему. Для этого нам потребуется использовать Linux дистрибутив или WSL подсистема для Windows. Самая главная зависимость, которая должна быть установлена в системе - python pip модуль и сам python. Из коробки ansible поддерживает установку для всех версий, но лучше использовать последние стабильные. Открываем терминал и вводим команду:
python3 -m pip install --user ansible
Специальных привелегий для этого предоставлять не нужно, все разложится автоматически по нужным директориям. Единственное, что придется подправить это путь в переменной PATH, но об этом pip напишет сразу в окне установки. Если всё было завершено успешно, то при наборе следующей команды:
ansible --version
Результат работы команды:
Для масштабирования ресурсов можно использовать виртуальные машины. Это удобно делать через Vagrant
, но базовые образа придется качать отдельно или собирать самостоятельно. На момент написания статьи продукт заблокировал доступ из РФ.
Теперь попробуем поуправлять хотя бы одной машиной, которая предварительно развернута в виртуализированной среде. В общем можно управлять и системами, которые находятся на отдельных машинах. Самое главное - предоставить ansible доступ к вашему private key.
Ansible для работы с машинами Linux использует ssh, а для Windows - WinRM. Мы будем автоматизировать взаимодействие с Linux. Подготовим ключ для доступа в систему:
ssh-keygen -t rsa -f id_rsa -C kali
Пользователь kali
выбран не случайно, будем автоматизировать именно Kali Linux.
Настроим доступ по ключу в систему:
Открыть на kali файл
/etc/ssh/sshd_config
Раскоментировать строки:
PasswordAuthentication no
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
PubkeyAuthentication yes
cat id_rsa.pub >> ~/.ssh/authorized_keys
Тестируем:
ssh -i ids_rsa kali@ka.li.ip.addr
Ansible проект
Ansible работает с системами за счет использования специального файла - inventory. Его можно создавать в формате ini файла или в формате yaml. Будем использовать ini формат. Тестовый файл назовём hosts
содержимое будет выглядеть вот так:
kali ansible_host=kali.ip.ad.dr ansible_port=22 ansible_user=kali ansible_ssh_private_key_file="id_rsa"
По файлу:
kali - метка наименования машины;
ansible_host - адрес машины для управления;
ansible_port - порт ssh на машине, которой будет осуществляться управление;
ansible_user - имя пользователя для передачи машине;
ansible_ssh_private_key_file - путь к private_key.
Протестировать соединение с машиной можно командой:
ansible -i hosts all -m ping
Успешный результат работы команды:
Следующий этап - определиться что можно сделать с помощью ansible из коробки?
Последовательность команд в файле yaml, который описывает последовательность действий в Ansible называется playbook. Обычно этот файл называют main.yaml
или site.yaml
.
Все конструкции можно изучить в официальной документации. Мы будем ипользовать community inventory и
Создадим файл site.yml:
---
- name: "Automate some actions"
hosts: kali
roles:
- nmap
Правилом хорошего проекта можно назвать структурированность тех задач, которые в нём описаны. Чтобы часами потом не разбираться что происходит, будем использовать структуру ролей. Для этого отдельно описываем для каждого инструмента все действия. Чтобы ansible их мог подхватить нужно создать директории и файлы: roles->nmap->tasks->main.yaml
В такой структуре будет проще вносить новые команды и отключать те, которые не нужны.
Содержимое файла main.yaml:
- name: Print test
ansible.builtin.debug:
msg: "Hello!"
Теперь для проверки синтаксиса и работоспособности всего, что мы описали запустим команду:
ansible-playbook -i hosts site.yaml --syntax-check
Если не появилось ни одной ошибки, то можно перейти к этапу тестового запуска:
ansible-playbook -i hosts site.yaml -D
Примерный вывод рабочего проекта:
Теперь добавим задачу для сканирования. Для этого нужно в файл main.yaml
добавить такие строки:
---
- name: Print test
ansible.builtin.debug:
msg: "Hello!"
- name: Run simple scan
ansible.builtin.shell: nmap -n {{ip_addresses}} -oA scan
tags: syn
- name: Run full scan
ansible.builtin.shell: nmap -n {{ip_addresses}} -oA scan
tags: full
В этот раз добавлены куски кода, который работает с шаблонизатором jinja2. Переменные можно пережавать в командной строке для playbook или можно прописать в файле по директориям:
group_vars/all.yaml:
ip_addresses: "192.168.0.0/24"
Так же стоит обратить внимание на дополнительный параметр tags - он используется для того чтобы можно было запускать отдельные таски из списка. Например простой скан можно запустить вот так:
ansible-playbook -i hosts site.yaml --tags syn -D
Результат работы команды можно найти в рабочей директории пользователя kali. Ниже приведен листинг директории и файлы, которые были созданы в результате работы сканера. При желании можно прописать команды с помощью которых полученные отчеты будут выкладываться в централизованное хранилище.
Таким образом можно говорить об автоматизации разнородного софта при использовании 2-3 и более машин для задач сканирования и сбора данных о системах. В следующей статье попробуем автоматизировать операционную систему Windows для сбора данных в окружении Windows AD. Проект, который был использован для этой статьи можно найти тут.
Вместо заключения хочу пригласить всех желающих на бесплатный вебинар по теме: "Атаки Relay, инструменты и особенности использования". Поговорим о том, как работают атаки на механизмы аутентификации в Windows Active Directory.