Введение
Данная публикация - перевод статьи - Linux Incident Response от Jeenali Kothari. Статья о том, какие действия может выполнить сотрудник кибербезопасности при подозрении на компрометации системы на базе Linux.
Что такое реагирование на инцидент
Реагирование на инцидент можно определить как план действий, который предпринимается тогда, когда происходит инцидент (или событие с подозрением на инцидент) кибербезопасности. Сотрудники кибербезопасности должны быть в курсе того, что должно присутствовать в системе, а чего там быть недолжно.
Данные, которые могут помочь разобраться с инцидентом кибербезопасности:
запущенные процессы;
содержимое физической памяти;
информация об имени хоста, IP-адресе, операционной системе;
информация о системных службах;
идентификация всех известных и неизвестных пользователей, вошедших в систему;
сетевые подключения, открытые порты и любая имеющаяся в системе сетевая активность;
анализ присутствующих в системе файлов.
Учетные записи пользователей
Для реагирования на инцидент очень важно расследовать активность учетных записей пользователей. Нужно определить перечень вошедших в систему пользователей, существующих пользователей, обычных или нетиповых логинов, наличие неудачных попыток входа в систему, разрешения, доступ со стороны sudo и т.д.
Чтобы определить, есть ли подозрительные учетные записи в системе Linux:
cat /etc/passwd
Параметр ’Setuid’ в Linux - это уникальное разрешение на доступ к файлам. Таким образом, в системе Linux, когда пользователь хочет сменить пароль, он может запустить команду "passwd".
passwd -S [User_Name]
Grep используется для поиска в обычном тексте строк, соответствующих регулярному выражению. :0: используется для отображения файлов с идентификатором ‘UID 0’ в файле /etc/passwd.
grep :0: /etc/passwd
Чтобы определить, создал ли злоумышленник какого-либо временного пользователя для выполнения атаки, введите:
find / -nouser -print
Файл /etc/shadow содержит зашифрованный пароль, подробную информацию о паролях и доступен только пользователям root.
cat /etc/shadow
В файле группы отображается информация о группах, используемых пользователем. Чтобы просмотреть подробную информацию, введите
cat /etc/group
Если вы хотите просмотреть информацию о правах пользователя и группы, которая будет отображаться, можно просмотреть файл/ etc/sudoers
cat /etc/sudoers
Записи в журнале событий
Чтобы просмотреть информацию о последнем входе в систему определенного пользователя или всех пользователей в системе Linux, вы можете ввести:
lastlog
Чтобы идентифицировать неуспешные попытки аутентификации в системе, вы можете ввести
journalctl -u ssh.service | grep Failed
Чтобы просмотреть историю введенных пользователем команд, вы можете ввести:
history | less
Системные ресурсы
Данные системного журнала могут вам рассказать о времени непрерывной работы системы, объеме памяти и утилизации системы и т.д. чтобы узнать, как долго работал сервер, текущее время в системе, сколько пользователей в данный момент вошли в систему.
uptime
Чтобы просмотреть использование памяти системой в Linux, используемую физическую память и swap память, а также буферы, используемые ядром, вы можете ввести
free
Чтобы проверить подробную информацию об оперативной памяти, доступном пространстве в памяти, буферах и подкачке в системе, вы можете ввести:
cat /proc/meminfo
Чтобы проверить наличие подключений в вашей системе, вы можете ввести
cat /proc/mounts
Процессы
Чтобы получить динамическое представление обо всех процессах, запущенных в системе Linux, в режиме реального времени, сводную информацию о системе, а также список процессов и их идентификационные номера или потоки, управляемые ядром Linux, вы можете воспользоваться
top
Чтобы увидеть состояние процесса в вашей системе Linux и текущие запущенные процессы, а также PID. для выявления нелегитимных процессов, которые могут указывать на любую вредоносную активность в системе Linux, вы можете использовать
ps aux
Чтобы отобразить более подробную информацию о конкретном процессе, вы можете использовать
lsof –p [pid]
Службы
При анализе служб важно посмотреть статус служб, cron, передачу файлов, разрешение доменных имен, брандмауэры и т.д. Чтобы найти какие-либо отклонения от нормальной работы служб, вы можете использовать
service --status-all
Чтобы найти запланированные задачи, вы можете использовать
cat /etc/crontab
Чтобы устранить проблемы с конфигурацией DNS вы можете использовать
more /etc/resolv.conf
Чтобы проверить файл, который преобразует имена хостов или доменов в IP-адреса, вы можете использовать
more /etc/hosts
Для проверки и управления фильтрацией пакетов IPv4 и NAT в системах Linux вы можете использовать iptables и различные команды, такие как:
iptables -L -n
Файлы
Иерархия файлов Linux
Чтобы определить файлы слишком большого размера в вашей системе и их права доступа, вы можете использовать:
find /home/ -type f -size +512k -exec ls -lh {} \;
Каждый раз, когда выполняется какая-либо команда, в которой установлен SUID, ее эффективный UID становится владельцем этого файла. Если вы хотите найти все те файлы, которые содержат SUID, то их можно получить, введя команду:
find /etc/ -readable -type f 2>/dev/null
Если вы хотите увидеть аномальный файл, который присутствует в системе в течение 2 дней, вы можете использовать команду
find / -mtime -2 -ls
Сетевые настройки
Крайне важно определить общую картину состояния системной сети и ее работоспособности. Для получения информации о сетевой активности вы можете использовать различные команды. Чтобы просмотреть свои сетевые интерфейсы в системе, вы можете использовать:
ifconfig
Чтобы перечислить все процессы, которые прослушивают порты с их PID, вы можете использовать
lsof -i
Чтобы отобразить все прослушивающие порты в сети, используйте
netstat -nap
Таблица ARP, также известная как кэш ARP, является временным хранилищем для сопоставлений IP-адресов с MAC-адресами в системе Linux. Протокол разрешения адресов (ARP) — это протокол связи, используемый для сопоставления IP-адреса с физическим (MAC) адресом в локальной сети. Он работает на канальном уровне модели OSI, позволяя устройствам в одном сегменте сети обнаруживать друг друга и эффективно взаимодействовать.
Чтобы отобразить системный ARP-кэш, вы можете ввести
arp -a
Когда вы запускаете программу из терминала или скрипта, то обычно пишете только имя файла программы. Однако, ОС Linux спроектирована так, что исполняемые и связанные с ними файлы программ распределяются по различным специализированным каталогам. Например, библиотеки устанавливаются в /lib или /usr/lib, конфигурационные файлы в /etc, а исполняемые файлы в /sbin/, /usr/bin или /bin.
Таких местоположений несколько. Откуда операционная система знает где искать требуемую программу или её компонент? Всё просто — для этого используется переменная PATH. Эта переменная позволяет существенно сократить длину набираемых команд в терминале или в скрипте, освобождая от необходимости каждый раз указывать полные пути к требуемым файлам. В этой статье мы разберёмся зачем нужна переменная PATH Linux, а также как добавить к её значению имена своих пользовательских каталогов.
Для того, чтобы посмотреть содержимое переменной PATH в Linux, выполните в терминале команду:
echo $PATH
Комментарии (6)
jsirex
03.10.2024 09:58+1может, если случилось страшное, сделать что-то типа mount -o remount,ro / или echo 1> /sys/block/sda/ro или ещё что-то подобное, чтоб не становилось хуже. потом кильнуть все подозрительные и ненужные процессы. И уже заниматься исследованием. ну и такому серверу больше доверять нельзя, его нужно переустановить с нуля в любом случае.
def-hub-community Автор
03.10.2024 09:58Добрый день! полезная рекомендация. Однако есть нюанс с точки зрения реагирования на киберинциденты - важно проанализировать всю имеющуюся фактуру на скомпрометированных серверах перед их вайпом, для того чтобы получить объективную информацию о реализованных механиках и задействованных в атаке компонентах инфраструктуры. Хорошей практикой является изоляция сервера на уровне сети, без отключения или вайпа сервера. Хотя на практике, мы обычно настраиваем на авто-респонс EDR (агент детектирования признаком компрометации - endpoint detection and response) на изоляцию хоста с использованием host-based firewall (в случае с Linux-based это, например, iptables ACL).
Alextan
03.10.2024 09:58+2Идея для статьи хорошая, вот только по теме в статье ничего не увидел толком. Если уж и смотреть пользователей новых, то по времени создания пользователя. Зачем шедоу смотреть? Чтобы найти и попытаться подобрать пароль на основе хэш нового неизвестного пользователя? history less вам покажет ваши же команды. Если хотите команды другого пользователя, то в домашнем каталоге этого пользователя смотрите файл .bash_history. Команды ifconfig вообще нет в современных дистрибутивах - надо ставить net-tools, лучше уж привести пример на команде ip. И зачем искать файлы большого размера? Пэйлоды злоумышленников обычно наоборот маленькие. Возможен конечно вариант, когда человек вредоносный фильмец или игру загрузил, но это скорее не про Линукс, да и это может быть любой другой фал любого размера. Есть IOC-сканер Loki - я бы с него начал проверку на следы компрометации. Было бы интересно посмотреть на реальный инцидент с подобными командами.
def-hub-community Автор
Велкам к нам в тг @defhubcommunity там много интересного и полезного про кибербезопасность.
atomlib