
Содержание
1. Введение: Почему Linux-форензика требует специализированного подхода
2. Методология Linux-форензики: фазы и принципы работы
3. Снятие образов и сбор артефактов: dd, dcfldd, FTK Imager для Linux
4. The Sleuth Kit и Autopsy: исследование файловой системы
5. Volatility 3: профессиональный анализ памяти Linux
6. LiME: извлечение дампа памяти с живой системы
7. Анализ журналов и артефактов: Plaso и log2timeline
8. Velociraptor: корпоративный инструмент реагирования на инциденты
9. Сетевая форензика: Wireshark, Zeek и NetworkMiner
10. Восстановление удалённых файлов: extundelete, PhotoRec, Scalpel
11. YARA: поиск вредоносных артефактов по сигнатурам
12. Анализ вредоносного ПО на Linux: статика и динамика
13. Продвинутые техники: rootkit-артефакты и анализ ядра
14. CAINE и REMnux: дистрибутивы для форензики
15. Автоматизация сбора артефактов: быстрый triage
16. Часто задаваемые вопросы (FAQ)
17. Заключение: Linux-форензика в 2026 году
Введение: Почему Linux-форензика требует специализированного подхода
Представьте сценарий, с которым сталкивается каждая DFIR-команда хотя бы раз в квартал: ранним утром SIEM выдаёт критический алерт — на production-сервере под управлением Linux обнаружена подозрительная активность. Аналитик первого уровня открывает задачу и видит: неизвестный процесс с именем, имитирующим системный, устанавливает соединения с внешними IP-адресами. Время реакции критически важно — данные в RAM испаряются каждую секунду, злоумышленник может уничтожить следы своего присутствия. Что делать первым? Какие инструменты применить? В каком порядке?
Именно здесь кроется принципиальное отличие Linux-форензики от работы с Windows-системами. Linux — открытая платформа с сотнями вариантов конфигурации, разными файловыми системами, разными дистрибутивами, разными версиями ядра. Там нет единого «Реестра» как центрального хранилища конфигурации. Нет стандартного местоположения логов — одни дистрибутивы используют syslog, другие systemd-journald, третьи оба. Нет гарантированно присутствующих артефактов — их наличие зависит от дистрибутива, версии и конфигурации.
При этом Linux-системы хранят богатейший набор криминалистических артефактов, которые при правильном подходе позволяют восстановить детальную хронологию любого инцидента: файлы журналов в /var/log/, файлы .bash_history каждого пользователя, записи в /proc/ о запущенных процессах, crontab и systemd unit-файлы для персистентности, временны́е метки файловой системы ext4, базы данных пакетных менеджеров (dpkg, rpm, pacman), данные оперативной памяти включая сетевые соединения и хэши паролей.
Специализированные инструменты Linux-форензики существуют именно потому, что стандартные команды операционной системы недостаточны. Команда `ls` не покажет удалённые файлы. `ps` не выявит скрытые процессы rootkit. `history` легко подчищается атакующим. Профессиональные инструменты работают на более низком уровне — читают сырые данные файловой системы, анализируют дамп памяти в обход операционной системы, агрегируют тысячи артефактов в связную хронологию.
В этом руководстве мы системно разберём полный арсенал профессиональных инструментов Linux-форензики в 2026 году: от классических утилит The Sleuth Kit и dd до современных enterprise-инструментов Velociraptor и комплексных платформ анализа памяти Volatility 3. Каждый инструмент рассматривается с практической стороны: установка, ключевые команды, типичные сценарии применения и реальные примеры работы.
Руководство ориентировано на практикующих DFIR-специалистов, сотрудников SOC, системных администраторов с задачами реагирования на инциденты и студентов профессиональных программ по цифровой криминалистике. Базовые знания Linux (уровень администратора) предполагаются как стартовая точка.
Важная оговорка: все описанные инструменты и техники применяются только в рамках законной деятельности — официальных расследований, корпоративного реагирования на инциденты в пределах своих полномочий, учебных лабораторных стендов. Применение криминалистических техник к системам без надлежащих полномочий является уголовно наказуемым деянием.
Методология Linux-форензики: фазы и принципы работы
Прежде чем говорить об инструментах, необходимо понять методологическую основу. Правильный инструмент в неправильный момент или в неправильной последовательности может уничтожить именно те доказательства, которые нужно сохранить.
#### Порядок волатильности (Order of Volatility)
Фундаментальный принцип цифровой криминалистики — сначала собирать наиболее волатильные данные, которые исчезнут быстрее всего. Классический порядок для Linux-системы, основанный на RFC 3227:
Первая категория — данные оперативной памяти (RAM). Содержит запущенные процессы, сетевые соединения, расшифрованные данные, криптографические ключи, артефакты в пространстве ядра. Исчезает при выключении питания. Извлечение: LiME (загружаемый модуль ядра), /proc/kcore, avml.
Вторая категория — временны́е файлы и данные в /proc/. Информация о процессах (/proc/PID/), текущие сетевые соединения (/proc/net/), карты памяти процессов (/proc/PID/maps). Данные теряются при перезагрузке.
Третья категория — данные swap/pagefile. Страницы памяти, выгруженные на диск. Сохраняются дольше RAM, но могут перезаписываться при активном использовании. Местоположение: swap-раздел или swap-файл.
Четвёртая категория — сетевые данные в реальном времени. ARP-кэш, таблицы маршрутизации, состояние сетевых соединений. Меняются постоянно при активной сети.
Пятая категория — данные на диске. Файловая система, логи, конфигурация. Наиболее стабильны, но могут изменяться при работе системы (обновление логов, запись в /tmp/).
Шестая категория — внешние логи. Данные, уже переданные во внешние системы (SIEM, syslog-сервер). Наиболее защищены от модификации атакующим.
#### Пять фаз криминалистического расследования
Фаза 1 — Идентификация: определение масштаба инцидента, выявление затронутых систем, начальная классификация.
Фаза 2 — Сбор (Collection): извлечение данных в соответствии с порядком волатильности. Создание криминалистических образов с хэш-верификацией. Документирование каждого шага с временны́ми метками.
Фаза 3 — Сохранение (Preservation): обеспечение целостности собранных данных. Хэши MD5/SHA256 для всех образов. Цепочка хранения доказательств (chain of custody).
Фаза 4 — Анализ (Analysis): применение инструментов для извлечения значимых артефактов. Построение хронологии. Выдвижение и проверка гипотез.
Фаза 5 — Документирование и отчётность: оформление результатов, подготовка технического отчёта и заключения.
#### Ключевые принципы работы
Принцип минимального вмешательства: каждое действие на живой системе изменяет её состояние. Запуск любой программы изменяет временны́е метки файлов, записывает данные в /proc/, может перезаписать swap. Минимизируйте работу на исходной системе.
Принцип документирования: каждая команда, каждый шаг, каждое решение должны быть задокументированы с временно́й меткой. Используйте script(1) для записи всей сессии работы.
bash
<h2 id="nachalo-dokumentirovaniya-sessii-sbora-dannyh">Начало документирования сессии сбора данных</h2>
script -a /mnt/evidence/collection_session_$(date +%Y%m%d_%H%M%S).log
<h2 id="teper-vse-komandy-i-vyvod-zapisyvayutsya-v-fayl">Теперь все команды и вывод записываются в файл</h2>Принцип работы с копией: анализ только на криминалистических копиях, не на оригинале. Исходный носитель монтируется только в режиме read-only.
Снятие образов и сбор артефактов: dd, dcfldd, FTK Imager для Linux
Качественный образ диска или раздела — основа всего последующего анализа. Плохо снятый или неверифицированный образ обесценивает все усилия по анализу.
#### dd — классика, которая не устаревает
`dd` (disk dump) — стандартная UNIX-утилита, присутствующая в любом Linux-дистрибутиве. Несмотря на возраст, остаётся надёжным инструментом для создания побитовых копий.
bash
<h2 id="bazovoe-snyatie-obraza-diska">Базовое снятие образа диска</h2>
sudo dd if=/dev/sda of=/mnt/evidence/disk_image.dd \
bs=4096 \
conv=noerror,sync \
status=progress
<h2 id="parametry">Параметры:</h2>
<h2 id="if-istochnik-input-file">if= — источник (input file)</h2>
<h2 id="of-naznachenie-output-file">of= — назначение (output file)</h2>
<h2 id="bs-razmer-bloka-4096-optimalno-dlya-sovremennyh-diskov">bs= — размер блока (4096 оптимально для современных дисков)</h2>
<h2 id="conv-noerror-prodolzhat-pri-oshibkah-chteniya">conv=noerror — продолжать при ошибках чтения</h2>
<h2 id="conv-sync-zapolnyat-nulyami-nechitaemye-bloki-sohranyaet-smescheniya">conv=sync — заполнять нулями нечитаемые блоки (сохраняет смещения)</h2>
<h2 id="status-progress-pokazyvat-progress">status=progress — показывать прогресс</h2>
<h2 id="snyatie-obraza-s-odnovremennym-heshirovaniem-cherez-tee">Снятие образа с одновременным хэшированием (через tee)</h2>
sudo dd if=/dev/sda bs=4096 conv=noerror,sync | \
tee /mnt/evidence/disk_image.dd | \
sha256sum > /mnt/evidence/disk_image.sha256
echo "Дата образа: $(date)" >> /mnt/evidence/acquisition_log.txt
echo "Источник: /dev/sda" >> /mnt/evidence/acquisition_log.txt
echo "SHA256: $(cat /mnt/evidence/disk_image.sha256)" >> /mnt/evidence/acquisition_log.txt
<h2 id="tolko-konkretnyy-razdel">Только конкретный раздел</h2>
sudo dd if=/dev/sda1 of=/mnt/evidence/partition_sda1.dd bs=4096 conv=noerror,sync status=progress
<h2 id="snyatie-obraza-po-seti-esli-net-lokalnogo-hranilischa-dostatochnogo-obyoma">Снятие образа по сети (если нет локального хранилища достаточного объёма)</h2>
sudo dd if=/dev/sda bs=4096 conv=noerror,sync | \
ssh analyst@192.168.1.100 "dd of=/evidence/remote_image.dd"
<h2 id="verifikatsiya-obraza">Верификация образа</h2>
sha256sum /mnt/evidence/disk_image.dd
<h2 id="sravnit-s-sohranyonnym-ranee-heshem">Сравнить с сохранённым ранее хэшем</h2>#### dcfldd — расширенная версия dd для криминалистики
`dcfldd` (DC3 Forensic Forensic dd) разработан Центром киберпреступности Министерства обороны США. Добавляет встроенное хэширование и ряд удобств.
bash
<h2 id="ustanovka">Установка</h2>
sudo apt install dcfldd # Debian/Ubuntu
sudo dnf install dcfldd # Fedora/RHEL
<h2 id="obraz-s-odnovremennym-heshirovaniem-md5-i-sha256">Образ с одновременным хэшированием MD5 и SHA256</h2>
sudo dcfldd if=/dev/sda of=/mnt/evidence/image.dd \
hash=sha256,md5 \
hashlog=/mnt/evidence/image_hashes.log \
bs=4096 \
conv=noerror \
status=on \
statusinterval=256
<h2 id="razbivka-na-chasti-po-4gb-dlya-hranilisch-s-fat32-ogranicheniem">Разбивка на части по 4GB (для хранилищ с FAT32 ограничением)</h2>
sudo dcfldd if=/dev/sda hash=sha256 \
of=/mnt/evidence/image.dd \
split=4G \
splitformat=aa \
bs=4096
<h2 id="verifikatsiya-snyatogo-obraza">Верификация снятого образа</h2>
sudo dcfldd if=/mnt/evidence/image.dd \
vf=/dev/sda \
verifylog=/mnt/evidence/verify.log
#### Guymager — графический инструмент с поддержкой форматов EWF и AFF
Guymager предоставляет удобный GUI для снятия образов с поддержкой нескольких криминалистических форматов.
bash
<h2 id="ustanovka">Установка</h2>
sudo apt install guymager
<h2 id="zapusk-gui">Запуск GUI</h2>
sudo guymager
В интерфейсе: выберите диск → правая кнопка мыши → «Acquire image». Guymager поддерживает форматы: raw (dd), EWF (Expert Witness Format — E01), AFF (Advanced Forensic Format). EWF особенно ценен: сжатие, встроенные метаданные, сегментирование на части, checksums каждого сегмента.
#### Создание образов памяти с avml
AVML (Acquire Volatile Memory for Linux) — современный инструмент от Microsoft для сбора дампов памяти без загрузки модуля ядра.
bash
<h2 id="skachat">Скачать</h2>
wget https://github.com/microsoft/avml/releases/latest/download/avml
chmod +x avml
<h2 id="snyat-damp-pamyati">Снять дамп памяти</h2>
sudo ./avml /mnt/evidence/memory_$(hostname)_$(date +%Y%m%d_%H%M%S).lime
<h2 id="s-kompressiey">С компрессией</h2>
sudo ./avml --compress /mnt/evidence/memory.lime.gz
#### Монтирование образов в read-only для анализа
bash
<h2 id="montirovanie-raw-obraza">Монтирование raw-образа</h2>
sudo mkdir /mnt/forensic_image
sudo mount -o ro,loop,noatime /mnt/evidence/disk_image.dd /mnt/forensic_image
<h2 id="montirovanie-konkretnogo-razdela-iz-obraza-nuzhno-znat-smeschenie">Монтирование конкретного раздела из образа (нужно знать смещение)</h2>
<h2 id="snachala-opredelit-tablitsu-razdelov">Сначала определить таблицу разделов</h2>
fdisk -l /mnt/evidence/disk_image.dd
<h2 id="primer-vyvoda">Пример вывода:</h2>
<h2 id="device-start-end-sectors-size-type">Device Start End Sectors Size Type</h2>
<h2 id="disk-image-dd1-2048-999423-997376-487m-efi-system">disk_image.dd1 2048 999423 997376 487M EFI System</h2>
<h2 id="disk-image-dd2-999424-2000895-1001472-489m-linux-filesystem">disk_image.dd2 999424 2000895 1001472 489M Linux filesystem</h2>
<h2 id="disk-image-dd3-2000896-976773119-974772224-464-7g-linux-filesystem">disk_image.dd3 2000896 976773119 974772224 464.7G Linux filesystem</h2>
<h2 id="montirovanie-razdela-3-offset-2000896-512-1024458752">Монтирование раздела 3: offset = 2000896 * 512 = 1024458752</h2>
sudo mount -o ro,loop,noatime,offset=1024458752 \
/mnt/evidence/disk_image.dd /mnt/forensic_partition
<h2 id="ewf-obraz-cherez-ewf-tools">EWF-образ через ewf-tools</h2>
sudo apt install ewf-tools
sudo ewfmount /mnt/evidence/image.E01 /mnt/ewf/
sudo mount -o ro,loop /mnt/ewf/ewf1 /mnt/forensic_image
The Sleuth Kit и Autopsy: исследование файловой системы
The Sleuth Kit (TSK) — открытый фреймворк командной строки для анализа файловых систем. Autopsy — графическая платформа, построенная поверх TSK. Вместе они образуют наиболее функциональный стек для Linux-форензики в части файловой системы.
#### Установка The Sleuth Kit и Autopsy
bash
<h2 id="the-sleuth-kit">The Sleuth Kit</h2>
sudo apt install sleuthkit # Debian/Ubuntu
sudo dnf install sleuthkit # Fedora
<h2 id="autopsy-java-prilozhenie">Autopsy (Java-приложение)</h2>
<h2 id="skachat-s-ofitsialnogo-sayta-autopsy-com">Скачать с официального сайта autopsy.com</h2>
wget https://github.com/sleuthkit/autopsy/releases/download/autopsy-4.21.0/autopsy-4.21.0.zip
unzip autopsy-4.21.0.zip
cd autopsy-4.21.0
./unix_setup.sh # Настройка зависимостей
./bin/autopsy # Запуск
#### Ключевые утилиты командной строки TSK
mmls — анализ таблицы разделов:
bash
<h2 id="prosmotr-struktury-razdelov-obraza">Просмотр структуры разделов образа</h2>
mmls /mnt/evidence/disk_image.dd
<h2 id="vyvod">Вывод:</h2>
<h2 id="dos-partition-table">DOS Partition Table</h2>
<h2 id="offset-sector-0">Offset Sector: 0</h2>
<h2 id="units-are-in-512-byte-sectors">Units are in 512-byte sectors</h2>
<h2 id="slot-start-end-length-description">Slot Start End Length Description</h2>
<h2 id="000-meta-0000000000-0000000000-0000000001-primary-table-0">000: Meta 0000000000 0000000000 0000000001 Primary Table (#0)</h2>
<h2 id="001-0000000000-0000002047-0000002048-unallocated">001: - 0000000000 0000002047 0000002048 Unallocated</h2>
<h2 id="002-000-000-0000002048-0000999423-0000997376-linux-0x83">002: 000:000 0000002048 0000999423 0000997376 Linux (0x83)</h2>fsstat — информация о файловой системе:
bash
<h2 id="statistika-faylovoy-sistemy">Статистика файловой системы</h2>
fsstat -o 2048 /mnt/evidence/disk_image.dd
<h2 id="informatsiya-o-ext4">Информация о ext4:</h2>
<h2 id="file-system-information">FILE SYSTEM INFORMATION</h2>
<h2 id="volume-name">Volume Name:</h2>
<h2 id="volume-id-abc12345">Volume ID: abc12345...</h2>
<h2 id="last-written-at-2026-03-15-14-23-11-utc">Last Written at: 2026-03-15 14:23:11 UTC</h2>
<h2 id="last-checked-at-2026-01-01-00-00-00-utc">Last Checked at: 2026-01-01 00:00:00 UTC</h2>
<h2 id="block-size-4096">Block size: 4096</h2>
<h2 id="block-count-122096640">Block count: 122096640</h2>fls — список файлов и директорий (включая удалённые):
bash
<h2 id="spisok-faylov-razdela-offset-v-sektorah-iz-mmls">Список файлов раздела (offset в секторах из mmls)</h2>
fls -o 2048 /mnt/evidence/disk_image.dd
<h2 id="rekursivnyy-spisok-s-vremenny-mi-metkami">Рекурсивный список с временны́ми метками</h2>
fls -o 2048 -r -m "/" /mnt/evidence/disk_image.dd > /mnt/evidence/fls_output.txt
<h2 id="tolko-udalyonnye-fayly-i-direktorii">Только удалённые файлы и директории</h2>
fls -o 2048 -d /mnt/evidence/disk_image.dd
<h2 id="klyuchi-r-rekursivno-d-udalyonnye-m-mactime-format-p-polnyy-put">Ключи: -r = рекурсивно, -d = удалённые, -m = mactime формат, -p = полный путь</h2>istat — детали inode:
bash
<h2 id="informatsiya-o-konkretnom-inode-nomer-beryotsya-iz-vyvoda-fls">Информация о конкретном inode (номер берётся из вывода fls)</h2>
istat -o 2048 /mnt/evidence/disk_image.dd 12345
<h2 id="vyvod-soderzhit">Вывод содержит:</h2>
<h2 id="inode-12345">Inode: 12345</h2>
<h2 id="type-regular-file">Type: Regular File</h2>
<h2 id="mode-rw-r-r">Mode: -rw-r--r--</h2>
<h2 id="size-4096">Size: 4096</h2>
<h2 id="modified-2026-03-15-14-23-11-utc-mtime-izmenenie-soderzhimogo">Modified: 2026-03-15 14:23:11 UTC (mtime — изменение содержимого)</h2>
<h2 id="accessed-2026-03-15-14-25-00-utc-atime-posledniy-dostup">Accessed: 2026-03-15 14:25:00 UTC (atime — последний доступ)</h2>
<h2 id="changed-2026-03-15-14-23-11-utc-ctime-izmenenie-metadannyh-inode">Changed: 2026-03-15 14:23:11 UTC (ctime — изменение метаданных inode)</h2>
<h2 id="created-2026-01-01-00-00-00-utc-crtime-sozdanie-tolko-ext4">Created: 2026-01-01 00:00:00 UTC (crtime — создание, только ext4)</h2>icat — извлечение содержимого файла по inode:
bash
<h2 id="izvlech-fayl-po-nomeru-inode">Извлечь файл по номеру inode</h2>
icat -o 2048 /mnt/evidence/disk_image.dd 12345 > /mnt/evidence/recovered_file.bin
<h2 id="izvlech-udalyonnyy-fayl-inode-eschyo-soderzhit-dannye">Извлечь удалённый файл (inode ещё содержит данные)</h2>
icat -o 2048 /mnt/evidence/disk_image.dd 67890 > /mnt/evidence/deleted_file.bin
blkcat и blkls — работа с блоками данных:
bash
<h2 id="soderzhimoe-konkretnogo-bloka">Содержимое конкретного блока</h2>
blkcat -o 2048 /mnt/evidence/disk_image.dd 1024 > /mnt/evidence/block_1024.bin
<h2 id="izvlech-vse-neraspredelyonnye-bloki-dlya-carving">Извлечь все нераспределённые блоки (для carving)</h2>
blkls -o 2048 /mnt/evidence/disk_image.dd > /mnt/evidence/unallocated.bin
#### Autopsy: анализ через графический интерфейс
Autopsy значительно ускоряет работу благодаря автоматизации рутинных задач анализа. Основные модули:
Recent Activity — история браузеров, загруженные файлы, список недавно использованных программ (шелл-история Linux).
Hash Lookup — сравнение хэшей файлов с базами известных «хороших» (NSRL) и «плохих» (malware hashes) файлов.
Keyword Search — поиск по ключевым словам в содержимом файлов, включая удалённые.
Email Parser — извлечение и анализ email-баз данных (Thunderbird, Evolution).
Extension Mismatch — выявление файлов с несовпадающим расширением и реальным типом (признак сокрытия).
Embedded File Extractor — автоматическое извлечение файлов из ZIP, 7z, PDF, Office-документов.
EXIF Parser — извлечение метаданных из изображений, включая GPS-координаты.
Timeline Analysis — временна́я шкала событий на основе MAC-времён файлов.
bash
<h2 id="autopsy-takzhe-imeet-cli-dlya-avtomatizatsii">Autopsy также имеет CLI для автоматизации</h2>
<h2 id="sozdanie-novogo-keysa-cherez-cli">Создание нового кейса через CLI</h2>
autopsy --createCase --caseName="Incident_2026_001" \
--caseDir=/evidence/cases/ \
--dataSource=/evidence/disk_image.dd
Volatility 3: профессиональный анализ памяти Linux
Volatility — де-факто стандарт в memory forensics. Версия 3, переписанная с Python 2 на Python 3 с полностью переработанной архитектурой, поддерживает анализ дампов памяти Linux, Windows и macOS.
#### Установка Volatility 3
bash
<h2 id="ustanovka-cherez-pip">Установка через pip</h2>
pip3 install volatility3
<h2 id="ili-iz-ishodnikov-rekomenduetsya-dlya-aktualnoy-versii">Или из исходников (рекомендуется для актуальной версии)</h2>
git clone https://github.com/volatilityfoundation/volatility3.git
cd volatility3
pip3 install -r requirements.txt
pip3 install -e .
<h2 id="proverka-ustanovki">Проверка установки</h2>
vol --version
<h2 id="ustanovka-dopolnitelnyh-zavisimostey-dlya-linux-analiza">Установка дополнительных зависимостей для Linux-анализа</h2>
pip3 install pycryptodome yara-python
#### Подготовка символов ядра (Linux Symbol Tables)
Для анализа Linux-дампов Volatility 3 требует таблицы символов ядра (ISF — Intermediate Symbol Format). Это принципиальное отличие от версии 2.
bash
<h2 id="metod-1-avtomaticheskoe-sozdanie-isf-iz-zapuschennoy-sistemy">Метод 1: Автоматическое создание ISF из запущенной системы</h2>
<h2 id="na-analiziruemoy-sisteme-ili-sisteme-s-toy-zhe-versiey-yadra">На анализируемой системе (или системе с той же версией ядра):</h2>
git clone https://github.com/volatilityfoundation/dwarf2json.git
cd dwarf2json
go build
<h2 id="sozdanie-isf-trebuet-otladochnye-simvoly-yadra">Создание ISF (требует отладочные символы ядра)</h2>
sudo apt install linux-image-$(uname -r)-dbg # Debian/Ubuntu
sudo ./dwarf2json linux \
--elf /usr/lib/debug/boot/vmlinux-$(uname -r) \
> ~/volatility3/volatility3/symbols/linux/$(uname -r).json.xz
<h2 id="metod-2-skachat-gotovye-isf">Метод 2: Скачать готовые ISF</h2>
<h2 id="repozitoriy-gotovyh-simvolov">Репозиторий готовых символов:</h2>
<h2 id="https-github-com-abyss-w4tcher-volatility3-symbols">https://github.com/Abyss-W4tcher/volatility3-symbols</h2>
git clone https://github.com/Abyss-W4tcher/volatility3-symbols.git
cp -r volatility3-symbols/linux/ ~/volatility3/volatility3/symbols/
#### Ключевые плагины Volatility 3 для Linux
bash
<h2 id="bazovaya-peremennaya-dlya-kratkosti">Базовая переменная для краткости</h2>
DUMP=/evidence/memory_20260315.lime
VOL="python3 /opt/volatility3/vol.py"
<h2 id="informatsiya-o-dampe-i-versii-yadra">Информация о дампе и версии ядра</h2>
$VOL -f $DUMP banners.Banners
<h2 id="spisok-zapuschennyh-protsessov-analog-ps-aux">Список запущенных процессов (аналог ps aux)</h2>
$VOL -f $DUMP linux.pslist.PsList
<h2 id="rasshirennyy-spisok-s-derevom-protsessov">Расширенный список с деревом процессов</h2>
$VOL -f $DUMP linux.pstree.PsTree
<h2 id="poisk-skrytyh-protsessov-sravnenie-task-struct-spiska-s-pgd">Поиск скрытых процессов (сравнение task_struct списка с pgd)</h2>
$VOL -f $DUMP linux.psaux.PsAux
<h2 id="karty-pamyati-protsessov-analog-proc-pid-maps">Карты памяти процессов (аналог /proc/PID/maps)</h2>
$VOL -f $DUMP linux.proc.Maps --pid 1234
<h2 id="damp-konkretnogo-protsessa-iz-pamyati">Дамп конкретного процесса из памяти</h2>
$VOL -f $DUMP linux.proc.Maps --pid 1234 --dump
$VOL -f $DUMP linux.malfind.Malfind --pid 1234 # Поиск инжектированного кода
<h2 id="setevye-soedineniya">Сетевые соединения</h2>
$VOL -f $DUMP linux.netstat.Netstat
<h2 id="sokety">Сокеты</h2>
$VOL -f $DUMP linux.sockstat.Sockstat
<h2 id="zagruzhennye-moduli-yadra-vklyuchaya-skrytye">Загруженные модули ядра (включая скрытые)</h2>
$VOL -f $DUMP linux.lsmod.Lsmod
<h2 id="poisk-moduley-skrytyh-ot-lsmod-priznak-rootkit">Поиск модулей, скрытых от lsmod (признак rootkit)</h2>
$VOL -f $DUMP linux.check_modules.Check_modules
<h2 id="proverka-sistemnyh-vyzovov-syscall-hooks-priznak-rootkit">Проверка системных вызовов (syscall hooks — признак rootkit)</h2>
$VOL -f $DUMP linux.check_syscall.Check_syscall
<h2 id="faylovye-deskriptory-protsessov">Файловые дескрипторы процессов</h2>
$VOL -f $DUMP linux.lsof.Lsof
<h2 id="peremennye-okruzheniya-protsessov">Переменные окружения процессов</h2>
$VOL -f $DUMP linux.envars.Envars --pid 1234
<h2 id="analiz-bash-istorii-iz-pamyati">Анализ bash-истории из памяти</h2>
$VOL -f $DUMP linux.bash.Bash
<h2 id="izvlechenie-strok-iz-dampa">Извлечение строк из дампа</h2>
strings -t d $DUMP | grep -E "https?://[a-zA-Z0-9./-]+" > /evidence/memory_urls.txt
#### Продвинутый анализ: поиск инжекций и вредоносного кода
bash
<h2 id="malfind-poisk-regionov-pamyati-s-podozritelnymi-atributami">Malfind — поиск регионов памяти с подозрительными атрибутами</h2>
<h2 id="rwx-stranitsy-otsutstvie-backing-file-priznaki-shellcode-inzhektsii">(RWX страницы, отсутствие backing file — признаки shellcode/инжекции)</h2>
$VOL -f $DUMP linux.malfind.Malfind
<h2 id="damp-podozritelnyh-regionov-dlya-dalneyshego-analiza">Дамп подозрительных регионов для дальнейшего анализа</h2>
$VOL -f $DUMP linux.malfind.Malfind --dump --dump-dir /evidence/malfind_dumps/
<h2 id="analiz-poluchennyh-dampov-cherez-file-i-strings">Анализ полученных дампов через file и strings</h2>
for f in /evidence/malfind_dumps/*.dmp; do
echo "=== $f ==="
file "$f"
strings "$f" | head -20
done
<h2 id="proverka-cherez-yara">Проверка через YARA</h2>
$VOL -f $DUMP linux.yarascan.YaraScan --yara-file /opt/yara_rules/malware.yar
LiME: извлечение дампа памяти с живой системы
LiME (Linux Memory Extractor) — загружаемый модуль ядра (LKM), позволяющий снять криминалистически корректный образ оперативной памяти с работающей Linux-системы. Это наиболее надёжный способ получения дампа памяти на Linux в 2026 году.
#### Компиляция LiME
LiME необходимо компилировать для конкретной версии ядра системы. Идеально — заранее подготовить модули для всех версий ядра в вашей инфраструктуре.
bash
<h2 id="na-sisteme-analitika-s-toy-zhe-versiey-yadra-chto-u-tseli">На системе аналитика (с той же версией ядра что у цели)</h2>
git clone https://github.com/504ensicsLabs/LiME.git
cd LiME/src
<h2 id="kompilyatsiya-pod-tekuschee-yadro">Компиляция под текущее ядро</h2>
make
<h2 id="ili-pod-konkretnuyu-versiyu-yadra">Или под конкретную версию ядра</h2>
make KVER=5.15.0-89-generic
<h2 id="rezultat-lime-5-15-0-89-generic-ko-fayl-modulya">Результат: lime-5.15.0-89-generic.ko (файл модуля)</h2>
ls -la lime-*.ko
#### Извлечение дампа памяти
bash
<h2 id="zagruzka-modulya-s-zapisyu-dampa-v-lokalnyy-fayl">Загрузка модуля с записью дампа в локальный файл</h2>
sudo insmod lime-$(uname -r).ko "path=/tmp/memory.lime format=lime"
<h2 id="formaty">Форматы:</h2>
<h2 id="lime-nativnyy-format-lime-rekomenduetsya-dlya-volatility">lime — нативный формат LiME (рекомендуется для Volatility)</h2>
<h2 id="padded-s-vyravnivaniem-dlya-gaps-v-adresnom-prostranstve">padded — с выравниванием для gaps в адресном пространстве</h2>
<h2 id="raw-syroy-damp-bez-zagolovkov">raw — сырой дамп без заголовков</h2>
<h2 id="zapis-napryamuyu-po-seti-predpochtitelno-dlya-minimizatsii-izmeneniy-na-sisteme">Запись напрямую по сети (предпочтительно для минимизации изменений на системе)</h2>
<h2 id="na-sisteme-analitika-slushat-na-portu">На системе аналитика (слушать на порту)</h2>
nc -l -p 4444 > /evidence/remote_memory.lime
<h2 id="na-issleduemoy-sisteme-otpravit-po-seti">На исследуемой системе (отправить по сети)</h2>
sudo insmod lime-$(uname -r).ko "path=tcp:4444 format=lime"
<h2 id="proverka-vygruzit-modul-posle-ispolzovaniya">Проверка: выгрузить модуль после использования</h2>
sudo rmmod lime
<h2 id="verifikatsiya-dampa">Верификация дампа</h2>
sha256sum /evidence/remote_memory.lime
file /evidence/remote_memory.lime
<h2 id="vyvod-linux-kernel-memory-dump-lime-format">Вывод: Linux kernel memory dump (lime format)</h2>#### Альтернативы LiME при невозможности загрузки модуля
bash
<h2 id="proc-kcore-predstavlenie-pamyati-yadra-ne-vse-regiony-dostupny">/proc/kcore — представление памяти ядра (не все регионы доступны)</h2>
sudo dd if=/proc/kcore of=/evidence/kcore_dump.bin bs=4096
<h2 id="avml-bez-modulya-yadra-ot-microsoft">avml (без модуля ядра, от Microsoft)</h2>
sudo ./avml /evidence/avml_dump.lime
<h2 id="fmem-ustarevshiy-dlya-staryh-yader">fmem (устаревший, для старых ядер)</h2>
sudo modprobe fmem
sudo dd if=/dev/fmem of=/evidence/fmem_dump.raw bs=1M
Анализ журналов и артефактов: Plaso и log2timeline
Построение хронологии событий — одна из центральных задач форензики. Plaso (Plaso Langar Aldrei Síðan Okkar — исландский: «это никогда не устареет») — Python-фреймворк для извлечения событий из множества источников и их объединения в единую хронологию.
#### Установка Plaso
bash
<h2 id="cherez-pip">Через pip</h2>
pip3 install plaso
<h2 id="cherez-docker-rekomenduetsya-dlya-izolyatsii-zavisimostey">Через Docker (рекомендуется для изоляции зависимостей)</h2>
docker pull log2timeline/plaso
alias log2timeline='docker run --rm -v $(pwd):/data log2timeline/plaso log2timeline'
alias psort='docker run --rm -v $(pwd):/data log2timeline/plaso psort'
alias pinfo='docker run --rm -v $(pwd):/data log2timeline/plaso pinfo'
<h2 id="proverka">Проверка</h2>
log2timeline --version
#### Основные команды Plaso
bash
<h2 id="shag-1-sozdanie-fayla-hranilischa-plaso-iz-istochnika-dannyh">Шаг 1: Создание файла хранилища (.plaso) из источника данных</h2>
<h2 id="analiz-obraza-diska">Анализ образа диска</h2>
log2timeline /evidence/timeline.plaso /evidence/disk_image.dd
<h2 id="analiz-konkretnoy-direktorii-naprimer-var-log">Анализ конкретной директории (например, /var/log/)</h2>
log2timeline /evidence/timeline.plaso /mnt/forensic_image/var/log/
<h2 id="s-ukazaniem-vremennoy-zony-sistemy">С указанием временной зоны системы</h2>
log2timeline --timezone=Europe/Moscow /evidence/timeline.plaso /evidence/disk_image.dd
<h2 id="tolko-opredelyonnye-parsery-uskoryaet-obrabotku">Только определённые парсеры (ускоряет обработку)</h2>
log2timeline --parsers=linux,syslog,bash_history,apt_history \
/evidence/timeline.plaso /mnt/forensic_image/
<h2 id="shag-2-informatsiya-o-sozdannom-hranilische">Шаг 2: Информация о созданном хранилище</h2>
pinfo /evidence/timeline.plaso
<h2 id="shag-3-eksport-i-filtratsiya-hronologii">Шаг 3: Экспорт и фильтрация хронологии</h2>
<h2 id="eksport-v-csv-s-filtrom-po-vremeni">Экспорт в CSV с фильтром по времени</h2>
psort -o l2tcsv \
-w /evidence/timeline_filtered.csv \
--slice "2026-03-15T00:00:00" --slice_size=86400 \
/evidence/timeline.plaso
<h2 id="eksport-v-json">Экспорт в JSON</h2>
psort -o json \
-w /evidence/timeline.json \
/evidence/timeline.plaso
<h2 id="filtr-po-klyuchevym-slovam">Фильтр по ключевым словам</h2>
psort -o l2tcsv \
-w /evidence/timeline_malware.csv \
--parsers=all \
"message contains 'wget' OR message contains 'curl' OR message contains 'nc'" \
/evidence/timeline.plaso
<h2 id="shag-4-analiz-rezultatov">Шаг 4: Анализ результатов</h2>
<h2 id="otkryt-v-timeline-explorer-windows-ili-cherez-python">Открыть в Timeline Explorer (Windows) или через Python</h2>
head -20 /evidence/timeline_filtered.csv
#### Источники данных, поддерживаемые Plaso
Plaso разбирает сотни типов артефактов Linux. Ключевые для форензики:
text
Системные логи:
syslog — /var/log/syslog, /var/log/messages
systemd_journal — /var/log/journal/
auth_log — /var/log/auth.log
dpkg_log — /var/log/dpkg.log (история пакетов Debian/Ubuntu)
apt_history — /var/log/apt/history.log
rpm_log — /var/log/rpm/ (история пакетов RHEL/CentOS)
Shell и пользовательские артефакты:
bash_history — ~/.bash_history
zsh_history — ~/.zsh_history
bash_readline — ~/.readline_history
Сетевые артефакты:
utmp/wtmp — /var/log/wtmp (история входов)
lastlog — /var/log/lastlog (последний вход каждого пользователя)
btmp — /var/log/btmp (неудачные попытки входа)
Файловая система:
ext4 — inode timestamps из ext4
mac_appfirewall — логи файрвола
xfs — XFS файловая система
Прочие:
cron — /var/log/cron (задачи cron)
apache_access — /var/log/apache2/access.log
nginx_access — /var/log/nginx/access.log
ssh — /var/log/auth.log (SSH события)
Velociraptor: корпоративный инструмент реагирования на инциденты
Velociraptor — современная платформа с открытым исходным кодом для endpoint forensics и threat hunting. Сочетает агентскую архитектуру с мощным языком запросов VQL (Velociraptor Query Language). Стал de-facto стандартом в enterprise DFIR за счёт сочетания масштабируемости, гибкости и бесплатности.
#### Установка Velociraptor (автономный режим)
bash
<h2 id="skachat-aktualnuyu-versiyu">Скачать актуальную версию</h2>
wget https://github.com/Velocidex/velociraptor/releases/latest/download/velociraptor-v0.7.0-linux-amd64
chmod +x velociraptor-v0.7.0-linux-amd64
sudo mv velociraptor-v0.7.0-linux-amd64 /usr/local/bin/velociraptor
<h2 id="zapusk-v-avtonomnom-rezhime-standalone-bez-servera-dlya-odnoy-sistemy">Запуск в автономном режиме (standalone — без сервера, для одной системы)</h2>
sudo velociraptor gui --datastore /tmp/velociraptor_data
<h2 id="sozdanie-konfiguratsii-dlya-servera">Создание конфигурации для сервера</h2>
velociraptor config generate -i
<h2 id="interaktivnyy-master-nastroyki-vybrat-tip-razvyortyvaniya-porty-tls">Интерактивный мастер настройки: выбрать тип развёртывания, порты, TLS</h2>
<h2 id="zapusk-servera">Запуск сервера</h2>
velociraptor --config server.config.yaml frontend -v
<h2 id="registratsiya-agenta-klienta">Регистрация агента (клиента)</h2>
velociraptor --config client.config.yaml client -v
#### VQL — язык запросов Velociraptor
VQL — SQL-подобный язык для опроса артефактов системы. Это главная суперсила Velociraptor.
sql
-- Список запущенных процессов с сетевыми соединениями
SELECT Pid, Name, Exe, CommandLine, Username,
Cwd, CreateTime,
{ SELECT Laddr, Raddr, Status FROM connections() WHERE Pid = process.Pid } AS Connections
FROM processes()
WHERE Username != 'root' OR NOT Name =~ "^(systemd|kthreadd|ksoftirqd)"
-- Поиск файлов, изменённых за последние 24 часа
SELECT FullPath, Size, Mtime, Atime, Ctime, Mode.String AS Permissions
FROM glob(globs="/home//*")
WHERE Mtime > now() - 86400
ORDER BY Mtime DESC
-- Анализ bash_history всех пользователей
SELECT User, Line, Timestamp
FROM foreach(
row={ SELECT Name AS User, Homedir FROM users() },
query={
SELECT User,
parse_records_with_regex(
file=Homedir + "/.bash_history",
regex="^#(?P<Timestamp>[0-9]+)$\n(?P<Line>.+)$"
) AS Record
FROM scope()
}
)
-- Поиск установленных пакетов с нестандартными суммами
SELECT Name, Version, Architecture, InstalledDate
FROM deb_packages()
WHERE NOT Verified
-- Поиск SUID/SGID файлов (потенциальные векторы privilege escalation)
SELECT FullPath, Mode.String, Size, Mtime, Md5
FROM glob(globs="//*")
WHERE Mode =~ "s" AND NOT FullPath =~ "^/proc"
LIMIT 1000
#### Готовые артефакты для Linux (artifacts)
Velociraptor имеет обширную библиотеку готовых артефактов:
bash
<h2 id="cherez-gui-artifacts-built-in">Через GUI: Artifacts → Built-in</h2>
<h2 id="cherez-cli-spisok-dostupnyh-linux-artefaktov">Через CLI: список доступных Linux артефактов</h2>
velociraptor artifacts list | grep Linux
<h2 id="klyuchevye-artefakty">Ключевые артефакты:</h2>
<h2 id="linux-forensics-journal-systemd-journal-logi">Linux.Forensics.Journal — systemd journal логи</h2>
<h2 id="linux-forensics-netstat-setevye-soedineniya">Linux.Forensics.Netstat — сетевые соединения</h2>
<h2 id="linux-forensics-lsof-otkrytye-fayly">Linux.Forensics.Lsof — открытые файлы</h2>
<h2 id="linux-forensics-bashhistory-istoriya-komand">Linux.Forensics.BashHistory — история команд</h2>
<h2 id="linux-memory-acquisition-sbor-dampa-pamyati">Linux.Memory.Acquisition — сбор дампа памяти</h2>
<h2 id="linux-persistence-crontab-proverka-crontab">Linux.Persistence.Crontab — проверка crontab</h2>
<h2 id="linux-persistence-systemd-analiz-systemd-unit-faylov">Linux.Persistence.Systemd — анализ systemd unit файлов</h2>
<h2 id="linux-persistence-sshkeys-proverka-ssh-authorized-keys">Linux.Persistence.SSHKeys — проверка SSH authorized_keys</h2>
<h2 id="linux-ssh-authorizedkeys-vse-authorized-keys-fayly">Linux.Ssh.AuthorizedKeys — все authorized_keys файлы</h2>
<h2 id="linux-users-rootusers-polzovateli-s-uid-0">Linux.Users.RootUsers — пользователи с UID=0</h2>
<h2 id="zapusk-artefakta-iz-komandnoy-stroki-standalone">Запуск артефакта из командной строки (standalone)</h2>
velociraptor artifacts collect Linux.Forensics.BashHistory \
--output /evidence/bash_history_collection.zip
Сетевая форензика: Wireshark, Zeek и NetworkMiner
Сетевая форензика на Linux охватывает как захват трафика в реальном времени, так и анализ исторических PCAP-файлов и сетевых логов.
#### Wireshark и tshark: анализ пакетов
bash
<h2 id="ustanovka">Установка</h2>
sudo apt install wireshark tshark
<h2 id="zahvat-trafika-v-cli">Захват трафика в CLI</h2>
sudo tshark -i eth0 -w /evidence/capture_$(date +%Y%m%d_%H%M%S).pcap
<h2 id="zahvat-s-filtrom">Захват с фильтром</h2>
sudo tshark -i eth0 -f "port 443 or port 80" -w /evidence/http_capture.pcap
<h2 id="zahvat-s-ogranicheniem-razmera-rotatsiya-faylov">Захват с ограничением размера (ротация файлов)</h2>
sudo tshark -i eth0 -b filesize:100000 -b files:10 \
-w /evidence/capture.pcap
<h2 id="analiz-suschestvuyuschego-pcap">Анализ существующего PCAP</h2>
tshark -r /evidence/capture.pcap
<h2 id="statistika-po-protokolam">Статистика по протоколам</h2>
tshark -r /evidence/capture.pcap -q -z io,phs
<h2 id="izvlechenie-http-zaprosov">Извлечение HTTP-запросов</h2>
tshark -r /evidence/capture.pcap -Y "http.request" \
-T fields -e http.host -e http.request.uri -e http.user_agent
<h2 id="izvlechenie-dns-zaprosov">Извлечение DNS-запросов</h2>
tshark -r /evidence/capture.pcap -Y "dns.flags.response == 0" \
-T fields -e frame.time -e ip.src -e dns.qry.name
<h2 id="poisk-podozritelnyh-dns-dlinnye-imena-priznak-dga-ili-dns-tunneling">Поиск подозрительных DNS (длинные имена — признак DGA или DNS tunneling)</h2>
tshark -r /evidence/capture.pcap -Y "dns" \
-T fields -e dns.qry.name | \
awk '{if(length($0)>50) print}' | sort | uniq -c | sort -rn
<h2 id="izvlechenie-faylov-iz-pcap-http">Извлечение файлов из PCAP (HTTP)</h2>
<h2 id="cherez-wireshark-gui-file-export-objects-http">Через Wireshark GUI: File → Export Objects → HTTP</h2>
<h2 id="cherez-cli">Через CLI:</h2>
tshark -r /evidence/capture.pcap --export-objects http,/evidence/http_objects/
#### Zeek (ранее Bro): глубокий анализ сетевых логов
Zeek — мощный фреймворк сетевого анализа, генерирующий структурированные логи вместо сырых PCAP.
bash
<h2 id="ustanovka">Установка</h2>
sudo apt install zeek
<h2 id="analiz-pcap-fayla">Анализ PCAP-файла</h2>
zeek -r /evidence/capture.pcap
<h2 id="generiruet-fayly-logov">Генерирует файлы логов:</h2>
<h2 id="conn-log-vse-soedineniya-ip-porty-dlitelnost-bayty">conn.log — все соединения (IP, порты, длительность, байты)</h2>
<h2 id="http-log-http-zaprosy">http.log — HTTP-запросы</h2>
<h2 id="dns-log-dns-zaprosy-i-otvety">dns.log — DNS-запросы и ответы</h2>
<h2 id="ssl-log-ssl-tls-soedineniya">ssl.log — SSL/TLS соединения</h2>
<h2 id="files-log-peredannye-fayly">files.log — переданные файлы</h2>
<h2 id="notice-log-sobytiya-zamechatelnye">notice.log — события замечательные</h2>
<h2 id="analiz-conn-log-top-ip-po-obyomu-trafika">Анализ conn.log: топ IP по объёму трафика</h2>
cat conn.log | zeek-cut id.orig_h id.resp_h orig_bytes resp_bytes duration | \
sort -k3 -rn | head -20
<h2 id="poisk-beaconing-regulyarnye-soedineniya-priznak-c2">Поиск beaconing (регулярные соединения — признак C2)</h2>
cat conn.log | zeek-cut id.orig_h id.resp_h duration ts | \
awk '{print $1, $2}' | sort | uniq -c | sort -rn | head -20
<h2 id="http-zaprosy-s-podozritelnymi-user-agent">HTTP запросы с подозрительными User-Agent</h2>
cat http.log | zeek-cut id.orig_h host uri user_agent | \
grep -v "Mozilla\|Chrome\|Safari\|curl\|python" | head -20
<h2 id="dns-zaprosy-k-neobychnym-tld">DNS-запросы к необычным TLD</h2>
cat dns.log | zeek-cut query answers | \
grep -E "\.(tk|ml|cf|ga|xyz|top|work|click)$" | sort | uniq -c | sort -rn
#### ss и netstat для живой системы
bash
<h2 id="vse-tekuschie-soedineniya-bolee-sovremennaya-zamena-netstat">Все текущие соединения (более современная замена netstat)</h2>
ss -tunap
<h2 id="tolko-ustanovlennye-soedineniya">Только установленные соединения</h2>
ss -tunap state established
<h2 id="soedineniya-s-imenami-protsessov-i-pid">Соединения с именами процессов и PID</h2>
ss -tunap | grep ESTABLISHED
<h2 id="proslushivaemye-porty">Прослушиваемые порты</h2>
ss -tlnp
<h2 id="soedineniya-konkretnogo-protsessa">Соединения конкретного процесса</h2>
ss -tunap | grep "pid=1234"
<h2 id="rasshirennyy-vyvod-dlya-kriminalistiki">Расширенный вывод для криминалистики</h2>
ss -tunap --info --options --extended > /evidence/network_state.txt
<h2 id="arp-kesh-kakie-ip-adresa-byli-aktivny-v-seti">ARP-кэш (какие IP-адреса были активны в сети)</h2>
ip neigh show > /evidence/arp_cache.txt
arp -an >> /evidence/arp_cache.txt
Восстановление удалённых файлов: extundelete, PhotoRec, Scalpel
Восстановление удалённых данных — классическая задача цифровой криминалистики. На Linux существует несколько подходов в зависимости от файловой системы и ситуации.
#### extundelete — восстановление из ext3/ext4
bash
<h2 id="ustanovka">Установка</h2>
sudo apt install extundelete
<h2 id="vazhno-rabotat-tolko-s-razmontirovannoy-faylovoy-sistemoy-ili-obrazom">ВАЖНО: работать только с размонтированной файловой системой или образом!</h2>
<h2 id="prosmotr-udalyonnyh-faylov-inoda">Просмотр удалённых файлов (инода)</h2>
sudo extundelete /dev/sda1 --inode 2
<h2 id="vosstanovlenie-konkretnogo-fayla-po-imeni">Восстановление конкретного файла по имени</h2>
sudo extundelete /mnt/evidence/disk_image.dd \
--restore-file /home/user/document.pdf
<h2 id="vosstanovlenie-konkretnoy-direktorii">Восстановление конкретной директории</h2>
sudo extundelete /mnt/evidence/disk_image.dd \
--restore-directory /home/user/Documents/
<h2 id="vosstanovlenie-vsego-chto-vozmozhno">Восстановление всего что возможно</h2>
sudo extundelete /mnt/evidence/disk_image.dd \
--restore-all \
--output-dir /evidence/extundelete_recovery/
<h2 id="tolko-fayly-udalyonnye-za-poslednie-24-chasa">Только файлы, удалённые за последние 24 часа</h2>
sudo extundelete /mnt/evidence/disk_image.dd \
--restore-all \
--after $(date -d "24 hours ago" +%s)
#### TestDisk и PhotoRec — универсальное восстановление
bash
<h2 id="ustanovka">Установка</h2>
sudo apt install testdisk # Включает PhotoRec
<h2 id="photorec-vosstanovlenie-po-signaturam-faylov-file-carving">PhotoRec — восстановление по сигнатурам файлов (file carving)</h2>
<h2 id="rabotaet-na-lyuboy-faylovoy-sisteme-vklyuchaya-povrezhdyonnye">Работает на любой файловой системе, включая повреждённые</h2>
sudo photorec /mnt/evidence/disk_image.dd
<h2 id="interaktivnyy-interfeys-vybrat-disk-razdel-faylovuyu-sistemu">Интерактивный интерфейс: выбрать диск → раздел → файловую систему</h2>
<h2 id="direktoriyu-dlya-sohraneniya-tipy-faylov">→ директорию для сохранения → типы файлов</h2>
<h2 id="tolko-opredelyonnye-tipy-faylov">Только определённые типы файлов</h2>
sudo photorec /d /evidence/photorec_output/ \
/mnt/evidence/disk_image.dd
<h2 id="testdisk-vosstanovlenie-razdelov-i-zagruzochnyh-sektorov">TestDisk — восстановление разделов и загрузочных секторов</h2>
sudo testdisk /mnt/evidence/disk_image.dd
#### Scalpel — file carving с кастомными сигнатурами
bash
<h2 id="ustanovka">Установка</h2>
sudo apt install scalpel
<h2 id="konfiguratsionnyy-fayl-etc-scalpel-scalpel-conf">Конфигурационный файл /etc/scalpel/scalpel.conf</h2>
<h2 id="opredelyaet-signatury-dlya-poiska-nachalo-i-konets-fayla">Определяет сигнатуры для поиска (начало и конец файла)</h2>
<h2 id="primer-kastomnoy-signatury-dobavit-v-scalpel-conf">Пример кастомной сигнатуры (добавить в scalpel.conf):</h2>
<h2 id="pdf-y-5000000-pdf-eof-x0d-x0a">pdf y 5000000 %PDF %%EOF\x0d\x0a</h2>
<h2 id="docx-y-10000000-pk-x03-x04">docx y 10000000 PK\x03\x04 ...</h2>
<h2 id="zapusk-carving">Запуск carving</h2>
sudo scalpel -c /etc/scalpel/scalpel.conf \
-o /evidence/scalpel_output/ \
/mnt/evidence/disk_image.dd
<h2 id="rezultaty-razbity-po-tipam-faylov">Результаты разбиты по типам файлов:</h2>
<h2 id="evidence-scalpel-output-pdf-0-0">/evidence/scalpel_output/pdf-0-0/</h2>
<h2 id="evidence-scalpel-output-jpg-0-0">/evidence/scalpel_output/jpg-0-0/</h2>
<h2 id="i-t-d">и т.д.</h2>#### foremost — ещё один file carver
bash
sudo apt install foremost
<h2 id="carving-s-podderzhkoy-osnovnyh-formatov">Carving с поддержкой основных форматов</h2>
sudo foremost -t all \
-i /mnt/evidence/unallocated.bin \
-o /evidence/foremost_output/
<h2 id="tolko-izobrazheniya">Только изображения</h2>
sudo foremost -t jpg,png,gif \
-i /mnt/evidence/disk_image.dd \
-o /evidence/images_recovery/
YARA: поиск вредоносных артефактов по сигнатурам
YARA — стандарт де-факто для описания и обнаружения вредоносного ПО через сигнатурные правила. На Linux используется как для сканирования файловой системы, так и в связке с Volatility для поиска в дампах памяти.
#### Установка YARA
bash
<h2 id="iz-repozitoriya">Из репозитория</h2>
sudo apt install yara
<h2 id="kompilyatsiya-iz-ishodnikov-dlya-aktualnoy-versii">Компиляция из исходников (для актуальной версии)</h2>
sudo apt install automake libtool make gcc pkg-config libssl-dev
wget https://github.com/VirusTotal/yara/releases/latest/download/yara-4.5.0.tar.gz
tar -xzf yara-4.5.0.tar.gz
cd yara-4.5.0
./bootstrap.sh
./configure --with-crypto
make
sudo make install
<h2 id="python-modul">Python-модуль</h2>
pip3 install yara-python
#### Написание YARA-правил
yara
/* Правило 1: Обнаружение типичного reverse shell */
rule Linux_Reverse_Shell {
meta:
description = "Признаки bash/python reverse shell"
author = "DFIR Team"
date = "2026-01-01"
severity = "HIGH"
strings:
$bash1 = "bash -i >& /dev/tcp/" ascii
$bash2 = "bash -c 'bash -i" ascii
$python1 = "import socket,subprocess,os" ascii
$python2 = "s.connect((" ascii
$perl1 = "use Socket;$i=" ascii
$nc1 = "nc -e /bin/sh" ascii
$nc2 = "nc -e /bin/bash" ascii
condition:
any of them
}
/* Правило 2: Признаки криптомайнера */
rule Linux_Cryptominer {
meta:
description = "Признаки криптовалютного майнера"
severity = "MEDIUM"
strings:
$pool1 = "stratum+tcp://" ascii
$pool2 = "stratum+ssl://" ascii
$algo1 = "\"algo\": \"randomx\"" ascii
$algo2 = "\"algo\": \"ethash\"" ascii
$xmrig = "xmrig" ascii nocase
$worker = "--worker-id" ascii
$donate = "donate-level" ascii
condition:
2 of ($pool*, $algo*) or $xmrig or ($worker and $donate)
}
/* Правило 3: Признаки web shell */
rule WebShell_PHP {
meta:
description = "PHP web shell признаки"
severity = "CRITICAL"
strings:
$eval = /eval\s*\(\s*(base64_decode|gzinflate|str_rot13|gzuncompress)/
$exec1 = "system($_" ascii
$exec2 = "exec($_" ascii
$exec3 = "passthru($_" ascii
$exec4 = "shell_exec($_" ascii
$preg = "preg_replace(\"/./e\"" ascii
$assert = "assert($_" ascii
condition:
any of them
}
#### Применение YARA-правил
bash
<h2 id="skanirovanie-faylovoy-sistemy">Сканирование файловой системы</h2>
yara -r /opt/yara_rules/malware.yar /mnt/forensic_image/
<h2 id="skanirovanie-s-vyvodom-tolko-sovpadeniy-bez-preduprezhdeniy">Сканирование с выводом только совпадений (без предупреждений)</h2>
yara -r -w /opt/yara_rules/all_rules.yar /mnt/forensic_image/ 2>/dev/null
<h2 id="skanirovanie-protsessov-v-pamyati-na-zhivoy-sisteme">Сканирование процессов в памяти (на живой системе)</h2>
yara -r /opt/yara_rules/malware.yar /proc/*/mem 2>/dev/null
<h2 id="skanirovanie-dampa-pamyati-cherez-volatility">Сканирование дампа памяти через Volatility</h2>
vol.py -f /evidence/memory.lime \
linux.yarascan.YaraScan \
--yara-file /opt/yara_rules/malware.yar
<h2 id="poluchenie-horoshey-bazy-pravil">Получение хорошей базы правил</h2>
git clone https://github.com/Yara-Rules/rules.git /opt/yara_rules/
git clone https://github.com/Neo23x0/signature-base.git /opt/signature-base/
<h2 id="kompilyatsiya-pravil-dlya-uskoreniya">Компиляция правил для ускорения</h2>
yarac /opt/yara_rules/malware.yar /opt/yara_rules/malware.yarc
yara /opt/yara_rules/malware.yarc /mnt/forensic_image/
Анализ вредоносного ПО на Linux: статика и динамика
При обнаружении подозрительного файла на Linux-системе необходим двухэтапный анализ: статический (без запуска) и динамический (с запуском в изолированной среде).
#### Статический анализ бинарного файла
bash
<h2 id="bazovaya-informatsiya-o-fayle">Базовая информация о файле</h2>
file suspicious_binary
<h2 id="elf-64-bit-lsb-executable-x86-64-dynamically-linked">ELF 64-bit LSB executable, x86-64, dynamically linked</h2>
<h2 id="heshi-dlya-proverki-po-reputatsionnym-bazam">Хэши для проверки по репутационным базам</h2>
md5sum suspicious_binary
sha256sum suspicious_binary
<h2 id="zagruzit-hesh-na-virustotal-ili-proverit-cherez-api">Загрузить хэш на VirusTotal или проверить через API:</h2>
curl -s "https://www.virustotal.com/vtapi/v2/file/report?apikey=YOUR_KEY&resource=$(sha256sum suspicious_binary | cut -d' ' -f1)"
<h2 id="stroki-ascii-i-unicode">Строки ASCII и Unicode</h2>
strings suspicious_binary | grep -E "http|/tmp|chmod|wget|curl|nc " | head -30
strings -el suspicious_binary | head -20 # Little-endian (Unicode)
<h2 id="dinamicheskie-zavisimosti">Динамические зависимости</h2>
ldd suspicious_binary
objdump -d suspicious_binary | head -100
<h2 id="tablitsa-simvolov">Таблица символов</h2>
nm suspicious_binary 2>/dev/null | grep -E "execve|system|popen|fork"
readelf -s suspicious_binary 2>/dev/null | grep -E "FUNC|OBJECT" | head -30
<h2 id="elf-zagolovok">ELF заголовок</h2>
readelf -h suspicious_binary
<h2 id="sektsii-elf">Секции ELF</h2>
readelf -S suspicious_binary | grep -E "\.text|\.data|\.bss|\.rodata"
<h2 id="importiruemye-funktsii-priznaki-vozmozhnostey">Импортируемые функции (признаки возможностей)</h2>
objdump -T suspicious_binary 2>/dev/null | grep GLIBC
<h2 id="entropiya-sektsiy-vysokaya-entropiya-vozmozhnaya-upakovka-shifrovanie">Энтропия секций (высокая энтропия = возможная упаковка/шифрование)</h2>
python3 -c "
import math, sys
def entropy(data):
if not data:
return 0
freq = {}
for b in data:
freq[b] = freq.get(b, 0) + 1
e = 0
for count in freq.values():
p = count / len(data)
e -= p * math.log2(p)
return e
with open(sys.argv[1], 'rb') as f:
data = f.read()
block_size = 256
for i in range(0, min(len(data), 4096), block_size):
block = data[i:i+block_size]
print(f'Offset {i}: entropy = {entropy(block):.2f}')
" suspicious_binary
<h2 id="strace-dlya-sistemnyh-vyzovov-na-izolirovannoy-sisteme">strace для системных вызовов (на изолированной системе!)</h2>
strace -f -e trace=all -o /tmp/strace_output.txt ./suspicious_binary
grep -E "execve|connect|bind|open|write" /tmp/strace_output.txt
#### REMnux для анализа вредоносного ПО
bash
<h2 id="remnux-spetsializirovannyy-distributiv-dlya-malware-analysis">REMnux — специализированный дистрибутив для malware analysis</h2>
<h2 id="skachat-s-remnux-org-kak-vm">Скачать с remnux.org как VM</h2>
<h2 id="instrumenty-dostupnye-v-remnux">Инструменты доступные в REMnux:</h2>
<h2 id="staticheskiy-analiz">Статический анализ:</h2>
<h2 id="capa-opredelenie-vozmozhnostey-pe-elf">capa — определение возможностей PE/ELF</h2>
<h2 id="binwalk-analiz-vstroennyh-faylov-i-proshivok">binwalk — анализ встроенных файлов и прошивок</h2>
<h2 id="radare2-revers-inzhiniring">radare2 — реверс-инжиниринг</h2>
<h2 id="ghidra-dizassembler-i-dekompilyator-ot-nsa">ghidra — дизассемблер и декомпилятор от NSA</h2>
<h2 id="capa-dlya-linux-elf">capa для Linux ELF</h2>
capa suspicious_binary
<h2 id="vyvod">Вывод:</h2>
<h2 id="">++--+</h2>
<h2 id="att-ck-tactic-att-ck-technique">| ATT&CK Tactic | ATT&CK Technique |</h2>
<h2 id="">|||</h2>
<h2 id="defense-evasion-t1027-obfuscated-files">| defense-evasion | T1027 Obfuscated Files |</h2>
<h2 id="execution-t1059-004-unix-shell">| execution | T1059.004 Unix Shell |</h2>
<h2 id="command-and-control-t1071-001-web-protocols">| command-and-control | T1071.001 Web Protocols |</h2>
<h2 id="">++--+</h2>Продвинутые техники: rootkit-артефакты и анализ ядра
Rootkit — программа, скрывающая своё присутствие путём модификации операционной системы. Обнаружение rootkit требует работы вне скомпрометированной ОС или глубокого анализа памяти.
#### rkhunter и chkrootkit — первичная проверка
bash
<h2 id="rkhunter-rootkit-hunter">rkhunter — Rootkit Hunter</h2>
sudo apt install rkhunter
sudo rkhunter --update # Обновить базы сигнатур
sudo rkhunter --check --skip-keypress --report-warnings-only
<h2 id="sohranit-rezultat">Сохранить результат</h2>
sudo rkhunter --check --skip-keypress --logfile /evidence/rkhunter_$(date +%Y%m%d).log
<h2 id="chkrootkit">chkrootkit</h2>
sudo apt install chkrootkit
sudo chkrootkit | tee /evidence/chkrootkit_$(date +%Y%m%d).txt
<h2 id="proverka-konkretnyh-aspektov">Проверка конкретных аспектов</h2>
sudo chkrootkit -x | grep "INFECTED\|Searching"
#### Проверка системных вызовов через Volatility
bash
<h2 id="proverka-tablitsy-syscall-na-nalichie-hukov">Проверка таблицы syscall на наличие хуков</h2>
vol.py -f /evidence/memory.lime linux.check_syscall.Check_syscall
<h2 id="primer-esli-sistemnyy-vyzov-perehvachen-volatility-pokazhet">Пример: если системный вызов перехвачен, Volatility покажет:</h2>
<h2 id="table-name-index-symbol-address-module">Table Name | Index | Symbol | Address | Module</h2>
<h2 id="sys-call-1-sys-write-0xffffffff81234567-hook">sys_call | 1 | sys_write | 0xffffffff81234567 | [HOOK!]</h2>
<h2 id="proverka-cred-struktur-rutkit-mozhet-menyat-uid-bez-vidimyh-sledov">Проверка cred структур (руткит может менять UID без видимых следов)</h2>
vol.py -f /evidence/memory.lime linux.check_creds.Check_creds
<h2 id="proverka-idt-interrupt-descriptor-table-na-huki">Проверка IDT (Interrupt Descriptor Table) на хуки</h2>
vol.py -f /evidence/memory.lime linux.check_idt.Check_idt
#### Анализ через /proc/ на живой системе
bash
<h2 id="sravnenie-spiska-protsessov-iz-raznyh-istochnikov-nesootvetstvie-rootkit">Сравнение списка процессов из разных источников (несоответствие = rootkit)</h2>
<h2 id="metod-1-cherez-ps">Метод 1: через ps</h2>
ps -aux | awk '{print $2}' | sort -n > /tmp/ps_pids.txt
<h2 id="metod-2-cherez-proc-napryamuyu">Метод 2: через /proc/ напрямую</h2>
ls /proc/ | grep '^[0-9]' | sort -n > /tmp/proc_pids.txt
<h2 id="metod-3-cherez-ss-setevye-protsessy">Метод 3: через ss (сетевые процессы)</h2>
ss -tunap | grep -oP 'pid=\K\d+' | sort -n > /tmp/ss_pids.txt
<h2 id="sravnenie-pid-v-proc-no-ne-v-ps-skrytyy-protsess">Сравнение: PID в /proc/ но не в ps — скрытый процесс</h2>
diff /tmp/proc_pids.txt /tmp/ps_pids.txt
<h2 id="dlya-kazhdogo-pid-v-proc-poluchit-komandnuyu-stroku-napryamuyu">Для каждого PID в /proc/ — получить командную строку напрямую</h2>
for pid in $(ls /proc/ | grep '^[0-9]'); do
echo -n "PID $pid: "
cat /proc/$pid/cmdline 2>/dev/null | tr '\0' ' '
echo
done > /evidence/proc_cmdlines.txt
<h2 id="poisk-protsessov-s-udalyonnymi-ispolnyaemymi-faylami-malware-chasto-udalyaet-sebya-s-diska">Поиск процессов с удалёнными исполняемыми файлами (malware часто удаляет себя с диска)</h2>
ls -la /proc/*/exe 2>/dev/null | grep deleted | \
awk '{print $NF}' | sed 's|/proc/||;s|/exe.*||'
#### Анализ модулей ядра на признаки rootkit
bash
<h2 id="spisok-zagruzhennyh-moduley">Список загруженных модулей</h2>
lsmod > /evidence/lsmod.txt
<h2 id="sravnenie-s-volatility-nesootvetstvie-skrytyy-modul">Сравнение с Volatility (несоответствие = скрытый модуль)</h2>
vol.py -f /evidence/memory.lime linux.lsmod.Lsmod > /evidence/vol_lsmod.txt
<h2 id="proverka-sysfs-na-predmet-skrytyh-moduley">Проверка sysfs на предмет скрытых модулей</h2>
ls /sys/module/ | sort > /evidence/sysfs_modules.txt
cat /evidence/lsmod.txt | awk '{print $1}' | sort > /evidence/lsmod_names.txt
diff /evidence/sysfs_modules.txt /evidence/lsmod_names.txt
<h2 id="proverka-heshey-sistemnyh-bibliotek-integretnost-ld-preload">Проверка хэшей системных библиотек (интегретность LD_PRELOAD)</h2>
<h2 id="rutkity-tipa-ld-preload-modifitsiruyut-libc-ili-ispolzuyut-etc-ld-so-preload">Руткиты типа LD_PRELOAD модифицируют libc или используют /etc/ld.so.preload</h2>
cat /etc/ld.so.preload 2>/dev/null # Должен быть пустым на чистой системе
<h2 id="proverka-cherez-debsums-rpm-v">Проверка через debsums/rpm -V</h2>
debsums -c 2>/dev/null | head -20 # Debian/Ubuntu: изменённые файлы пакетов
sudo rpm -Va 2>/dev/null | grep -E "^.M|^.5" | head -20 # RHEL/CentOS
CAINE и REMnux: дистрибутивы для форензики
Специализированные дистрибутивы Linux объединяют десятки инструментов форензики в готовую среду и автоматически применяют криминалистически корректные настройки.
#### CAINE (Computer Aided INvestigative Environment)
CAINE — итальянский дистрибутив для цифровой криминалистики, доступный как Live-USB. Ключевые особенности: все подключаемые диски автоматически монтируются в режиме read-only, предотвращая случайное изменение; включены Autopsy, The Sleuth Kit, Guymager, Wireshark, Volatility, Plaso и десятки других инструментов; поддерживает работу как с Linux, так и с Windows-артефактами; CAINE Block Device Manager автоматически управляет write-blocking.
bash
<h2 id="zagruzka-s-caine-live-usb">Загрузка с CAINE Live USB:</h2>
<h2 id="1-skachat-iso-s-caine-live-net">1. Скачать ISO с caine-live.net</h2>
<h2 id="2-zapisat-na-usb-dd-if-caine12-0-iso-of-dev-sdx-bs-4m-status-progress">2. Записать на USB: dd if=caine12.0.iso of=/dev/sdX bs=4M status=progress</h2>
<h2 id="3-zagruzitsya-s-usb">3. Загрузиться с USB</h2>
<h2 id="v-caine-vse-diski-montiruyutsya-read-only-avtomaticheski">В CAINE все диски монтируются read-only автоматически</h2>
<h2 id="dlya-raboty-zapustit-autopsy-ili-nuzhnyy-instrument-iz-menyu">Для работы — запустить Autopsy или нужный инструмент из меню</h2>#### REMnux — среда для анализа вредоносного ПО
REMnux специализируется именно на malware analysis и reverse engineering.
bash
<h2 id="ustanovka-na-ubuntu-debian">Установка (на Ubuntu/Debian)</h2>
wget https://docs.remnux.org/install-distro/remnux-installer.sh
sudo bash remnux-installer.sh install
<h2 id="klyuchevye-instrumenty-remnux-dlya-linux-malvari">Ключевые инструменты REMnux для Linux-малвари:</h2>
<h2 id="staticheskiy-analiz">Статический анализ:</h2>
<h2 id="radare2-capa-binwalk-strings-ldd">radare2, capa, binwalk, strings, ldd</h2>
<h2 id="dinamicheskiy-analiz-v-izolirovannoy-srede">Динамический анализ в изолированной среде:</h2>
<h2 id="strace-ltrace-gdb">strace, ltrace, gdb</h2>
<h2 id="fakenet-ng-imitatsiya-setevyh-servisov">FakeNet-NG (имитация сетевых сервисов)</h2>
<h2 id="inetsim-emulyatsiya-interneta-dlya-malvari">Inetsim (эмуляция интернета для малвари)</h2>
<h2 id="analiz-dokumentov">Анализ документов:</h2>
<h2 id="oletools-office-dokumenty">oletools (Office-документы)</h2>
<h2 id="pdf-parser-peepdf-pdf">pdf-parser, peepdf (PDF)</h2>
<h2 id="olevba-vba-v-office">olevba (VBA в Office)</h2>
<h2 id="initsializatsiya-fakenet-ng-dlya-perehvata-trafika-malvari">Инициализация FakeNet-NG для перехвата трафика малвари</h2>
sudo python /opt/fakenet/fakenet.py -c /opt/fakenet/configs/default.ini
#### Kali Linux как форензик-платформа
Kali, известный прежде всего как пентест-дистрибутив, содержит полноценный пакет форензических инструментов.
bash
<h2 id="pereklyuchenie-v-forenzik-rezhim-read-only-diski">Переключение в форензик-режим (read-only диски)</h2>
sudo kali-tweaks # Forensics → Enable forensics mode
<h2 id="ustanovka-vsego-forenzik-paketa">Установка всего форензик-пакета</h2>
sudo apt install kali-tools-forensics
<h2 id="vklyuchaet">Включает:</h2>
<h2 id="the-sleuth-kit-autopsy-volatility-bulk-extractor">The Sleuth Kit, Autopsy, Volatility, bulk_extractor,</h2>
<h2 id="binwalk-dc3dd-dcfldd-dd-ddrescue-extundelete">binwalk, dc3dd, dcfldd, dd, ddrescue, extundelete,</h2>
<h2 id="foremost-guymager-p0f-plaso-scalpel-testdisk">foremost, Guymager, p0f, Plaso, scalpel, TestDisk,</h2>
<h2 id="wireshark-zeek-networkminer-i-eschyo-neskolko-desyatkov">Wireshark, Zeek, NetworkMiner и ещё несколько десятков</h2>Автоматизация сбора артефактов: быстрый triage
При реагировании на инцидент время критично. Автоматизированные triage-скрипты позволяют быстро собрать все ключевые артефакты с живой системы.
#### FastIR Collector для Linux
bash
<h2 id="fastir-otkrytyy-triage-instrument">FastIR — открытый triage-инструмент</h2>
git clone https://github.com/SekoiaLab/Fastir_Collector_Linux.git
cd Fastir_Collector_Linux
pip3 install -r requirements.txt
<h2 id="zapusk-polnogo-sbora">Запуск полного сбора</h2>
sudo python3 fastIR.py --output /evidence/fastir_$(hostname)_$(date +%Y%m%d_%H%M%S)/
<h2 id="sobiraet">Собирает:</h2>
<h2 id="informatsiyu-o-sisteme-os-hostname-ip">- Информацию о системе (OS, hostname, IP)</h2>
<h2 id="zapuschennye-protsessy">- Запущенные процессы</h2>
<h2 id="setevye-soedineniya">- Сетевые соединения</h2>
<h2 id="otkrytye-fayly-lsof">- Открытые файлы (lsof)</h2>
<h2 id="polzovateley-i-gruppy">- Пользователей и группы</h2>
<h2 id="crontab-i-systemd-yunity">- Crontab и systemd юниты</h2>
<h2 id="bash-zsh-istoriyu">- Bash/zsh историю</h2>
<h2 id="poslednie-fayly-find-s-mtime">- Последние файлы (find с mtime)</h2>
<h2 id="konfiguratsii-sshd-sudoers">- Конфигурации sshd, sudoers</h2>#### Kansible — Linux Artifact Collection Script
bash
<h2 id="sobstvennyy-triage-skript-baza-kotoruyu-mozhno-rasshiryat">Собственный triage-скрипт (база, которую можно расширять)</h2>
#!/bin/bash
<h2 id="linux-triage-sh-bystryy-sbor-artefaktov-s-linux-sistemy">linux_triage.sh — быстрый сбор артефактов с Linux-системы</h2>
CASE_ID="${1:-$(date +%Y%m%d_%H%M%S)}"
OUTPUT_DIR="/tmp/triage_${CASE_ID}"
mkdir -p "$OUTPUT_DIR"
<h2 id="logirovanie-vsey-sessii">Логирование всей сессии</h2>
exec > >(tee -a "${OUTPUT_DIR}/collection.log") 2>&1
echo "=== Начало сбора: $(date) ==="
echo "=== Система: $(hostname) ==="
collect() {
local section=$1
local cmd=$2
local outfile=$3
mkdir -p "${OUTPUT_DIR}/${section}"
echo "[*] Собираем: ${section}/${outfile}"
eval "$cmd" > "${OUTPUT_DIR}/${section}/${outfile}" 2>&1
}
<h2 id="sistema">Система</h2>
collect "system" "uname -a" "uname.txt"
collect "system" "cat /etc/os-release" "os_release.txt"
collect "system" "date; date -u" "datetime.txt"
collect "system" "uptime" "uptime.txt"
collect "system" "cat /proc/version" "kernel.txt"
collect "system" "last -Faiwx" "last_logins.txt"
collect "system" "lastb -Faiwx 2>/dev/null" "failed_logins.txt"
collect "system" "w" "current_users.txt"
collect "system" "cat /etc/passwd" "passwd.txt"
collect "system" "cat /etc/shadow 2>/dev/null" "shadow.txt"
collect "system" "cat /etc/sudoers 2>/dev/null" "sudoers.txt"
collect "system" "getent group" "groups.txt"
<h2 id="protsessy">Процессы</h2>
collect "processes" "ps auxwwwef" "ps_full.txt"
collect "processes" "ps -eo pid,ppid,user,cmd --sort=pid" "ps_tree.txt"
collect "processes" "pstree -a -p -u" "pstree.txt"
<h2 id="set">Сеть</h2>
collect "network" "ss -tunap" "netstat.txt"
collect "network" "ss -tlnp" "listening.txt"
collect "network" "ip addr show" "interfaces.txt"
collect "network" "ip route show" "routes.txt"
collect "network" "ip neigh show" "arp.txt"
collect "network" "cat /etc/hosts" "hosts.txt"
collect "network" "cat /etc/resolv.conf" "resolv.txt"
<h2 id="faylovaya-sistema">Файловая система</h2>
collect "filesystem" "find /tmp /var/tmp /dev/shm -type f -ls 2>/dev/null" "temp_files.txt"
collect "filesystem" "find / -mtime -1 -type f -not -path '/proc/*' -not -path '/sys/*' 2>/dev/null | head -500" "recently_modified.txt"
collect "filesystem" "find / -perm -4000 -type f 2>/dev/null" "suid_files.txt"
collect "filesystem" "find / -perm -2000 -type f 2>/dev/null" "sgid_files.txt"
collect "filesystem" "ls -la /proc/*/exe 2>/dev/null | grep deleted" "deleted_exe.txt"
collect "filesystem" "df -h" "disk_usage.txt"
collect "filesystem" "mount" "mounts.txt"
<h2 id="persistentnost">Персистентность</h2>
collect "persistence" "crontab -l 2>/dev/null" "crontab_root.txt"
collect "persistence" "cat /etc/crontab" "etc_crontab.txt"
collect "persistence" "ls -la /etc/cron*" "cron_dirs.txt"
collect "persistence" "systemctl list-units --type=service --all" "systemd_services.txt"
collect "persistence" "ls -la /etc/systemd/system/" "systemd_custom.txt"
collect "persistence" "ls -la /root/.ssh/" "root_ssh.txt"
collect "persistence" "cat /root/.ssh/authorized_keys 2>/dev/null" "root_authorized_keys.txt"
collect "persistence" "find /home -name 'authorized_keys' 2>/dev/null | xargs ls -la" "user_ssh_keys.txt"
<h2 id="logi">Логи</h2>
collect "logs" "journalctl --since '7 days ago' --no-pager -o short-iso" "journal_7days.txt"
collect "logs" "tail -1000 /var/log/auth.log 2>/dev/null" "auth_log.txt"
collect "logs" "tail -1000 /var/log/syslog 2>/dev/null" "syslog.txt"
collect "logs" "tail -1000 /var/log/secure 2>/dev/null" "secure.txt"
<h2 id="shell-istoriya">Shell история</h2>
collect "history" "cat /root/.bash_history 2>/dev/null" "root_bash_history.txt"
for user_home in /home/*/; do
username=$(basename "$user_home")
collect "history" "cat ${user_home}.bash_history 2>/dev/null" "${username}_bash_history.txt"
done
<h2 id="hesh-manifest">Хэш манифест</h2>
echo "[*] Создание SHA256 манифеста..."
find "$OUTPUT_DIR" -type f -not -name "SHA256MANIFEST.txt" | \
xargs sha256sum > "${OUTPUT_DIR}/SHA256MANIFEST.txt"
<h2 id="upakovka">Упаковка</h2>
ARCHIVE="/tmp/triage_${CASE_ID}.tar.gz"
tar czf "$ARCHIVE" -C /tmp "triage_${CASE_ID}/"
sha256sum "$ARCHIVE" > "${ARCHIVE}.sha256"
echo "=== Сбор завершён: $(date) ==="
echo "=== Архив: $ARCHIVE ==="
echo "=== SHA256: $(cat ${ARCHIVE}.sha256) ==="
#### Grr Rapid Response — масштабируемый enterprise triage
GRR Rapid Response (от Google) — фреймворк для удалённого сбора артефактов и форензики в масштабе предприятия.
bash
<h2 id="ustanovka-grr-docker-compose">Установка GRR (Docker Compose)</h2>
git clone https://github.com/google/grr.git
cd grr
docker-compose -f docker/compose.yaml up
<h2 id="posle-razvyortyvaniya-veb-interfeys-na-8000">После развёртывания — веб-интерфейс на :8000</h2>
<h2 id="agent-ustanavlivaetsya-na-vse-issleduemye-sistemy">Агент устанавливается на все исследуемые системы</h2>
<h2 id="grr-podderzhivaet">GRR поддерживает:</h2>
<h2 id="udalyonnyy-sbor-artefaktov-s-lyubogo-kolichestva-hostov-odnovremenno">- Удалённый сбор артефактов с любого количества хостов одновременно</h2>
<h2 id="vypolnenie-proizvolnyh-komand-i-skriptov">- Выполнение произвольных команд и скриптов</h2>
<h2 id="poisk-po-faylovoy-sisteme">- Поиск по файловой системе</h2>
<h2 id="timeline-analysis">- Timeline analysis</h2>
<h2 id="memory-acquisition-cherez-lime">- Memory acquisition (через LiME)</h2>
<h2 id="integratsiya-s-yara">- Интеграция с YARA</h2>Часто задаваемые вопросы (FAQ)
#### Вопрос 1: С чего начинать при обнаружении инцидента на Linux-сервере?
Первое действие — изолировать систему от сети (если это возможно без нарушения работы) и начать сбор волатильных данных в правильном порядке. Немедленно: снять дамп памяти через LiME или avml, выполнить команды ss -tunap и ps auxwwwef с сохранением вывода, проверить ls -la /proc/*/exe | grep deleted. Затем — запустить автоматизированный triage-скрипт. Всё это делать с внешнего носителя, минимально взаимодействуя с самой системой. Ключевое правило: не перезагружайте систему до извлечения дампа памяти — это уничтожит все волатильные артефакты.
#### Вопрос 2: Как выбрать между Autopsy и коммерческими инструментами?
Autopsy + The Sleuth Kit — профессиональный выбор для задач файловой форензики. Они покрывают большинство потребностей при анализе Linux-систем без лицензионных затрат. Коммерческие инструменты (Cellebrite, Magnet AXIOM, X-Ways) оправданы при: работе с мобильными устройствами (Cellebrite), необходимости анализировать несколько источников одновременно с корреляцией, требованиях к сертифицированному ПО для судебной экспертизы, работе с зашифрованными разделами BitLocker/FileVault. Для Linux-серверного окружения открытых инструментов обычно достаточно.
#### Вопрос 3: Как работать с Volatility если неизвестна версия ядра?
В Volatility 3 версия ядра определяется автоматически через плагин banners.Banners, который ищет строку версии в дампе памяти. После идентификации — нужно найти или создать ISF-файл с символами для этой версии. Репозиторий готовых символов volatility3-symbols от Abyss-W4tcher содержит символы для популярных дистрибутивов. Если нужной версии нет — придётся создавать через dwarf2json, для чего потребуется пакет отладочных символов ядра.
#### Вопрос 4: Можно ли провести форензику контейнера Docker?
Да, но с особенностями. Данные контейнера доступны через overlay-файловую систему хоста: ls /var/lib/docker/overlay2/ — слои файловых систем контейнеров. Для анализа: docker export CONTAINER_ID > container_filesystem.tar, затем анализ tar-архива стандартными инструментами. Логи контейнера: docker logs CONTAINER_ID или напрямую из /var/lib/docker/containers/CONTAINER_ID/CONTAINER_ID-json.log. Memory forensics: снимать дамп хоста — контейнеры не имеют изолированной памяти от хоста ядра.
#### Вопрос 5: Как обнаружить LD_PRELOAD руткит?
LD_PRELOAD руткиты перехватывают системные вызовы, загружая свою библиотеку до libc. Методы обнаружения: проверить /etc/ld.so.preload — должен быть пустым; проверить переменную окружения у каждого процесса: cat /proc/*/environ 2>/dev/null | tr '\0' '\n' | grep LD_PRELOAD; сравнить вывод ps с /proc/ — несоответствие указывает на перехват; использовать Volatility linux.check_modules для обнаружения скрытых модулей; загрузить систему с Live USB и анализировать без запуска ОС.
#### Вопрос 6: Какие логи наиболее важны при расследовании взлома Linux?
Приоритеты: /var/log/auth.log (или /var/log/secure) — все попытки аутентификации, sudo, su; /var/log/wtmp через команду last — история входов в систему; /var/log/btmp через lastb — неудачные попытки входа; ~/.bash_history всех пользователей — выполненные команды; /var/log/cron — выполнение crontab задач; /var/log/syslog — общие системные события; systemd journal через journalctl -xe — подробные события systemd; /var/log/apt/history.log или /var/log/yum.log — установка пакетов.
#### Вопрос 7: Как устроены временны́е метки в ext4 и что они означают?
ext4 хранит четыре временны́е метки для каждого inode: atime (access time) — время последнего доступа к содержимому файла, обновляется при чтении; mtime (modification time) — время изменения содержимого файла; ctime (change time) — время изменения метаданных inode (включая изменение прав, владельца, ссылок); crtime (creation time) — время создания файла, только ext4. Для форензики важно: злоумышленники могут изменить atime, mtime, ctime через команду touch, но crtime изменить стандартными средствами нельзя — это защищённая метка. Смотрите crtime через debugfs или istat из TSK.
#### Вопрос 8: Что такое «суперблок» и зачем он нужен в форензике?
Суперблок ext4 — структура данных в начале файловой системы, содержащая метаданные: размер файловой системы, количество блоков и inode, время последнего монтирования, время последней проверки (fsck), UUID файловой системы, флаги состояния. Форензическое значение: последнее время монтирования помогает установить, когда диск использовался; UUID идентифицирует конкретный раздел независимо от имени устройства; флаг errors может указывать на проблемы; счётчик монтирований показывает активность. Просмотр: dumpe2fs /dev/sda1 | grep -E "Last mount|Mount count|UUID|Last write".
Заключение: Linux-форензика в 2026 году
Linux-форензика в 2026 году — это зрелая дисциплина с богатым инструментарием, покрывающим все аспекты цифрового расследования: от создания криминалистически корректных образов и анализа файловой системы до глубокого исследования памяти и автоматизированного triage в масштабах предприятия. Открытость Linux как платформы превратила его в идеальную среду для развития форензических инструментов — большинство из которых распространяются свободно и имеют открытый исходный код.
#### Ключевые выводы
Арсенал инструментов делится на несколько функциональных групп, каждая из которых закрывает свою область: снятие образов (dd, dcfldd, Guymager, LiME), анализ файловой системы (The Sleuth Kit, Autopsy), анализ памяти (Volatility 3, avml), хронология (Plaso, log2timeline), сетевая форензика (Wireshark, Zeek), восстановление данных (extundelete, PhotoRec, Scalpel), обнаружение малвари (YARA, rkhunter), корпоративное реагирование (Velociraptor, GRR).
Ни один инструмент не является универсальным решением. Профессиональный специалист комбинирует несколько инструментов и перекрёстно верифицирует результаты — данные из Volatility сопоставляются с данными из TSK, результаты triage-скриптов проверяются через ручной анализ.
Порядок волатильности — не рекомендация, а обязательный принцип. Игнорирование этого принципа и начало работы с файловой системой вместо памяти означает безвозвратную потерю наиболее ценных данных.
#### Тренды 2026 года
Контейнерная форензика становится самостоятельной дисциплиной. По мере роста доли контейнерных рабочих нагрузок растёт и специализация: инструменты для анализа Docker, Kubernetes, OCI-контейнеров.
Облачная форензика интегрируется с традиционными методами. AWS CloudTrail, Azure Monitor, GCP Cloud Audit Logs становятся обязательными источниками при расследовании инцидентов в облачных средах.
eBPF открывает новые возможности для forensic collection. Программы eBPF позволяют собирать артефакты с минимальным воздействием на систему — без загрузки модулей ядра и без существенного изменения системного состояния.
AI-ассистированный анализ. Инструменты типа Velociraptor начинают интегрировать ML-модели для автоматической классификации аномалий и приоритизации событий в хронологии.