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

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

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

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

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

Категории

Все категории
Loading categories
mquire — Криминалистика памяти Linux с нулевыми зависимостями, использующая встроенные в ядро BTF и kallsyms для анализа памяти с учётом типов без внешней отладочной информации. | Kitploit
Инструменты/GitHubGitHub/trailofbits/mquire
OSINT (Разведка открытых источников)Криминалистика памятиАнализ уязвимостейОбратная инженерияФорензикаАнализ вредоносных программЦифровая криминалистикаАнализ Бинарных ФайловРазведка угрозОбучение и ОбразованиеРеагирование на Инциденты
18484623 дней назадПроверено Kitploit

Популярное

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

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

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

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

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

mquire

Криминалистика памяти Linux с нулевыми зависимостями, использующая встроенные в ядро BTF и kallsyms для анализа памяти с учётом типов без внешней отладочной информации.

РепозиторийСайт

mquire

mquire — игра слов от memory и inquire — это инструмент для запросов к памяти, вдохновлённый osquery.

Ключевое преимущество: не требуются внешние отладочные символы

mquire может анализировать снапшоты памяти ядра Linux без необходимости во внешних отладочных символах.

Всё необходимое для анализа уже встроено в сам дамп памяти. Это означает, что вы можете анализировать:

  • Неизвестные или кастомные ядра, которые вы никогда не видели
  • Любые дистрибутивы Linux без предварительной подготовки
  • Снапшоты памяти, где внешние отладочные символы недоступны или утеряны

Требования

Требования к версии ядра:

  • Поддержка BTF: Ядро 4.18 или новее с включённым BTF (большинство современных дистрибутивов включают его по умолчанию)
  • Поддержка Kallsyms: Ядро 6.4 или новее (из-за изменений в формате scripts/kallsyms.c)

Как это работает

mquire анализирует память ядра, считывая два типа информации, встроенных в современные ядра Linux:

  1. Информация о типах из BTF (BPF Type Format) — описывает структуру и расположение типов данных ядра. Данные BTF парсятся с помощью btfparse crate.
  2. Информация о символах из Kallsyms — предоставляет адреса памяти для символов ядра (те же данные, что используются в /proc/kallsyms)

Комбинируя информацию о типах с расположением символов, mquire может находить и читать сложные структуры данных ядра, такие как:

  • Отображения памяти процессов (с использованием структур maple tree)
  • Кэшированные данные файлов (с использованием структур XArray)
  • Сообщения журнала ядра

Это позволяет извлекать файлы непосредственно из файлового кэша ядра, даже если они были удалены с диска.

Примечания по совместимости

Сканер Kallsyms зависит от формата данных из scripts/kallsyms.c в исходном коде ядра. Если будущие версии ядра изменят этот формат, эвристикам сканера могут потребоваться обновления.

Возможности

Таблицы

mquire предоставляет SQL-таблицы для запросов к различным аспектам системы или состоянию самого инструмента.

mquire — это не база данных. Каждый запрос реконструирует структуры данных ядра, сканируя память и следуя указателям. Нет предварительно вычисленных индексов или кэшированных результатов: каждый доступ к таблице — это обход данных ядра. Используйте AS MATERIALIZED, чтобы избежать избыточных сканирований (см. Оптимизация запросов), и указывайте ограничения, такие как task, при запросах к таблицам на процесс, например task_open_files и memory_mappings, чтобы ограничить сканирование одним процессом.

Принцип проектирования: виртуальные адреса как ключи соединения. Таблицы используют virtual_address (адрес ядра базовой структуры данных) в качестве канонического ключа соединения: не pid или другие видимые пользователем идентификаторы. Это сделано намеренно, потому что один и тот же PID может появляться несколько раз в разных источниках обнаружения и корневых задачах, в то время как виртуальный адрес однозначно идентифицирует конкретный объект ядра. Как SQL-таблицы, так и базовый API LinuxOperatingSystem построены на этом соглашении.

Информация о системе

  • os_version — Версия ядра и архитектура
  • system_info — Имя хоста и доменное имя
  • boot_time — Время загрузки системы
  • kallsyms — Адреса символов ядра (те же данные, что в /proc/kallsyms)
  • dmesg — Сообщения кольцевого буфера ядра (те же данные, что и команда dmesg)

