Некоторые приёмы форензики под Linux
Друзья, сегодня разберём некоторые инструменты для сбора артефактов со скомпрометированных Linux-систем и создадим дампы (образы) жёсткого диска, оперативной памяти, сетевого стека. В ход пойдут только самые известные, проверенные и простые для использования утилиты.
Ну, что погнали!
Общий чек-лист проверки
Собственно говоря, для поиска и сбора криминалистических доказательств мы для начала создадим образы (дампы) следующих объектов наших систем: — оперативная память (системные и пользовательские процессы, демоны, возможно, запущенный вредоносный код и т. д.); — жёсткий диск (посекторная копия HDD, включающая уделённые партиции, неразмеченные области диска, потёртые файлы, скрытые файлы и директории и т. д.); — сетевой стек (поднятые коннекты, открытые порты, «неизвестные» сервисы на портах, паразитный трафик).
В рамках самой операционной системы мы будем обращать особое внимание в первую очередь на: — список пользователей, группы, привилегии; — запущенные от имени root процессы; — задачи, запускаемые по расписанию (cron jobs); — файлы с установленным битом SUID и SGID; — состав файла /etc/sudoers; — скрытые файлы и директории; — файлы, открытые на чтение в системе; — сетевые интерфейсы, соединения, порты, таблицу маршрутизации; — логи iptables, fail2ban (Reports, Alarms, Alerts); — конфигурацию /etc/ssh/sshd_config; — логи демона Syslog на типичные алерты; — состояние SELinux; — список загруженных модулей ядра.
Снимаем образ HDD-диска
Посекторную копию жёсткого диска можно вполне снять, не прибегая к дополнительным утилитам. Мы будем использовать старую и проверенную в работе нативную тулзу dd. Она позволяет созвать точные копии "bit-by-bit" целых дисков, отдельных партиций и даже просто файлов.
Но первоначально запросим у системы полный список партиций с помощью команды fdisk:
fdisk -l
Базовый синтаксис вызова dd выглядит так:
dd if=<source> of=<destination> bs=<byte size>
К примеру, для создания копии HDD с размером кластера 512 байт:
dd if=/dev/sda1 of=/dev/sdb1 bs=512
В процессе копирования HDD могут быть повреждённые сектора. Чтобы программа не запнулась об них, остановив свою работу, необходимо добавить дополнительный ключ noerror:
dd if=/dev/sda1 of=/dev/sdb1 bs=512 noerror
Однако мировые best practices рекомендуют нам использовать усовершенствованный вариант предыдущей утилиты под названием dcfldd. Эта тулза разработана в компьютерной судебной лаборатории DCFL (Defense Computer Forensics Laboratory) и имеет ряд опций, специально заточенных для снятия образа в целях криминалистического анализа. Так, под капотом у dcfldd имеется встроенная возможность хеширования (hashing) копируемых данных и функция проверки целостности данных (аутентификации). Помимо этого, отображается прогресс создания дампа, действия заносятся в лог-файл, а контрольные суммы (MD5) сохраняются в отдельный файл.
Пример выполнения команды:
dcfldd if=/dev/sda1 hash=md5 of=/media/forensic_disk_image.dd bs=512 noerror
Делаем дамп оперативной памяти (RAM)
Следующим шагом после снятия дампа HDD мы приступаем к формированию образа оперативной памяти. И, как в случае с жёстким диском, существует несколько способов решить эту задачу. Среди вариантов можно выбрать использование нативного модуля ядра с названием Linux Memory Extractor (LiME), скрипт Linux Memory Grabber, который не требует установки и который можно запускать, к примеру, с USB-носителя, и связку утилит lmap и pmem, являющихся частью пакета Rekall, которые я буду дальше использовать.
Пара слов о Rekall. Это отдельная ветка развития известного фреймворка Volatility Framework, написанная на Python и заточенная под особенности сбора данных из под LiveCD форензик-дистрибутивов.
Итак, чтобы подготовить тулзу к работе, переходим в каталог ../rekall/tools/linux/:
cd rekall/tools/linux/ make
Грузим драйвер ядра pmem.ko в оперативную память:
sudo insmod pmem.ko
Проверяем инициализацию драйвера следующей командой:
sudo lsmod
После этого драйвер создаёт файл-контейнер под наш будущий образ RAM:
/dev/pmem
Теперь с помощью всё той же утилиты dd создаём сам образ оперативной памяти системы:
dd if=/dev/pmem of=forensic_RAM_image.raw
Ну и после завершения работы выгружаем драйвер:
rmmod pmem
Ну, вот дело сделано!
Но это ещё не всё, во второй части статьи поговорим про сетевой трафик, смонтируем образы в исследовательскую систему и выполним анализ образа жёсткого диска. Следите за новостями!