Выявление индикаторов вредоносного ПО в Linux

CompTIABeginner
Практиковаться сейчас

Введение

В этой лабораторной работе вы изучите основные методы выявления потенциальных индикаторов вредоносного ПО в системе Linux. В ходе серии практических упражнений вы будете использовать стандартные утилиты командной строки для исследования распространенных признаков компрометации, приобретая практические навыки в мониторинге системы и базовом криминалистическом анализе.

Вы начнете с наблюдения за подозрительной активностью процессов, научившись выявлять необычные всплески использования ЦП и памяти, которые могут указывать на вредоносный процесс. Далее вы сосредоточитесь на файловой системе, чтобы обнаружить неожиданные создания и модификации файлов, что является ключевым индикатором несанкционированной деятельности. Наконец, вы попрактикуетесь в анализе системных журналов для поиска аномальных записей, которые могут указывать на нарушение безопасности.

Наблюдение за подозрительной активностью процессов при всплесках ЦП и памяти

На этом этапе вы научитесь использовать стандартные утилиты Linux для мониторинга системных процессов на предмет необычных пиков использования ЦП и памяти. Внезапное высокое потребление ресурсов является распространенным признаком вредоносного программного обеспечения (malware), скомпрометированного процесса или некорректно работающего приложения. Мы будем использовать команду top для мониторинга в реальном времени и инструмент stress для безопасной симуляции сценария высокой нагрузки. Все команды будут выполняться из вашего каталога ~/project.

Сначала вам необходимо установить утилиту stress, так как она не входит в базовую систему. Мы будем использовать менеджер пакетов apt-get. Первая команда обновляет список ваших пакетов, а вторая устанавливает stress.

sudo apt-get update
sudo apt-get install stress -y

После завершения установки давайте установим базовый уровень, просмотрев текущие процессы в системе. Команда top предоставляет динамическое представление работающей системы в реальном времени.

top

Вы увидите полноэкранный интерфейс, который постоянно обновляется. Обратите внимание на столбцы %CPU (использование ЦП) и %MEM (использование памяти). При нормальных условиях эти значения должны быть относительно низкими для большинства процессов. Нажмите клавишу q, чтобы выйти из top и вернуться в командную строку.

top - 16:20:42 up 10 min,  1 user,  load average: 0.00, 0.01, 0.00
Tasks: 100 total,   1 running,  99 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   1987.2 total,    845.5 free,    450.1 used,    691.6 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   1355.2 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
      1 root      20   0  169404  13120   8484 S   0.0   0.6   0:01.55 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kthreadd
...

Теперь давайте симулируем подозрительный процесс, который потребляет большое количество ЦП. Мы будем использовать stress для запуска одного рабочего, который будет выполнять ресурсоемкие вычисления ЦП в течение 60 секунд. Символ & в конце запускает команду в фоновом режиме, позволяя вам продолжать использовать терминал.

stress --cpu 1 --timeout 60 &

Вы увидите идентификатор процесса (PID) для фоновой задачи. Теперь быстро снова запустите top, чтобы наблюдать эффект.

top

На этот раз вы должны увидеть процесс stress в верхней части списка или близко к ней, с значением %CPU, близким к 100.0. Это именно то, что вы должны искать при поиске процесса, который чрезмерно нагружает ЦП. Через 60 секунд процесс stress автоматически завершится. Нажмите q, чтобы выйти из top.

Далее давайте симулируем процесс, который потребляет большое количество памяти. Эта команда запустит один рабочий, который выделит 256 Мегабайт памяти и будет удерживать ее в течение 60 секунд.

stress --vm 1 --vm-bytes 256M --timeout 60 &

Снова немедленно запустите top, чтобы увидеть результат.

top

В выводе top найдите процесс stress. На этот раз его %CPU будет низким, но значение %MEM будет значительно выше, чем у других процессов, демонстрируя утечку памяти или ресурсоемкую атаку на память. Этот метод помогает выявить аномальное потребление ресурсов, которое требует дальнейшего расследования. Нажмите q, чтобы выйти.

Обнаружение неожиданных созданий и модификаций файлов