Информация о процессах

  • tasks — Запущенные процессы с командными строками и путями к бинарным файлам. Каждая задача обнаруживается через несколько независимых источников, что полезно для обнаружения руткитов. См. Сравнение методов перечисления задач для обнаружения руткитов и Дедуплицированный список процессов.
  • task_open_files — Файлы, открытые каждым процессом (укажите ограничение task для целенаправленного анализа или запрашивайте все задачи сразу)
  • memory_mappings — Области памяти, отображённые каждым процессом (укажите ограничение task для целенаправленного анализа или запрашивайте все задачи сразу)
  • task_capabilities — Наборы возможностей Linux (effective, permitted, inheritable, bounding, ambient) для задачи. Требует ограничения task, поэтому соединяйте её с tasks/processes (например, JOIN task_capabilities c ON c.task = p.virtual_address).
  • task_ptrace_flags — Декодирует поле ptrace для данной задачи. Требует ограничения task.

Модули ядра

  • kernel_modules — Загруженные модули ядра с метаданными (имя, состояние, версия, параметры, флаги загрязнения)
  • kernel_module_mem_entries — Записи mem из объекта модуля ядра. Требует ограничения kernel_module, поэтому соединяйте её с kernel_modules (например, JOIN kernel_module_mem_entries r ON r.kernel_module = m.virtual_address).
  • ftrace_ops — Список узлов struct ftrace_ops, по умолчанию обходимых от символа ftrace_ops_list. Ограничьте virtual_address для чтения одного узла или start_vaddr (опционально с границей end_vaddr) для обхода от произвольного узла.

Сетевая информация

  • network_connections — Активные сетевые соединения (TCP-сокеты)
  • network_interfaces — Сетевые интерфейсы с IP-адресами и MAC-адресами

Файловая система

  • syslog_file — Системные журналы, прочитанные из файлового кэша ядра (работает, даже если файлы журналов удалены или недоступны, если они кэшированы в памяти)

Отладка

  • mquire_diagnostics — Внутренние журналы mquire, показывающие ход анализа, предупреждения и ошибки

Команды

mquire предоставляет три основные команды:

  • mquire shell — Запустить интерактивную SQL-оболочку для запросов к снапшотам памяти
  • mquire query — Выполнить один SQL-запрос и вывести результаты (поддерживает формат JSON или таблицу)
  • mquire command — Выполнить пользовательские команды над снапшотами памяти (например, .task_tree, .system_version, .dump)

Dot-команды

mquire предоставляет специальные команды с префиксом точки (.), чтобы отличать их от SQL-запросов.

Встроенные команды

Эти команды работают в интерактивной оболочке и с mquire query:

  • .tables — Список всех доступных таблиц
  • .schema — Показать схему для всех таблиц
  • .schema <table> — Показать схему для конкретной таблицы
  • .commands — Список всех доступных пользовательских команд
  • .exit — Выйти из интерактивной оболочки (только оболочка)

Пользовательские команды

Эти команды работают в интерактивной оболочке и с mquire command:

Используйте --help с любой командой, чтобы увидеть доступные опции и информацию об использовании. Например: .task_tree --help

.system_version

Отобразить информацию о версии операционной системы.

Это удобная команда, эквивалентная SELECT * FROM os_version, но с форматированным выводом.

.task_tree

Отобразить иерархическое дерево запущенных процессов и потоков, аналогично команде pstree в Linux.

Опции:

  • --show-threads — Включить потоки в дополнение к процессам. При включении отображает как TGID, так и TID для каждой записи.
  • --use-real-parent — Использовать поле real_parent вместо parent для построения древовидной структуры. Поле real_parent показывает исходный родительский процесс до любого переродительства (полезно для отслеживания цепочек создания процессов, даже после завершения родительских процессов).

Примечания:

  • Формат: [TGID TID] при показе потоков или [TGID] при скрытых потоках. TGID (Thread Group ID) — это то, что обычно называют PID. Для главных потоков (где TGID == TID) оба значения будут одинаковыми.

.carve

Скачать инструмент