Сканирование памяти процессов
Команда sd scan-memory сканирует память запущенных процессов для обнаружения бесфайловых вредоносных программ, внедрённого шеллкода и угроз в памяти, которые никогда не записываются на диск. Это необходимо для обнаружения продвинутых угроз, уклоняющихся от традиционного файлового сканирования.
Требования
- Требуются привилегии root — Сканирование памяти читает
/proc/<pid>/mem, что требует root илиCAP_SYS_PTRACE. - Только Linux — Сканирование памяти процессов в настоящее время поддерживается только на Linux. Поддержка macOS запланирована.
Принцип работы
Сканирование памяти процессов читает маппинги виртуальной памяти запущенного процесса и применяет тот же конвейер обнаружения, что используется для сканирования файлов:
- Перечисление областей памяти — Парсинг
/proc/<pid>/mapsдля поиска читаемых сегментов памяти (куча, стек, анонимные маппинги, маппированные файлы). - Чтение содержимого памяти — Чтение каждой области из
/proc/<pid>/mem. - Сканирование по правилам YARA — Применение правил YARA, оптимизированных для обнаружения паттернов шеллкода, внедрённых DLL и известных сигнатур вредоносных программ в памяти.
- Анализ паттернов — Проверка на подозрительные паттерны, такие как RWX-области памяти, PE-заголовки в маппингах без файловой основы и известные нагрузки эксплойтов.
Базовое использование
Сканирование всех запущенных процессов:
sudo sd scan-memoryСканирование конкретного процесса по PID:
sudo sd scan-memory --pid 1234Сканирование нескольких конкретных процессов:
sudo sd scan-memory --pid 1234 --pid 5678 --pid 9012Параметры команды
| Параметр | Сокр. | По умолчанию | Описание |
|---|---|---|---|
--pid | -p | все | Сканировать только указанный PID (повторяемый) |
--json | -j | выкл. | Вывод результатов в формате JSON |
--exclude-pid | нет | Исключить конкретные PID из сканирования | |
--exclude-user | нет | Исключить процессы конкретного пользователя | |
--min-region-size | 4096 | Минимальный размер области памяти для сканирования (байт) | |
--skip-mapped-files | выкл. | Пропускать области памяти на основе файлов |
Пример вывода
sudo sd scan-memoryPRX-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
sudo sd scan-memory --pid 3847 --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"
}
]
}Случаи использования
Реагирование на инциденты
При активном расследовании сканируйте все процессы для нахождения скомпрометированных сервисов:
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 | Перехваченные или патченные точки входа системных вызовов |
Проверка состояния сервера
Запуск периодического сканирования памяти на производственных серверах:
# Добавить в 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. Уровень анализа паттернов обеспечивает дополнительный механизм обнаружения.
Следующие шаги
- Обнаружение руткитов — обнаружение руткитов ядра и пользовательского пространства
- Сканирование файлов и каталогов — традиционное файловое сканирование
- Правила YARA — движок правил для сканирования памяти
- Движок обнаружения — как все уровни обнаружения работают вместе