
🐍 Высокопроизводительный, многопоточный сканер YARA и IOC.

Переписывание Loki на Rust. Высокопроизводительный, многопоточный сканер YARA и IOC в одном бинарном файле.
Статус: Бета. Работает, но ещё в активной разработке.
Сканирование памяти процессов на macOS выполняется по мере возможности и обычно требует отладочных прав или повышенных привилегий. Без них Loki-RS будет сканировать файлы, но не сможет читать память большинства процессов. Используйте --no-procs, чтобы пропустить сканирование процессов, если это необходимо.
В Linux Loki-RS пропускает привязки процессов к устройствам и специальные отображения ядра перед чтением /proc/<pid>/mem. Это позволяет избежать известной нестабильности с некоторыми VMA, управляемыми драйверами, сохраняя при этом нормальное сканирование анонимной, кучи/стека и обычной файловой памяти. Если вы всё же столкнётесь с проблемами, специфичными для окружения, используйте --no-procs, чтобы отключить сканирование процессов.
Загрузите предварительно скомпилированный бинарный файл для вашей платформы со страницы релизов.
# Извлечение
tar -xzvf loki-linux-*.tar.gz
cd loki-linux-*
# Обновление сигнатур (рекомендуется)
./loki-util update
# Запуск
sudo ./loki --help
Сигнатуры поставляются вместе с релизом, но быстро устаревают. Выполните loki-util update, чтобы загрузить последние правила YARA-Forge Core.
Loki-RS использует YARA Forge в качестве источника сигнатур по умолчанию. Loki-RS поставляется и обновляется с набором правил Core (высокая точность, низкий уровень ложных срабатываний, оптимизирован для производительности). Если вам нужно более широкое покрытие, вы можете заменить наборы Extended или Full из YARA Forge.
Файлы IOC в папке signatures/iocs/ по-прежнему поддерживаются как опциональные локальные/пользовательские файлы.
# Базовое сканирование (TUI включён по умолчанию)
sudo ./loki
# Сканирование конкретной папки
sudo ./loki --folder /tmp
# Отключение TUI, стандартный вывод командной строки
sudo ./loki --no-tui
# Сканирование смонтированного образа (пропустить сканирование процессов, использовать все ядра)
sudo ./loki --no-procs --folder ~/image1 --threads 0
# Медленное и осторожное сканирование (ограничение CPU 60%, один поток)
sudo ./loki --cpu-limit 60 --threads 1
# Сканирование и отправка логов на удалённый syslog
sudo ./loki --remote syslog-host.internal:514 --remote-proto udp


