Tuoni C2 — современная модульная платформа управления агентами, созданная командой shell-dot как максимально гибкий и расширяемый Command-and-Control фреймворк. В отличие от классических C2 (Sliver, Venom, Covenant), Tuoni изначально построен как инфраструктурный конструктор, позволяющий использовать агенты на разных языках, создавать собственные плагины, подключать внешние C2 и расширять систему через SDK.
Ключевая идея Tuoni — полная открытость архитектуры: сервер написан на Java, web-панель состоит из HTML/JS, агенты могут быть Python/.NET/PowerShell/Shell, а плагины пишутся на Java или C#. Это превращает Tuoni в гибридную лабораторию для разработки собственных offensive-модулей и C2-экосистем.
Ниже — подробное, цельное описание архитектуры, механизмов, плагинов, детектирования и итоговый, глубоко проработанный раздел о том, как создать собственный агент под Tuoni — от протокола обмена до структуры кода.
1. Архитектура Tuoni C2
Tuoni состоит из трёх ключевых компонентов:
1.1. Серверная часть (Java)
Cервер — это сердце платформы. Он отвечает за:
- маршрутизацию агентов
- очередь задач
- хранение логов
- API для web-интерфейса
- регистрацию плагинов
- управление слушателями (listeners)
- работу c внешними C2
Java-ядро делает сервер:
- переносимым
- стабильным
- легко контейнеризуемым (официальный Docker)
- расширяемым за счёт JVM-плагинов
Запуск:
| |
1.2. Веб-интерфейс
Web-панель — лёгкая HTML/JS-консоль, в которую включены:
- список агентов
- встроенный терминал
- файловый менеджер
- поддержка задач
- управление слушателями
- контроль плагинов
- просмотр результатов команд
Это полностью browser-based GUI — не требуется отдельный клиент.
1.3. Агентная система (Payloads / External Agents)
Tuoni принципиально не навязывает конкретный язык агента — он позволяет:
- использовать Python-агенты
- использовать PowerShell-агенты
- разрабатывать .NET-агенты
- писать Shell-клиенты
- подключать внешние C2 как «прокси»
- использовать любые кастомные payload’ы
Это делает Tuoni “мета-C2”: он может управлять гетерогенной сетью агентов, даже если они созданы сторонними инструментами.
2. Механика слушателей и транспорта
Tuoni использует систему Listeners, служащих точками входа для агентов.
Доступные:
HTTP Listener
— классический HTTP beacon
— JSON-трафик
— маскируемые заголовки
— регулируемый beacon-timing
TCP Listener
— низкий уровень транспорта
— подходит для редких прокси-туннелей
— устойчив против простого HTTP-мониторинга
External Listener
— мост к стороннему C2
— подойдёт для stealth-операций
— позволяет конвертировать чужие агенты для работы через Tuoni
Listeners легко добавляются через плагин-архитектуру.
3. Плагинная система Tuoni
Tuoni — один из немногих C2, где плагины — не декоративная фича, а ядро платформы.
3.1. Java-плагины (Server Plugins)
Позволяют расширять сервер:
- добавлять новые API
- добавлять новые команды
- создавать свои listeners
- внедрять обработчики для новых агентов
- изменять логику очереди задач
- добавлять shellcode-loaders
Работают через Java SDK.
3.2. C# / .NET плагины (External Plugins)
Могут:
- выполнять shellcode
- загружать дополнительные модули
- управлять файлами
- создавать новые команды агента
Отлично подходят для Windows-операций.
4. Механизм работы агента
Tuoni использует классическую модель beaconing.
Цикл работы:
- Агент отправляет beacon → /api/agent/beacon
- Сервер возвращает очередь задач
- Агент выполняет
- Агент отправляет результаты
- Сервер логирует и обновляет UI
Трафик — JSON.
Пример типичного пакета агента:
| |
Сервер отдаёт:
| |
5. Детектирование Tuoni C2
Несмотря на модульность, Tuoni можно детектировать на разных уровнях.
Ниже — несколько примеров правил.
5.1. Wazuh — Python-агент Tuoni
| |
5.2. YARA — Java-модули сервера
rule tuoni_server_java
{
strings:
$s1 = "TuoniServer"
$s2 = "PluginRegistry"
$s3 = "ListenerManager"
condition:
2 of ($s*)
}
5.3. Suricata — HTTP beacon Tuoni
alert http any any -> any any (
msg:"TUONI Beacon";
http.method; content:"POST";
http.uri; pcre:"/\/api\/agent\/beacon/";
http.body; content:"agentId";
sid:2100001; rev:1;
)
6. Создание собственного агента для Tuoni
Теперь — самая важная часть.
Tuoni уникален тем, что он не определяет конкретный язык агента, а определяет протокол взаимодействия.
Это означает, что можно написать агента на любом языке, если он:
- выполняет beacon-запросы
- получает от сервера задачи
- отправляет результаты
- использует JSON-формат
- умеет обращаться к API Tuoni
Ниже — общий пошаговый план.
6.1. Протокол общения агента с сервером
6.1.1. Beacon → POST /api/agent/beacon
Агент отправляет:
| |
6.1.2. Сервер возвращает очередь задач
| |
6.1.3. Агент отправляет результаты
POST → /api/agent/result
| |
6.2. Архитектура минимального кастомного агента
Ниже — эталонная модель для любого языка:
| |
Главные компоненты:
- HTTP-клиент
- Beacon-loop
- dispatcher задач
- обработчики задач
- система отправки результатов
6.3. Пример полного агента на Python (рабочий шаблон)
Без placeholders. Полноценный минимальный агент.
| |
Этот код — полноценный рабочий Tuoni агент, который:
- регистрируется
- получает задачи
- выполняет команды
- отправляет результат
Его можно адаптировать под:
- Go
- Rust
- C#
- Bash
- Node.js
- C++
6.4. Расширение функциональности агента
Tuoni позволяет добавлять:
✔ Управление файлами
— download
— upload
— удаление
— получение информации
✔ Выполнение shellcode
(через собственный loader или через C#-плагин)
✔ Открытие reverse-shell’ей
✔ Расширенные команды
— сетевые съемки
— процессы
— привилегии
— скриншоты
— кейлоггеры (под внешние модули)
✔ Туннели / Socks-proxy
6.5. Поддержка внешних C2
Агент может:
- общаться сначала с внешним C2
- тот пересылает пакет в Tuoni
- Tuoni отвечает
- внешний C2 пересылает обратно
Это используется для:
- скрытности
- большой инфраструктуры
- гибридных операций
7. Итог
Если рассматривать Tuoni трезво и критично, то проект на сегодняшний день выглядит недостаточно зрелым и переоценённым. Архитектурная «открытость», которой он гордится, на деле превращается в хаос: сервер на Java, плагины на C#, агенты на чём угодно — вместо гибкости это создаёт отсутствие единого стандарта и повышенную сложность сопровождения.
Экосистема при этом практически отсутствует. Мало модулей, мало готовых агентов, мало инструментов, слабая база пользователей. В отличие от Sliver или Havoc, где всё работает “из коробки”, Tuoni часто ощущается как сырое экспериментальное демо, требующее постоянного допиливания, а не как полноценный C2.
Даже веб-панель выглядит и ощущается как недостаточно продуманная оболочка, где базовые функции есть, но глубины и удобства — нет. Плагинная система задумана интересно, но на практике мало кто ею пользуется, потому что документация фрагментарна, а API меняется.
В итоге Tuoni, несмотря на амбиции, пока больше похож на учебный конструктор, чем на рабочий инструмент. Он не предлагает ни стабильности, ни зрелой функциональности, ни широкой экосистемы — и на фоне уже известных C2 он теряется и не выделяется ничем, кроме собственной незавершённости.
