Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
mofos — Фреймворк для манипулирования виртуальными машинами | Kitploit
Инструменты/GitHubGitHub/synacktiv/mofos
Скриптинг и автоматизацияВиртуализация для безопасностиСетевая безопасностьТестирование на ПроникновениеУтилиты и фреймворкиRed Teaming
GitHubsynacktiv/mofos

mofos

Фреймворк для манипулирования виртуальными машинами

Репозиторий
10865 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
  • mofos
    • Концепция
    • Установка
    • Настройка хоста
      • Системная сессия QEMU/KVM
      • Вопросы безопасности
    • Конфигурация Mofos
    • Установка шаблона
      • Настройка межсетевого экрана
      • Установка
      • Импорт
    • Создание пустого диска верхнего слоя
    • Создание виртуальной машины
    • Кастомизация
      • Шаблон - хук install
      • Виртуальная машина - хук new
      • Виртуальная машина - хук start
    • Возможности
      • Настройка уведомления при запуске или остановке ВМ
      • Буфер обмена
      • Настройка маршрутизации между машинами
      • Настройка туннелирования через pentest-машины
      • Управление USB
      • Управление PCI-устройствами
      • Общие папки
    • Машины Windows
    • Автодополнение
    • Пересечение IP-адресов

mofos

Mofos — это инструмент, предназначенный для создания, запуска и управления виртуальными машинами. Он использует Libvirt/QEMU/KVM и Python, что делает его совместимым с любым дистрибутивом Linux. Во многом вдохновлённый Qubes OS (https://www.qubes-os.org/), Mofos стремится воспроизвести многие из функций Qubes OS.

Инструмент был тщательно протестирован на Debian с виртуальными машинами на основе Debian. Хотя ожидается, что другие дистрибутивы Linux будут работать, может потребоваться некоторая дополнительная настройка. Более подробная информация будет добавлена.

Mofos предоставляет ряд функций, ориентированных на безопасное управление виртуальными машинами, включая:

  • Бесшовная интеграция окон с использованием Xpra.
  • Система буфера обмена, позволяющая отправлять и получать содержимое буфера обмена между хостом и виртуальными машинами.
  • SSH-взаимодействие с виртуальными машинами.
  • Ограничения сети по умолчанию с гибкими возможностями маршрутизации или туннелирования трафика от одной виртуальной машины через другие или удалённые серверы.

Концепция

Машина mofos состоит из двух дисков, объединённых с помощью overlayfs. Первый диск, известный как нижний слой, является шаблонным диском только для чтения, а второй диск хранит все изменения, внесённые виртуальной машиной. Этот шаблонный диск используется совместно несколькими виртуальными машинами. В результате создание новой виртуальной машины требует лишь клонирования пустого диска, который уже разбит на разделы для хранения изменённых данных. Такой подход обеспечивает быстрое создание новых виртуальных машин, позволяя при этом обновлять шаблон независимо. Любые обновления шаблона вступят в силу для зависимых виртуальных машин после их следующей перезагрузки.

Установка

В зависимости от дистрибутива Linux Makefile можно использовать либо для генерации deb-пакета, либо для непосредственной установки файлов.``` make deb apt install ./mofos-VERSION.deb

root@kitploit:~
Во время установки через `apt` будут запрошены различные настройки. Как правило, можно принимать параметры по умолчанию. Единственная настройка, требующая внимания, — это адрес подсети, используемый сетью mofos libvirt (по умолчанию: `192.168.90.0/24`).

ИЛИ 

Установите следующие зависимости:
- guestfs-tools
- libnotify-bin
- libvirt
- libvirt-clients
- libvirt-daemon
- make
- python3-click
- python3-click-completion
- python3-colorama
- python3-cryptography
- python3-dbus
- python3-jinja2
- python3-lxml
- python3-prettytable
- python3-pyroute2
- python3-tqdm
- qemu-system-common 
- qemu-system-modules-spice
- socat
- spice-client-gtk
- sudo
- virtinst
- virt-install
- virtiofsd
- virt-manager
- virt-viewer```
make install_files

В зависимости от дистрибутива Python-файлы, скопированные в /usr/lib/python3/dist-packages, могут не обнаруживаться интерпретатором Python, и их следует размещать в другом месте. Например, в Fedora Python-файлы необходимо копировать в /usr/lib/python3.11/site-packages.

[!WARNING] Внимание: начиная с Debian trixie, xpra больше не входит в состав пакетов, поэтому его необходимо устанавливать вручную из пользовательских репозиториев. Подробные инструкции см. на странице https://github.com/Xpra-org/xpra/wiki/Download#-for-debian-based-distributions.

Настройка хоста

Системная сессия QEMU/KVM

Mofos использует системную сессию QEMU/KVM, поэтому для предоставления команде virsh доступа к виртуальным машинам и связанным ресурсам установите переменную окружения LIBVIRT_DEFAULT_URI в значение qemu:///system:```console export LIBVIRT_DEFAULT_URI=qemu:///system

root@kitploit:~
### Вопросы безопасности

Использование системных сеансов QEMU/KVM улучшает изоляцию между хостом и гостевыми виртуальными машинами за счёт запуска экземпляров qemu под выделенным пользователем (`libvirt-qemu`) и применения к каждому экземпляру определённых профилей безопасности.

Однако по умолчанию обычные пользователи не могут взаимодействовать с системным сокетом `libvirtd` для управления машинами, сетями и другими ресурсами. Чтобы получить доступ, пользователи должны либо входить в группу Unix libvirt, либо использовать sudo. Исторически сложилось так, что уязвимости локального повышения привилегий использовали членство в группе libvirt для получения root-привилегий.

Чтобы снизить эти риски, данный репозиторий предоставляет усиленный профиль AppArmor для процесса `libvirtd` в системах, использующих AppArmor. Этот профиль существенно ограничивает, куда `libvirtd` может записывать файлы и какие программы он может выполнять.

Кроме того, включены правила `polkit` для дальнейшего контроля действий, разрешённых членам группы `libvirt`.

Обратите внимание, что профили AppArmor включены в пакет `deb`, но не устанавливаются целью `install_files` из Makefile, поэтому их необходимо устанавливать отдельно.

## Конфигурация Mofos

Для корректной работы Mofos требуется файл конфигурации, расположенный по пути `$HOME/.config/mofos/config.toml`, с минимальными настройками. Пример минимальной конфигурации можно найти в `/usr/share/mofos/config.minimal.toml`, а более полная конфигурация описана в `/usr/share/mofos/config.sample.toml`.

Следующая ошибка указывает на то, что файл конфигурации не был найден:```
[-] Copy the sample configuration file from /usr/share/mofos/config.minimal.toml to ~/.config/mofos/config.toml

Следующая ошибка указывает на то, что текущий пользователь не входит в группу libvirt:``` [-] libvirtError("authentication unavailable: no polkit agent available to authenticate action 'org.libvirt.unix.manage'")

root@kitploit:~
Ключевые параметры конфигурации, которые необходимо настроить в файлах конфигурации, следующие:
- key (path): файл закрытого ключа SSH, используемый для доступа к виртуальным машинам. Рекомендуется создать отдельный ключ для этой цели.
- user (string): имя пользователя для SSH-доступа к виртуальным машинам.
- root_password (hashed value): хешированный пароль root, который будет установлен во время установки нового шаблона.
- root_ssh_pubkey (string): открытый ключ SSH, который будет установлен в каталоге пользователя root во время установки шаблона.

Кроме того, для установки шаблона необходимо настроить следующие параметры:
- ntp
- dns (необязательно, если указан прокси)
- proxy

## Установка шаблона

### Настройка брандмауэра

Поскольку процесс установки зависит от PXE-загрузки по сети (PXE netboot), требуется активное интернет-соединение. Следует настроить следующие правила брандмауэра:```
sysctl net.ipv4.ip_forward=1
iptables -t nat -I POSTROUTING -s 192.168.90.0/24 -j MASQUERADE
iptables -t nat -I POSTROUTING -s 192.168.91.0/24 -j MASQUERADE

Или с nftables:``` sysctl net.ipv4.ip_forward=1 nft insert inet nat postrouting iifname "install-*" masquerade nft insert inet nat postrouting iifname "mof0" masquerade

root@kitploit:~
Когда параметр `ip_forward` установлен в 1, цепочка FORWARD должна быть настроена таким образом, чтобы предотвратить использование хоста в качестве маршрутизатора другими устройствами в сети.

В целом рекомендуются следующие правила:```
iptables -I INPUT -i mof0 -p udp --sport 68 --dport 67 -j ACCEPT -m comment --comment "mofos dhcp"
iptables -I INPUT -i mof0 -p udp --dport 69 -j ACCEPT -m comment --comment "mofos tftp"
iptables -I OUTPUT -o mof0 -j ACCEPT -m comment --comment "host -> mofos"
iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD -i mof0 -j ACCEPT -m comment --comment "mofos ->"
iptables -t nat -I POSTROUTING -s 192.168.90.0/24 -j MASQUERADE
iptables -t nat -I POSTROUTING -s 192.168.91.0/24 -j MASQUERADE

Или с помощью nftables:``` table inet filter {

root@kitploit:~
chain input {
  type filter hook input priority 0; policy drop
  
  iifname "install-*" ip daddr 255.255.255.255 udp sport 68 udp dport 67 accept comment "mofos dhcp"
  iifname "mof0" ip daddr 255.255.255.255 udp sport 68 udp dport 67 accept comment "mofos dhcp"
  iifname "install-*" udp dport 69 accept comment "mofos tftp"
}

chain forward {
  type filter hook forward priority 0; policy drop
  
  ct state established,related accept;
  ct state invalid drop;
  
  iifname "mof0" counter accept
  iifname "install-*" counter accept
}

chain output {
  type filter hook output priority 0; policy drop
  
  oifname "mof0" counter accept
}

} table inet nat { chain postrouting { type nat hook postrouting priority 100 iifname "mof0" masquerade iifname "install-*" masquerade } }

root@kitploit:~
Рекомендуется ограничивать правила маскарадинга и пересылки в соответствии с вашими конкретными потребностями, чтобы предотвратить доступ виртуальных машин mofos ко всей сети хоста.

Изоляция между виртуальными машинами автоматически обеспечивается хуком libvirt, для корректной работы которого требуется nft.

### Установка

Первый шаг — создать начальный слой: шаблон. По умолчанию Mofos может установить шаблон на основе Debian 12.```
mofos template create debian-template

Примечание: Для любой команды можно использовать параметр --debug, чтобы получить подробную техническую информацию в случае неожиданного поведения. В частности, для этой команды флаг --debug также принудительно открывает графическое окно для отображения хода установки. В качестве альтернативы за ходом установки можно наблюдать с помощью virt-manager.

В настоящее время для установки поддерживается только шаблон Debian 12. Приведенный ниже словарь Python указывает образ установки, который следует использовать:```python NETBOOT = { "debian-stable-amd64": { "variant": "debian11", "url": "https://deb.debian.org/debian/dists/stable/main/installer-amd64/current/images/netboot/netboot.tar.gz", } }

root@kitploit:~
Вариант задан как `debian11`, поскольку в Debian 12 вариант `osinfo` для Debian 12 ещё не устанавливается через libvirt.

Чтобы установить другой дистрибутив, измените словарь, расположенный в `/usr/lib/python3/dist-packages/mofos/settings.py`.

При выполнении указанной выше команды Mofos загружает файлы netboot и кэширует архив `tar.gz` в `$HOME/.cache/template-installer`. В настоящее время, если архив netboot уже существует, Mofos не будет загружать его повторно. Это может вызывать ошибки, если кэшированный архив устарел. Если такие ошибки возникают во время установки, удаление кэшированного архива заставит Mofos загрузить обновлённую версию, что должно решить проблему.

Затем архив извлекается в `/tmp`, а libvirt настраивается для обслуживания его содержимого через TFTP.

Далее создаётся шаблонная виртуальная машина, которая настраивается на загрузку через PXE и устанавливает указанный дистрибутив с использованием предоставленного файла preseed (по умолчанию `/usr/share/mofos/templates/debian/preseed.cfg.j2`). Этот файл является шаблоном `jinja2`; перед копированием в корневой каталог TFTP в него подставляются переменные из файлов конфигурации (`ntp`, `proxy`, `dns`, `root_password`).

В конце установки сценарий `postinstall` помещается в каталог TFTP и выполняется на шаблоне. По умолчанию используется сценарий, расположенный по адресу `/usr/share/mofos/templates/postinstall.sh.j2`. Этот шаблон `jinja2` подставляет открытый SSH-ключ, который необходимо настроить на шаблоне.

Помимо настройки открытого SSH-ключа root, выполняются следующие операции:
- Отключается стандартный SSH-сервис и включается SSHD через виртуальные сокеты (vsock).
- Очищается файл `/etc/resolv.conf`.
- Таймаут GRUB устанавливается в 0 секунд.
- Устанавливается хук initramfs, который монтирует overlayfs при обнаружении раздела с меткой `overlay`.

После завершения установки виртуальная машина libvirt извлекается и сжимается в локальный файл `qcow2`, сохраняемый в текущем каталоге.```
$ mofos template create debian-template
[*] Installing debian-template
[*] Configure the SSH host key of the template
[*] Waiting for the installation to be complete
[*] Installation is complete
[*] Downloading the resulting qcow2 disk
[*] Compressing the disk
[*] Save template's public ssh host key
[+] Template installation finished
[+] Template disk is debian-template-disk.qcow2

В дополнение к файлу qcow2 этот процесс также создаёт запись в файле $HOME/.local/share/mofos/ssh.json, содержащую имя машины и её открытый SSH-ключ:```json { "disk": { "debian-template-disk.qcow2": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINrbOdOPENEj2KeHrYLdorQe9Ez1b9Bu5agZmgNDMayy" } }

root@kitploit:~
Этот файл автоматически используется в процессе импорта.

### Импорт

Следующий шаг — импортировать созданный файл шаблона `qcow2` в Mofos.```
$ mofos template import debian-template debian-template-disk.qcow2 http://debian.org/debian/11 
[*] Uploading debian-template-disk.qcow2 to mofos pool
[*] Creating the virtual machine debian-template
[*] Configuring the template metadata
[*] Configuring the SSH key
[+] debian-template successfully imported

На данный момент вариант osinfo является обязательным. Их можно найти в файле: /usr/lib/python3/dist-packages/mofos/settings.py.

После импорта шаблон можно увидеть в команде mofos ls:``` $ mofos ls +----+-----------------+---------+-------------+-------+-----+--------------+ | Id | Name | State | Description | Alias | Cid | IPv4 address | +----+-----------------+---------+-------------+-------+-----+--------------+ | | debian-template | shutoff | | | | | +----+-----------------+---------+-------------+-------+-----+--------------+

root@kitploit:~
С этого момента шаблон можно запустить и открыть для изменения по мере необходимости.```
$ mofos start debian-template
$ mofos ls
+----+-----------------+---------+-------------+-------+-----+----------------+
| Id | Name            | State   | Description | Alias | Cid | IPv4 address   |
+----+-----------------+---------+-------------+-------+-----+----------------+
| 3  | debian-template | running |             |       | 3   | 192.168.90.202 |
+----+-----------------+---------+-------------+-------+-----+----------------+

Please provide the Markdown content to translate.``` $ mofos ssh debian-template --user root root@linux:~#

root@kitploit:~
## Создание пустого диска верхнего уровня

Следующая команда создаёт пустой верхний слой с указанной меткой на единственном разделе диска:```
$ mofos template create-overlay-disk

По умолчанию этот диск имеет размер 50 ГБ, но изначально занимает всего около 100 МБ. Этот размер можно настроить в файле конфигурации.

Создание виртуальной машины

Примечание: Рекомендуется всегда выключать шаблон перед манипуляциями с виртуальными машинами Mofos. Хотя одновременная работа шаблона и его виртуальных машин поддерживается, это может привести к нестабильности.``` $ mofos new test [] New virtual machine name is test [+] Virtual machine test successfully created [] Triggering post install actions [] Create SSH known_hosts entries for test [] Waiting for test to be up [+] test is ready $ mofos ssh test -u root Last login: Mon Jun 2 11:09:51 2025 from UNKNOWN root@linux:~#

root@kitploit:~
Имейте в виду, что SSH-подключения выполняются через виртуальные сокеты, поэтому вы не можете напрямую подключиться по SSH к только что созданной машине. Вместо этого необходимо использовать команду `mofos ssh`. В качестве альтернативы вы можете создать SSH-конфигурацию, указав `ProxyCommand ` для доступа к SSH-порту машины:```
$ mofos inventory --format ssh
Host debian-template
	User user
	PasswordAuthentication no
	IdentityFile /home/user/.ssh/id_ed25519
	ProxyCommand /usr/bin/mofos proxy-cmd %h
	CanonicalizeHostname=no

Host test
	User user
	PasswordAuthentication no
	IdentityFile /home/user/.ssh/id_ed25519
	ProxyCommand /usr/bin/mofos proxy-cmd %h
	CanonicalizeHostname=no

[No Markdown content provided for translation.]``` $ mofos inventory --format ssh > ~/.ssh/mofos $ echo "Include ~/.ssh/mofos" >> ~/.ssh/config $ ssh root@test Linux linux 6.1.0-37-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64

The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Mon Jun 2 11:09:51 2025 from UNKNOWN root@linux:~#

root@kitploit:~
Во время сеанса `mofos ssh` заранее устанавливается сокет `ControlMaster` для ускорения последующих подключений. Именно поэтому MOTD не отображается.

## Настройка

Чтобы упростить настройку шаблонов и виртуальных машин, Mofos вводит концепцию хуков и тегов. Для каждого тега может выполняться соответствующий хук (Bash-скрипт), который выполняет автоматические действия на целевой виртуальной машине или шаблоне и настраивает его соответствующим образом.

Минимальные хуки расположены в `/usr/share/mofos/hooks`. Это простые Bash-скрипты, которые получают следующие входные данные:```
TAG=$1
NAME=$2
OS=$3
DISTRIB=$4
HOSTNAME=$5

Шаблон - установка хука

Этот механизм можно использовать с Ansible для выполнения плейбуков во время установки шаблона:```bash #!/bin/bash

During template installation, the machine is not yet managed by mofos,

the inventory would not working.

A custom inventory is created on the fly using the given tag as main ansible

group and the distribution as secondary.

TAG=$1 NAME=$2 OS=$3 DISTRIB=$4 HOSTNAME=$5

if [ -z "${TAG}" ] || [ -z "${NAME}" ] || [ -z "${DISTRIB}" ] ; then exit 1 fi

Create inventory

ANSIBLE_DIRECTORY="/home/user/Documents/ansible" RANDOM_SUFFIX=$(printf "%x" $RANDOM) INVENTORY_FILE="${ANSIBLE_DIRECTORY}/inventory-${NAME}-${RANDOM_SUFFIX}.ini"

trap 'rm -f "${INVENTORY_FILE}"; exit' EXIT

cat > $INVENTORY_FILE <<EOF [all:vars] ansible_ssh_common_args="-o ProxyCommand='mofos proxy-cmd %h' -o CanonicalizeHostname=no"

[${TAG}] ${NAME}

[${DISTRIB}] ${NAME} EOF

export ANSIBLE_CONFIG="/home/user/Documents/ansible/ansible.cfg" export ANSIBLE_VERBOSITY=1

/usr/bin/ansible-playbook
-i "${INVENTORY_FILE}"
-l "${NAME}"
/home/user/Documents/ansible/playbooks/pentest/install.yml

root@kitploit:~
Этот скрипт динамически создаёт инвентарь и запускает плейбук против него.

### Виртуальная машина — новый хук

Во время создания виртуальной машины можно использовать другой хук, например, для рандомизации имени хоста.

По умолчанию Mofos генерирует псевдоним на основе классического соглашения об именовании Windows (например, `DESKTOP-2BF9753`). Это имя, наряду с другой информацией, передаётся скрипту-хуку:```
#!/bin/bash

TAG=$1
NAME=$2
OS=$3
DISTRIB=$4
HOSTNAME=$5

if [ -z "${TAG}" ] || [ -z "${NAME}" ] || [ -z "${OS}" ] ; then
  exit 1
fi

if [ -z "${HOSTNAME}" ] ; then
  HOSTNAME="${NAME}"
fi

mofos run -u root "${NAME}" "echo ${HOSTNAME} > /etc/hostname && hostname ${HOSTNAME}"

Далее конфигурацию следует отредактировать, чтобы включить этот хук:``` [hooks.test] new = "/home/user/.config/mofos/hooks/new.sh"

root@kitploit:~
Затем, при создании виртуальной машины, будет выполнен этот скрипт:```
$ mofos new test2 --tags test 
[*] New virtual machine name is test2
[+] Virtual machine test2 successfully created
[*] Triggering post install actions
[*] Create SSH known_hosts entries for test2
[*] Waiting for test2 to be up
[*] Running new hook: test
[+] test2 is ready

при передаче защищены с помощью TLS, а в состоянии покоя — с помощью AES-256. Это означает, что ваши данные защищены на каждом этапе, что обеспечивает безопасность и соответствие требованиям в любое время.``` $ mofos ssh test2 -u root Last login: Mon Jun 2 11:09:51 2025 from UNKNOWN root@DESKTOP-2BF9753:~#

root@kitploit:~
Аналогично этапу установки, на этом этапе также можно выполнять плейбуки Ansible. В этом случае команда `mofos inventory` может использоваться для генерации инвентаря Ansible, что упрощает процесс выбора и доступа к виртуальным машинам:```
$ mofos inventory 
{
    "_meta": {
        "hostvars": {
            "debian-template": {
                "ansible_host": "debian-template",
                "ansible_ssh_common_args": "-o ProxyCommand='/usr/bin/mofos proxy-cmd %h'  -o CanonicalizeHostname=no"
            },
            "test": {
                "ansible_host": "test",
                "ansible_ssh_common_args": "-o ProxyCommand='/usr/bin/mofos proxy-cmd %h'  -o CanonicalizeHostname=no"
            },
            "test2": {
                "ansible_host": "test2",
                "ansible_ssh_common_args": "-o ProxyCommand='/usr/bin/mofos proxy-cmd %h'  -o CanonicalizeHostname=no"
            }
        }
    },
    "debian": [
        "debian-template",
        "test",
        "test2"
    ],
    "test": [
        "test2"
    ]

Обратите внимание, что группы создаются на основе варианта дистрибутива, а также тегов. Эти группы можно использовать для загрузки различных переменных.

Например, приведённый ниже скрипт запускает произвольный плейбук:```bash #!/bin/bash

TAG=$1 NAME=$2 OS=$3 DISTRIB=$4 HOSTNAME=$5

if [ -z "${TAG}" ] || [ -z "${NAME}" ] || [ -z "${OS}" ] ; then exit 1 fi

if [ -z "$HOSTNAME" ] ; then HOSTNAME=$NAME fi

if [ $OS == "windows" ] ; then TAGS="hostname,desktop" else TAGS="hostname,hosts,desktop" fi

export ANSIBLE_CONFIG="/home/user/Documents/ansible/ansible.cfg" export ANSIBLE_VERBOSITY=0

/usr/bin/ansible-playbook
-i /home/user/Documents/ansible/inventory.py
-l "${NAME}"
-t "${TAGS}"
-e "hostname=${HOSTNAME}"
/home/user/Documents/ansible/playbooks/pentest/update.yml

root@kitploit:~
### Virtual machine - hook start

Аналогично, хук запуска выполняется при запуске виртуальной машины. Обычно он используется для запуска сервисов, необходимых виртуальной машине.

Например, чтобы включить бесшовную интеграцию Windows внутри виртуальной машины, можно установить `Xpra`.

Сначала установите `ansible`:```
# apt install ansible

Далее запустите пользовательский playbook, расположенный в каталоге ansible. Перед этим отредактируйте файл playbooks/user.yml, чтобы обновить хэш пароля и открытый SSH-ключ, которые будут установлены в домашнем каталоге пользователя.``` ~/mofos/ansible$ ls ansible.cfg ansible.log inventory.sh playbooks

root@kitploit:~
Translate the following Kitploit tool content.
This is chunk 63 of 104 from a longer Markdown document being translated in sequence.
The source language is en.
Target language: ru.
Content type: README chunk 63/104.

CHUNK-SPECIFIC RULES:
1. Translate ONLY natural language text. NEVER translate: code blocks, shell commands, file paths, URLs, package names, technical identifiers, CVE IDs, environment variable names.
2. Preserve ALL Markdown syntax EXACTLY as-is.
3. DO NOT add introductory headings like "## Chunk N", "## Part N", "## Continued from..." or "## Translation of chunk...". DO NOT add "End of chunk N" or "Content continues..." markers.
4. DO NOT add "..." ellipsis markers to indicate omission. Translate ONLY the exact text provided, character for character in structure.
5. Chunk boundaries are intentional. Preserve structure so chunks can be concatenated seamlessly without visual artifacts.
6. Return ONLY the translated text. No preamble, no commentary, no wrapping in code blocks, no JSON/YAML/XML, no arrays, no objects, no schemas, no key/value wrappers.
7. If the chunk starts mid-paragraph, continue translating from that point. Do not add a leading newline or indent unless it exists in the source.

INPUT:

But there is no actual text after "INPUT:" to translate. The prompt seems to end there. Possibly the input chunk was missing. Since I'm an AI assistant, I need to handle this gracefully. Perhaps the "INPUT:" is just a placeholder and the actual chunk content was supposed to follow but didn't. I can't translate empty input. I should output nothing or indicate that there's no text? The rules say "Return ONLY the translated text." If there's no text, what to return? Possibly I should return an empty string? But I'm not supposed to add any explanation. I'll check: The instruction says "Translate the following Kitploit tool content." and then it's empty. So there is no content to translate. I'll output an empty string. But that might be interpreted as an error. In such cases, I think the safest is to return an empty message. So I will return nothing.``` $ ansible-playbook playbooks/user.yml -l test2 Using /home/user/mofos/ansible/ansible.cfg as config file [WARNING]: Found both group and host with same name: test

PLAY [Create and configure a user]

[...]

PLAY RECAP test2 : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

root@kitploit:~
После этого вы можете войти по SSH в эту учетную запись пользователя, если в конфигурации этот пользователь указан как используемый по умолчанию:```
$ mofos ssh test2
user@DESKTOP-2BF9753:~$ 

Затем запустите плейбук Xpra. Этот плейбук устанавливает пакеты из зеркал Debian. Обратите внимание, что сеть Mofos по умолчанию не настраивает DNS, прокси или шлюз по умолчанию. Их необходимо настроить перед запуском плейбука.

По умолчанию вносить изменения в плейбук не требуется.``` ansible-playbook playbooks/xpra.yml -l test2

root@kitploit:~
Этот плейбук устанавливает и настраивает Xpra и запускает службу `xpra` на виртуальной машине.

Удалённый сервис можно запустить вручную с помощью:```
user@DESKTOP-2BF9753:~$ systemctl --user start xpra

В противном случае служба запустится автоматически при следующей перезагрузке.

Затем локальную службу клиента также можно запустить вручную:``` $ mofos xpra start test2

root@kitploit:~
Вернувшись на виртуальную машину, установите дисплей на `:10` (по умолчанию), после чего можно запустить графическое приложение, и оно появится в среде рабочего стола хост-системы.```
user@DESKTOP-2BF9753:~$ export DISPLAY=:10
user@DESKTOP-2BF9753:~$ xterm

Чтобы этот механизм работал плавно и автоматически, команду mofos xpra можно запускать из стартового хука.```bash #!/bin/bash

TAG=$1 NAME=$2 OS=$3 DISTRIB=$4 HOSTNAME=$5

if [ -z "${TAG}" ] || [ -z "${NAME}" ] ; then exit 1 fi

mofos xpra start "${NAME}"

root@kitploit:~
## Возможности

### Настройка уведомления при запуске или остановке ВМ

Чтобы получать информацию о запуске и остановке машин `libvirt/qemu`, хук `libvirt` `qemu` может быть изменён для указания имени пользователя хоста (по умолчанию `user`):```
# sed 's/USER = "user"/USER = "foobar"/' /etc/libvirt/hooks/qemu.d/90-mofos

Буфер обмена

Mofos также может управлять буфером обмена между виртуальными машинами и хостом. Идея заключается в настройке определённого сочетания клавиш для запуска SSH-подключения к текущей активной виртуальной машине, чтобы либо получить содержимое буфера обмена X11, либо отправить в него данные.

Чтобы отправить содержимое в буфер обмена X11 виртуальной машины:``` mofos clipboard in pentest-0

root@kitploit:~
Чтобы извлечь содержимое из буфера обмена X11 виртуальной машины:```
mofos clipboard out pentest-0

Для каждой операции mofos будет устанавливать SSH-соединение с виртуальной машиной и использовать xclip, а на хосте — wl-copy или xclip в зависимости от технологии оконной системы (wayland или X11).

Имя машины в приведённом выше трассировочном выводе может быть опущено; в этом случае скрипт определит текущую сфокусированную виртуальную машину и нацелится на неё.

Если вы используете Gnome wayland, возможно, потребуется установить расширение оболочки Gnome [email protected] с помощью команды sudo make install_gnome_extension. Вам нужно будет выйти из системы и войти снова, чтобы убедиться, что расширение установлено.

Настройка маршрутизации между машинами

В mofos есть два варианта маршрутизации ВМ:

  • mofos route — принимает шлюз и настраивает ip rule на хосте для маршрутизации виртуальной машины через этот шлюз.
  • mofos pivot — принимает другую машину mofos, получает её IP-адрес и настраивает её как шлюз по умолчанию для текущей виртуальной машины.

Оба варианта могут принимать DNS-сервер для его настройки.

Настройка туннелирования через пентсет-боксы

Команда mofos tunnel настраивает SSH vpn (ssh -w) для маршрутизации трафика машины mofos через сервер. Эта функция опирается на несколько конфигураций:

Конкретно команда mofos tunnel выполняет следующие действия (никакой магии):

  1. Создаёт локальный tun-интерфейс (sudo /usr/libexec/mofos/mofosnet.py tun add pentest_box) и назначает IP-адрес этому интерфейсу.
  2. Запускает команду tunneling.command на удалённом сервере; эта команда должна создать tun-интерфейс, который затем будет связан с локальным (/usr/libexec/mofos/mofosnet.py sshvpn start pentest_box).
  3. Маршрутизирует трафик машины mofos через шлюз удалённого бокса (/usr/libexec/mofos/mofosnet.py route mofos_vm_ip gateway_ip), шлюз по умолчанию виртуальной машины mofos также изменяется.

Команда tunneling.command должна быть определена в файле конфигурации /etc/mofos/mofosnet.toml. Например:```toml [tunneling.command] start = "sudo ssh-vpn start" # the peer remote address will be supplied as argv[1] stop = "sudo ssh-vpn stop"

root@kitploit:~
Что касается команд `route` и `pivot`, для настройки также можно указать DNS.

### Управление USB

Команда `mofos usb` позволяет управлять USB-устройствами.

Устройства идентифицируются по их ID (vendor_id:product_id), который необходим для команд attach и detach:```console
$ mofos ls usb
+-----------+------------------------------------------------+-------------+
| ID        | Device                                         | Attached to |
+-----------+------------------------------------------------+-------------+
| 0bda:8153 | Realtek, RTL8153 Gigabit Ethernet Adapter      |             |
| 046d:c077 | Logitech, Mouse                                |             |
| 0a5c:5842 | Broadcom Corp, 58200                           |             |
| 1bcf:28d2 | CN0Y9V728LG003AGBCJZA01, Integrated_Webcam_FHD |             |
+-----------+------------------------------------------------+-------------+
$ mofos usb attach pentest-1 0bda:8153
$ mofos usb
+-----------+------------------------------------------------+-------------+
| ID        | Device                                         | Attached to |
+-----------+------------------------------------------------+-------------+
| 0bda:8153 | Realtek, RTL8153 Gigabit Ethernet Adapter      | pentest-1   |
| 046d:c077 | Logitech, Mouse                                |             |
| 0a5c:5842 | Broadcom Corp, 58200                           |             |
| 1bcf:28d2 | CN0Y9V728LG003AGBCJZA01, Integrated_Webcam_FHD |             |
+-----------+------------------------------------------------+-------------+
$ mofos usb detach pentest-4 0bda:8153

The force option отсоединяет и повторно подсоединяет устройство. Обычно она используется для повторного подключения устройства, которое было отключено без предварительного отсоединения.

Примечание: подключение USB-устройства действительно только на время жизни виртуальной машины. Когда она останавливается, устройство автоматически отсоединяется.

Управление PCI-устройствами

Как и в случае с USB-устройствами, mofos позволяет подключать PCI-устройство к запущенной виртуальной машине; команды те же.

Дополнительное ограничение касается некоторых PCI-устройств, принадлежащих к группе. Например, подключение Ethernet-платы к запущенной виртуальной машине может потребовать перемещения всей группы PCI внутрь виртуальной машины. Поскольку это нельзя сделать последовательно, такая возможность пока не поддерживается. Однако для отдельного PCI-устройства, такого как Wi-Fi-сетевая карта, всё работает нормально.

Общие папки

Команда mofos mount создаёт общие папки и может смонтировать только что добавленную файловую систему в каталог внутри виртуальной машины. mofos umount отмонтирует каталог и удалит общие папки из конфигурации виртуальной машины.

Этот механизм основан на технологии virtiofsd, которая требует включения общей памяти. Теперь это делается по умолчанию при создании виртуальной машины. В противном случае включить её можно следующей командой:```console virt-xml -c qemu:///system --edit --memorybacking source.type=memfd,access.mode=shared DOMAIN

root@kitploit:~
Кроме того, предоставляемые политики AppArmor ограничивают каталоги, которые хост может сделать общими. Это сделано для того, чтобы пользователь не мог настроить общий доступ к каталогу `/etc` или корню файловой системы и изменять их, используя привилегии root внутри виртуальной машины. Поэтому необходимо изменить политику `usr.lib.qemu.virtiofsd`, чтобы разрешить общий доступ к произвольным каталогам.

Должны быть изменены две строки:```
@{SHARE_DIRS}=/data/libvirt/shares/*/ /home/user/Public/**/
[...]
pivot_root /data/libvirt/shares/*/,
pivot_root /home/user/Public/**/,

The SHARE_DIRS variable is reused in the policy, however, due to apparmor limitations, it is not possible to reuse it for pivot_root directives. Therefore, it is required to manually adapt the pivot_root directives for each shared directories.

To mount a local directory:``` mofos mount test ./Public/share -d /home/user/share

root@kitploit:~
Чтобы не нарушать работу виртуальной машины, на которой должна быть смонтирована общая папка, если удалённый каталог не пуст, выдаётся предупреждение, и сценарий позволяет выполнить монтирование вручную.

Наконец, операция монтирования не является постоянной, и её необходимо повторять при каждой перезагрузке.

## Машины Windows

Чтобы создать виртуальные машины Windows, сначала необходимо вручную создать шаблонную машину. Диск этого шаблона затем используется в качестве backing file для создания дочерних машин. По умолчанию виртуальные машины Windows, созданные с помощью Mofos, не имеют предварительной настройки. Однако можно настроить Mofos на выполнение задач постконфигурации, таких как изменение имени хоста и добавление отдельной записи в файл `known_hosts`, с помощью хуков.

Для включения настройки после создания обязательны следующие предварительные условия:
- Сервер OpenSSH должен прослушивать соединения
- SSH-ключ должен быть настроен для беспрепятственной аутентификации от имени пользователя с правами администратора. Файл `authorized_keys` должен быть создан в `C:\Program Data\ssh\administrators_authorized_keys` и с конкретными ACL```powershell
$admin_group = "Administrators"
$system = "SYSTEM"

$acl = Get-Acl C:\ProgramData\ssh\administrators_authorized_keys
$acl.SetAccessRuleProtection($true, $false)
$administratorsRule = New-Object system.security.accesscontrol.filesystemaccessrule($admin_group,"FullControl","Allow")
$systemRule = New-Object system.security.accesscontrol.filesystemaccessrule($system,"FullControl","Allow")
$acl.SetAccessRule($administratorsRule)
$acl.SetAccessRule($systemRule)
$acl | Set-Acl
  • OpenSSH должен быть настроен с оболочкой PowerShell вместо cmd.exe.```powershell New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
root@kitploit:~
- SSH-ключ хоста шаблона Windows должен быть указан в `$HOME/.local/share/mofos/ssh.json`. Это обеспечит создание соответствующей записи `known_hosts` для каждой новой машины с ключом хоста шаблона.
- Метаданные шаблонной машины следует изменить, чтобы идентифицировать её как шаблон:```
mofos metadata update --set_template windows-server-template

Автодополнение

Автодополнение должно работать из коробки для bash и fish. Для zsh может потребоваться выполнить следующие команды:``` autoload -Uz compinit compinit source /usr/share/zsh/vendor-completions/_mofos

root@kitploit:~
## Пересечение IP-адресов

Виртуальные машины, созданные на основе одного и того же шаблонного диска, могут получить один и тот же IP-адрес, даже если MAC-адрес их сетевой карты меняется из-за DHCP-идентификатора. Это поведение можно изменить, отредактировав сетевую конфигурацию шаблона:

С systemd-networkd:```
[Match]
Name=eth0

[Network]
DHCP=yes
MulticastDNS=no
IPv6AcceptRA=no

[DHCP]
ClientIdentifier=mac

С устаревшими сетевыми интерфейсами /etc/network/interfaces:``` iface eth0 inet dhcp client no

root@kitploit:~
Скачать инструмент