Архив метки: PTVMHackathon

Хакатон MaxPatrol VM, часть 2: Ansible playbook для установки ПО из TAR-архива

Хакатон MaxPatrol VM, часть 2: Ansible playbook для установки ПО из TAR-архива

Хакатон Max­Pa­trol VM, часть 2: Ansi­ble play­book для установки ПО из TAR-архива. Прошлая часть была про то, как я подготавливал виртуалку на Lin­ux, чтобы работать с ней с помощью Ansi­ble. По первому заданию мне нужно было поставить с помощью Ansi­ble некоторые программное обеспечение из TAR-архива (обозначим здесь как Libre Data Ana­lyt­ics). Чтобы его установить необходимо просто скачать архив с сайта и распаковать в любую директорию. Я решил делать это прямо в домашнюю директорию пользователя vmuser. 🙂

Сам play­book аналогичен тестовому, который я запускал в прошлый раз. Такая же последовательность task-ов Ansi­ble. Только в этот раз кроме тасков типа , который позволяет выполнять bash-скрипты, я использовал более специализированные.

1. — создание временной директории
2. — скачивание файла архива
3. — разархивирование архива
4. — удаление файла архива
5. — копирование из временно директории в постоянную
6. — удаление временной директории
7. — получение фактической версии ПО и запуск ПО с дефолтными параметрами (требуется по условию задания)
8. — вывод фактической версии ПО

Необходимую версию ПО и путь до директории, куда будет установлено ПО, оформил в виде переменных и .

Код плейбука:

- name: Install Libre Data Analytics from tar.gz file
hosts: all
vars:
libre_data_analytics_version: 2.13.0
libre_data_analytics_path: "/home/{{ ansible_user }}/"
tasks:
- name: Create temporary download directory
ansible.builtin.tempfile:
state: directory
prefix: libre-data-analytics-
register: download_dir

- name: Download Libre Data Analytics archive
ansible.builtin.get_url:
url: "https://artifacts.libre-data-analytics.org/releases/bundle/libre-data-analytics/{{ libre_data_analytics_version }}/libre-data-analytics-{{ libre_data_analytics_version }}-linux-x64.tar.gz"
dest: "{{ download_dir.path }}/libre-data-analytics.tar.gz"
mode: '0640'

- name: Extract Libre Data Analytics files
ansible.builtin.unarchive:
src: "{{ download_dir.path }}/libre-data-analytics.tar.gz"
dest: "{{ download_dir.path }}"
remote_src: true

- name: Remove libre_data_analytics_path
ansible.builtin.file:
path: "{{ libre_data_analytics_path }}/libre-data-analytics-{{ libre_data_analytics_version }}"
state: absent

- name: Copy files to the libre_data_analytics_path
ansible.builtin.copy:
src: "{{ download_dir.path }}/libre-data-analytics-{{ libre_data_analytics_version }}"
dest: "{{ libre_data_analytics_path }}"
remote_src: true

- name: Remove temporary download directory
ansible.builtin.file:
path: "{{ download_dir.path }}"
state: absent

- name: Get Libre Data Analytics version
ansible.builtin.shell: cd "{{ libre_data_analytics_path }}/libre-data-analytics-{{ libre_data_analytics_version }}"; ./bin/libre-data-analytics -V
register: installed_version

- name: Libre Data Analytics
ansible.builtin.shell: cd "{{ libre_data_analytics_path }}/libre-data-analytics-{{ libre_data_analytics_version }}"; nohup ./bin/libre-data-analytics /dev/null 2>&1 &

- name: Display Outputs
debug:
msg: "Path: {{ libre_data_analytics_path }}/libre-data-analytics-{{ libre_data_analytics_version }}, installed version from binary {{ installed_version.stdout }}"

Для сдачи я разбил плейбук на файлы и директории, как это было сделано в примере выполненного задания:

nginx_from_repo_on_ubuntu
├── playbook.yaml
└── roles
└── nginx_from_repo_on_ubuntu
├── defaults
│ └── main.yaml
└── tasks
└── main.yaml

В итоге задание у меня успешно приняли. 👍 Можно двигаться дальше. 🙂

Хакатон MaxPatrol VM, часть 1: Linux стенд и Ansible

Хакатон MaxPatrol VM, часть 1: Linux стенд и Ansible

Хакатон Max­Pa­trol VM, часть 1: Lin­ux стенд и Ansi­ble. Как и обещал, делюсь впечатлениями от хакатона. Первым заданием у меня была автоматизации установки софта из TAR-архива на Debian 12 с помощью Ansi­ble. Раньше я с Ansi­ble толком не работал, поэтому появился повод немного разобраться.

Ansi­ble — система управления конфигурациями, написанная на Python. Главное отличие Ansi­ble от аналогов — не нужна установка агента или клиента на управляемые хосты. Обычно используется для управления Lin­ux-хостами, но Win­dows также поддерживается. Взаимодействие происходит по модели push: сам Ansi­ble запускается на "центральном" управляющем хосте, ходит на управляемые хосты и что-то делает. На управляемом хосте должен быть установлен Python версии 2.4 и выше, соединение выполняется по SSH или Win­RM.

Управляющим хостом для Ansi­ble будет мой десктоп на Ubun­tu 23.10, а управляемым хостом будет виртуалка в Vir­tu­al­Box.

Я завёл виртуалку в Vir­tu­al­Box с Debian 12, добавил интерфейс Host-only adapter, чтобы можно было подключаться к ней по SSH. Я проверил, что подключение работает с помощью:

$ ssh vmuser@192.168.56.104

Для работы Ansi­ble должна быть настроена аутентификация по ключам. Я сгенерировал ключ с помощью:

$ ssh-keygen -t ed25519 -C "alexander@avleonov.com"

Затем я закинул его на tar­get-host:

$ ssh-copy-id vmuser@192.168.56.104

После этого команда уже не требовала пароль.

На десктоп с Ubun­tu 23.10 я поставил Ansi­ble при помощи утилиты pipx

$ sudo apt-get install pipx
$ pipx install --include-deps ansible

Обновлять можно с помощью:

$ pipx upgrade --include-injected ansible

Проверить версию ansi­ble можно с помощью:

$ ansible --version
ansible [core 2.16.7]
...

Далее описываю управляемый хост (виртуалку) в yaml файле:

$ cat hosts.yaml 
myhosts:
hosts:
debian12:
ansible_host: 192.168.56.104

Валидирую файл hosts.yaml:

$ ansible-inventory -i hosts.yaml --list
{
"_meta": {
"hostvars": {
"debian12": {
"ansible_host": "192.168.56.104"
}
}
},
"all": {
"children": [
"ungrouped",
"myhosts"
]
},
"myhosts": {
"hosts": [
"debian12"
]
}
}

Проверяю соединение:

$ ansible myhosts -m ping -i hosts.yaml -u vmuser
debian12 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}

Всё работает, связь есть. Теперь можно попробовать выполнить какие-то команды на хосте с помощью Ansi­ble. Делаю тестовый плейбук для вывода host­name и версии дистрибутива:

- name: Print Hostname and OS Version
hosts: all
tasks:
- name: Get Hostname
command: hostname
register: hostname_output

- name: Get OS Version
ansible.builtin.shell: lsb_release -a | grep "Description:" | awk -F"\t" '{print $2}'
register: os_version_output

- name: Display Outputs
debug:
msg: "Hostname is {{ hostname_output.stdout }} and OS Version is {{ os_version_output.stdout }}"

Запускаю его:

$ ansible-playbook -i hosts.yaml -u 'vmuser' playbook.yaml
...

TASK [Display Outputs] *********************************************************
ok: [debian12] => {
"msg": "Hostname is debian and OS Version is Debian GNU/Linux 12 (bookworm)"
}