| Параметр | По умолчанию | Описание |
|---|---|---|
-f, --folder <ПУТЬ> | / | Папка для сканирования. Заключайте пути с пробелами в кавычки, например, -f "J:\SteamLibrary\steamapps\common\SpaceCraft beta" |
Loki-RS предоставляет несколько механизмов для исключения файлов и папок из сканирования.
По умолчанию Loki-RS автоматически исключает:
Системные каталоги (Linux/macOS):
/proc, /dev, /sys/kernel/debug, /sys/kernel/slab, /sys/kernel/tracing, /sys/devices/run, /var/runКаталоги облачных хранилищ (если не используется --scan-all-drives):
Сетевые и смонтированные диски (если не используется --scan-all-drives):
/media, /volumesКаталог программы:
Вы можете исключить известные хорошие файлы по их хешу. Это полезно для внесения в белый список легитимных файлов, вызывающих ложные срабатывания.
Настройка:
Создайте файл в signatures/iocs/ с обоими словами hash и falsepositive в имени файла
Пример: hash-falsepositive-custom.txt
Добавьте хеши (MD5, SHA1 или SHA256) с необязательными описаниями:
# Формат: ХЕШ;описание
d41d8cd98f00b204e9800998ecf8427e;Пустой файл - известный хороший
a7f5f35426b927411fc9231b56382173;Легитимная системная утилита
Файлы, соответствующие этим хешам, будут молча пропущены во время сканирования.
При добавлении IOC имени файла в signatures/iocs/filename-iocs.txt вы можете указать регулярное выражение для исключения ложных срабатываний в третьем столбце:
# Формат: РЕГВЫР;ОЦЕНКА;РЕГВЫР_ЛОЖНЫХ_СРАБАТЫВАНИЙ
#
# Это соответствует всем файлам .ps1, но исключает те, что находятся в каталогах SysInternals
(?i)\\procdump(64)?\.(exe|zip);50;(?i)(SysInternals\\)
Если файл соответствует как основному шаблону, так и регулярному выражению ложных срабатываний, он не будет сообщён.
Файл config/excludes.cfg поддерживает исключения путей на основе регулярных выражений:
# Исключить системные каталоги
^/proc/.*
^/dev/.*
^/sys/.*
# Исключить временные файлы
.*\.tmp$
.*\.temp$
.*\.swp$
# Исключить определённые каталоги
.*node_modules.*
.*/\.git/.*
Примечание: Шаблоны исключения путей сопоставляются с полным путём к файлу с использованием регулярных выражений. Строки, начинающиеся с #, являются комментариями.
# Сканировать, но включить все диски (сетевые, облачные, смонтированные)
sudo ./loki --scan-all-drives
# Сканировать все типы файлов, не только исполняемые и скрипты
sudo ./loki --scan-all-files
# Сканировать только маленькие файлы (менее 10 МБ)
sudo ./loki --max-file-size 10000000
# Пропустить сканирование процессов (полезно для смонтированных образов)
sudo ./loki --no-procs --folder /mnt/image
Терминальный интерфейс включён по умолчанию и обеспечивает мониторинг в реальном времени во время сканирования.
sudo ./loki --folder /path/to/scan


Loki-RS автоматически генерирует стилизованный HTML-отчёт после каждого сканирования. Отчёт создаётся вместе с файлом лога JSONL и предоставляет визуальную сводку всех результатов.
Отчёт включает:

HTML-отчёт использует то же базовое имя файла, что и вывод JSONL (например, loki_hostname_2025-01-08.html). Чтобы отключить генерацию отчёта, используйте --no-html.
Вы можете создавать HTML-отчёты из существующих файлов JSONL с помощью loki-util:
# Создать HTML-отчёт из одного файла JSONL
./loki-util html --input scan_results.jsonl --output report.html
# Создать объединённый HTML-отчёт из нескольких файлов JSONL
./loki-util html --input "*.jsonl" --combine --output combined_report.html
# Использовать glob-шаблоны для сопоставления нескольких файлов
./loki-util html --input "/path/to/scans/*.jsonl" --combine --output combined.html
Параметры:
--input <файл|glob> - Входной файл JSONL или glob-шаблон (обязательно)--output <файл.html> - Выходной HTML-файл (опционально, по умолчанию имя входного файла с расширением .html)--combine - Объединить несколько файлов JSONL в один отчёт (группирует результаты по имени хоста)--title <строка> - Переопределить заголовок отчёта--host <строка> - Переопределить имя хоста в отчётеРежим объединённого отчёта полезен для агрегации результатов сканирования с нескольких хостов или периодов времени в едином представлении, с группировкой результатов по исходному имени хоста.
git clone https://github.com/Neo23x0/Loki-RS.git
cd Loki-RS
cargo build --release
./target/release/loki-util update
sudo ./target/release/loki
Требуется инструментарий Rust. См. docs/BUILD.md для кросскомпиляции.
Loki RS - это побочный проект. Это быстрый сканер в одном бинарном файле, созданный для практического триажа и экспериментов, и он может быстро меняться по мере внедрения и удаления идей.
Поддержка осуществляется сообществом и предоставляется по возможности - без соглашения об уровне обслуживания (SLA), без гарантированного времени ответа и без обещаний, что каждый пограничный случай будет обработан идеально. Если вы используете его в производственной среде, учитывайте это.
Для корпоративных сред и реагирования на инциденты с предсказуемой поддержкой и более широким, хорошо протестированным набором функций компания Nextron Systems поддерживает THOR (и THOR Lite). THOR - это профессиональный сканер с обширным охватом артефактов, большим количеством модулей и форматов, а также поддержкой вендора. THOR Lite - это бесплатная вводная версия с урезанным функционалом.
GNU General Public License v3.0. См. LICENSE.
Copyright (c) 2025 Florian Roth
| Параметр | По умолчанию | Описание |
|---|
--no-procs | false | Пропустить сканирование памяти процессов |
--no-fs | false | Пропустить сканирование файловой системы |
--no-archive | false | Пропустить сканирование внутри архивов (ZIP) |
--scan-all-drives | false | Сканировать все диски, включая смонтированные/сетевые/облачные |
--scan-all-files | false | Сканировать все файлы независимо от расширения/типа |
| Параметр | По умолчанию | Описание |
|---|
-l, --log <ФАЙЛ> | auto | Файл лога в обычном тексте |
--no-log | false | Отключить вывод лога в обычном тексте |
-j, --jsonl <ФАЙЛ> | auto | Выходной файл JSONL |
--no-jsonl | false | Отключить вывод JSONL |
--no-html | false | Отключить генерацию HTML-отчёта |
--no-tui | false | Отключить TUI, использовать стандартный вывод командной строки |
-r, --remote <ХОСТ:ПОРТ> | нет | Удалённое назначение syslog |
-p, --remote-proto <ПРОТОКОЛ> | udp | Протокол удалённой передачи (udp/tcp) |
--remote-format <ФОРМАТ> | syslog | Формат удалённой передачи (syslog/json) |
| Параметр | По умолчанию | Описание |
|---|
--alert-level <ОЦЕНКА> | 80 | Порог оценки для ALERT |
--warning-level <ОЦЕНКА> | 60 | Порог оценки для WARNING |
--notice-level <ОЦЕНКА> | 40 | Порог оценки для NOTICE |
--max-reasons <ЧИСЛО> | 2 | Максимальное количество отображаемых причин совпадения на одно обнаружение |
-m, --max-file-size <БАЙТЫ> | 64000000 | Максимальный размер файла для сканирования (64 МБ) |
--yara-timeout <СЕКУНДЫ> | 10 | Максимальное время сканирования YARA для каждого файла или буфера памяти процесса (минимум: 1 секунда) |
-c, --cpu-limit <ПРОЦЕНТ> | 100 | Ограничение использования CPU (1-100) |
--threads <ЧИСЛО> | -2 | Количество потоков (0=все, -1=все-1, -2=все-2) |
| Параметр | По умолчанию | Описание |
|---|
--version | - | Показать версию и выйти |
-d, --debug | false | Показать отладочный вывод |
--trace | false | Показать подробный вывод трассировки |
--show-access-errors | false | Показывать ошибки доступа к файлам/процессам |
| Параметр | Описание |
|---|
--scan-all-drives | Включить смонтированные диски, сетевые диски и облачные хранилища |
--scan-all-files | Сканировать все файлы независимо от типа/расширения (по умолчанию сканируются только релевантные типы файлов) |
-m, --max-file-size <БАЙТЫ> | Пропускать файлы больше этого размера (по умолчанию: 64 МБ) |
--no-procs | Полностью пропустить сканирование памяти процессов |
--no-fs | Полностью пропустить сканирование файловой системы |
--no-archive | Пропустить сканирование внутри архивов (ZIP) |
| Клавиша | Действие |
|---|
q | Выход |
p | Пауза/Возобновление |
s | Пропустить текущие элементы |
t | Переключение наложения потоков |
+ / - | Регулировка лимита CPU |
| Стрелки | Прокрутка логов |