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

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

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

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

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

Категории

Все категории
Loading categories
rootkit-detection-ebpf-time-trace — Обнаружение действий руткита по скрытию файлов путем анализа изменений времени выполнения функций ядра. | Kitploit
Инструменты/GitHubGitHub/ait-aecid/rootkit-detection-ebpf-time-trace
Машинное ОбучениеОбнаружение ВторженийСтатьи и ИсследованияОбучение и ОбразованиеОбнаружение Аномалий
GitHubait-aecid/rootkit-detection-ebpf-time-trace

rootkit-detection-ebpf-time-trace

Обнаружение действий руткита по скрытию файлов путем анализа изменений времени выполнения функций ядра.

Репозиторий

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться
293220 дней назадПроверено Kitploit

Обнаружение руткитов с помощью трассировки времени eBPF

Этот репозиторий содержит код для сбора временных измерений функций ядра, которые манипулируются руткитами при сокрытии файлов, а также метод полуконтролируемого обнаружения, анализирующий сдвиги времени выполнения функций ядра. Данная реализация основана на рутките с открытым исходным кодом CARAXES, который перехватывает функцию filldir для управления результатами перечисления файлов, например, при выполнении команды ls. Временные измерения берутся из нескольких функций системного вызова getdents (включая filldir) с помощью eBPF-зондов. Для обнаружения мы применяем простую модель машинного обучения, основанную на статистическом тестировании. Подробные объяснения механизмов сбора данных и обнаружения аномалий приведены в следующей публикации. Если вы используете какие-либо ресурсы из этого репозитория, пожалуйста, цитируйте следующую публикацию:

  • Landauer, M., Alton, L., Lindorfer, M., Skopik, F., Wurzenberger, M., & Hotwagner, W. (2025). Trace of the Times: Rootkit Detection through Temporal Anomalies in Kernel Activity. Under Review.

Руткит и eBPF-зондирование

Следующие шаги настраивают руткит и объясняют, как собирать временные измерения функций ядра. Если вас интересует только обнаружение аномалий и вы хотите использовать наши публичные наборы данных, этот раздел можно пропустить.

Настройка

Руткит и зондирование тестировались на ядрах Linux 5.15-6.11 и Python 3.10. Чтобы запустить инструменты, скачайте этот репозиторий и установите следующие зависимости, необходимые для работы руткита и механизма зондирования.

root@kitploit:~
ubuntu@ubuntu:~$ git clone https://github.com/ait-aecid/rootkit-detection-ebpf-time-trace.git
ubuntu@ubuntu:~$ cd rootkit-detection-ebpf-time-trace
ubuntu@ubuntu:~/rootkit-detection-ebpf-time-trace$ sudo apt update
ubuntu@ubuntu:~/rootkit-detection-ebpf-time-trace$ sudo apt install python3-bpfcc make gcc flex bison python3-pip linux-headers-$(uname -r)
ubuntu@ubuntu:~/rootkit-detection-ebpf-time-trace$ pip install -r requirements.txt

Некоторые сценарии требуют дополнительных ресурсов. В частности, сценарий ls-basic требует компиляции скрипта ls-basic, а сценарий системной нагрузки требует установки stress-ng. Если вы не хотите использовать эти сценарии, следующие зависимости можно пропустить.

root@kitploit:~
ubuntu@ubuntu:~/rootkit-detection-ebpf-time-trace$ gcc -o ls-basic ls-basic.c
ubuntu@ubuntu:~/rootkit-detection-ebpf-time-trace$ sudo apt install stress-ng

Следующие команды обязательны, так как руткит по умолчанию манипулирует системным вызовом getdents, однако в настоящее время поддерживается только перехват filldir. Скачайте руткит, замените hooks.h файлом, предоставленным в этом репозитории (это гарантирует, что будет перехвачена функция filldir, а не getdents), и скомпилируйте руткит.

root@kitploit:~
ubuntu@ubuntu:~/rootkit-detection-ebpf-time-trace$ cd ..
ubuntu@ubuntu:~$ git clone https://github.com/ait-aecid/caraxes.git
ubuntu@ubuntu:~$ cd caraxes/
ubuntu@ubuntu:~/caraxes$ cp ../rootkit-detection-ebpf-time-trace/hooks.h .
ubuntu@ubuntu:~/caraxes$ sudo make

Если у вас возникли проблемы с установкой руткита или вы хотите проверить, работает ли он как ожидается, ознакомьтесь с ReadMe на странице GitHub CARAXES.

После этого вернитесь в этот репозиторий и откройте linux.py, чтобы изменить переменную KERNEL_OBJECT_PATH так, чтобы она указывала на только что склонированную папку caraxes; путь по умолчанию: "/home/ubuntu/caraxes/".

root@kitploit:~
ubuntu@ubuntu:~/caraxes$ cd ../rootkit-detection-ebpf-time-trace
ubuntu@ubuntu:~/rootkit-detection-ebpf-time-trace$ vim linux.py

Измерение времени функций ядра

Теперь вы готовы запустить механизм зондирования, который автоматически внедрит зонды в ядро, запустит руткит, сохранит данные временных измерений в файл и остановит руткит. Для вызова системных вызовов скрипт создает каталог с файлами, которые нужно скрыть, и выполняет ls 100 раз (можно изменить с помощью флага -i), опрашивая зонды. Скрипт позволяет собирать измерения с руткитом (флаг --rootkit), без руткита (флаг --normal) или оба, и поддерживает несколько сценариев. Запустите сценарий по умолчанию следующей командой:

root@kitploit:~
ubuntu@ubuntu:~/rootkit-detection-ebpf-time-trace$ sudo python3 probing.py --normal --rootkit
compiling eBPF probes...
probes compiled!

