Форензика в Linux. Софт, описание софта, примеры и приёмы.
Social EngineeringСегодня у нас в лаборатории разбор некоторых инструментов для сбора артефактов с скомпрометированных 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 будут складываться файлы с содержанием сетевых подключений. Все, что потом нам останется сделать подкинуть их для анализа в WireShark, XPLICO или какой-либо другой, к примеру, облачный парсер.
Монтируем образа в исследовательскую систему.
Создали мы образа содержимого жестких дисков и оперативной памяти. Теперь нам нужно их смонтировать на нашей исследовательской машине для начала изучения и поиска артефактов. С образом 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. Но я предпочитаю пользоваться сервисами с полуавтоматическим парсингом, как то PacketTotal, Pcap 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
Social Engineering - Канал посвященный психологии, социальной инженерии, профайлингу, НЛП, Хакингу, Анонимности и безопасности в сети интернет, Даркнету и все что с ним связано. Добро пожаловать ;-)
S.E.Book - Литература социального инженера.
@Social_Engineering_bot - Бот обратной связи.
- Разведка в Active Directory. Получаем пользовательские данные в сетях Windows без привилегий.
- OSINT. Определение местоположения по фотографии. Глобальные и местные индикаторы.
- Всё о прокси: виды, как пользоваться, как проверить качество прокси.
- OSINT. ReconSpider - продвинутая платформа для сканирования IP-адресов.
- Как приручить руткит. Предотвращаем загрузку вредоносных модулей в Linux.
- Атака на устройства в локальной сети через уязвимый роутер.