На этом этапе вы научитесь обнаруживать подозрительную активность файловой системы, такую как неожиданное создание или модификация файлов. Злоумышленники часто создают или изменяют файлы для обеспечения постоянства, хранения вредоносных полезных нагрузок или вмешательства в системные конфигурации. Мы будем использовать два мощных инструмента командной строки: find для поиска файлов по времени их модификации и inotifywait для мониторинга событий в каталогах в реальном времени. Все операции будут проводиться в вашем каталоге ~/project.

Сначала давайте используем команду find для поиска недавно измененных файлов. Это полезно для периодических проверок безопасности. Создадим пример конфигурационного файла для мониторинга.

echo "SERVER_IP=192.168.1.1" > ~/project/app.conf

Команда find может искать файлы по различным критериям. Мы будем использовать флаг -mmin, который означает "modified minutes ago" (изменено минут назад). Следующая команда найдет все файлы в текущем каталоге (.), которые были изменены за последние 5 минут.

find . -mmin -5

Вывод будет содержать список только что созданного вами файла.

./app.conf

Теперь давайте симулируем модификацию этого конфигурационного файла злоумышленником.

echo "MALICIOUS_PAYLOAD=..." >> ~/project/app.conf

Если вы снова запустите команду find, она снова покажет app.conf, поскольку время его модификации было обновлено. Это простой способ обнаружить недавние изменения. Теперь давайте симулируем создание злоумышленником нового файла, что является распространенной тактикой.

touch ~/project/hidden_script.sh

Запустите команду find еще раз.

find . -mmin -5

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

./app.conf
./hidden_script.sh

Хотя find полезна для аудита, она не предоставляет оповещения в реальном времени. Для этого мы можем использовать inotify-tools. Сначала необходимо установить пакет.

sudo apt-get update
sudo apt-get install -y inotify-tools

Основная команда — inotifywait, которая может отслеживать файл или каталог на предмет определенных событий. Давайте запустим ее в режиме мониторинга (-m) для нашего каталога ~/project. Символ & запустит ее как фоновый процесс, чтобы вы могли продолжать использовать свой терминал.

inotifywait -m ~/project &

Команда теперь молчаливо отслеживает изменения. Давайте выполним несколько действий, чтобы вызвать ее. Сначала создадим файл.

echo "new file" > ~/project/new_file.txt

Вы немедленно увидите вывод от inotifywait, сообщающий о событии CREATE.

/home/labex/project/ CREATE new_file.txt

Теперь изменим файл.

echo "modified" >> ~/project/new_file.txt

Инструмент сообщает о событии MODIFY.

/home/labex/project/ MODIFY new_file.txt

Наконец, удалим файл.

rm ~/project/new_file.txt

Вы увидите событие DELETE. Эта обратная связь в реальном времени бесценна для Центра операций безопасности (SOC) или автоматизированной системы обнаружения вторжений.

/home/labex/project/ DELETE new_file.txt

Чтобы остановить фоновый процесс мониторинга, вы можете использовать команду pkill.

pkill inotifywait

Вы успешно использовали как find, так и inotifywait для обнаружения изменений в файловой системе.

Анализ системных журналов на наличие аномальных записей

На этом этапе вы научитесь анализировать системные журналы для поиска свидетельств подозрительной активности. Системные журналы — это записи событий, происходящих в системе, и они являются критически важным источником информации для мониторинга безопасности и криминалистического анализа. Мы сосредоточимся на журналах аутентификации, которые отслеживают входы пользователей и повышение привилегий, и будем использовать стандартные инструменты Linux, такие как grep, tail и journalctl, для поиска аномальных записей.

Большинство системных журналов в системе Linux хранятся в каталоге /var/log. Одним из наиболее важных для безопасности является /var/log/auth.log, который записывает события, связанные с аутентификацией, включая входы по SSH и использование команд sudo. Давайте начнем с просмотра последних нескольких строк этого файла с помощью команды tail. Вам потребуется sudo, поскольку этот файл защищен.

sudo tail /var/log/auth.log

Вы увидите серию записей с временными метками. Формат обычно включает дату, время, имя хоста, процесс, сгенерировавший журнал, и сообщение о событии.

