Skip to content
Эта страница создана и переведена с помощью ИИ. Если вы заметили неточности, помогите нам улучшить её. Редактировать на GitHub

Сканирование памяти процессов

Команда sd scan-memory сканирует память запущенных процессов для обнаружения бесфайловых вредоносных программ, внедрённого шеллкода и угроз в памяти, которые никогда не записываются на диск. Это необходимо для обнаружения продвинутых угроз, уклоняющихся от традиционного файлового сканирования.

Требования

  • Требуются привилегии root — Сканирование памяти читает /proc/<pid>/mem, что требует root или CAP_SYS_PTRACE.
  • Только Linux — Сканирование памяти процессов в настоящее время поддерживается только на Linux. Поддержка macOS запланирована.

Принцип работы

Сканирование памяти процессов читает маппинги виртуальной памяти запущенного процесса и применяет тот же конвейер обнаружения, что используется для сканирования файлов:

  1. Перечисление областей памяти — Парсинг /proc/<pid>/maps для поиска читаемых сегментов памяти (куча, стек, анонимные маппинги, маппированные файлы).
  2. Чтение содержимого памяти — Чтение каждой области из /proc/<pid>/mem.
  3. Сканирование по правилам YARA — Применение правил YARA, оптимизированных для обнаружения паттернов шеллкода, внедрённых DLL и известных сигнатур вредоносных программ в памяти.
  4. Анализ паттернов — Проверка на подозрительные паттерны, такие как RWX-области памяти, PE-заголовки в маппингах без файловой основы и известные нагрузки эксплойтов.

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

Сканирование всех запущенных процессов:

bash
sudo sd scan-memory

Сканирование конкретного процесса по PID:

bash
sudo sd scan-memory --pid 1234

Сканирование нескольких конкретных процессов:

bash
sudo sd scan-memory --pid 1234 --pid 5678 --pid 9012

Параметры команды

ПараметрСокр.По умолчаниюОписание
--pid-pвсеСканировать только указанный PID (повторяемый)
--json-jвыкл.Вывод результатов в формате JSON
--exclude-pidнетИсключить конкретные PID из сканирования
--exclude-userнетИсключить процессы конкретного пользователя
--min-region-size4096Минимальный размер области памяти для сканирования (байт)
--skip-mapped-filesвыкл.Пропускать области памяти на основе файлов

Пример вывода

bash
sudo sd scan-memory
PRX-SD Memory Scan Report
=========================
Processes scanned: 142
Memory regions scanned: 8,451
Total memory scanned: 4.2 GB

  [MALICIOUS] PID 3847 (svchost)
    Region:  0x7f4a00000000-0x7f4a00040000 (anon, RWX)
    Match:   YARA rule: memory_cobalt_strike_beacon
    Details: CobaltStrike Beacon shellcode detected in anonymous RWX mapping

  [SUSPICIOUS] PID 12045 (python3)
    Region:  0x7f8b10000000-0x7f8b10010000 (anon, RWX)
    Match:   Pattern analysis
    Details: Executable code in anonymous RWX region, possible shellcode injection

Duration: 12.4s

Вывод JSON

bash
sudo sd scan-memory --pid 3847 --json
json
{
  "scan_type": "memory",
  "timestamp": "2026-03-21T15:00:00Z",
  "processes_scanned": 1,
  "regions_scanned": 64,
  "threats": [
    {
      "pid": 3847,
      "process_name": "svchost",
      "region_start": "0x7f4a00000000",
      "region_end": "0x7f4a00040000",
      "region_perms": "rwx",
      "region_type": "anonymous",
      "verdict": "malicious",
      "rule": "memory_cobalt_strike_beacon",
      "description": "CobaltStrike Beacon shellcode detected"
    }
  ]
}

Случаи использования

Реагирование на инциденты

При активном расследовании сканируйте все процессы для нахождения скомпрометированных сервисов:

bash
sudo sd scan-memory --json > /evidence/memory-scan-$(date +%s).json

Обнаружение бесфайловых вредоносных программ

Современные вредоносные программы часто выполняются полностью в памяти, не записываясь на диск. Распространённые техники включают:

  • Внедрение процессов — Вредоносные программы внедряют код в легитимные процессы с помощью ptrace или записей в /proc/pid/mem
  • Reflective DLL загрузка — DLL загружается из памяти без обращения к файловой системе
  • Выполнение шеллкода — Сырой шеллкод выделяется в RWX-памяти и выполняется напрямую

sd scan-memory обнаруживает эти паттерны путём поиска:

ИндикаторОписание
RWX анонимные маппингиИсполняемый код в памяти без файловой основы
PE-заголовки в памятиСтруктуры Windows PE в памяти Linux-процессов (кросс-платформенные нагрузки)
Известные сигнатуры шеллкодаПаттерны Metasploit, CobaltStrike, Sliver beacon
Подозрительные заглушки syscallПерехваченные или патченные точки входа системных вызовов

Проверка состояния сервера

Запуск периодического сканирования памяти на производственных серверах:

bash
# Добавить в cron: сканирование каждые 6 часов
0 */6 * * * root /usr/local/bin/sd scan-memory --json --exclude-user nobody >> /var/log/prx-sd/memory-scan.log 2>&1

Влияние на производительность

Сканирование памяти читает память процессов и может кратковременно увеличить нагрузку на I/O. На производственных серверах рассмотрите сканирование в периоды низкой нагрузки или исключение некритичных процессов.

Ограничения

  • Сканирование памяти читает снимок памяти процессов в момент сканирования. Быстро меняющиеся области памяти могут дать неполные результаты.
  • Память ядра не сканируется командой scan-memory. Используйте sd check-rootkit для обнаружения угроз на уровне ядра.
  • Сильно обфусцированные или зашифрованные нагрузки в памяти могут уклониться от правил YARA. Уровень анализа паттернов обеспечивает дополнительный механизм обнаружения.

Следующие шаги

Released under the Apache-2.0 License.