
Linux eBPF руткит с бэкдором, C2, внедрением библиотек, перехватом выполнения, возможностями персистентности и скрытности.
TripleCross — это руткит для Linux на основе eBPF, демонстрирующий наступательные возможности технологии eBPF.
TripleCross вдохновлён предыдущими разработками в этой области, в частности работами Джеффа Дилео на DEFCON 271, Пэта Хогана на DEFCON 292, Гийома Фурнье и Сильвена Афшена также на DEFCON 293, а также Boopkit Крис Нова4. Мы повторно используем и расширяем некоторые методы, впервые разработанные в этих предыдущих исследованиях наступательных возможностей технологии eBPF.
Этот руткит был создан для моей дипломной работы в UC3M. Более подробная информация о его конструкции представлена в документе диссертации.
Этот руткит предназначен исключительно для образовательных и академических целей. Программное обеспечение предоставляется «как есть», и авторы не несут ответственности за любой ущерб или проблемы, которые могут возникнуть при его использовании.
Не пытайтесь использовать TripleCross для нарушения закона. Неправильное использование предоставленного программного обеспечения и информации может привести к уголовной ответственности.
На следующем рисунке показана архитектура TripleCross и его модулей.
Библиотека сырых сокетов RawTCP_Lib, используемая для передачи данных руткита, является моей авторской разработкой и имеет собственный репозиторий.
В следующей таблице описаны основные файлы и каталоги исходного кода для упрощения навигации:
| КАТАЛОГ | НАЗНАЧЕНИЕ |
|---|---|
| docs | Оригинальный документ диссертации |
| src/client | Исходный код клиента руткита |
| src/client/lib | Разделяемая библиотека RawTCP_Lib |
| src/common | Константы и конфигурация руткита. Также включает реализацию общих элементов для eBPF и пользовательской части руткита, таких как кольцевой буфер |
| src/ebpf | Исходный код eBPF-программ, используемых руткитом |
| src/helpers | Включает программы для тестирования функциональности нескольких модулей руткита, а также вредоносную программу и библиотеку, используемые в модулях перехвата выполнения и внедрения библиотек соответственно |
| src/libbpf | Содержит библиотеку libbpf, интегрированную с руткитом |
| src/user | Исходный код пользовательских программ, используемых руткитом |
| src/vmlinux | Заголовочные файлы с определением структур данных ядра (это рекомендуемый метод при использовании libbpf) |
Данный исследовательский проект был протестирован в следующих средах:
| ДИСТРИБУТИВ | ЯДРО | GCC | CLANG | GLIBC | |
|---|---|---|---|---|---|
| ВЕРСИЯ | Ubuntu 21.04 | 5.11.0 | 10.3.0 | 12.0.0 | 2.33 |
Рекомендуем использовать Ubuntu 21.04, которая по умолчанию включает указанные версии программного обеспечения. В противном случае некоторые из возможных проблем описаны здесь.
Исходный код руткита компилируется с помощью двух Makefile.```
cd src make all
cd client make
Следующая таблица подробно описывает назначение каждого Makefile:
| MAKEFILE | КОМАНДА | ОПИСАНИЕ | РЕЗУЛЬТИРУЮЩИЕ ФАЙЛЫ |
| ------------- | ------------- | ------------- | ------------- |
| src/client/Makefile | make | Компиляция клиента руткита | src/client/injector |
| src/Makefile | make help | Компиляция программ для тестирования возможностей руткита, а также вредоносной программы и библиотеки модулей перехвата выполнения и внедрения библиотек соответственно | src/helpers/simple_timer, src/helpers/simple_open, src/helpers/simple_execve, src/helpers/lib_injection.so, src/helpers/execve_hijack |
| src/Makefile | make kit | Компиляция руткита с использованием библиотеки libbpf | src/bin/kit |
| src/Makefile | make tckit | Компиляция TC egress программы руткита | src/bin/tc.o |
### Установка
После того как файлы руткита созданы в каталоге src/bin/, необходимо последовательно загрузить программы *tc.o* и *kit*. В следующем примере бэкдор руткита будет работать в сетевом интерфейсе *enp0s3*:```
// TC egress program
sudo tc qdisc add dev enp0s3 clsact
sudo tc filter add dev enp0s3 egress bpf direct-action obj bin/tc.o sec classifier/egress
// Libbpf-powered rootkit
sudo ./bin/kit -t enp0s3
Существует два скрипта, packager.sh и deployer.sh, которые компилируют и устанавливают руткит автоматически, как это сделал бы злоумышленник в реальном сценарии атаки.
Выполнение packager.sh сгенерирует все файлы руткита в каталоге apps/.
Выполнение deployer.sh установит руткит и создаст файлы персистентности.
Эти скрипты сначала должны быть настроены со следующими параметрами для правильной работы модуля персистентности:
| SCRIPT | CONSTANT | DESCRIPTION |
|---|---|---|
| src/helpers/deployer.sh | CRON_PERSIST | Задание cron для выполнения после перезагрузки |
| src/helpers/deployer.sh | SUDO_PERSIST | Запись sudo для предоставления привилегий без пароля |
J. Dileo. Evil eBPF: Практическое злоупотребление внутриядерной средой выполнения байт-кода. DEFCON 27. слайды ↩
P. Hogan. Искажение реальности: создание и противодействие следующему поколению руткитов Linux с помощью eBPF. DEFCON 27. презентация ↩
G. Fournier and S. Afchain. eBPF, я думал, мы друзья! DEFCON 29. слайды ↩