Работает! В следующей части рассмотрим как описать в плейбуке установку софта из TAR-архива.

Уже завтра стартует онлайн-хакатон от команды MaxPatrol VM Positive Technologies по разработке правил детектирования уязвимостей

Уже завтра стартует онлайн-хакатон от команды MaxPatrol VM Positive Technologies по разработке правил детектирования уязвимостей

Уже завтра стартует онлайн-хакатон от команды Max­Pa­trol VM Pos­i­tive Tech­nolo­gies по разработке правил детектирования уязвимостей. Ограничений на участие сотрудников PT не было, так что я тоже подался и буду делиться впечатлениями в канале. 😏 Весь в предвкушении. 🤩

Имхо, подключение сообщества к разработке secu­ri­ty content‑а это как раз то, что кардинальным образом улучшит полноту и качество детектирования уязвимостей и мисконфигураций VM-продуктами. Т.е. самую их суть.

13 мая стартует онлайн-хакатон от команды MaxPatrol VM Positive Technologies: получи реальный опыт в разработке правил детектирования уязвимостей на нейтральном опенсурсном стеке и выиграй денежные призы

13 мая стартует онлайн-хакатон от команды MaxPatrol VM Positive Technologies: получи реальный опыт в разработке правил детектирования уязвимостей на нейтральном опенсурсном стеке и выиграй денежные призы

13 мая стартует онлайн-хакатон от команды Max­Pa­trol VM Pos­i­tive Tech­nolo­gies: получи реальный опыт в разработке правил детектирования уязвимостей на нейтральном опенсурсном стеке и выиграй денежные призы. Активность просто огненная. 🔥

Задания хакатона:

🔻 Стендирование. Написать плейбук для развертывания ПО с помощью Ansi­ble.
🔻 Обнаружение ПО. Написать скрипт для обнаружения ПО на хосте на языке Python. Цель скрипта сгенерировать OVAL Vari­ables с информацией по софту.
🔻 Обнаружение уязвимостей. Распарсить источник данных об уязвимостях и сформировать OVAL Def­i­n­i­tions. Затем провести детектирование уязвимостей используя OVAL Def­i­n­i­tions и артефакт работы скрипта обнаружения ПО (OVAL Vari­ables) с помощью утилиты Open­SCAP.

Таким образом участники хакатона пройдут весь путь поддержки продукта в сканере уязвимостей с использованием нейтрального опенсурсного стека:

Ansi­ble + Python + OVAL/OpenSCAP

При этом использование Python для сборки OVAL Vari­ables позволит снять ограничения связанные с OVAL объектами (мороки с их сбором — атас, а Open­SCAP под Win­dows вообще dic­scon­tin­ued) и при этом получить все преимущества OVAL — формализованное описание правил детектирования уязвимостей и готовые инстурумент для расчёта статусов в виде Open­SCAP.
Б — Баланс. 👍

💳 За выполнение заданий участники будут получать баллы, которые будут конвертированы в деньги.

🚀 Результаты работы участников не пропадут, а будут использованы в Max­Pa­trol VM (после ревью и через конвертацию в пакеты Max­Pa­trol VM).

Для участников сплошной Win:

🔸 Получаем реальную практику с востребованными технологиями (Ansi­ble и Python вообще must have в IT, а OVAL/SCAP кучей VM-продуктов используется и в России, и зарубежом).
🔸 Получаем отличную строчку в резюме (рассказывать на собесе как детекты писал, которые в Max­Pa­trol VM сейчас используется — круто же 🙂).
🔸 Получаем приятный денежный бонус с этого.
🔸 Получаем фаст-трек для вкатывания в команду разработки Max­Pa­trol VM, если процесс понравится и будут хорошие результаты. 😉

➡️ Подробности и регистрация тут
🟥 Официальный пост в канале Pos­i­tive Tech­nolo­gies