Привет, Хабр! Сегодня я хотел бы поговорить о том, как можно защитить процессы от атак злоумышленников в macOS. Например, это полезно для антивируса или системы резервного копирования, тем более что под macOS есть несколько способов «убить» процесс.
Об этом и способах защиты читайте под катом.
Классический способ «убить» процесс
Хорошо известный способ «убить» процесс — послать ему сигнал SIGKILL. Через bash вы можете вызвать стандартный «kill -SIGKILL PID» или «pkill -9 NAME» для уничтожения.Команда «kill» известна еще со времен UNIX и доступна не только в macOS, но и в других UNIX-подобных системах.
Как и в UNIX-подобных системах, macOS позволяет перехватывать любые сигналы процесса, кроме двух — SIGKILL и SIGSTOP. В этой статье основное внимание будет уделено сигналу SIGKILL как сигналу, вызывающему завершение процесса.
особенности macOS
В macOS системный вызов kill в ядре XNU вызывает функцию psignal(SIGKILL,.).
Давайте попробуем посмотреть, какие еще действия пользователя в пользовательском пространстве можно вызвать с помощью функции psignal. Отфильтруем вызовы функции psignal во внутренних механизмах ядра (хотя они могут быть нетривиальными, но оставим их для другой статьи :) - проверка подписи, ошибки памяти, выход/завершение обработки, нарушения защиты файлов , и т. д. Начнем обзор с функции и соответствующего системного вызова завершить_с_полезной нагрузкой .
Видно, что помимо классического вызова уничтожения существует альтернативный подход, специфичный для операционной системы macOS и не встречающийся в BSD. Принципы работы обоих системных вызовов также схожи.
Это прямые вызовы функции ядра psignal. Также обратите внимание, что перед убийством процесса выполняется проверка «cansignal» — может ли процесс послать сигнал другому процессу; например, система не позволяет никакому приложению завершать системные процессы.
Теги: #macOS #Разработка для MacOS #Антивирусная защита #ядро #Системное программирование #ядро #программирование macOS #Безопасность MacOS #Защита MacOSstatic int terminate_with_payload_internal(struct proc *cur_proc, int target_pid, uint32_t reason_namespace,
-
Как Преодолеть Трудности Работы На Дому
19 Oct, 24 -
Интернет-Маркетинг: Влюбитесь В Него!
19 Oct, 24 -
Стоит Ли Хранить Файлы В Базе Данных Mysql?
19 Oct, 24 -
Ida - Навигационная Программа Для Android
19 Oct, 24 -
Аварии Года. 2020: Шесть За Семь Месяцев
19 Oct, 24 -
Разграничение Прав Доступа В Jenkins
19 Oct, 24