Jul 22 10:30:01 labex-vm sudo:    labex : TTY=pts/0 ; PWD=/home/labex/project ; USER=root ; COMMAND=/usr/bin/tail /var/log/auth.log
Jul 22 10:30:01 labex-vm sudo: pam_unix(sudo:session): session opened for user root(uid=0) by (uid=1000)
Jul 22 10:30:01 labex-vm sudo: pam_unix(sudo:session): session closed for user root

Теперь давайте симулируем распространенное подозрительное событие: неудачную попытку входа. Злоумышленники часто пытаются угадать пароли для действительных или распространенных имен пользователей. Мы можем симулировать это, попытавшись подключиться по SSH к нашей собственной машине (localhost) с несуществующим именем пользователя, например baduser.

ssh baduser@localhost

Система запросит у вас пароль (вы можете использовать labex в качестве пароля). Поскольку пользователя не существует, любой пароль будет неудачным. Просто нажмите Ctrl+C, чтобы отменить запрос пароля и вернуться в терминал. Попытка подключения не удастся, но она будет занесена в журнал.

Теперь давайте найдем доказательства. Мы можем использовать команду grep для фильтрации файла auth.log по строкам, содержащим слово "Failed". Это быстро выделяет неудачные события.

sudo grep "Failed" /var/log/auth.log

Вывод теперь будет четко показывать запись журнала для нашей неудачной попытки входа по SSH, что является сильным индикатором потенциальной попытки вторжения.

Jul 22 10:35:15 labex-vm sshd[12345]: Failed password for invalid user baduser from 127.0.0.1 port 54321 ssh2

Современные системы Linux, использующие systemd, также имеют централизованную систему ведения журналов, управляемую journald. Команда journalctl — это мощный инструмент для запроса этих журналов. Давайте используем ее для поиска того же события неудачного входа, выполнив поиск сообщений от процесса sshd. Обратите внимание, что вы должны использовать sudo для просмотра системных журналов.

sudo journalctl | grep sshd

Прокрутите вывод (используя клавиши со стрелками, и нажмите q, чтобы выйти), и вы найдете ту же запись "Failed password". Чтобы сделать это еще проще, вы можете фильтровать по приоритету сообщений. Давайте попросим journalctl показать только записи с приоритетом "error" (err) или выше для службы sshd.

sudo journalctl -p err | grep sshd

Эта команда предоставляет гораздо более краткий обзор только ошибок, что делает ее очень эффективной для выявления проблем.

-- Logs begin at ... --
Jul 22 10:35:15 labex-vm sshd[12345]: Failed password for invalid user baduser from 127.0.0.1 port 54321 ssh2
-- End of logs --

Наконец, вы также можете вручную вставлять сообщения в журналы с помощью команды logger. Это полезно для пользовательских скриптов, сообщающих о событиях безопасности. Давайте создадим пользовательское оповещение.

logger "SECURITY-ALERT: Unauthorized file access detected in /etc"

Теперь найдите это конкретное оповещение в системных журналах.

sudo grep "SECURITY-ALERT" /var/log/syslog

Вы увидите свое пользовательское сообщение, демонстрирующее, как вы можете интегрировать собственный мониторинг с системой ведения журналов.

Jul 22 10:40:00 labex-vm labex: SECURITY-ALERT: Unauthorized file access detected in /etc

Теперь вы изучили основы навигации по системным журналам для поиска свидетельств аномальной и потенциально вредоносной активности.

Резюме

В этой лабораторной работе вы освоили основные методы выявления индикаторов вредоносного ПО в системе Linux. Вы научились наблюдать за подозрительной активностью процессов, используя команду top для мониторинга аномальных всплесков использования ЦП и памяти. Чтобы понять, как это выглядит в реальном сценарии, вы использовали утилиту stress для имитации процесса с высокой нагрузкой и сравнили его потребление ресурсов с нормальным базовым уровнем системы.

Лабораторная работа также охватила методы обнаружения неожиданного создания и модификации файлов, которые являются распространенными признаками скомпрометированной системы. Наконец, вы научились анализировать системные журналы на предмет аномальных записей — критически важный навык для поиска доказательств несанкционированного доступа, неправильных конфигураций или других событий, связанных с безопасностью.