attached bpf probes:
iterate_dir-enter
iterate_dir-return
dcache_readdir-enter
dcache_readdir-return
filldir64-enter
filldir64-return
verify_dirent_name-enter
verify_dirent_name-return
touch_atime-enter
touch_atime-return

Running experiment with ls for 100 times.
Iteration 0...
detection_PID: 70133
Iteration 1...
detection_PID: 70134
...
Iteration 99...
detection_PID: 70338
polled 40 times!
done with the "rootkit version"
Experiment finished, saving output.
Saved data to events/events_2025-01-17T09:59:52.183801_rootkit.json.gz
412K    events/events_2025-01-17T09:59:52.183801_rootkit.json.gz

Измерения сохраняются в каталоге events. Ознакомьтесь со страницей справки с помощью python3 probing.py -h, чтобы узнать о других параметрах, которые позволяют настроить сбор данных в других сценариях (например, используя ls-basic вместо ls или имитируя системную нагрузку) и присвоить имена различным запускам (--description). Просмотрите repeat_seq.sh для некоторых параметризованных команд; фактически, мы использовали этот скрипт для сбора наших публичных наборов данных. Обратите внимание, что мы рассматриваем только некоторые из доступных функций ядра из системного вызова getdents. Чтобы указать, к каким функциям механизм зондирования должен подключать зонды, откройте probing.py и добавьте или удалите имена функций в списке probe_points в начале файла.

Обнаружение аномалий

Для запуска алгоритма обнаружения аномалий требуется только установить зависимости Python. Если вы еще не сделали этого на предыдущем шаге, выполните следующую команду для установки зависимостей с помощью pip.

root@kitploit:~
ubuntu@ubuntu:~$ git clone https://github.com/ait-aecid/rootkit-detection-ebpf-time-trace.git
ubuntu@ubuntu:~$ cd rootkit-detection-ebpf-time-trace
ubuntu@ubuntu:~/rootkit-detection-ebpf-time-trace$ pip install -r requirements.txt

Затем скачайте и распакуйте набор данных, который мы предоставляем на Zenodo. Если вы сгенерировали собственные данные на предыдущем шаге и хотите использовать их, пропустите этот шаг.

root@kitploit:~
ubuntu@ubuntu:~/rootkit-detection-ebpf-time-trace$ wget https://zenodo.org/records/14679675/files/events.zip
ubuntu@ubuntu:~/rootkit-detection-ebpf-time-trace$ unzip events.zip

Теперь вы готовы запустить обнаружение аномалий следующим образом. Укажите каталог, содержащий данные измерений (-d), долю нормальных данных, используемых для обучения (-t), режим работы (-m) и функцию группировки (-g). Скрипт загрузит все файлы из указанного каталога, разделит их на обучающие и тестовые данные (суммировано в выводе), вычислит и выведет метрики обнаружения, а также построит матрицу ошибок.

root@kitploit:~
ubuntu@ubuntu:~/rootkit-detection-ebpf-time-trace$ python3 evaluate.py -d events -t 0.333 -m offline -g fun
100%|█████████████████████████████████████████████| 1250/1250 [02:47<00:00,  7.45it/s]
Processed all files from events

Normal batches: 750
  Normal batches for training: 250
    default: 50
    file_count: 50
    system_load: 50
    ls_basic: 50
    filename_length: 50
  Normal batches for testing: 500
    default: 100
    file_count: 100
    system_load: 100
    ls_basic: 100
    filename_length: 100
Anomalous batches: 500
  default: 100
  file_count: 100
  system_load: 100
  ls_basic: 100
  filename_length: 100

Results (Run 1)
 Threshold=3.5111917342151415e-16
 Time=0.0027740001678466797
 TP=499
 FP=9
 TN=491
 FN=1
 TPR=R=0.998
 FPR=0.018
 TNR=0.982
 P=0.9822834645669292
 F1=0.9900793650793651
 ACC=0.99
 MCC=0.9801254640896192

Confusion Matrix (Run 1)
Predicted
default     file_count  system_load ls_basic    filename_length
Pos   Neg   Pos   Neg   Pos   Neg   Pos   Neg   Pos   Neg
100   0     100   0     100   0     100   0     100   0      Pos - Actual default
3     97    100   0     99    1     100   0     2     98     Neg - Actual default
100   0     100   0     100   0     100   0     100   0      Pos - Actual file_count
100   0     0     100   100   0     100   0     100   0      Neg - Actual file_count
100   0     100   0     100   0     100   0     100   0      Pos - Actual system_load
100   0     100   0     4     96    100   0     100   0      Neg - Actual system_load
100   0     100   0     100   0     99    1     100   0      Pos - Actual ls_basic
100   0     100   0     100   0     2     98    100   0      Neg - Actual ls_basic
99    1     100   0     100   0     100   0     100   0      Pos - Actual filename_length
3     97    100   0     99    1     100   0     0     100    Neg - Actual filename_length

Ознакомьтесь с руководством с помощью python3 evaluate.py -h, чтобы узнать больше о доступных параметрах этого скрипта. Также посмотрите demo.sh, чтобы увидеть параметризованные команды, которые мы использовали для оценки в нашей статье.

Цитирование

Если вы используете какие-либо ресурсы из этого репозитория, пожалуйста, цитируйте следующую публикацию:

  • Landauer, M., Alton, L., Lindorfer, M., Skopik, F., Wurzenberger, M., & Hotwagner, W. (2025). Trace of the Times: Rootkit Detection through Temporal Anomalies in Kernel Activity. Under Review.
Скачать инструмент