Некоторые приемы форензики под Linux

Некоторые приемы форензики под Linux

https://t.me/w2hack

Into

Друзья, сегодня у нас в лаборатории разбор некоторых инструментов для сбора артефактов с скомпрометированных 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

Ну, вот дело сделано!

Сетевой трафик на анализ

Касательно снятия дампа сетевого трафика в ходу несколько утилит, прежде всего это консольная tcpdump, классика жанраWireshark и опенсорсный фреймворк XPLICO, хотя последний больше используется все таки для последующего анализа данных чем для их первоначального сбора.

Начнем с tcpdump, базовый вызов команды выглядит следующим образом:

tcpdump <опции>  <фильтр>

А вот некоторые наиболее важные опции:

 -i интерфейс // задает интерфейс, с которого необходимо анализировать трафик 

 -n // отключает преобразование IP в доменные имена

 -e // включает вывод данных канального уровня (например, MAC-адреса).

 -v // Вывод дополнительной информации (TTL, опции IP).

 -w имя_файла // задает имя файла, в который сохранять собранную информацию (дамп)

 -r имя_файла // чтение (загрузка) дампа из заданного файла

 -q // Переводит tcpdump в "бесшумный режим", в котором пакет анализируется на транспортном уровне (протоколы TCP, UDP, ICMP), а не на сетевом (протокол IP).

Дампим весь входящий трафик из сети Интернет на наш сервер:

tcpdump -s 0 -i eth0 -n -nn -ttt dst host <ip-адрес нашего хоста> -w forensic_cap.pcap

Пример создания дампа сетевого трафика по протоколам ftp или ssh на интерфейсе eth0:

tcpdump -s 0 port ftp or ssh -i eth0 -w forensic_cap.pcap

Дампим вообще весь что есть в сети на интерфейсе eth0:

tcpdump -w forensic_cap -i eth0

Еде одна очень весьма годная утилита для наших целей это TCPflow. По сути более продвинутый вариант tcpdump поддерживающий еще большее количество параметров фильтра и возможность восстанавливать "сломанные" пакеты.

Если tcpflow по умолчанию нет в системе, то для начала устанавливаем ее:

 apt install tcpflow   // для  Debian-based дистрибутивов
 yum install tcpflow  // для  RedHat-based дистрибутивов

Далее базовый синтаксис команды выглядит так:

tcpflow [опции] [выражение] [хост]

А вот описание опций:

 -c: только консольная печать (не создавать файлы)

 -d: уровень отладки; по умолчанию 1

 -e: выводить каждый поток чередующимися цветами (синий = клиент-сервер; красный = сервер-клиент; зеленый = неизвестно)

 -i: сетевой интерфейс для прослушивания

 -r: чтение пакетов из выходного файла tcpdump

 -s: удалить непечатаемые символы (изменить на «.»)

Пример сбора данных из внешней сети до нашего целевого сервера:

tcpflow -ce host  <ip-адрес нашего хоста>

Собираем весь HTTP-трафик в нашей сети:

tcpflow -ce port 80

Дамп данных сетевого потока в локальную папку:

mkdir tcpflowdata  
cd tcpflowdata  
tcpflow host <ip-адрес целевой машины>

Теперь в директории /tcpflowdata будут складываться файлы с содержанием сетевых подключений. Все, что потом нам останется сделать подкинуть их для анализа в WireSharkXPLICO или какой-либо другой, к примеру, облачный парсер.

Монтируем образа в исследовательскую систему

Создали мы образа содержимого жестких дисков и оперативной памяти. Теперь нам нужно их смонтировать на нашей исследовательской машине для начала изучения и поиска артефактов. С образом HDD все просто, полученный в результате работыdd или dcfldd выходной файл можно легко подмонтировать как новое устройство.

Общий синтаксис команды mount будет выглядеть следующий образом:

mount -o,ro,noatime,loop,offset= <смещение по началу партации в байтах> <имя файла образа> <точка монтирования>

К примеру, что бы смонтировать ранее снятый дамп HDD нужно выполнить команду:

mount -o,ro,loop forensic_disk_image.dd /mnt/temp/

Образ RAM будем открывать с помощью Volatility Framework, но об этом будет написано чуть позже в разделе Поиск Артефактов.

Полученный pcap файл содержащий информацию о сетевых подключениях, как уже упоминал выше, можно вручную открывать вWireshark или XPLICO. Но я предпочитаю пользоваться сервисами с полуавтоматическим парсингом, как то PacketTotalPcap Analyzer или платный CloudShark.

Анализ образа жесткого диска

Поиск файлов с установленными битами SUID and SGID

find / -perm -4000 –type f -xdev -print > suid.txt
find / -perm -2000 –type f -xdev -print > sgid.txt

Список последних модифицированных/открытых/созданных файлов в системе

find / -mtime 5 –xdev > modified.txt
find / -atime 5 –xdev > accessed.txt
find / -ctime 5 –xdev > created.txt

Вывод списка модифицированных файлов после первичной инсталляции системы измененные менеджером пакетов

Команда для RPM-based дистрибутивов:

rpm -V -a

И команда для Debian-based дистров с помощью debsums:

debsums -ca

Поиск и просмотр скрытых файлов и директорий

find . –type f –exec ls –i {} \; | sort –n

Ручной просмотр заданий Cron Jobs

less /etc/cron.hourly
less /etc/cron.daily
less /etc/cron.weekly
less /etc/cron.monthly

На это все! Всем удачи! Хорошего настроения!

Следите на обновлениями на нашем w2hack канале!

Report Page