Основными сущностями, при работе с операционной системой являются процессы и потоки. Именно они определяют какой будет контекст выполнения у ПО и какие действия нужно будет произвести. В данном материале мы подробно ответим на вопросы.
Что такое процесс и поток? Зачем в ОС необходима система инициализации, такая как systemd? Какие можно использовать инструменты для работы c процессами? И как нарушители могут их эксплуатировать?
Что такое процесс и поток в Linux?
Процесс это абстрактная, пассивная сущность или же объект, который живет в ядре операционной системы и владеет атрибутами необходимыми для работы ПО. В основном это поля такие как:
- PID – id процесса;
- PPID – id родительского процесса;
- CMD – название запущенного ПО;
- Current Working Directory – рабочая директория ПО;
- Signals – сигналы, которые обрабатывает ПО.
Когда пользователь запускает утилиту, оболочка, в которой он находится, отправляет запрос на ядро, переходя из пользовательского пространства в пространство ядра с помощью системного вызова.
Например, для записи данных в новый файл оболочка вызывает соответствующий системный вызов. После того как ядро получает этот вызов, оно обрабатывает его и определяет, какому процессу он принадлежит и запускает соответствующие действия на выполнения или же потоки. Потоки являются активными сущностями процесса и занимаются выполнением инструкций переданных системным вызовом.
Какой цикл рождения у процессов в Linux?
При нехватке собственных мощностей можно воспользоваться облачными серверами от Serverspace, для этого перейдем к созданию сервера, на любой из двух платформ vStack cloud или же VMware cloud. Нажмем на кнопку Создать сервер и выберем конфигурацию, подходящую под наши задачи, затем нажмем кнопку Создать:
Важно понять принцип цикла рождения процессов в Linux. Всего существует один процесс, который запускается ядром, при загрузке – systemd. Остальные запускаются уже в формате родительского-дочернего процесса. Это значит, что при инициализации ПО systemd создает системный вызов fork(2), который буквально, говорит ядру, о том что нужно создать копию systemd. С такими же ресурсами, как и у него, поэтому пока память выделенная на работу остается такой же. После создания новому процессу присваивается PID и PPID или же id родительского процесса.
Чтобы из копии запущенного родительского процесса сделать “другую утилиту”, происходит внутри дочернего процесса системный вызов exec(), который требует у ядра заменить файлы в памяти на исполняемые файлы нового ПО. Более схематично можно увидеть последовательность на рисунке ниже.
Таким образом, получается, что ветка запущенного ПО будет выглядеть иерархично: один процесс запустил другой. Но как это будет выглядеть, при подключении клиента к SSH-серверу для управления Linux? Или как понять, кто является зловредным процессом, который запустил скрипт? Рассмотрим уже с использованием утилиты htop, которую можно установить через пакетный менеджер:
Запустим и просмотрим существующее дерево процессов через нажатие на F5:
Обратите внимание на первую строчку, где указан процесс PID=1 – это и есть система инициализации systemd, от которой запускаются остальные дочерние процессы. Справа в столбце Command указано запущенное ПО и ветки, где одним из дочерних процессов от systemd является sshd. А уже его дочерний процесс управляет удаленной SSH-сессией root@pts/0, где для управления системой была запущена оболочка bash, в которой сидит пользователь. И как раз снизу можем видеть нами запущенную утилиту htop с PID 499087.
Как проверить вредоносную активность в Linux?
Как мы выяснили выше, любое подключение к устройству будет сопровождаться запущенным терминалом реальным или виртуальным в качестве процесса. Поэтому отследить их можно утилитой:
Просто w позволит отобразить подключения к машине на текущий момент, а утилита:
Покажет вообще историю входа в операционную систему, ее перезагрузки и запуска с определенных адресов. Именно по ней можно определить, какие подключения происходили за весь период работы машины. Обратите внимание на логи вашей системы и запускаемые процессы приложениями, ведь обычно красным флагом, при работе ОС являются обращения ПО к оболочке. Хакеру, чтобы выполнить закрепление или повысить привилегии необходимо обратиться к ОС, как раз через оболочку.
Если вы обнаружили подобную активность, то необходимо завершить соответствующие процессы, изолировать машину в сети и провести расследование. Первое действие решается утилитой kill:
Вместо (pid) укажите процесс, который должен быть завершен, после чего можно собирать логи и дампы ОЗУ с устройства. Именно понимание работы с процессами формирует полную картину, того как управлять и защищаться с помощью инструментов ОС.